Skip to main content
CryptoProcessing uses conventional HTTP response codes to indicate the success or failure of an API request: 2xx for success and 4xx for errors. The sections below cover the 4xx codes this API returns.

400 Bad Request

Request body is invalid JSON

This error can occur for the following reasons:
  • Malformed or invalid JSON. The request body could not be parsed. Ensure it is valid JSON.
  • Missing Content-Type header. The Content-Type header must be set to application/json.

Other endpoint-specific 400 errors

Beyond malformed JSON, several endpoints return 400 for request-level validation failures — missing required fields, invalid field values, or business-rule violations specific to that endpoint (e.g. duplicate foreign_id, unsupported currency, amount below the allowed minimum). These use the same {"error": ..., "code": ...} shape shown above, with endpoint-specific messages.
  • The visible field must be true or false.
Endpoint reference: List supported currencies
  • The selected currency from is invalid.
  • The selected currency to is invalid.
  • The currency from must be a string.
  • The currency to must be a string.
Endpoint reference: Get available currency pairs and exchange rates
  • The currency field is required.
  • The currency must be a string.
  • The foreign id field is required.
  • The foreign id may not be greater than 255 characters.
  • Invalid currency
  • Currency is not allowed without conversion — for this currency, only deposit addresses with automatic conversion are supported; specify convert_to.
  • The end user reference field is required.
  • The end user reference must not contain email.
  • The sender type field is required.
  • The selected sender type is invalid.
  • The sender data field is required.
  • The sender data must be an array.
  • The sender data.first name field is required.
  • The sender data.first name may not be greater than 255 characters.
  • The sender data.last name field is required.
  • The sender data.last name may not be greater than 255 characters.
  • The sender data.date of birth field is required.
  • The sender data.date of birth does not match the format Y-m-d.
  • The sender data.legal name field is required.
  • The sender data.legal name may not be greater than 255 characters.
  • The sender data.country of registration field is required.
  • The selected sender data.country of registration is invalid.
  • Address cannot be issued for that end_user_reference
Endpoint reference: Generate a user deposit address
  • The currency field is required.
  • Invalid currency
  • The amount must be a number.
  • The amount must not have more than X decimal places.
  • The amount to must be a number.
  • The amount to must not have more than X decimal places.
  • The amount field is required when the amount to field is not presented.
  • The amount to field can not be used when the amount field is presented.
  • The amount field must be greater than 0.
  • The amount to field is required when the amount field is not presented.
  • The amount to field must be greater than 0.
  • The convert to field is required when amount to is present.
  • The foreign id field is required.
  • The foreign id has already been taken.
  • The end user reference must not contain an email address.
  • The selected sender type is invalid.
  • The selected receiver type is invalid.
  • The receiver data field is required.
  • The receiver data.legal name field is required.
  • The receiver data.country of registration field is required.
  • Invalid USDC address
  • The amount must be 5.00000000 USDC.
  • The requested amount exceeds the available balance.
  • Destination tag/memo for currencies that require it.
  • Unable to exchange the requested amount at the moment. Specify a smaller amount or try again later.
Endpoint reference: Withdraw crypto
  • Instant withdrawals are disabled for this merchant.
  • Instant withdrawals are not supported for the specified sender_currency.
  • The foreign id has already been taken.
  • The sender_currency field is required.
  • Invalid USDC address
  • The amount must be 5.00000000 USDC.
  • The requested amount exceeds the available balance.
  • The address field is required.
  • The sender_amount must be greater than 0.
Endpoint reference: Withdraw crypto instantly
  • Instant withdrawals are disabled for this merchant.
  • Instant withdrawals are not supported for the specified sender_currency.
  • The foreign id has already been taken.
  • The sender_currency field is required.
  • Invalid USDC address
  • The amount must be 5.00000000 USDC.
  • The requested amount exceeds the available balance.
  • Unable to exchange the requested amount at the moment. Specify a smaller amount or try again later.
  • The address field is required.
  • The sender_amount must be greater than 0.
Endpoint reference: Withdraw crypto instantly with conversion
  • The sender currency field is required.
  • The receiver currency field is required.
  • The receiver amount field is required when the sender amount field is not presented.
  • The receiver currency and sender currency must be different.
  • The selected sender currency is invalid.
  • The selected receiver currency is invalid.
  • Invalid amount format
  • The sender amount must be greater than 0.
  • The receiver amount must be greater than 0.
  • The sender_amount must be at least 2.00000000 ABC
  • The sender_amount may not be greater than 7.00000000 ABC
  • Exchange is unavailable for given currencies — you may receive this error if one of the currencies in this request isn’t enabled in your merchant account. Enable it in your portal.
  • Unable to exchange the requested amount at the moment. Specify a smaller amount or try again later.
Endpoint reference: Get a fixed exchange quote
  • Fix time is up. Exchange price is changed.
  • Insufficient balance. Available: 50.00000000 USDC
  • Currency not supported
  • Exchange is unavailable for given currencies — you may receive this error if one of the currencies in this request isn’t enabled in your merchant account. Enable it in your portal.
  • The amount must be at least 50.00000000 USDC
  • The foreign_id field is required
Endpoint reference: Exchange at a fixed rate
  • Exchange rate not available at this time
  • The requested amount exceeds the available balance.
  • Currency not supported
  • Exchange is unavailable for given currencies — you may receive this error if one of the currencies in this request isn’t enabled in your merchant account. Enable it in your portal.
  • The amount must be 5.00000000 USDC
  • The foreign_id field is required
Endpoint reference: Exchange at market rate
  • The foreign id has already been taken.
  • The selected currency is invalid.
  • The amount must be a number.
  • The amount must be 5.00000000 USDC.
  • The email user must be a valid email address.
  • The timer field is required.
  • The title field is required.
  • The foreign id field is required.
  • The currency field is required.
  • The amount field is required.
  • The url success field is required.
  • The url failed field is required.
  • The email user field is required.
  • The selected type is invalid.
  • Required features [invoices_enabled] not enabled.
Endpoint reference: Create an invoice
  • Invoice not found.
  • Invoice cannot be failed in its current state. (invalid_invoice_state)
  • Required features [invoices_enabled] not enabled.
Endpoint reference: Cancel an invoice
  • The id field is required when none of foreign id / txid are present.
  • The foreign id field is required when none of id / txid are present.
  • The txid field is required when none of id / foreign id are present.
  • The id must be an integer.
Endpoint reference: Get transaction details
  • Payment request with this foreign_id already exists.
  • user_fee_percent must be 0 or 100.
Endpoint reference: Create a payment request

403 Forbidden

Signature header does not match the request body

The value in X-Processing-Signature did not match the request body. See Authentication for how to generate the signature correctly. This can happen for several reasons:
  • Signature not converted to string. The signature is generated from a data array without first converting it to a string. Ensure the signature value is sent as a string.
  • Wrong hashing algorithm. The signature must be generated using HMAC-SHA-512 — a signature generated with SHA-256, SHA-1, or another digest will not match, even if everything else about the request is correct.
  • Body modified after signing. The signed body must be identical to the body that is sent — no reformatting, whitespace changes, or field reordering.
  • Extra characters or spaces. A code error introduces unexpected characters or spaces. Review your implementation and verify no extra characters are present.
  • Signature built from the full data array. The signature is created from the entire data array — including the public key and headers — instead of the secret key only. Generate the signature exclusively from the secret key.
  • Public key in wrong parameter (PHP). In some languages such as PHP, the public key may be mistakenly included in paramsArray instead of the request body. Pass the public key in the correct location.
  • Wrong secret key or environment. Sandbox and production use separate key pairs. Make sure you are using the correct set for the environment you are targeting.
  • Completely empty request body in Postman. Your Postman collection’s pre-request script may be handling empty bodies incorrectly. Download our Postman collection, or send an empty JSON object ({}) instead.

Signature header is missing

The request does not include the required X-Processing-Signature header, or the header is present but empty — an empty value is treated the same as a missing header. Add it with an HMAC-SHA512 signature of the request body.

API key header does not match your API key

The value in X-Processing-Key did not match any known API key. This can happen for several reasons:
  • Non-whitelisted IP. If you have configured an IP whitelist in the portal, requests from any unlisted IP will be rejected. Add the IP to the whitelist, use an already-whitelisted IP, or remove the whitelist entirely.
  • Wrong environment. Production keys will not work against the sandbox endpoint, and vice versa. Check that the base URL matches the environment your keys belong to.
  • Incorrect or malformed public key. Verify you are using the correct key. It contains both upper and lower case characters and must be sent exactly as provided — avoid any case transformation in your code.
  • Secret key used instead of public key. The X-Processing-Key header must contain your public key only. The secret key is used exclusively to generate and verify signatures. Refer to Get your API key for details.

API key header is missing

This error can occur for the following reasons:
  • Missing X-Processing-Key header. Add the X-Processing-Key header with your public API key. A header that’s present but empty is treated the same as a missing header.
  • Invalid request URL. Verify the endpoint URL is correct.

Other endpoint-specific 403 errors

Beyond the header problems above, a few endpoints return 403 for other authorization-related reasons — for example, a feature being disabled for your account.
  • Withdrawal functionality is currently unavailable (withdrawal_functionality_unavailable) — see Enable withdrawals again
Endpoint reference: Withdraw crypto
  • Withdrawal functionality is currently unavailable (withdrawal_functionality_unavailable) — see Enable withdrawals again
Endpoint reference: Withdraw crypto instantly
  • Withdrawal functionality is currently unavailable (withdrawal_functionality_unavailable) — see Enable withdrawals again
Endpoint reference: Withdraw crypto instantly with conversion
  • Merchant is disabled.
Endpoint reference: Create a payment request

404 Not Found

404 is returned when a request references something that doesn’t exist — a transaction that can’t be found, or a currency that isn’t recognized.

Unsupported HTTP method or unrecognized route

A request to a real endpoint path using an HTTP method it doesn’t support (e.g. GET on an endpoint that only accepts POST), or to a path that doesn’t correspond to any endpoint at all, returns this generic 404.

Other endpoint-specific 404 errors

Beyond the router-level case above, a few endpoints return 404 when a request references something that doesn’t exist. These use the same {"error": ..., "code": ...} shape as other endpoint-specific errors, with endpoint-specific messages.
  • No transaction found.
Endpoint reference: Get transaction details
  • The currency.iso is incorrect.
  • payment_currency.iso is incorrect.
Endpoint reference: Create a payment request

405 Method Not Allowed

Unlike the other codes on this page, 405 isn’t returned by CryptoProcessing’s API at all — a request only gets this when it never reaches the API in the first place, and the response is a plain HTML page instead of JSON. This happens when the URL is missing /api (e.g. https://app.cryptoprocessing.com/v2/... instead of https://app.cryptoprocessing.com/api/v2/...) or otherwise doesn’t match the base URL in Introduction — the request lands on a different service at the same host instead of this API.

422 Unprocessable Entity

422 covers requests that are well-formed and pass basic validation but fail during processing — an internal error while handling the request, a blockchain/infrastructure issue while issuing an address, or (for payment requests) a broader set of business-rule and field-validation checks.
  • Internal error (internal_error)
  • Something went wrong. Please try later. (internal_error)
  • Something went wrong. (internal_error)
Endpoint reference: Get available currency pairs and exchange rates
  • Something went wrong, please try again shortly (blockchain_error)
Endpoint reference: Generate a user deposit address
  • Internal error (internal_error)
  • Something went wrong. Please try later. (internal_error)
  • Something went wrong. (internal_error)
Endpoint reference: Withdraw crypto
  • Internal error (internal_error)
  • Something went wrong. Please try later. (internal_error)
  • Something went wrong. (internal_error)
Endpoint reference: Get a fixed exchange quote
  • The iso is a mandatory field.
  • The currency.iso is disabled.
  • The currency.network_name field is mandatory for crypto currencies.
  • The combination of currency and network is not supported.
  • The amount field is mandatory.
  • The minimum amount is <amount> EUR.
  • The maximum amount is <amount> EUR.
  • The amount for <currency> cannot have more than <decimal-places> decimal places.
  • It is obligatory - to fill in life_time_date_time or life_time_duration.
  • Only one of fields life_time_date_time and life_time_duration should be field.
  • The lifespan must be longer than or equal to <span> .
  • The lifespan must be shorter than or equal <span> .
  • The email address is incorrect.
  • payment_currency must not be empty if provided.
  • payment_currency.iso must be a cryptocurrency.
  • payment_currency.iso must not be empty if provided.
  • payment_currency.iso is disabled.
  • Exchange rate is not available between <currency.iso> and <payment_currency.iso>.
  • payment_currency.network_name must not be empty if provided.
  • payment_currency.network_name cannot be specified without payment_currency.iso.
  • The description must be 255 characters or less.
  • The description must not be empty if provided.
  • Foreign ID must be 255 characters or less.
  • The foreign_id must not be empty if provided.
  • The url_store is invalid.
  • The url_store must be 255 characters or less.
  • The url_success is invalid.
  • The url_success must be 255 characters or less.
  • The url_failed is invalid.
  • The url_failed must be 255 characters or less.
  • The end_user_reference must not be empty if provided.
  • The end_user_reference must be 255 characters or less.
  • The rate_mode must be either standard or fixed.
  • The sender_type field must be provided when sender_data is present.
  • The sender_type must be either ‘natural’ or ‘legal’.
  • The sender_data object must be provided when sender_type is present.
  • The sender_data must be a valid object.
  • The first_name must be provided for sender_type = natural.
  • The first_name must be 255 characters or less.
  • The last_name must be provided for sender_type = natural.
  • The last_name must be 255 characters or less.
  • The date_of_birth must be in YYYY-MM-DD format.
  • The legal_name must be provided for sender_type = legal.
  • The legal_name must be 255 characters or less.
  • The country_of_registration must be provided for sender_type = legal.
  • The country_of_registration must contain exactly 3 characters.
  • The country_of_registration must be a valid ISO Alpha-3 code.
Endpoint reference: Create a payment request
Last modified on September 17, 2026