Langsung ke konten utama
Seluruh request pada halaman ini membutuhkan Bearer API Key. Dengan endpoint ini sistem Anda dapat menyiapkan ujian dari awal sampai siap dikerjakan tanpa membuka panel: membuat ujian beserta tes dan sesinya, memasang paket soal ke setiap sesi, memeriksa kesiapan ujian, lalu menjalankan perhitungan IRT setelah peserta selesai.

Alur

  1. Siapkan paket soal lewat API Import Soal dan simpan question_bank.id, atau pilih paket soal yang sudah ada dengan GET /question-banks.
  2. Buat ujian beserta tes dan sesinya dalam satu request POST /exams.
  3. Periksa GET /exams/{exam}/readiness sampai ready bernilai true.
  4. Daftarkan peserta dan buat link akses lewat Pendaftaran dan Link Ujian.
  5. Untuk tes dengan penilaian IRT, jalankan POST /exams/{exam}/irt-calculations setelah peserta selesai. Nilai dikirim lewat webhook exam_result.scored dan tersedia di API Hasil Ujian.

Aturan

  • Jenis ujian. Ujian yang dibuat lewat API tidak memakai pembayaran di CBT dan bukan ujian multi-level. Ujian multi-level atau ujian dengan pembayaran di CBT yang dibuat di panel tetap dapat dibaca, tetapi hanya dapat diubah atau dihapus melalui panel. Tes jawaban manual (esai/unggah berkas) dibuat di panel; lewat API hanya nama, instruksi, dan sesinya yang dapat diubah.
  • Edisi (edition):
    • standard (Ujian Standard): maksimal 4 tes, tanpa CAT dan tanpa proctoring kamera, layar, atau dual monitor.
    • professional (Ujian Professional): maksimal 30 tes, dengan semua fitur.
    • Kredit dipotong saat peserta mulai mengerjakan tes, bukan saat ujian dibuat. Ujian professional memakai kredit professional; ujian standard memakai kredit gratis lebih dulu, lalu kredit professional. Tanpa kredit, ujian tetap dapat dibuat, tetapi peserta tidak dapat memulai tes.
  • Waktu dikirim dalam ISO 8601 dengan offset, misalnya 2026-11-10T08:00:00+07:00 atau 2026-11-10T01:00:00Z, dan dikembalikan dalam WIB (+07:00). Waktu tanpa offset, seperti 2026-11-10 08:00:00, ditolak dengan 422. end_at ujian paling lambat satu tahun dari sekarang.
  • Sesi harus berada di dalam rentang waktu ujian dan berlangsung minimal sepanjang durasi tesnya. Paket soal sesi harus milik projek, sejenis dengan tesnya (CBT/CAT untuk tes CBT dan CAT, jawaban manual untuk tes jawaban manual), dan berisi minimal satu soal; untuk tes CAT, semua soal wajib memiliki tingkat kesulitan.
  • Sesi otomatis (is_auto_assign_session, default true): peserta yang didaftarkan mendapat sesi pertama (yang paling awal dibuat) dari setiap tes. Peserta yang terdaftar sebelum sebuah tes memiliki sesi otomatis mendapat sesi tersebut saat sesi dibuat.
  • Urutan tes mengikuti urutan pembuatannya. Jika is_must_be_in_order bernilai true, peserta harus menyelesaikan tes sesuai urutan itu.
  • Peserta melihat ujian selama berada di dalam rentang waktunya dan belum diarsipkan. Tes hanya dapat dimulai di dalam jadwal sesi yang memiliki paket soal.

Yang terkunci

Format error

Kesalahan isian dikembalikan dengan status 422 dalam format error yang sama dengan endpoint lain. Kunci error menunjuk field-nya, termasuk field bersarang, misalnya exam_quizzes.0.sessions.1.end_at.
Perubahan yang ditolak karena kondisi ujian dikembalikan dengan status 409 dan field code:

Pengaturan tes

Endpoint ujian

Seluruh isi request diperiksa lebih dulu; jika ada kesalahan, tidak ada yang disimpan. Tes dan sesi bersifat opsional dan dapat ditambahkan belakangan.

Parameter

Contoh request

Contoh response

Status 201. Isinya sama dengan detail ujian, termasuk exam_quizzes dan sessions beserta ID-nya. Simpan ID ujian, tes, dan sesi untuk perubahan berikutnya.
Contoh di atas dipersingkat; respons lengkap berisi semua field ujian, tes, dan sesi.
Hanya field yang dikirim yang diubah. Field yang tersedia sama dengan POST /exams tanpa exam_quizzes. Endpoint juga menerima metode PUT.
  • Rentang waktu baru harus tetap mencakup semua sesi; ubah sesinya lebih dulu jika perlu.
  • Mengubah edition menjadi standard ditolak jika ujian memiliki lebih dari 4 tes atau tes yang memakai fitur professional.
  • Mengubah final_score_type menghitung ulang nilai akhir peserta.
  • Mengaktifkan is_auto_assign_session langsung menempatkan peserta yang belum memiliki sesi ke sesi pertama setiap tes.

Contoh request

Respons berisi ujian terbaru, dengan bentuk yang sama seperti POST /exams.
Ditolak dengan 409 (attempt_started) jika sudah ada peserta yang mulai mengerjakan tes. Ujian multi-level dan ujian dengan pembayaran di CBT hanya dapat dihapus melalui panel.

Endpoint tes

Body sama dengan satu item exam_quizzes pada POST /exams, termasuk sessions. Tes baru ditempatkan di urutan terakhir. Peserta yang sudah terdaftar langsung mendapat tes baru ini, dan mendapat sesinya jika sesi otomatis aktif.
Status 201; respons berisi tes beserta sesinya.
Hanya field yang dikirim yang diubah: name, exam_type, duration_minutes, score_type, description, dan pengaturan is_*. Durasi baru tidak boleh lebih panjang dari sesi tes yang ada. Pada tes jawaban manual, hanya name dan description yang dapat diubah; field lain ditolak dengan 422. Endpoint juga menerima metode PUT.
Ditolak dengan 409 (participants_registered) jika sudah ada peserta terdaftar pada ujian. Sesi tes ikut terhapus.

Endpoint sesi

Status 201:
Peserta yang sedang mengerjakan saat sesi berakhir otomatis diselesaikan oleh sistem.
Hanya field yang dikirim yang diubah dan diperiksa, sehingga mengganti nama sesi tidak memeriksa ulang jadwal dan paket soalnya. Ditolak dengan 409 jika ada peserta yang sedang mengerjakan pada sesi ini, dan paket soal tidak dapat diganti setelah ada peserta yang mulai mengerjakan. Untuk mengganti revisi paket soal sebelum ujian dimulai, kirim question_bank_id yang baru. Endpoint juga menerima metode PUT.
Ditolak dengan 409 (participants_registered) jika sudah ada peserta yang ditempatkan pada sesi ini.

Kesiapan dan penilaian

Mendaftar hal yang membuat peserta belum dapat mengerjakan ujian. ready bernilai true jika tidak ada masalah ber-severity error; warning menandai hal yang perlu diperhatikan tetapi tidak menghalangi.
Menghitung nilai semua tes ber-IRT pada ujian, sama seperti Hitung Skor → Perhitungan IRT di panel. Dapat dijalankan setelah ada peserta yang menyelesaikan tes dan tidak ada peserta yang sedang mengerjakan. Perhitungan dapat dijalankan ulang, misalnya setelah peserta susulan selesai; setiap perubahan nilai mengirim webhook exam_result.scored. Selama perhitungan masih diantrekan atau berjalan, request berikutnya ditolak dengan 409 (calculation_running).
Status 202:
Status perhitungan terakhir setiap tes ber-IRT:

Paket soal

Paket soal projek untuk dipasang ke sesi. Paket soal hasil import memiliki is_locked: true dan source berisi paket serta revisi asalnya.