Skip to main content
All API errors follow a consistent format.

Error Response Format

Some error responses may include additional context fields depending on the endpoint — for example, attemptsRemaining on OTP errors or matchScore on name mismatch errors.

HTTP Status Codes

Common Error Codes

User Errors

Transaction Errors

Payout Errors

PAYOUTS_ON_HOLD applies to your whole account, not one user or one transfer. While it is in force, payout requests are rejected before anything is created — no transaction is opened, your partnerReference is not consumed, and no balance moves. Once the hold is lifted you can re-send the identical request, same partnerReference and Idempotency-Key included.Treat it as retryable-after-resolution, not as a failed transfer: don’t mark the transfer failed to your end user, and don’t re-issue it under a new reference. The message field carries what is needed to clear the hold.

KYC Errors

Rate Limiting

Rate-limited responses (429) include headers to help you manage request pacing:
Use the retryAfter field (seconds) or the X-RateLimit-Reset header to schedule your next request.

Error Handling Examples

Idempotency

For safe retries, include an Idempotency-Key header (UUID) on mutating requests:
Same idempotency key = same response (no duplicate transactions).

Idempotency Conflict (409)

If you send the same idempotency key with a different request body, you’ll receive a 409 Conflict:
Keys expire after 24 hours.