Skip to main content
Ondo’s Global Market APIs return structured error messages with three key fields:
  • code: Machine-readable identifier (e.g., MARKET_CLOSED)
  • message: Human-readable description
  • documentation: URL linking to relevant documentation

Error Codes

MARKET_CLOSED

Status: 403 Forbidden
{
  "code": "MARKET_CLOSED",
  "message": "Weekend or Holiday"
}
The market is closed due to weekends, holidays, or scheduled/unscheduled closures from maintenance or exchange outages.

MARKET_PAUSED

Status: 403 Forbidden
{
  "code": "MARKET_PAUSED",
  "message": "Market paused for unscheduled outage"
}
Trading is temporarily paused, either during scheduled session transitions (09:29-09:31 ET) or unscheduled halts (circuit breaker triggers).

ASSET_PAUSED

Status: 403 Forbidden
{
  "code": "ASSET_PAUSED",
  "message": "Trading for this asset is temporarily paused"
}
Trading for a specific asset is paused, possibly due to corporate actions, symbol migration, or market volatility.

ASSET_LIMITED

Status: 200 OK
{
  "code": "ASSET_LIMITED",
  "message": "Trade quantity for this asset is temporarily limited"
}
Trading quantity for an asset is limited, potentially due to earnings events or market volatility.

ASSET_CLOSED_FOR_SESSION

Status: 403 Forbidden
{
  "code": "ASSET_CLOSED_FOR_SESSION",
  "message": "asset is not available for trading during the current session"
}
The asset isn’t tradable in the current session (“premarket”, “regular”, “postmarket”, or “overnight”).

ASSET_REDEEM_ONLY

Status: 403 Forbidden
{
  "code": "ASSET_REDEEM_ONLY",
  "message": "asset is redeem-only"
}
The asset can only be redeemed (sold), not minted (bought).

READ_ONLY_API_KEY

Status: 403 Forbidden
{
  "code": "READ_ONLY_API_KEY",
  "message": "read-only API key cannot perform write operations"
}
The API key used is read-only and cannot create attestations or perform other write operations.

MISSING_API_KEY

Status: 401 Unauthorized
{
  "code": "MISSING_API_KEY",
  "message": "missing API key"
}
No API key was provided in the x-api-key request header.

INVALID_API_KEY

Status: 401 Unauthorized
{
  "code": "INVALID_API_KEY",
  "message": "invalid API key"
}
The provided API key is not valid or has been revoked.

INVALID_SYMBOL

Status: 400 Bad Request
{
  "code": "INVALID_SYMBOL",
  "message": "invalid symbol; must be at least 3 characters long and end with 'on'"
}
The symbol is invalid, unrecognized, or improperly formatted. Use valid namespaced symbols (e.g., TSLAon, AAPLon).

MISSING_SYMBOL

Status: 400 Bad Request
{
  "code": "MISSING_SYMBOL",
  "message": "missing symbol"
}
The required symbol parameter was not provided.

ASSET_NOT_FOUND

Status: 404 Not Found
{
  "code": "ASSET_NOT_FOUND",
  "message": "asset not found"
}
The specified asset does not exist in the system.

INVALID_SIDE

Status: 400 Bad Request
{
  "code": "INVALID_SIDE",
  "message": "invalid side; side must be either 'buy' or 'sell'"
}
The side parameter must be either buy or sell.

INVALID_DURATION

Status: 400 Bad Request
{
  "code": "INVALID_DURATION",
  "message": "invalid duration; duration must be either 'long' or 'short'"
}
The duration parameter must be either long or short.

MAX_LIMIT_REACHED

Status: 400 Bad Request
{
  "code": "MAX_LIMIT_REACHED",
  "message": "exceeded the active notional value limit"
}
The order exceeds user-based notional caps. Limits reset when attestations expire.

SESSION_LIMIT_REACHED

Status: 400 Bad Request
{
  "code": "SESSION_LIMIT_REACHED",
  "message": "exceeded the session's notional value limit"
}
The order exceeds session-based notional caps, which reset after each session transition.

MAX_ATTESTATIONS

Status: 400 Bad Request
{
  "code": "MAX_ATTESTATIONS",
  "message": "exceeded the active attestations limit"
}
Maximum concurrent attestation requests reached. Wait for some to settle before requesting more.

INSUFFICIENT_LIQUIDITY

Status: 400 Bad Request
{
  "code": "INSUFFICIENT_LIQUIDITY",
  "message": "insufficient liquidity for the requested operation"
}
An attestation cannot be created due to insufficient funds, typically during sparse overnight trading.

INVALID_NOTIONAL_VALUE

Status: 400 Bad Request
{
  "code": "INVALID_NOTIONAL_VALUE",
  "message": "invalid notional value; value must be a string representing a positive decimal value"
}
The amount is below minimum requirements, above user limits, or malformed/non-numeric.

INVALID_TOKEN_AMOUNT

Status: 400 Bad Request
{
  "code": "INVALID_TOKEN_AMOUNT",
  "message": "invalid token amount; amount must be a string representing a positive decimal value"
}
The token amount is malformed or not a positive decimal value.

MISSING_TOKEN_OR_NOTIONAL

Status: 400 Bad Request
{
  "code": "MISSING_TOKEN_OR_NOTIONAL",
  "message": "either token amount or notional value must be provided"
}
The request must include either tokenAmount or notionalValue, but neither was provided.

INVALID_ADDRESS

Status: 400 Bad Request
{
  "code": "INVALID_ADDRESS",
  "message": "user_address is not on the allow list"
}
The provided wallet address is not whitelisted for trading.

INVALID_GM_CHAIN

Status: 400 Bad Request
{
  "code": "INVALID_GM_CHAIN",
  "message": "invalid chain; supported chains: [ethereum-1, bsc-56, ...]"
}
The specified chain is not a valid GM chain identifier.

GAS_FEE_EXCEEDS_ORDER_VALUE

Status: 400 Bad Request
{
  "code": "GAS_FEE_EXCEEDS_ORDER_VALUE",
  "message": "gas fee exceeds order value: increase your order size or try again later"
}
The estimated gas fee for executing the order on-chain exceeds the total value of the order. Increase your order size or try again when gas fees are lower.

INTERNAL_ERROR

Status: 500 Internal Server Error
{
  "code": "INTERNAL_ERROR",
  "message": "internal error"
}
An unexpected server error occurred. If this persists, contact your account manager.
This list is non-exhaustive. For unresolved issues, consult request documentation or contact your account manager.