Bagian 2

Format data, idempotency, dan error

Tipe data, pagination, retry aman dengan Idempotency-Key, dan kode error.

Tipe data

ElemenKontrak v1
AmountString digit rupiah bulat, contoh "100000". Tanpa titik, koma, tanda Rp, atau desimal. Nilai harus positif dan sesuai limit kanal.
CurrencyIDR. Field yang nilainya tidak didukung ditolak.
ID dan referenceID AntaraPay adalah string opaque. Reference merchant 1–64 karakter A–Z, a–z, 0–9, titik, garis bawah, atau tanda hubung; unik per jenis operasi.
WaktuRFC 3339 UTC, contoh 2026-10-15T05:00:00Z. Filter from inklusif dan to eksklusif.
MetadataObjek opsional, maksimum 10 key dengan nilai string; maksimum 2 KB JSON. Hindari data sensitif.
Paginationlimit default 50, maksimum 200; cursor opaque. List terbaru lebih dahulu, kecuali jurnal yang berurutan sequence naik.
ResponseSukses memakai data dan request_id. List menambahkan pagination.next_cursor dan has_more. null berarti nilai belum tersedia.
Bentuk respons list
{
  "data": [ ... ],
  "pagination": { "next_cursor": "opaque_cursor", "has_more": true },
  "request_id": "req_example"
}

Retry yang aman

Gunakan key 1–128 karakter untuk satu POST. Key sama dan body sama mengembalikan resource yang sama; body berbeda menghasilkan 409 IDEMPOTENCY_CONFLICT. Reference tetap unik meskipun key baru. Jangan membuat reference baru ketika respons timeout. Ulangi dengan key dan body yang sama atau cari resource berdasarkan reference.

Retensi respons idempotency dirancang 7 hari; reference finansial tetap tidak dapat digunakan ulang selama record transaksi dipertahankan. Request yang belum lolos autentikasi atau validasi belum membuat resource. Replay yang diterima mengembalikan ID sama; gunakan GET untuk status terkini.

Pola retry yang disarankan

Simpan Idempotency-Key bersama record pesanan Anda sebelum mengirim request. Jika terjadi timeout, kirim ulang dengan key dan body yang persis sama, atau cari resource berdasarkan reference.

Format dan kode error

Contoh error
{
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Saldo available tidak mencukupi.",
    "retryable": false
  },
  "request_id": "req_example"
}
HTTPCodeTindakan client
400 / 422VALIDATION_ERRORPerbaiki payload; baca message.
401 / 403UNAUTHORIZED / FORBIDDENPeriksa key dan scope.
404NOT_FOUNDPeriksa ID dan environment.
409IDEMPOTENCY_CONFLICT / REFERENCE_EXISTSGunakan request awal atau baca resource existing.
409INSUFFICIENT_BALANCE / INVALID_STATEPeriksa saldo atau status terbaru.
429RATE_LIMITEDIkuti Retry-After dalam detik.
500 / 503INTERNAL_ERROR / CHANNEL_UNAVAILABLERetry dengan backoff dan key sama; cek status jika hasil tidak pasti.

Error khusus QR

Endpoint gambar QR mengembalikan error JSON: 409 QR_NOT_READY, 409 INVALID_STATE, 410 QR_EXPIRED, atau 422 CHANNEL_NOT_QR. Lihat bagian Payin.