Skip to main content
Every VelaFi API response is JSON. A successful call returns HTTP 200 and an envelope with code set to 200, msg set to "SUCCESS", and the result in data:
Some endpoints, including Upgrade Limit (POST /v2/upgrade/limits), return "code": 0 and "msg": "success" on success. Treat HTTP 200 with code 200 or 0 as success.

Error Response Format

A failed call returns a non-200 HTTP status. Authentication, validation, rate-limit, and business errors use HTTP 400. The body has an error code and an English msg. Error codes are negative, except 30012. For most errors, the same code is repeated in the error_code response header. Error bodies have no data field.
integer
The error code. Use this value, or the error_code header, to decide how to handle the error.
string
An English description of the error. It can contain runtime values, so do not match on the exact text.
string
Optional. Extra detail, present only on some errors.
object
Optional. Field-level detail, present only on some errors.
Messages in the tables below show placeholders such as {0}, {1}, or %s. VelaFi usually replaces them with the field name, value, or limit that caused the error, but some responses return the placeholder as-is (for example Parameter {0} is invalid). Rely on code, not on msg.

HTTP Status Codes

Authentication failures and rate-limit rejections do not use 401, 403, or 429. A missing, expired, or invalid token returns HTTP 400 with code -1002 or -1022, and exceeding a rate limit returns HTTP 400 with code -1006. Check code, not only the HTTP status.

Outcome Unknown: Check Before You Retry

The responses below do not tell you whether the request was carried out. If you receive one from a call that creates or changes something, such as creating or confirming an order, the operation may have completed. Before retrying, call List Orders (GET /v2/orders) for the relevant time window and look for your clientId. Retry only if the order is not there.
-1006 is not limited to uncertain outcomes. It is also returned for some invalid-input cases on read-only endpoints (for example an unsupported corridor on GET /v2/base/fiat/payments) and when you exceed a rate limit. On read-only GET calls, check your input and retry. On calls that create or change something, check first as described above.

Authentication and Request Errors

These errors come from token generation, token checks, and request parsing. GET /v2/token/generate also returns -5033 (see KYC/KYB Errors below) when API access is not enabled for your account.

Parameter Errors

Parameter errors indicate that one or more request fields failed basic validation — wrong type, wrong length, wrong format, or a duplicate submission.

Payment Method Errors

Payment method errors occur when a payment method is missing, misconfigured, or incompatible with the requested operation or platform.

Merchant Errors

Merchant errors relate to the lifecycle and configuration of merchant entities — including registration failures, missing records, and account state problems.

Fiat Account and Virtual Account Errors

These errors relate to activating and using a merchant’s fiat accounts and virtual accounts.

Order Errors

Order errors indicate that a requested order operation cannot be completed due to the order’s current state, amount limits, or an expired quotation.

Trading Pair Errors

Trading pair errors arise when the requested symbol, fiat currency, crypto asset, or country combination is unsupported or closed for trading.

Risk Control Errors

Risk control errors indicate that pricing or rate configuration is outside acceptable safety thresholds. Contact your VelaFi account administrator to resolve configuration issues.

KYC/KYB Errors

KYC/KYB errors indicate that a user or merchant has not completed required identity or business verification steps, or that a verification process has reached a terminal state.

Compliance Errors

Compliance errors cover a broad range of policy and configuration restrictions — including unsupported banks or countries, transaction limit breaches, and feature-access restrictions.

Order Failure Codes

These codes describe why an order failed after it was created. When a fiat-to-crypto or crypto-to-fiat order fails, Get Order (GET /v2/order/detail) may report one of them in the order’s failCode field, with the matching text in failReason. Not every failed or cancelled order has a failCode.