Error Reference
All errors return JSON with the following structure:
{
"error_code": "RATE_EXPIRED",
"message": "Rate expired or invalid. Request a new quote.",
"request_id": "req-uuid-..."
}
Use error_code for programmatic handling. message is human-readable and may change. request_id is useful when contacting support.
Error codes
| Code | HTTP | Description |
|---|---|---|
INVALID_ACCOUNT_ID |
400 | The account_id is not a valid UUID |
ACCOUNT_NOT_FOUND |
404 | Account not found or does not belong to your tenant |
INVALID_PROGRAM |
400 | program_id is invalid or does not belong to your partner account |
RATE_ID_REQUIRED |
400 | auto_confirm_rate is false but no rate_id was supplied |
RATE_EXPIRED |
400 | Quote has expired (10 min TTL) or was already used |
RATE_ACCOUNT_MISMATCH |
403 | Quote was issued for a different account |
RATE_TENANT_MISMATCH |
403 | Quote was issued for a different tenant |
SPREAD_EXCEEDED |
400 | Live spread exceeds the max_spread_bps you supplied |
USER_NOT_FOUND |
404 | User profile not found (contact support if this occurs) |
INSUFFICIENT_BALANCE |
422 | Withdrawal amount exceeds the account's available balance |
CONCURRENT_WITHDRAWAL |
409 | A withdrawal is already in progress for this account |
WALLET_NOT_PROVISIONED |
422 | Account wallet has not finished provisioning |
ACCOUNT_NOT_READY |
422 | Account is not yet active |
AMOUNT_BELOW_MINIMUM |
400 | Deposit or withdrawal amount is below the minimum |
AMOUNT_ABOVE_MAXIMUM |
400 | Deposit amount exceeds the maximum |
VELOCITY_LIMIT_EXCEEDED |
429 | Rate limit exceeded for this account |
USER_NOT_ELIGIBLE |
422 | User is not eligible for this operation |
PROVIDER_CONFIGURATION_ERROR |
503 | Internal provider misconfiguration — contact support |
TRANSACTION_FAILED |
400 | Generic transaction failure — see message for details |
TEST_KEY_NOT_ALLOWED |
403 | Sandbox key (rk_test_) used against the production API — use https://staging.api.regini.finance/partner/v1 instead |