AKD Pay Docs
Bahasa IndonesiaID Dashboard
LIVE This documentation applies to both sandbox and live.

Going live

Testing checklist

Scenarios that must pass in the sandbox, then the steps from sandbox to live.

Use this checklist before you apply for live. Every scenario can be tested in the sandbox with payment simulation.

§13 Checklist pengujian#

Uji di sandbox sebelum meminta akses live:

  • Buat pembayaran QRIS → PENDING dengan checkout.qr_string.
  • Buat pembayaran VIRTUAL_ACCOUNT → PENDING dengan checkout.account_number; nominal di bawah 10.000 → 400.
  • Ulangi request yang sama dengan Idempotency-Key yang sama → payment_id sama.
  • Key sama, amount berbeda → 409.
  • external_order_id sama dengan key berbeda → 409.
  • Tanpa Authorization → 401; API key salah → 401.
  • project_id milik merchant lain atau acak → 404.
  • Simulasi bayar → webhook payment.paid diterima, signature V2 valid, pesanan ditandai lunas satu kali.
  • Kirim webhook yang sama dua kali (kirim ulang dari Dashboard) → pesanan tidak diproses dua kali.
  • Ubah satu byte body atau pakai secret salah → server Anda menjawab 401.
  • Timestamp t lebih dari 5 menit → server Anda menolak.
  • Biarkan pembayaran lewat expires_at → payment.expired diterima.
  • Matikan endpoint sementara → delivery dicoba ulang (PENDING, attempt_count naik) dan berhasil setelah endpoint hidup.
  • Event tak dikenal dijawab 2xx dan diabaikan.
  • GET /v1/payments/{id} dipakai sebagai cek akhir bila webhook tidak datang.

§2 Checklist sandbox ke live#

Alur onboarding:

  1. Daftar sandbox sendiri di Dashboard Merchant sandbox (https://sandbox-merchant.algoritmakitadigital.id/#/daftar, "Belum punya akun? Daftar gratis (sandbox)"): isi nama usaha, kontak, email, telepon, jenis usaha, lalu masukkan kode 6 digit dari email. Akun, project "Proyek utama", QRIS dan Virtual Account, simulasi bayar sandbox, dan satu API key langsung dibuat; Anda otomatis masuk sebagai Pemilik. Halaman sukses menampilkan merchant_id, project_id, dan API key sandbox. API key hanya ditampilkan sekali di layar itu; merchant_id dan project_id tetap terlihat di menu Pengembang. Atau minta tim AKD membuatkan akun sandbox.
  2. Integrasi dan uji di sandbox dengan checklist di bawah. Endpoint webhook tidak didaftarkan dari dashboard: kirim URL HTTPS endpoint Anda ke tim AKD (lihat permintaan perubahan di bagian 14); signing secret (whsec_…) diberikan sekali.
  3. Ajukan Live dari menu Dashboard Merchant sandbox → Ajukan Live (Pemilik): data badan usaha, NIB/NPWP, penanggung jawab, perkiraan volume, dan rekening pencairan. Tidak ada unggahan dokumen; tim AKD meminta dokumen lewat email setelah peninjauan awal.
  4. Review tim AKD. Status (Diajukan → Sedang ditinjau → Disetujui/Ditolak) tampil di menu Ajukan Live dan dikirim lewat email ke Pemilik. Pengajuan yang ditolak memuat catatan peninjau; Anda dapat mengajukan ulang.
  5. Setelah disetujui, tim AKD membuat akun live di sistem terpisah: merchant, project, API key live, endpoint webhook live, tarif, rekening, dan undangan Dashboard Merchant live. Kredensial live dibuat dan dikirim oleh tim AKD, tidak dari pendaftaran mandiri. Tidak ada data sandbox yang pindah ke live.

Sandbox:

  • Anda punya merchant_id, project_id, dan API key sandbox (akd_sk_…), dari pendaftaran mandiri atau dari tim AKD. Simpan API key di secret manager server, jangan di aplikasi mobile atau frontend.
  • GET /v1/integration-context?project_id=… menjawab 200 dan menampilkan metode yang Anda pakai.
  • Endpoint webhook HTTPS Anda sudah didaftarkan oleh tim AKD dan Anda menyimpan signing secret (whsec_…), yang hanya ditampilkan sekali.
  • Server Anda memverifikasi X-AKD-Signature-V2 (bagian 8), menolak signature yang salah atau timestamp lebih dari 5 menit, dan menjawab 2xx dalam 10 detik.
  • Server Anda menyimpan X-AKD-Event-ID yang sudah diproses dan tidak memproses ulang event yang sama.
  • Setiap pembuatan pembayaran mengirim Idempotency-Key unik per pesanan, dan retry memakai key yang sama dengan body yang sama.
  • Alur bayar QRIS dan VIRTUAL_ACCOUNT diuji sampai payment.paid (pakai simulasi), plus payment.expired.
  • Penanganan error 400, 401, 409, 429, 502 dan timeout jaringan sudah diuji (bagian 11).
  • Pesanan hanya ditandai lunas dari webhook terverifikasi atau dari GET /v1/payments/{id} yang berstatus PAID, tidak pernah dari redirect browser.
  • Riwayat webhook di Dashboard Merchant → Pengembang tidak menunjukkan delivery DEAD yang belum dijelaskan.

Live:

  • Ajukan akun live dari Dashboard Merchant sandbox → Ajukan Live dan kirim dokumen yang diminta tim AKD lewat email.
  • Setelah disetujui, terima API key live, project_id live, dan pendaftaran endpoint webhook live dari tim AKD. Secret live berbeda dari sandbox.
  • Ganti base URL ke https://api.algoritmakitadigital.id, API key, project_id, dan signing secret. Jangan mencampur nilai sandbox dan live.
  • Gunakan skema signature v2 (minta tim AKD mengatur signature_scheme endpoint ke v2).
  • Tampilkan QRIS (checkout.qr_string) atau nomor VA (checkout.account_number) di aplikasi Anda sendiri; live tidak punya halaman bayar AKD.
  • Lakukan satu transaksi live bernominal kecil, pastikan webhook payment.paid diterima dan diverifikasi, lalu cek pembayaran di Dashboard Merchant.
  • Pastikan email owner dan developer di Dashboard Merchant → Tim benar: notifikasi webhook gagal dikirim ke sana.