Payment requests
List requests
List payment requests, newest first, with cursor paging.
/v1/transactionsQuery parameters
Items per page, 1–100 (default 20). Anything else — over 100, zero, negative, or not a number at all — is quietly replaced by the default 20 rather than refused, so a limit you did not mean costs you rows per request instead of an error.
Example: 20
The last payreq_* id you saw, for the next page. Do not combine paging with the filters below: has_more answers for the query, not for what survived the filter, so a filtered page can come back empty with has_more: true — and the cursor is the last id in data, which an empty page does not give you. Page unfiltered and filter on your side.
Filter by status. Every filter here applies only to the page that was fetched, so a filtered list reaches back at most limit records — it is not a search over your history. To cover everything, page unfiltered and filter on your side.
Example: succeeded
Filter by order number. Page-only, like status.
Filter by your own reference. Page-only, like status.
Time range (RFC3339), half-open: created_after includes a request created exactly on the bound, created_before excludes it, so consecutive windows never drop nor duplicate one. Page-only, like status. A value that is not RFC3339 is refused with 422 invalid_filter rather than ignored — send 2026-08-11T00:00:00+07:00, not 2026-08-11.
curl "https://pay.kasera.id/v1/transactions?limit=20&status=succeeded" \ -H "Authorization: Bearer kp_live_..."
{
"data": [
{
"id": "payreq_9b2f...",
"livemode": true,
"status": "pending",
"currency": "IDR",
"amount": 150000,
"fee": 1300,
"net": 148700,
"description": "Kaos komunitas",
"external_id": "ORD-1234",
"merchant_ref": "INV-2026-001",
"customer": { "name": "Budi", "email": "budi@toko.dev" },
"order_items": [
{ "name": "Kaos komunitas", "price": 75000, "quantity": 2 }
],
"return_url": "https://toko.example/selesai",
"checkout_url": "https://pay.kasera.id/p/xK3f...",
"source": "api",
"payment_method": "qris",
"payment": {
"type": "qr",
"qr_string": "00020101021226670016COM.KASERA.WWW...6304A1B2"
},
"instructions": {
"title": "Cara membayar dengan QRIS",
"steps": [
"Buka aplikasi e-wallet atau mobile banking Anda.",
"Pilih menu bayar dengan QRIS, lalu scan kode QR di halaman pembayaran.",
"Periksa nama merchant dan nominal, lalu konfirmasi pembayaran.",
"Pembayaran terkonfirmasi otomatis dalam beberapa detik."
]
},
"expires_at": "2026-08-11T13:00:00+07:00",
"paid_at": null,
"created_at": "2026-08-11T12:00:00+07:00"
}
],
"has_more": false
}