FQrisDocs
POST/v1/payments/{id}/refundsscope refunds:write

Catat refund

Mencatat refund untuk payment paid atau partially_refunded. FQris tidak memindahkan uang: kirim dananya lewat aplikasi DANA, lalu catat di sini. Lihat refund payment lewat GET /v1/payments/{id}/refunds; salah catat dibatalkan dalam 24 jam lewat POST /v1/refunds/{id}/void.

AuthorizationBearer <api_key>wajib
fq_live_… atau fq_test_…; mode ditentukan oleh key.
Idempotency-Keystring ≤ 255
Disimpan 24 jam. Body sama → respons sama; body beda → 409 IDEMPOTENCY_KEY_REUSED.
Content-Typeapplication/jsonwajib
JSON UTF-8.

Path

idstringwajib
ID payment, berawalan pay_.

Body

amountintegerwajib
Nominal refund dalam rupiah bulat, minimal 1 dan paling banyak sisa yang belum di-refund (final_amount − refunded_amount). Lebih dari itu → 422 REFUND_EXCEEDS_AMOUNT.
reasonstringwajib
Salah satu dari customer_request, duplicate, overpaid, service_failed, other.
notestring ≤ 500
Catatan bebas, mis. "Koin gagal masuk". Boleh null.
refunded_atstring (ISO 8601)default saat dicatat
Waktu dana dikirim. Tidak boleh sebelum payment dibayar atau di masa depan (selisih jam sampai 2 menit dicatat sebagai sekarang). Selain itu 400 INVALID_PARAMETER.
metadataobject
Maks 20 key; tersimpan di refund dan dikembalikan apa adanya.
{key}string ≤ 500
Key ≤ 40 karakter

Respons

1import FQris from '@fqris/node';
2const fqris = new FQris(process.env.FQRIS_KEY);
3
4const refund = await fqris.refunds.create('pay_01JA2Z3K8M', {
5 amount: 20137,
6 reason: 'customer_request',
7 note: 'Koin gagal masuk',
8});
9console.log(refund.status);
201Refund
1{
2 "id": "rfd_01JA30X5QD",
3 "object": "refund",
4 "mode": "test",
5 "payment_id": "pay_01JA2Z3K8M",
6 "amount": 20137,
7 "reason": "customer_request",
8 "note": "Koin gagal masuk",
9 "refunded_at": "2026-10-14T07:00:00Z",
10 "status": "recorded",
11 "voided_at": null,
12 "metadata": {},
13 "created_at": "2026-10-14T07:00:12Z"
14}
Apakah halaman ini membantu?