Dokumentasi / Payment (QRIS) Beta
Payment API (QRIS)
Host https://api.larika.id. Kirim API key workspace di header x-api-key atau Authorization: Bearer. Batas 120 permintaan per menit untuk tiap key. Jawaban berbentuk { success, data } atau { success: false, error }.
Alur satu pembayaran
- App Anda memanggil Buat tagihan dengan
amountdanrefpesanan. - Tampilkan
payloadsebagai QR dan minta pelanggan membayar tepatpayAmount. - Bank mengirim email notifikasi. Larika membacanya dan menandai tagihan
PAID. - App Anda menanyakan status tiap beberapa detik sampai bukan
PENDING.
Tagihan (QR langsung)
POST/v1/qris/chargesBuat tagihan
Membuat satu tagihan untuk satu pesanan. Merchant QRIS: tampilkan payload sebagai kode QR dan minta pelanggan membayar tepat payAmount (jumlah dikurangi kode unik 1–999). Merchant transfer bank: payload kosong, bank berisi rekening tujuan, dan payAmount adalah jumlah ditambah kode unik 1–999. Kode unik membuat email bank menyebut tagihan ini lewat nominalnya. ref yang sama mengembalikan tagihan yang sama (HTTP 200, tidak membuat baru). Tiap tagihan baru memotong kredit.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| amount * | body | integer | Rupiah utuh, 1.000 sampai 10.000.000. |
| ref | body | string | Nomor pesananmu, maks 100 karakter. Unik per merchant. |
| expiresIn | body | integer | Masa berlaku QR dalam menit, 5–1440. Bawaan: pengaturan merchant. |
curl -X POST 'https://api.larika.id/v1/qris/charges' \
-H 'x-api-key: $LARIKA_KEY' \
-H 'content-type: application/json' \
-d '{"amount":150000,"ref":"INV-1024","expiresIn":30}'201
{
"success": true,
"data": {
"id": "cm2q0x1…",
"ref": "INV-1024",
"amount": 150000,
"uniqueCode": 237,
"payAmount": 149763,
"payload": "00020101021226…6304A1B2",
"status": "PENDING",
"expiresAt": "2026-10-03T08:45:00.000Z",
"paidAt": null,
"createdAt": "2026-10-03T08:15:00.000Z"
}
}GET/v1/qris/charges/{id}Lihat tagihan
Status satu tagihan. status: PENDING (menunggu bayar), PAID (lunas, paidAt terisi), EXPIRED, CANCELLED. Tanyakan ulang tiap beberapa detik sampai bukan PENDING.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| id * | path | string | Id tagihan dari Buat tagihan. |
curl -X GET 'https://api.larika.id/v1/qris/charges/{id}' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2q0x1…",
"ref": "INV-1024",
"amount": 150000,
"uniqueCode": 237,
"payAmount": 149763,
"payload": "00020101021226…6304A1B2",
"status": "PAID",
"expiresAt": "2026-10-03T08:45:00.000Z",
"paidAt": "2026-10-03T08:21:07.000Z",
"createdAt": "2026-10-03T08:15:00.000Z"
}
}GET/v1/qris/chargesCari lewat ref
Tagihan milikmu dengan ref ini. Berguna kalau id-nya belum tersimpan di aplikasimu.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| ref * | query | string | Ref yang dikirim saat membuat tagihan. |
curl -X GET 'https://api.larika.id/v1/qris/charges' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2q0x1…",
"ref": "INV-1024",
"amount": 150000,
"uniqueCode": 237,
"payAmount": 149763,
"payload": "00020101021226…6304A1B2",
"status": "PENDING",
"expiresAt": "2026-10-03T08:45:00.000Z",
"paidAt": null,
"createdAt": "2026-10-03T08:15:00.000Z"
}
}POST/v1/qris/charges/{id}/cancelBatalkan tagihan
Membatalkan tagihan yang masih PENDING. Tagihan yang sudah lunas, kedaluwarsa, atau dibatalkan menjawab HTTP 409. Kredit yang sudah terpotong tidak dikembalikan.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| id * | path | string | Id tagihan. |
curl -X POST 'https://api.larika.id/v1/qris/charges/{id}/cancel' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2q0x1…",
"ref": "INV-1024",
"amount": 150000,
"uniqueCode": 237,
"payAmount": 149763,
"payload": "00020101021226…6304A1B2",
"status": "CANCELLED",
"expiresAt": "2026-10-03T08:45:00.000Z",
"paidAt": null,
"createdAt": "2026-10-03T08:15:00.000Z"
}
}Invoice
GET/v1/qris/methodsDaftar metode bayar
Metode bayar milik workspace-mu (QRIS dan transfer bank) beserta kesehatannya. available: false berarti metode itu sedang gangguan (email notifikasinya tidak terbaca), dan reason menjelaskan kenapa. Halaman bayar menyembunyikan metode yang sedang gangguan. Pakai id di sini untuk memilih methods saat membuat invoice.
curl -X GET 'https://api.larika.id/v1/qris/methods' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": [
{
"id": "cm2m0a…",
"kind": "QRIS",
"label": "QRIS",
"available": true
},
{
"id": "cm2m0b…",
"kind": "TRANSFER",
"label": "Transfer BNI",
"bank": {
"name": "BNI",
"accountNumber": "0123456789",
"accountName": "Depati Digital"
},
"available": false,
"reason": "Kotak email notifikasi sedang gangguan"
}
]
}POST/v1/qris/invoicesBuat invoice
Membuat satu invoice dan halaman bayarnya: arahkan pelanggan ke checkoutUrl. Di halaman itu pelanggan memilih salah satu metode yang aktif dan sedang berfungsi, lalu melihat QR atau rekening tujuan dan nominal yang harus dibayar (jumlah dikurangi kode unik untuk QRIS, ditambah kode unik untuk transfer). Halaman berubah sendiri saat lunas. Data pelanggan opsional. Biaya satu kali per invoice, saat metode pertama dipilih; ganti metode tidak menambah biaya. ref yang sama mengembalikan invoice yang sama. Gagal 503 kalau semua metode yang diminta sedang gangguan.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| amount * | body | integer | Rupiah utuh, 1.000 sampai 10.000.000. |
| ref | body | string | Nomor pesananmu, maks 100 karakter. Unik per merchant. |
| methods | body | string[] | Metode yang diizinkan: id dari Daftar metode bayar, atau qris / transfer untuk semua metode jenis itu. Kosong = semua. |
| customer | body | object | Opsional: name, phone, email, address. Tampil di halaman bayar dan tersimpan di invoice. |
| expiresIn | body | integer | Masa berlaku invoice dalam menit, 5–1440. Bawaan: pengaturan merchant (30). |
| returnUrl | body | string | Alamat http(s) tokomu: tombol Kembali ke toko di halaman bayar. |
curl -X POST 'https://api.larika.id/v1/qris/invoices' \
-H 'x-api-key: $LARIKA_KEY' \
-H 'content-type: application/json' \
-d '{"amount":150000,"ref":"INV-1024","methods":["qris","transfer"],"customer":{"name":"Budi Santoso","phone":"081234567890","email":"[email protected]","address":"Jl. Merdeka 1, Sungaipenuh"},"returnUrl":"https://tokoanda.com/pesanan/1024"}'201
{
"success": true,
"data": {
"id": "cm2i0x…",
"ref": "INV-1024",
"amount": 150000,
"status": "PENDING",
"methods": [
"cm2m0a…",
"cm2m0b…"
],
"customer": {
"name": "Budi Santoso",
"phone": "081234567890",
"email": "[email protected]",
"address": "Jl. Merdeka 1, Sungaipenuh"
},
"expiresAt": "2026-10-03T08:45:00.000Z",
"paidAt": null,
"paidWith": null,
"checkoutUrl": "https://panel.larika.id/pay/eyJpZCI6ImNtMmkw…",
"createdAt": "2026-10-03T08:15:00.000Z"
}
}GET/v1/qris/invoices/{id}Lihat invoice
Status invoice: PENDING, PAID (lunas, paidAt dan paidWith terisi), EXPIRED, atau CANCELLED. Tanyakan ulang tiap beberapa detik sampai bukan PENDING.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| id * | path | string | Id invoice dari Buat invoice. |
curl -X GET 'https://api.larika.id/v1/qris/invoices/{id}' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2i0x…",
"ref": "INV-1024",
"amount": 150000,
"status": "PAID",
"paidAt": "2026-10-03T08:21:07.000Z",
"paidWith": "cm2m0a…"
}
}GET/v1/qris/invoicesCari invoice lewat ref
Invoice milikmu dengan ref ini.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| ref * | query | string | Ref yang dikirim saat membuat invoice. |
curl -X GET 'https://api.larika.id/v1/qris/invoices' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2i0x…",
"ref": "INV-1024",
"amount": 150000,
"status": "PENDING"
}
}POST/v1/qris/invoices/{id}/cancelBatalkan invoice
Membatalkan invoice yang masih PENDING, beserta tagihan yang sedang terbuka. Halaman bayarnya menampilkan pembayaran dibatalkan. Invoice yang sudah lunas, kedaluwarsa, atau dibatalkan menjawab HTTP 409.
| Parameter | Di | Tipe | Keterangan |
|---|---|---|---|
| id * | path | string | Id invoice. |
curl -X POST 'https://api.larika.id/v1/qris/invoices/{id}/cancel' \
-H 'x-api-key: $LARIKA_KEY'200
{
"success": true,
"data": {
"id": "cm2i0x…",
"status": "CANCELLED"
}
}