Endpoint webhook
Event yang tersedia:exam_participant.registered— peserta didaftarkan ke ujianexam_participant.unregistered— pendaftaran peserta dibatalkanexam_result.completed— peserta selesai mengerjakan tesexam_result.scored— nilai tes terbit atau berubahquestion_import.completed— import paket soal selesaiquestion_import.failed— import paket soal gagal
Kapan event dikirim
exam_participant.registereddikirim untuk pendaftaran melalui API dan melalui panel. Pendaftaran mandiri peserta lewat halaman pendaftaran ujian tidak mengirim event ini.exam_participant.unregistereddikirim saat pendaftaran dibatalkan melalui API.exam_result.completeddanexam_result.scoredberasal dari pemindaian hasil ujian yang berjalan setiap menit, sehingga event dapat tiba sekitar 1–2 menit setelah peserta selesai.exam_result.completeddapat membawascore: nulluntuk tes yang dinilai dengan IRT atau secara manual.exam_result.scoredmenyusul setelah nilainya dihitung.exam_result.scoreddikirim lagi setiap kaliscoreataumeta_scoreberubah, misalnya setelah perhitungan ulang IRT atau perhitungan ulang skor. Nilai yang sama tidak dikirim dua kali.question_import.completeddanquestion_import.faileddikirim saat import paket soal lewat API Import Soal selesai atau gagal.- Urutan kedatangan event tidak dijamin. Gunakan
updated_atdari API Hasil Ujian untuk menentukan data terbaru, dan sinkronkan ulang secara berkala denganGET /exam-results?updated_since=...agar event yang terlewat tetap tertangani.
GET /webhooks — Daftar endpoint webhook
GET /webhooks — Daftar endpoint webhook
POST /webhooks — Mendaftarkan endpoint webhook
POST /webhooks — Mendaftarkan endpoint webhook
PATCH /webhooks/{id} — Memperbarui endpoint webhook
PATCH /webhooks/{id} — Memperbarui endpoint webhook
POST /webhooks/{id}/test — Mengirim webhook percobaan
POST /webhooks/{id}/test — Mengirim webhook percobaan
Jika
event tidak dikirim atau tidak dikenali, event default adalah exam_result.completed. Pengiriman uji coba memakai nama event yang dipilih dan signature yang sama dengan pengiriman asli, tetapi isi data berupa pesan uji coba: { "message": "...", "sent_at": "..." }. Endpoint yang sedang nonaktif ditolak dengan status 409.Parameter
Contoh request
Contoh response
Payload dan signature webhook
Setiap webhook dikirim sebagaiPOST dengan body JSON berisi event, created_at (waktu event diantrekan), dan data. Body yang sama dikirim ulang apa adanya pada setiap percobaan ulang.
Header
Payload exam_result.completed dan exam_result.scored
Kedua event memakai struktur data yang sama. Isi meta_score pada setiap metode penilaian dijelaskan pada bagian Struktur meta_score di API Hasil Ujian.
Payload exam_participant.registered
Payload exam_participant.unregistered
Verifikasi signature
v1 adalah HMAC-SHA256 dari <t>.<raw body> menggunakan signing secret endpoint. Nilai t dibuat ulang pada setiap percobaan pengiriman. Tolak request yang signature-nya tidak cocok atau yang t-nya berselisih lebih dari 300 detik dari waktu server Anda.
Percobaan ulang
- Balas webhook dengan status
2xxdalam 10 detik. Simpan event terlebih dahulu, lalu proses di latar belakang. - Respons selain
2xx, timeout, atau kegagalan koneksi dicoba ulang sampai total 4 kali percobaan, dengan jeda 1 menit, 5 menit, lalu 30 menit. Setelah percobaan terakhir gagal, status pengiriman menjadifailed. - Endpoint yang gagal 10 kali berturut-turut dinonaktifkan otomatis (
is_disabled_by_system: true), dan pemilik projek menerima notifikasi di panel. Aktifkan kembali denganPATCH /webhooks/{id}berisiis_active: truesetelah endpoint diperbaiki. - Pengiriman yang sudah berstatus
failedtidak dikirim ulang. GunakanGET /exam-results?updated_since=...untuk mengambil hasil yang terlewat.

