Create Payment
Membuat satu atau banyak transaksi pembayaran melalui API.
POST
cURL
cURL
/api/payments
Membuat transaksi pembayaran. Request dapat berisi satu transaksi atau bulk melalui field payments.
Headers
| Header | Wajib | Keterangan |
|---|---|---|
Authorization | Ya | Bearer sk_xxx |
Content-Type | Ya | application/json |
Idempotency-Key | Tidak | ID unik untuk request tunggal. Untuk bulk, gunakan payments[].idempotency_key. |
Body Fields
| Field | Type | Wajib | Keterangan |
|---|---|---|---|
amount | integer | Ya untuk request tunggal | Nominal order. |
currency | string | Tidak | Default IDR. |
payment_method | string | Tidak | Default qris. Saat ini hanya qris yang didukung. |
merchant_reference_id | string | Tidak | ID order di sistem merchant. |
customer | object | Tidak | Data pelanggan. |
metadata | object | Tidak | Data tambahan dari merchant. |
payments | array | Tidak | Daftar transaksi untuk bulk create. Maksimal 50 item per request. |
payments[].idempotency_key | string | Disarankan | ID unik per item bulk. |
Payment Method Fields
| Field | Keterangan |
|---|---|
payment_method | Kode metode pembayaran. Jika dikosongkan, maka akan dianggap sebagai qris. |
qris_payload | Payload pembayaran pada response QRIS. |
qris_image_url | URL gambar QR pada response QRIS. |
Single Request Example
curl -X POST "<origin>/api/payments" \ -H "Authorization: Bearer sk_xxx" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: AMEKURUMIN12345" \ -d '{ "amount": 150000, "payment_method": "qris", "merchant_reference_id": "ORDER-1024", "customer": { "name": "Nara", "email": "nara@example.com" }}'Bulk Request Example
curl -X POST "<origin>/api/payments" \ -H "Authorization: Bearer sk_xxx" \ -H "Content-Type: application/json" \ -d '{ "payments": [ { "amount": 150000, "payment_method": "qris", "merchant_reference_id": "ORDER-1024", "idempotency_key": "ORDER-1024" }, { "amount": 89000, "payment_method": "qris", "merchant_reference_id": "ORDER-1025", "idempotency_key": "ORDER-1025" } ]}'Single Response
{
"payment": {
"id": "f2b1d5b0-7b1f-4c5d-9c37-93f0c8f6a001",
"reference_id": "PAY-LXAMPLE",
"merchant_reference_id": "ORDER-1024",
"payment_method_code": "qris",
"provider": "gopay",
"currency": "IDR",
"amount": 150000,
"fee_amount": 1050,
"net_amount": 150000,
"total_amount": 151050,
"status": "pending",
"qris_payload": "000201010212...",
"qris_image_url": "<qris_image_url>",
"expires_at": "2026-05-19T10:30:00Z",
"created_at": "2026-05-19T10:00:00Z",
"updated_at": "2026-05-19T10:00:00Z"
}
}Bulk Response
{
"payments": [
{
"id": "f2b1d5b0-7b1f-4c5d-9c37-93f0c8f6a001",
"reference_id": "PAY-LXAMPLE",
"merchant_reference_id": "ORDER-1024",
"payment_method_code": "qris",
"amount": 150000,
"fee_amount": 1050,
"net_amount": 150000,
"total_amount": 151050,
"status": "pending",
"expires_at": "2026-05-19T10:30:00Z"
}
]
}Response Fields
| Field | Keterangan |
|---|---|
payment.id / payments[].id | UUID transaksi. |
payment.reference_id / payments[].reference_id | ID transaksi dari Chiwa Pay. |
payment.merchant_reference_id | ID order dari merchant. |
payment.payment_method_code | Metode pembayaran. |
payment.amount | Nominal order. |
payment.fee_amount | Biaya pembayaran. |
payment.net_amount | Gross amount yang diterima merchant. |
payment.total_amount | Nominal yang harus dibayar pelanggan. |
payment.status | Status transaksi. |
payment.expires_at | Batas waktu pembayaran; setelah melalui, transaksi pending menjadi expired. |
Fee Payer
| Value | Pelanggan bayar | Merchant menerima |
|---|---|---|
buyer | amount + fee_amount | amount |
merchant | amount | amount - fee_amount |
QRIS dibuat dinamis dari provider dan divalidasi menggunakan ID transaksi provider, bukan pencocokan nominal.
HTTP Error Code
| HTTP | Code | Keterangan |
|---|---|---|
400 | invalid_json | Body bukan JSON valid. |
400 | invalid_amount | amount harus lebih dari 0. |
400 | invalid_bulk_size | payments harus berisi 1 sampai 50 item. |
400 | unsupported_payment_method | Payment method tidak didukung. |
400 | payment_create_failed | Transaksi gagal dibuat. |
401 | invalid_api_key | Secret key tidak valid. |
403 | merchant_not_approved | Merchant belum aktif. |
429 | rate_limited | Rate limit terlampaui. |