error message and a machine-readable code.
HTTP status codes
| Status | Description |
|---|---|
400 | Bad request. The request body is invalid or missing required fields. |
401 | Unauthorized. The API key is missing or invalid. |
403 | Forbidden. The API key does not have permission for this operation. |
404 | Not found. The requested resource does not exist. |
409 | Conflict. The resource already exists or the idempotency key was already used with different parameters. |
422 | Unprocessable. The request was well-formed but could not be completed (e.g., insufficient balance, Entity not verified). |
429 | Rate limited. Too many requests. Retry after the duration specified in the Retry-After header. |
500 | Internal server error. Something went wrong on our end. |
Common error codes
| Code | Status | Description |
|---|---|---|
unauthorized | 401 | Missing or invalid API key. |
forbidden | 403 | API key does not have access to this resource. |
not_found | 404 | The requested resource was not found. |
validation_error | 400 | One or more fields in the request body are invalid. |
insufficient_balance | 422 | The source Account does not have enough funds. |
entity_not_verified | 422 | The Entity has not completed KYC/KYB. Required for IBANs and wire transfers. |
duplicate_resource | 409 | A resource with these attributes already exists. |
idempotency_conflict | 409 | The idempotency key was already used with different request parameters. |
rate_limited | 429 | Too many requests. Back off and retry. |
transfer_failed | 422 | The transfer could not be completed. Check the transfer details for more information. |
Rate limits
The API allows up to 100 requests per second per API key. If you exceed this limit, you will receive a429 response with a Retry-After header indicating how many seconds to wait before retrying.
Protocol error codes
The following error codes apply to on-chain protocol operations. These are returned when an Instruction execution fails at the contract level.- Contract-Level
- Transfer
- Transfer ERC20
- Refuel
- Refuel ERC20
- UniswapV3 Exact Input
- Deactivate Instruction
- Sweep CCTP
- Transfer CCTP
- Sweep
- Sweep ERC20
- Sweep UniswapV3
| Code | Type | Description |
|---|---|---|
| 1201 | Terminal | User account is not delegated to the OtimDelegate contract |
| 1202 | Terminal | Signature verification failed for the provided instruction |
| 1203 | Terminal | Action cannot be executed due to contract-level restrictions |
| 1204 | Retryable | Action execution failed on-chain, may succeed with retry |
| 1205 | Terminal | Instruction has already been deactivated and cannot be executed |
| 1206 | Terminal | Instruction has already been deactivated in DeactivateInstructionAction |