Skip to main content
POST
Create a refund

Authorizations

Authorization
string
header
required

Bearer token authentication. Pass your API key as Authorization: Bearer sk_.... See Authentication for keys, scopes, and sandbox vs production.

Body

application/json
charge_id
string
required

The ID of the payment to refund.

Example:

"ch_1a2b3c4d5e6f"

reference
string
required

Your unique identifier for this refund. Must be unique per account and environment.

Maximum string length: 128
Example:

"refund_9876"

refund_address
string | null

Destination wallet address for crypto refunds. Required when the charge currency is a cryptocurrency.

Maximum string length: 255
Example:

"0xabc123def456"

amount
string | null

Optional partial refund amount in the charge settlement currency. Omit to refund the full remaining refundable balance.

Example:

"10.00"

fee_bearer
enum<string> | null

Who absorbs the refund fee. org: the fee is charged to your balance on top of the amount returned. customer: the fee is taken out of what the customer receives. Defaults to the fee handling set on your account. Case is ignored.

Available options:
org,
customer
Example:

"org"

reason
string | null

Human-readable reason for the refund.

Maximum string length: 500
Example:

"Customer requested cancellation"

idempotency_key
string | null

A key you supply to make this request idempotent. If you send the same idempotency_key twice for the same charge, the second request returns the existing refund.

Maximum string length: 255
Example:

"idem_9f8e7d6c5b"

simulated_outcome
enum<string> | null

Test mode only. Force a specific refund outcome. Omit to use the default sandbox outcome.

Available options:
success,
failed
Example:

"success"

Response

Success - Refund created

refund_id
string

Pass this to retrieve the refund later.

Example:

"rfnd_4b9c2e7a1d35a0f81c62"

charge_id
string

The charge whose funds are being returned. A charge carries at most one refund that did not fail, so this value appears on one refund at a time.

Example:

"ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f"

reference
string

The reference you supplied on creation.

Example:

"refund_9876"

status
enum<string>

Where the refund has reached. processing: the return has been accepted and your balance is already reserved, but the outcome is not yet known. success: the funds have reached the customer; this is final and cannot be reversed. failed: the return did not go through and the reserved balance has been released. This is final for this refund, but it moved no money, so the payment becomes refundable again and you can create a new refund for it.

Available options:
processing,
success,
failed
Example:

"processing"

requested_amount
string

The refund amount you requested, in the charge's settlement currency.

Example:

"29.00"

refunded_amount
string | null

The amount actually returned to the customer. Null until the refund completes or partially settles.

Example:

null

refund_fee_amount
string

Fee charged for this refund, in the charge's settlement currency. "0" if no fee applies.

Example:

"0.00"

fee_bearer
enum<string>

Who absorbs the refund fee. org: the fee is charged to your balance on top of the amount returned. customer: the fee is taken out of what the customer receives.

Available options:
org,
customer
Example:

"org"

reason
string | null

The reason you provided, or null if none was given.

Example:

"Customer requested cancellation"

created_at
string<date-time>

ISO 8601 timestamp when the refund was created.

Example:

"2026-04-27T12:00:00Z"

updated_at
string<date-time>

ISO 8601 timestamp of the last status update.

Example:

"2026-04-27T12:00:00Z"

completed_at
string<date-time> | null

ISO 8601 timestamp when the refund reached a terminal status (success or failed). Null while still processing.

Example:

null