Note: Untuk mengaktifkan Compliance API, lihat Menyiapkan Compliance API.
Tip: Scope yang diperlukan:
read:compliance_activitiespada Compliance Access Key atau kunci Admin API.
Integrasi Compliance API produksi membuat tiga pilihan desain: bagaimana ia mengonsumsi Activity Feed, bagaimana outputnya berkorelasi dengan sistem "security information and event management" (manajemen informasi dan event keamanan), atau SIEM, Anda, dan di mana salinan jangka panjang aktivitas dan konten disimpan. Pilihan-pilihan ini tidak bergantung pada endpoint itu sendiri; halaman ini membantu Anda mengevaluasi tradeoff-nya.
Halaman ini mengasumsikan Anda telah membaca halaman-halaman berikut:
- Kueri Activity Feed, yang mendefinisikan parameter dan kontrak paginasi yang dirujuk di seluruh halaman ini.
- Ambil dan hapus chat, file, dan proyek, yang mendefinisikan endpoint chat, file, dan proyek serta semantik
deleted_atyang dirujuk dalam Rencanakan retensi konten.
- Ambil transkrip sesi, yang mendefinisikan endpoint sesi lokal dan remote.
Pilih pola konsumsi feed
Activity Feed mendukung dua pola konsumsi: "window polling" (polling jendela) periodik yang dibatasi oleh created_at.gte dan created_at.lt, serta pembacaan inkremental berbasis kursor yang menyimpan kursor dari satu respons dan meneruskannya pada permintaan berikutnya. Keduanya mengembalikan objek Activity yang identik; perbedaannya adalah state yang disimpan klien Anda di antara panggilan.
Kedua pola berbagi batasan berikut:
- Aktivitas dapat dikueri dalam 1 menit setelah terjadi dan disimpan selama 6 tahun. Pencatatan tidak bersifat retroaktif: pencatatan dimulai ketika Compliance API pertama kali diaktifkan untuk organisasi Anda, dan aktivitas dari sebelum pengaktifan tidak diisi ulang (backfill).
limitmaksimum untuk setiap halaman adalah 5.000.
- Nilai kursor adalah string opaque yang tidak boleh Anda parse.
- Permintaan dibatasi hingga 600 per menit per organisasi induk, dibagi bersama di seluruh kunci, seluruh organisasi tertaut, dan seluruh endpoint
/v1/compliance/*; tidak seperti endpoint sesi lokal, endpoint sesi remote memiliki anggaran permintaan kedua di atasnya. Lihat 429 Too Many Requests untuk header respons dan kontrak retry.
| Pola | Pilih ketika |
|---|---|
| Window polling | Pipeline Anda berjalan pada jadwal tetap, Anda lebih menyukai worker stateless, dan Anda dapat menoleransi pemutaran ulang atau jendela yang tumpang tindih |
| Pembacaan inkremental berbasis kursor | Anda menginginkan latensi terendah antara terjadinya aktivitas dan pipeline Anda mengingestnya, Anda ingin menghindari membaca ulang halaman yang sudah Anda kuras, dan Anda memiliki tempat yang tahan lama untuk menyimpan kursor di antara eksekusi |
Window polling
Tetapkan created_at.lt setidaknya 1 menit di masa lalu sehingga setiap aktivitas dalam jendela sudah dapat dikueri. Gunakan created_at.gte untuk batas bawah dan created_at.lt untuk batas atas sehingga jendela yang berurutan tersusun rapat tanpa celah atau tumpang tindih; gunakan kembali nilai lt jendela sebelumnya sebagai gte jendela berikutnya.
curl --fail-with-body -sS -G \
"https://haijun.my.id/v1/compliance/activities" \
--header "x-api-key: $JUGLOW_COMPLIANCE_ACCESS_KEY" \
--header "juglow-version: 2023-06-01" \
--data-urlencode "created_at.gte=2026-04-20T07:00:00Z" \
--data-urlencode "created_at.lt=2026-04-20T08:00:00Z" \
--data-urlencode "limit=5000"Ketika respons memiliki has_more: true, jendela berisi lebih dari satu halaman aktivitas. Lakukan paginasi di dalam jendela dengan meneruskan last_id respons sebagai after_id pada permintaan berikutnya (berhenti ketika has_more bernilai false), atau pilih jendela waktu yang lebih kecil. Lihat Paginasi hasil untuk kontrak lengkapnya.
Bahkan dengan penyusunan yang rapi, aktivitas yang terindeks setelah jendelanya ditutup tidak akan pernah muncul di jendela berikutnya. Lakukan deduplikasi pada id aktivitas dan perlebar setiap jendela baru sehingga tumpang tindih dengan jendela sebelumnya selama beberapa menit, atau jalankan proses rekonsiliasi periodik yang mengueri ulang jendela yang lebih lama.
Warning: Batas
created_at.ltyang terlalu dekat dengan saat ini akan secara diam-diam dan permanen menghilangkan aktivitas yang terindeks terlambat: begitucreated_at.gtemaju melewatinya, tidak ada jendela berikutnya yang dapat memulihkannya. Perlakukan angka keterkuerian 1 menit sebagai lag pengindeksan yang terdokumentasi, bukan rekomendasi lunak.
Pembacaan inkremental berbasis kursor
first_id="activity_01XyDMpzjS89pFZXqSFUBDr6" # first_id from a previous response
curl --fail-with-body -sS -G \
"https://haijun.my.id/v1/compliance/activities" \
--header "x-api-key: $JUGLOW_COMPLIANCE_ACCESS_KEY" \
--header "juglow-version: 2023-06-01" \
--data-urlencode "limit=5000" \
--data-urlencode "before_id=$first_id"Lakukan paginasi hingga has_more bernilai false, lalu simpan first_id dari respons terakhir dan teruskan tanpa perubahan sebagai before_id pada eksekusi berikutnya untuk mengambil aktivitas yang lebih baru dari kursor yang disimpan. Untuk berjalan ke arah sebaliknya untuk backfill, simpan last_id dan teruskan sebagai after_id. Untuk referensi lengkap kursor-vs-page-token dan semantik retry, lihat Paginasi hasil.
Loop catch-up produksi mengambil aktivitas yang tercatat sejak polling terakhir Anda dengan menggerakkan iterasi berdasarkan has_more dan first_id:
cursor = stored_cursor
loop:
page = GET /v1/compliance/activities?before_id={cursor}&limit=5000
store(page.data)
if page.first_id is not null:
cursor = page.first_id
if not page.has_more: break
persist(cursor)Kursor tetap berlaku setelah rotasi kunci; lihat Kelola dan rotasi kunci.
Warning: Setiap halaman bersebelahan dengan kursor yang Anda teruskan: loop berjalan maju menuju saat ini, satu halaman pada satu waktu. Jangan menganggap satu respons sudah mengejar ketertinggalan selama
has_morebernilaitrue. Simpan kursor hanya setelahhas_morebernilaifalse; halaman yang belum diambil adalah halaman yang lebih baru antarafirst_idrespons ini dan saat ini, dan halaman tersebut tetap belum terbaca hingga Anda menyelesaikan loop atau menjalankannya lagi.
Korelasikan dengan SIEM Anda
Setiap Activity membawa field yang dapat Anda join dengan event yang sudah ada di SIEM Anda (Splunk, Datadog, Microsoft Sentinel, Cribl, atau sejenisnya):
| Field Compliance API | Target join |
|---|---|
actor.user_id | Pengidentifikasi pengguna stabil dari penyedia identitas Anda |
actor.email_address | Email direktori ketika ID stabil tidak tersedia |
actor.ip_address | Log jaringan, VPN, dan endpoint |
actor.user_agent | Inventaris endpoint dan perangkat, serta aplikasi klien yang membuat permintaan |
created_at | Korelasi jendela waktu di seluruh sumber apa pun |
actor.user_id dan actor.email_address ada ketika actor.type adalah user_actor. actor.ip_address dan actor.user_agent tidak ada pada beberapa tipe actor, seperti juglow_actor dan scim_directory_sync_actor. Periksa diskriminator sebelum membaca field-field ini. user_id adalah pengidentifikasi stabil dan opaque untuk akun pengguna: nilainya konsisten di seluruh endpoint Compliance API dan payload aktivitas, dan tidak berubah ketika email atau nama tampilan pengguna berubah. Gunakan user_id, bukan email_address, sebagai kunci join utama.
Panggilan ke Compliance API itu sendiri menghasilkan aktivitas compliance_api_accessed. Ingest aktivitas ini bersama tipe aktivitas lainnya sehingga SIEM Anda mencatat siapa yang mengueri data kepatuhan, dan kapan. Teruskan activity_types[]=compliance_api_accessed untuk membatasi kueri, lalu di klien Anda, baca actor.api_key_id dari setiap aktivitas yang actor.type-nya adalah api_actor untuk mengatribusikan akses tersebut ke Compliance Access Key atau kunci Admin API tertentu.
Rencanakan retensi konten
Lima horizon retensi mengatur apa yang dapat Anda ambil nanti:
| Data | Disimpan selama | Dikendalikan oleh |
|---|---|---|
| Catatan Activity Feed | 6 tahun | Juglow |
| Konten chat, file, dan proyek | Kebijakan retensi haijun.ai organisasi Anda, kecuali pengguna menghapusnya lebih awal | Organisasi Anda |
| Transkrip sesi lokal (sesi di mesin pengguna) | 6 tahun secara default, atau periode retensi percakapan kustom organisasi Anda ketika periode terbatas ditetapkan | Juglow secara default; organisasi Anda ketika menetapkan periode kustom |
| Transkrip sesi jarak jauh (sesi di cloud) | 6 tahun, kecuali pengguna menghapus sesi lebih awal | Juglow |
| Konten yang dihapus permanen melalui Compliance API | Tidak disimpan; penghapusan bersifat langsung dan permanen | Pemanggil endpoint DELETE |
Untuk mempelajari bagaimana bagian lain Haijun Platform menangani retensi, lihat API dan retensi data.
Putuskan antara ekspor-dan-arsip dan pengambilan API sesuai permintaan sebagai berikut:
- Jika horizon "legal hold" (penahanan hukum) atau audit Anda melebihi 6 tahun untuk metadata aktivitas atau transkrip sesi, ekspor halaman Activity Feed dan transkrip sesi ke arsip Anda sendiri saat Anda menyerapnya.
- Jika kebijakan retensi konten Anda lebih pendek dari horizon "eDiscovery" (penemuan elektronik) Anda, ekspor konten chat dan file sebelum jendela retensi berakhir; Compliance API tidak dapat mengembalikan konten yang sudah dihapus oleh retensi. Hal yang sama berlaku untuk transkrip sesi lokal, yang mengikuti periode retensi percakapan kustom organisasi Anda ketika periode terbatas ditetapkan, bahkan ketika periode tersebut lebih pendek dari 6 tahun. Endpoint sesi lokal berhenti mengembalikan pesan yang lebih lama dari periode organisasi Anda saat ini segera setelah pengaturan berubah, dan memperpanjang periode di kemudian hari tidak memulihkan transkrip yang sudah kedaluwarsa, jadi ekspor setiap transkrip yang harus Anda simpan melampaui periode tersebut.
- Jika Anda harus menyimpan konten chat atau transkrip sesi jarak jauh setelah pengguna menghapusnya di haijun.ai (misalnya, di bawah legal hold), ekspor konten chat, file, artifact, dan sesi jarak jauh ke arsip Anda sendiri saat Anda menyerapnya; Compliance API tidak dapat mengembalikan konten yang sudah dihapus oleh pengguna.
- Jika suatu alur kerja mungkin menjalankan "hard-delete" (penghapusan permanen) melalui Compliance API (misalnya, penegakan "data loss prevention" (pencegahan kehilangan data), atau DLP), ambil dan arsipkan konten target terlebih dahulu. Tidak ada jendela pemulihan setelah hard-delete.
Dalam semua kasus lainnya, andalkan pengambilan API langsung dan hindari memelihara salinan paralel.
Jaminan pengiriman dan kelengkapan
Perlakukan Activity Feed sebagai at-least-once: traversal yang dipaginasi dengan benar mengembalikan setiap aktivitas setidaknya sekali, tetapi retry setelah kegagalan parsial dapat mengirim ulang aktivitas yang sudah Anda simpan. Lakukan deduplikasi pada field id aktivitas.
Endpoint list tidak mengembalikan field total_count atau checksum. Untuk membuktikan bahwa suatu eksekusi ekspor sudah lengkap, catat:
- Kursor awal dan
last_idterminal.
- Jumlah catatan yang diekspor.
- Timestamp eksekusi dan
request-idhalaman terakhir.
Volume aktivitas bukanlah pemeriksaan kelengkapan. Tipe aktivitas haijun_*_viewed, seperti haijun_chat_viewed, mengikuti pola pemuatan masing-masing aplikasi (lihat Pahami objek Activity). Periode dengan pesan chat tetapi tanpa aktivitas haijun_chat_viewed tidak dengan sendirinya menunjukkan data yang hilang. Sebagai gantinya, andalkan traversal dan proses tumpang tindih atau rekonsiliasi yang dijelaskan dalam Window polling.
Endpoint konten (chat, file, proyek, lampiran proyek, serta transkrip sesi lokal dan remote) hanya melayani data Haijun Enterprise. Activity Feed menampilkan event administratif dan sumber daya di seluruh organisasi. Compliance API tidak mencakup:
- Teks prompt atau respons model dari Haijun Console, atau dari beban kerja Haijun API yang diautentikasi dengan kunci API.
- Aktivitas di perangkat dalam sesi lokal yang tidak pernah dikirim ke Juglow, seperti file lokal yang tidak dibaca oleh Haijun.
- Penggunaan Haijun Code yang diautentikasi dengan kunci API Haijun Console, dijalankan melalui platform cloud pihak ketiga (Amazon Bedrock, Google Cloud, atau Microsoft Foundry), atau dijalankan dalam sesi cloud Haijun Code, yang berjalan di infrastruktur cloud alih-alih di mesin pengguna.
- Sesi lokal dari organisasi yang mengaktifkan kesiapan HIPAA, serta sesi lokal yang menerapkan zero data retention (retensi data nol).
- Blok thinking, serta gambar atau konten biner lainnya, di dalam transkrip sesi (transkrip hanya memuat prompt pengguna, respons asisten, dan aktivitas alat; transkrip sesi lokal menampilkan blok
textplaceholder di tempat konten biner dihilangkan).
- File asli untuk lampiran chat yang disimpan haijun.ai sebagai teks hasil ekstraksi, seperti beberapa unggahan Word, PowerPoint, dan PDF (endpoint konten file mengembalikan teks hasil ekstraksi; lihat Mengambil file dan artifact).
- Prompt sistem dari sesi lokal (pesan penanda menggantikannya).
- Definisi alat dan konfigurasi server "Model Context Protocol", atau MCP, dalam transkrip sesi (lokal atau jarak jauh), serta metadata sitasi pada blok
textdalam transkrip sesi lokal.
- Konten transkrip sesi lokal di organisasi yang kunci enkripsi yang dikelola pelanggan-nya saat ini tidak dapat digunakan. Permintaan tersebut mengembalikan 503 Service Unavailable, dan metadata sesi tetap dicantumkan.
- Konten yang dihapus oleh kebijakan retensi organisasi Anda.
- Konten chat yang dihapus pengguna di haijun.ai (chat tersebut tetap dicantumkan, dengan
deleted_atterisi).
- Sesi jarak jauh yang dihapus pengguna (sesi yang dihapus tidak lagi dicantumkan, dan endpoint pesan mengembalikan 404 untuk sesi tersebut).
- Konten yang dihapus permanen melalui Compliance API.
Lihat FAQ Compliance API untuk informasi lebih lanjut tentang apa yang ditangkap dan tidak ditangkap oleh Compliance API.
Untuk chain of custody, simpan catatan yang diekspor dengan metadata provenans: endpoint sumber, parameter kueri, timestamp eksekusi, dan hash konten setiap catatan.
Langkah selanjutnya
- Kueri Activity Feed — Parameter filter, paginasi, dan skema objek
Activity.
- Ambil dan hapus chat, file, dan proyek — Endpoint chat, file, dan proyek, termasuk hard delete.
- Ambil transkrip sesi — Daftar sesi yang dijalankan pengguna Anda di aplikasi dan agen Haijun, seperti Cowork dan Haijun Code, dan ambil transkripnya.