Haijun Platform Docs
EN

Note: Untuk mengaktifkan Compliance API, lihat Menyiapkan Compliance API.

Tip: Scope yang diperlukan: read:compliance_activities pada Compliance Access Key atau kunci Admin API. Baik Compliance Access Key (sk-ant-api01-...) yang membawa scope ini maupun kunci Admin API (sk-ant-admin01-...) dapat memanggil Activity Feed. Lihat Menyiapkan Compliance API untuk kondisi di mana setiap jenis kunci membawa scope tersebut.

Activity Feed mencatat aktivitas autentikasi, chat, file, proyek, administratif, dan platform di seluruh organisasi Anda dan mengembalikannya dalam urutan kronologis terbalik. Aktivitas dapat dikueri dalam waktu 1 menit setelah terjadi dan disimpan selama 6 tahun. Pencatatan tidak bersifat retroaktif: pencatatan dimulai saat Compliance API pertama kali diaktifkan untuk organisasi Anda, dan aktivitas dari sebelum pengaktifan tidak diisi ulang (backfill).

bash
curl --fail-with-body -sS \
  "https://haijun.my.id/v1/compliance/activities?limit=1" \
  --header "x-api-key: $JUGLOW_COMPLIANCE_ACCESS_KEY" \
  --header "juglow-version: 2023-06-01"
json
{
  "data": [
    {
      "id": "activity_01XyDMpzjS89pFZXqSFUBDr6",
      "created_at": "2026-04-10T08:09:10Z",
      "organization_id": "org_01Wv6QeBcDfGhJkLmNpQrSt8",
      "organization_uuid": "abcdef01-2345-6789-abcd-ef0123456789",
      "actor": {
        "type": "user_actor",
        "email_address": "user@example.com",
        "user_id": "user_01TuVwXyZaBcDeFgH2JkLmN4",
        "ip_address": "192.0.2.34",
        "user_agent": "Mozilla/5.0..."
      },
      "type": "haijun_chat_created",
      "haijun_chat_id": "haijun_chat_01XyDMpzjS89pFZXqSFUBDr6",
      "haijun_project_id": "haijun_proj_01KGp4eZNug9ri4kE35RSppq"
    }
  ],
  "has_more": true,
  "first_id": "activity_01XyDMpzjS89pFZXqSFUBDr6",
  "last_id": "activity_01XyDMpzjS89pFZXqSFUBDr6"
}

Memfilter aktivitas

Filter berdasarkan organisasi, aktor, jenis aktivitas, atau jendela waktu created_at menggunakan sub-parameter bertitik created_at.gte, .gt, .lte, dan .lt. Lihat referensi API untuk tipe dan nilai yang diterima setiap parameter.

Parameter yang dapat diulang menggunakan sintaks kueri kurung-array: berikan activity_types[]=..., actor_ids[]=..., atau organization_ids[]=... satu kali untuk setiap nilai.

bash
curl --fail-with-body -sS -G \
  "https://haijun.my.id/v1/compliance/activities" \
  --data-urlencode "activity_types[]=haijun_file_uploaded" \
  --data-urlencode "activity_types[]=haijun_chat_created" \
  --data-urlencode "created_at.gte=2026-04-01T00:00:00Z" \
  --header "x-api-key: $JUGLOW_COMPLIANCE_ACCESS_KEY" \
  --header "juglow-version: 2023-06-01"

Activity Feed menghasilkan ratusan jenis aktivitas yang berbeda. Lihat Mengkueri aktivitas kepatuhan di referensi API untuk daftar lengkap nilai yang diterima activity_types[].

Memaginasi hasil

Aktivitas dikembalikan dari yang terbaru terlebih dahulu, dengan nilai created_at yang sama diurutkan berdasarkan ID aktivitas, dan dibatasi hingga limit hasil dalam setiap respons (default 100, maksimum 5.000). Lihat referensi API untuk skema respons lengkap.

Compliance API menggunakan dua skema "pagination" (paginasi) tergantung pada keluarga endpoint:

Keluarga endpointUrutan pengurutanSkemaParameter
AktivitasTerbaru terlebih dahuluCursorafter_id, before_id (dikembalikan sebagai first_id, last_id)
Chat dan pesan chatTerlama terlebih dahuluCursorafter_id, before_id (dikembalikan sebagai first_id, last_id)
Organisasi, proyek, lampiran proyek, pengguna, peran, izin peran, grup, anggota grupSpesifik per endpointToken halamanpage (dikembalikan sebagai next_page)
Sesi lokal dan jarak jauh serta pesan sesiSesi terbaru terlebih dahulu; pesan terlama terlebih dahulu secara defaultToken halamanpage (dikembalikan sebagai next_page)

File tidak dipaginasi: file diambil satu per satu berdasarkan ID.

Cursor paginasi dan token halaman adalah string buram (opaque): kirimkan kembali tanpa diubah. Format internalnya tidak stabil, dan mem-parsing-nya akan rusak tanpa pemberitahuan. Hanya salah satu dari after_id atau before_id yang boleh diatur dalam setiap permintaan, dan kedua skema mengembalikan has_more sehingga Anda tahu kapan harus berhenti. Endpoint sesi (lokal dan jarak jauh) adalah pengecualian: endpoint tersebut mengembalikan next_page tanpa has_more, jadi berhentilah ketika next_page bernilai null.

Untuk menelusuri halaman aktivitas:

  • Berikan last_id dari respons sebagai after_id untuk maju ke halaman berikutnya dalam urutan hasil. Karena aktivitas diurutkan dari yang terbaru terlebih dahulu, halaman berikutnya berisi entri yang lebih lama.
  • Berikan first_id sebagai before_id untuk kembali ke halaman sebelumnya.
  • Berhenti ketika has_more bernilai false.

Parameter cursor menentukan arah halaman; urutan pengurutan endpoint menentukan arah waktu. Parameter after_id yang sama menjangkau aktivitas yang lebih lama di sini. Chat diurutkan dari yang terlama terlebih dahulu; lihat Mengambil dan menghapus chat, file, dan proyek untuk semantik cursor di sana.

Note: Cursor aman digunakan kembali saat percobaan ulang. Cursor atau token halaman dari halaman yang berhasil dikembalikan tetap valid; permintaan yang gagal (5xx, timeout, kesalahan jaringan) tidak memajukan posisi Anda. Coba ulang permintaan yang sama dengan cursor yang sama. Hanya berpindah ke cursor berikutnya setelah Anda menyimpan halaman yang dilewatinya. Token halaman pada endpoint sesi lokal adalah pengecualian untuk jeda yang lebih lama. Pada endpoint pesan sesi lokal, token page dari suatu penelusuran kedaluwarsa 24 jam setelah halaman pertamanya (satu penelusuran adalah satu kali melewati semua halaman), jadi selesaikan atau lanjutkan dalam jendela waktu tersebut, atau mulai ulang tanpa parameter page. Pada daftar sesi lokal, token page yang lebih lama masih diterima tetapi dievaluasi ulang terhadap batas retensi saat ini dan dapat melewatkan sesi, jadi selesaikan penelusuran daftar dalam 24 jam juga.

bash
# Ambil halaman pertama (aktivitas terbaru lebih dulu) dan simpan cursor di akhirnya.
last_id=$(curl --fail-with-body -sS \
  "https://haijun.my.id/v1/compliance/activities?limit=2" \
  --header "x-api-key: $JUGLOW_COMPLIANCE_ACCESS_KEY" \
  --header "juglow-version: 2023-06-01" | jq -er '.last_id')

# Kirim kembali cursor tanpa diubah untuk mengambil halaman berikutnya (yang lebih lama).
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=2" \
  --data-urlencode "after_id=${last_id}"

Loop backfill produksi menelusuri aktivitas yang lebih lama dengan menggerakkan iterasi berdasarkan has_more dan last_id:

  1. Mulai dari cursor yang Anda simpan (atau hilangkan after_id untuk memulai dari awal).
  1. Telusuri halaman dengan after_id= hingga has_more bernilai false.
  1. Simpan last_id terakhir secara permanen hanya setelah Anda menyimpan setiap halaman yang dicakupnya.
text
cursor = stored_cursor
loop:
  if cursor is not null:
    page = GET /v1/compliance/activities?after_id={cursor}&limit=100
  else:
    page = GET /v1/compliance/activities?limit=100
  store(page.data)
  if page.last_id is not null:
    cursor = page.last_id
  if not page.has_more: break
persist(cursor)

Memahami objek Activity

Setiap entri dalam data adalah Activity dengan bentuk tingkat atas berikut:

FieldTipeDeskripsi
idstringPengidentifikasi unik untuk aktivitas.
created_atstring RFC 3339Kapan aktivitas terjadi.
organization_idstring atau nullOrganisasi tempat aktivitas terjadi, atau null untuk peristiwa yang tidak terkait dengan organisasi (masuk, keluar, panggilan Compliance API).
organization_uuidstring atau nullCakupan yang sama dengan organization_id, dinyatakan sebagai UUID.
actorunion ActorSiapa atau apa yang melakukan aktivitas. Lihat tabel aktor berikut.
typestringJenis aktivitas, misalnya haijun_chat_created.
field tambahanbervariasiField spesifik per jenis, misalnya haijun_chat_id pada peristiwa chat atau haijun_file_id pada peristiwa file. Lihat Mengkueri aktivitas kepatuhan di referensi API untuk daftar field per jenis.

Field actor adalah "discriminated union" (union terdiskriminasi). Diskriminator type memberi tahu Anda field lain mana yang ada:

actor.typeKapan munculField utama
user_actorPengguna haijun.ai atau Haijun Console yang sudah masuk melakukan tindakan.email_address, user_id, ip_address, user_agent
api_actorSebuah permintaan memanggil Haijun API atau Compliance API dengan kunci API yang diterbitkan pelanggan. Panggilan Compliance API menghasilkan jenis aktor ini baik untuk Compliance Access Key maupun kunci Admin API.api_key_id, ip_address, user_agent
admin_api_key_actorAdmin organisasi menggunakan kunci Admin API untuk mengelola pengguna, undangan, workspace, atau kunci API.admin_api_key_id, ip_address, user_agent
unauthenticated_user_actorSuatu tindakan terjadi sebelum proses masuk selesai, misalnya sso_login_initiated.unauthenticated_email_address, ip_address, user_agent
juglow_actorJuglow bertindak atas organisasi, misalnya melalui alat internal.email_address (selalu null; ada untuk konsistensi bentuk dengan user_actor, karena operator Juglow tidak direpresentasikan dengan email individu)
system_actorPemrosesan latar belakang otomatis yang dilakukan oleh sistem Juglow, bertindak tanpa kredensial pengguna atau pelanggan.service (dapat bernilai null; nama proses otomatis yang melakukan tindakan, jika diketahui)
scim_directory_sync_actorPenyedia identitas (seperti Okta, Microsoft Entra ID, atau JumpCloud) mengirimkan perubahan melalui sinkronisasi direktori SCIM.workos_event_id, directory_id, idp_connection_type (dapat bernilai null; misalnya OktaSCIMV2, AzureSCIMV2)

Aktivitas user_actor tidak selalu berarti pengguna yang melakukan tindakan tersebut. Proses yang dijalankan Juglow atas nama pengguna saat ini dapat muncul sebagai user_actor untuk pengguna yang terdampak alih-alih sebagai system_actor, dan atribusi ini dapat berubah. Misalnya, aktivitas memori dari migrasi, seperti platform_memory_store_created, platform_memory_created, dan platform_memory_deleted, diatribusikan dengan cara ini. Aktivitas migrasi ini saat ini menampilkan ip_address bernilai 0.0.0.0.

Aktivitas haijun_*_viewed berarti aplikasi Haijun memuat konten, bukan berarti seseorang melihatnya. Jenis seperti haijun_chat_viewed, haijun_file_viewed, dan haijun_project_viewed dicatat setiap kali aplikasi Haijun memuat chat, file, atau proyek dari server Juglow. Pemuatan berulang tidak dideduplikasi. Aplikasi web, desktop, dan seluler memuat konten pada saat yang berbeda, terkadang di latar belakang, dan dapat menampilkan salinan cache tanpa memuatnya. Akibatnya, jumlah aktivitas ini bervariasi menurut platform, dan tidak sesuai dengan jumlah pesan yang dikirim atau layar yang dilihat.

Aktivitas tentang file, dokumen proyek, atau artifact tidak menyertakan nama atau judulnya. Mulai 24 September 2026, field filename dan title pada aktivitas ini selalu bernilai null, string kosong, atau dihilangkan, termasuk pada aktivitas yang dicatat sebelum tanggal tersebut. Untuk mencari nama atau judul, berikan ID haijun_file_, haijun_proj_doc_, atau haijun_artifact_version_* dari aktivitas ke endpoint metadata yang sesuai di Mengambil file dan artifact, menggunakan Compliance Access Key dengan scope read:compliance_user_data. Anda tidak dapat mencari nama atau judul setelah file, dokumen, atau artifact dihapus, atau ketika aktivitas tidak memiliki ID tersebut.

Note: Bangun handler yang kompatibel ke depan. Teruskan nilai type dan actor.type yang tidak dikenali, dan abaikan field yang tidak diharapkan handler Anda, sehingga integrasi Anda tetap berfungsi ketika jenis aktivitas baru dirilis.

Langkah selanjutnya

  • Referensi API — Skema permintaan dan respons lengkap untuk GET /v1/compliance/activities, termasuk setiap nilai activity_types[] yang didukung.
On this page
Memfilter aktivitasMemaginasi hasilMemahami objek ActivityLangkah selanjutnya