Payout API Error Codes

Payout API Error Codes

This page provides a consolidated reference of the error responses returned by the Payout (Withdraw) APIs. Use it to build error decoders and to surface actionable messages to your users.

Error Response Format

When a payout request fails, the API returns a non-2xx HTTP status code. Most payout errors share a simple response body with a single msg field describing the reason:

1{
2 "msg": "Card is not eligible for disbursements"
3}

A small number of endpoints return additional fields (for example, the verification flow returns a verificationLink). These are noted in the tables below.

The msg string is a human-readable description and may be refined over time. Whenever possible, key your error handling on the combination of the HTTP status code and the endpoint, and treat msg as supplementary context.

Consolidated Error Reference

The following tables enumerate the error responses for each payout endpoint.

POST /withdraw/kyc/attested — Register User Via Attested KYC

HTTP StatusmsgMeaning
400SSN is required for this merchantThe merchant requires an SSN and none was provided.
400(address validation message)The supplied address could not be validated. The msg describes the specific field.
401(authentication error)Missing or invalid authentication credentials.
403(authorization error)The caller is not authorized for this merchant.
500Failed to validate addressAn unexpected error occurred while validating the address.

GET /session-key — Get Session Key

HTTP StatusmsgMeaning
401(authentication error)Missing or invalid wallet / merchant authentication.
403(authorization error)The wallet or merchant is not authorized to request a session key.

GET /withdraw/quote — Get Quote

HTTP StatusmsgMeaning
400Cannot determine currency of cardThe currency for the selected payout method could not be resolved.
401User is blockedThe withdrawer has been blocked (for example, for suspected fraud).
404Withdrawer not foundNo withdrawer record exists for the authenticated user.
404Merchant {merchantId} not foundThe merchantId supplied does not correspond to a known merchant.
429(rate limit exceeded)Too many quote requests in a short period. Retry after the rate-limit window.

POST /api/withdraw — Create Withdraw

HTTP StatusmsgMeaning
401User is blockedThe withdrawer has been blocked and cannot withdraw.
402Insufficient FundsThe source of funds does not have enough balance to cover the withdraw.
404Withdrawer not foundNo withdrawer record exists for the authenticated user.
409Withdraw Already PendingA withdraw for this withdrawer is already in progress.
409Idempotency key conflictThe provided idempotency key has already been used.
412(additional details required)Additional details (for example, address or bank account details) are required before withdrawing.
451User Must Complete Additional VerificationThe withdrawer must complete verification first. The response includes a verificationLink.
452Instant withdrawals are not available at this time, please select a slower withdraw speed, or try again laterInstant delivery is temporarily unavailable.

GET /withdraw/history — Get Withdrawer History

HTTP StatusmsgMeaning
401(authentication error)Missing or invalid authentication credentials.
403(authorization error)The caller is not authorized to view this withdrawer’s history.

DELETE /withdraw/account/{token} — Delete Withdrawer Bank Account

HTTP StatusmsgMeaning
401(authentication error)Missing or invalid authentication credentials.
403(authorization error)The caller is not authorized to delete this account.
404Withdrawer not foundNo withdrawer record exists for the authenticated user.

DELETE /withdraw/card/{token} — Delete Withdrawer Card

HTTP StatusmsgMeaning
401(authentication error)Missing or invalid authentication credentials.
403(authorization error)The caller is not authorized to delete this card.
404Withdrawer not foundNo withdrawer record exists for the authenticated user.

Common Payout Error Messages

Several msg values can be returned across multiple payout endpoints. The most frequently encountered ones are explained below.

Card is not eligible for disbursements

The user’s card can’t receive payouts due to restrictions from the card network, issuing bank, or card type. Even some debit cards aren’t eligible unless they meet specific criteria.

  • Visa/Mastercard may support payouts (Visa Direct, Mastercard Send) if enrolled
  • Amex/Discover usually don’t support disbursements
  • Some prepaid cards (especially those not linked to a name or account) don’t support disbursements
  • Cards issued by banks that block incoming push payments due to internal policy

We recommend the user contact their bank to confirm eligibility.

Share token is not eligible for you

This error usually indicates a misconfiguration when generating the KYC share token — the token you’re passing to Coinflow is invalid or cannot be processed. Check the following:

  • Tri-Party Agreement: Ensure the agreement has been signed by all parties and properly configured with Coinflow’s KYC account.
  • Correct Client ID: When generating the share token, make sure you are passing Coinflow’s client ID as the forClientId param.

User is blocked

Typically means the user was flagged for suspected fraud — either on your account or another merchant’s in the Coinflow ecosystem. If it’s the same user across accounts, they may be globally blocked. You can view the reason in the merchant dashboard or by calling the Get Withdrawer endpoint and reviewing withdrawer.availability.reason.

For a deeper explanation of the most common payout failures and how to resolve them, see Common Payout Errors.