BillKit/DocsConsole
Refunds

Create refund

Refund a payment, in full or in part.

POST/v1/refunds
Operation create_refund·Scope refunds:write·OpenAPI v1.1.0

Parameters

ParameterDescription
amount_centsinteger | nulloptionalAmount to refund, in minor units of currency. Omit to refund the whole remaining balance. The refund that brings the total refunded to the full charge cancels the subscription, or marks a one-off payment refunded. Maximum 99999999.
one_shot_payment_idstring | nulloptionalThe one-off payment to refund. Cannot be combined with payment_id or subscription_id.
payment_idstring | nulloptionalThe subscription payment to refund. One of payment_id, subscription_id or one_shot_payment_id is required.
reasonstring | nulloptionalWhy the refund was made. Recorded on the refund and copied to its credit note. At most 500 characters.
subscription_idstring | nulloptionalRefund the subscription's most recent payment. Use when payment_id is omitted.

Returns

Returns a RefundResponse object.

Errors

StatusCause
400The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it.
401No credential, or one that does not authenticate.
402The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused).
403Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the refunds:write scope.
404No such object in this account and mode.
409Conflicts with the object's current state (state_conflict, or a more specific code), or an operation still in flight (operation_pending).
413The request body is larger than the API accepts.
429Rate limited. Retry-After says when to try again.
500Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key.
502The payment provider failed or did not answer.
503Temporarily unable to serve. reason says whether the request was attempted.
Request · curl
curl -X POST https://api.billkit.eu/v1/refunds \
  -H "Authorization: Bearer $BILLKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"payment_id":"pay_9XKp2vQ1"}'
Request body · every field
{
  "amount_cents": 1900,
  "one_shot_payment_id": "osp_9XKp2vQ1",
  "payment_id": "pay_9XKp2vQ1",
  "reason": "string",
  "subscription_id": "sub_9XKp2vQ1"
}
Response · 200 OK
{
  "amount_cents": 1900,
  "created": 1789392000,
  "currency": "EUR",
  "id": "re_9XKp2vQ1",
  "livemode": false,
  "object": "refund",
  "one_shot_payment_id": "osp_9XKp2vQ1",
  "payment_id": "pay_9XKp2vQ1",
  "reason": "string",
  "status": "pending",
  "subscription_id": "sub_9XKp2vQ1"
}