Skip to main content
All API errors return a JSON body with an error message and a machine-readable code.
{
  "error": "Entity not found.",
  "code": "not_found"
}

HTTP status codes

StatusDescription
400Bad request. The request body is invalid or missing required fields.
401Unauthorized. The API key is missing or invalid.
403Forbidden. The API key does not have permission for this operation.
404Not found. The requested resource does not exist.
409Conflict. The resource already exists or the idempotency key was already used with different parameters.
422Unprocessable. The request was well-formed but could not be completed (e.g., insufficient balance, Entity not verified).
429Rate limited. Too many requests. Retry after the duration specified in the Retry-After header.
500Internal server error. Something went wrong on our end.

Common error codes

CodeStatusDescription
unauthorized401Missing or invalid API key.
forbidden403API key does not have access to this resource.
not_found404The requested resource was not found.
validation_error400One or more fields in the request body are invalid.
insufficient_balance422The source Account does not have enough funds.
entity_not_verified422The Entity has not completed KYC/KYB. Required for IBANs and wire transfers.
duplicate_resource409A resource with these attributes already exists.
idempotency_conflict409The idempotency key was already used with different request parameters.
rate_limited429Too many requests. Back off and retry.
transfer_failed422The 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 a 429 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.
CodeTypeDescription
1201TerminalUser account is not delegated to the OtimDelegate contract
1202TerminalSignature verification failed for the provided instruction
1203TerminalAction cannot be executed due to contract-level restrictions
1204RetryableAction execution failed on-chain, may succeed with retry
1205TerminalInstruction has already been deactivated and cannot be executed
1206TerminalInstruction has already been deactivated in DeactivateInstructionAction