Skip to main content

Limits and errors

📏 Limits​

LimitDefault
Minimum payout$2.00
Maximum payout$500.00
Exposure per account$5,000.00 — see below
Payouts created per account30 per rolling hour
Open payouts per customer_id3 (redirect delivery only)
Fee$0.50 per payout, paid by you

Read the live values from Get balance; yours may be set differently. Do not hardcode them.

Exposure is the principal of every payout still holding funds, plus the principal paid out in the last 24 hours. Paid payouts keep counting for a full day, so exposure does not drop back the moment a payout completes.

Open payouts per customer counts payouts for the same customer_id that are awaiting_choice, processing or review_required. link payouts carry no customer_id and are not counted.

The fee is reserved with the payout and charged only when it completes. A cancelled or expired payout returns both principal and fee.

⚠️ Errors​

Every error has the same shape:

{
"error": "insufficient_funds",
"message": "This payout needs $25.50. Your available balance is $12.40.",
"detail": { "available": "12.40", "required": "25.50", "currency": "USD" }
}

detail is present only on some errors. Branch on error, not on the HTTP status or the message — the message is for people and may change.

Request and authentication​

CodeHTTPWhat to do
invalid_body400Send a JSON object
missing_idempotency_key400Send the Idempotency-Key header (≤191 chars)
invalid_amount400Decimal string, max 2 dp
invalid_merchant_reference400Supply one, ≤191 chars
invalid_delivery400link or redirect
unsupported_currency400USD only
customer_email_required / invalid_customer_email400link delivery needs a valid customer_email
customer_id_required / return_url_required400redirect delivery needs both
invalid_return_url400An absolute https URL without credentials
return_origin_not_configured400No return origin registered for your account yet — contact us
return_origin_not_allowed400The return_url origin is not registered — scheme, host and port must match exactly
destination_not_accepted400Remove it; the recipient chooses
unauthorized401Credential missing, wrong or revoked
insufficient_scope403Needs payouts:write
wrong_credential_kind403This credential is not for this endpoint
wrong_environment403A sandbox credential on production, or the reverse
not_approved_by_platform403Your account is not approved for payouts — contact us
payouts_not_enabled403Your administrator has not switched payouts on
not_found404No such payout for this account

Creating a payout​

CodeHTTPWhat to do
below_minimum / above_payout_limit400See Limits
above_exposure_limit400Too much open or recently paid; see Limits
attempt_unresolved409Outcome unknown — retry with the same key
merchant_reference_conflict409That reference already has a payout with different details. detail.payout_id names it
idempotency_key_conflict409Same key, different body
insufficient_funds409Not enough available balance; detail shows how much
balance_unavailable409Your balance cannot be calculated right now — contact us
too_many_pending409This customer already has the maximum open payouts
rate_limited429Too many payouts created in the last hour; slow down
payouts_disabled503Temporarily unavailable; retry later

Managing a payout​

CodeHTTPEndpointWhat to do
not_cancellable409CancelThe recipient has already confirmed
attempt_unresolved409CancelOur side was busy — retry
wrong_delivery409Link, SessionClaim links are for link payouts, sessions for redirect payouts
customer_mismatch403Sessioncustomer_id differs from the one the payout was created with
not_resumable409SessionThe payout is no longer open
link_unavailable409LinkThe link cannot be shown again — rotate it to issue a new one
Which errors to retry, and with which key
  • attempt_unresolved — retry with the same key and the same body until you get a definite answer.
  • payouts_disabled (503) — retry later; the same key is fine.
  • Any other error — the request cannot succeed as written. A rejected create stays rejected for that Idempotency-Key: retrying the same key returns the same error, even after the cause is gone (your balance topped up, the hourly limit reset). Fix the cause, then create the payout with a new key.

See Idempotency and retries.