Errors & limits
The error response shape, the codes you may see, and how to handle them.
Error format
json
{
"error": {
"code": "INVALID_ACTION",
"message": "Price impact di atas 5%; aktifkan Expert Mode, kurangi nominal, atau gunakan Manual.",
"retryable": false,
"details": {}
},
"requestId": "req_3c4e052c-0518-4079-946a-9b32894e3c25"
}Include the requestId when reporting a problem. retryable: true means it is safe to retry after a pause.
Error codes
| Code | HTTP | Meaning |
|---|---|---|
BAD_REQUEST | 400 | Invalid parameters; see details.issues. |
UNAUTHENTICATED | 401 | Missing or expired key or session. |
FORBIDDEN | 403 | Missing scope, not the owner, or CSRF protection. |
NOT_FOUND | 404 | The resource does not exist. |
CONFLICT | 409 | Version guard mismatch, quote already used, or state mismatch. |
INVALID_ACTION | 422 | Action rejected by simulation/rules (slippage, price impact, balance, amount too small). |
CAPABILITY_UNAVAILABLE | 422 | The feature is not available on this network or was stopped by the operator. |
RATE_LIMITED | 429 | Rate limit/quota; wait for Retry-After. |
DEPENDENCY_UNAVAILABLE | 503 | RPC or data provider problem; try again. |
INTERNAL | 500 | Server error; report it with the requestId. |
Recommended practices
- Use the same
Idempotency-Keywhen retrying the same mutation, so you never create duplicate quotes/keys. - Only retry
retryableerrors with exponential backoff; never auto-repeat on-chain transactions. - Check
meta.partialanddataStatusbefore using data; networks with problems are reported, not filled with zeros.