Skip to content

Error Responses

All errors returned by the API follow a consistent JSON format:

json
{
  "status": "error",
  "error": {
    "code": <integer>,
    "message": <string>,
    "details": <list>
  }
}

details is an empty list for most errors. When a specific field caused the failure, it holds objects of the form {"field": <string>, "error": <string>}.

Error Codes

CodeHTTPMessageCause
1004400Invalid input dataBody failed validation
1005400Invalid channelChannel does not belong to the API key
2001400Invalid JSON payloadBody is not valid JSON
2002400Missing parameterA required query parameter is absent
2006400Bad RequestTransaction is not in a state that allows the action
1001401Missing API keyX-API-Key header absent
1002401Missing signatureX-Signature header absent
1003401Invalid signatureSignature does not match the signed message
1010401Invalid timestamp headerX-Timestamp absent, unparsable, or older than 10 min
2004403Permission deniedIP not on the allow list, or access denied
1006404Not foundTransaction or resource does not exist
1007404Please contact support for further action.No gateway available for this method/currency
1009409Insufficient balanceChannel balance too low for the payout
1000500Internal server errorUnexpected runtime error

400 Bad Request

  • Invalid input → request body fails validation
  • Malformed JSON → body is not valid JSON
  • Missing parameter → required query parameter not provided

Example:

json
{
  "status": "error",
  "error": {
    "code": 2002,
    "message": "Missing parameter",
    "details": []
  }
}

An unsupported payment method type is reported as invalid input, with the offending field named in details:

json
{
  "status": "error",
  "error": {
    "code": 1004,
    "message": "Invalid input data",
    "details": [
      {"field": "payment_method.type", "error": "Unsupported payment method type"}
    ]
  }
}

401 Unauthorized

  • Missing API key
  • Missing signature
  • Invalid signature
  • Invalid timestamp header

Example:

json
{
  "status": "error",
  "error": {
    "code": 1003,
    "message": "Invalid signature",
    "details": []
  }
}

403 Forbidden

  • Permission denied → client does not have rights to access resource, or the request came from an address outside the account's IP allow list

Example:

json
{
  "status": "error",
  "error": {
    "code": 2004,
    "message": "Permission denied",
    "details": []
  }
}

404 Not Found

  • Not found → transaction, reference or resource does not exist
  • Gateway not found → no gateway is available for the requested method

Example:

json
{
  "status": "error",
  "error": {
    "code": 1006,
    "message": "Not found",
    "details": []
  }
}

409 Conflict

  • Insufficient balance → the channel does not hold enough funds for the payout

Example:

json
{
  "status": "error",
  "error": {
    "code": 1009,
    "message": "Insufficient balance",
    "details": []
  }
}

500 Internal Server Error

  • Unexpected runtime error
  • Invalid response from service
json
{
  "status": "error",
  "error": {
    "code": 1000,
    "message": "Internal server error",
    "details": []
  }
}

Declined Transactions

A declined payment or payout is not an API error: the endpoint answers with a success code and the transaction carries status: "failed" together with error_code and error_message.

error_codeerror_message
DECLINED_GENERICThe payment/payout was declined.
PERSONAL_DATA_NOT_PROVIDEDPersonal data was not provided.
CARD_DATA_NOT_PROVIDEDCard data was not provided.
BROWSER_DATA_NOT_PROVIDEDBrowser data was not provided.
DECLINED_3DS_AUTHENTICATION_FAILED3-D Secure authentication failed.
PROVIDER_PROCESSING_FAILEDPayment provider returned an error.
INSUFFICIENT_BALANCEInsufficient balance for payout.
VALIDATION_ERROR