POST
/v1/payments/{id}/refundsscope refunds:writeCatat 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.
Header
AuthorizationBearer <api_key>wajibfq_live_… atau fq_test_…; mode ditentukan oleh key.
Idempotency-Keystring ≤ 255Disimpan 24 jam. Body sama → respons sama; body beda → 409 IDEMPOTENCY_KEY_REUSED.
Content-Typeapplication/jsonwajibJSON UTF-8.
Path
idstringwajibID payment, berawalan pay_.
Body
amountintegerwajibNominal 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.
reasonstringwajibSalah satu dari customer_request, duplicate, overpaid, service_failed, other.
notestring ≤ 500Catatan bebas, mis. "Koin gagal masuk". Boleh null.
refunded_atstring (ISO 8601)default saat dicatatWaktu dana dikirim. Tidak boleh sebelum payment dibayar atau di masa depan (selisih jam sampai 2 menit dicatat sebagai sekarang). Selain itu 400 INVALID_PARAMETER.
metadataobjectMaks 20 key; tersimpan di refund dan dikembalikan apa adanya.
{key}string ≤ 500Key ≤ 40 karakter
Respons
201Refund dicatat. Objek Refund; payment menjadi refunded atau partially_refunded.
400INVALID_PARAMETER: body tidak valid, atau refunded_at di masa depan atau sebelum payment dibayar.401MISSING_API_KEY, INVALID_API_KEY, API_KEY_REVOKED403INSUFFICIENT_SCOPE, IP_NOT_ALLOWED404RESOURCE_NOT_FOUND: payment tidak ada di project dan mode API key ini.409INVALID_STATE_TRANSITION: payment belum pernah lunas (pending, expired, atau cancelled). Juga IDEMPOTENCY_KEY_REUSED.422REFUND_EXCEEDS_AMOUNT: amount melebihi sisa, termasuk payment yang sudah refunded penuh.429RATE_LIMITED1import 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?