> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ondo.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Error Codes

> Reference for all error codes returned by the GM Backend API.

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

```json theme={null}
{
  "code": "MARKET_CLOSED",
  "message": "market is closed"
}
```

The market is closed due to weekends, holidays, or scheduled/unscheduled closures from maintenance or exchange outages.

***

### MARKET\_PAUSED

**Status**: 403 Forbidden

```json theme={null}
{
  "code": "MARKET_PAUSED",
  "message": "market is paused"
}
```

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

```json theme={null}
{
  "code": "ASSET_PAUSED",
  "message": "asset trading is paused"
}
```

Trading for a specific asset is paused, possibly due to corporate actions, symbol migration, or market volatility.

***

### ASSET\_LIMITED

**Status**: 200 OK

```json theme={null}
{
  "code": "ASSET_LIMITED",
  "message": "Earnings event in progress"
}
```

Returned as a reason code within asset status responses (not as an error). Indicates the asset has limited trading capacity, typically during earnings events. Trading is still permitted, but quantity may be restricted.

***

### ASSET\_CLOSED\_FOR\_SESSION

**Status**: 403 Forbidden

```json theme={null}
{
  "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", "overnight", or "offhours").

***

### ASSET\_REDEEM\_ONLY

**Status**: 403 Forbidden

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "code": "MISSING_SYMBOL",
  "message": "missing symbol"
}
```

The required `symbol` parameter was not provided.

***

### ASSET\_NOT\_FOUND

**Status**: 404 Not Found

```json theme={null}
{
  "code": "ASSET_NOT_FOUND",
  "message": "asset not found"
}
```

The specified asset does not exist in the system.

***

### INVALID\_SIDE

**Status**: 400 Bad Request

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "code": "MAX_ATTESTATIONS",
  "message": "exceeded the active attestations limit"
}
```

Maximum concurrent attestation requests reached. Wait for some to settle before requesting more.

***

### OFFHOURS\_EXPOSURE\_LIMIT\_REACHED

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "OFFHOURS_EXPOSURE_LIMIT_REACHED",
  "message": "off-hours exposure limit reached"
}
```

The off-hours exposure limit has been reached for the asset during the current off-hours session. Wait for the next session to open, or trade a different asset.

***

### INSUFFICIENT\_LIQUIDITY

**Status**: 400 Bad Request

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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**: 403 Forbidden

```json theme={null}
{
  "code": "INVALID_ADDRESS",
  "message": "user_address is not on the allow list"
}
```

The provided wallet address is not whitelisted for trading.

***

### MISSING\_CHAIN\_ID

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "MISSING_CHAIN_ID",
  "message": "chainId is required"
}
```

The required `chainId` parameter was not provided in the request.

***

### MISSING\_SIDE

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "MISSING_SIDE",
  "message": "side is required"
}
```

The required `side` parameter was not provided in the request.

***

### INVALID\_GM\_CHAIN

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_GM_CHAIN",
  "message": "invalid chain; supported chains: ethereum-1, bsc-56, solana-900"
}
```

The specified chain is not a valid GM chain identifier.

***

### UNSUPPORTED\_GM\_CHAIN

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "UNSUPPORTED_GM_CHAIN",
  "message": "unsupported chain"
}
```

The specified chain is recognized but not currently supported for the requested operation.

This code is also returned when requesting quotes, firm attestations, soft quotes, or limit orders on Solana chains while the underlying market is in an off-hours session. The asset may still be tradable off-hours on other chains, so the rejection is scoped to the chain rather than the market. In that case the message is:

```json theme={null}
{
  "code": "UNSUPPORTED_GM_CHAIN",
  "message": "off-hours trading is not yet supported for Solana chains"
}
```

***

### PAUSED\_GM\_CHAIN

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "PAUSED_GM_CHAIN",
  "message": "chain is paused"
}
```

The specified chain is temporarily paused and not accepting requests.

***

### INVALID\_SORT

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_SORT",
  "message": "invalid sort order; must be 'asc' or 'desc'"
}
```

The `sort` query parameter is invalid. Valid values are `asc` or `desc`.

***

### INVALID\_INTERVAL

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_INTERVAL",
  "message": "invalid interval format: 2hour"
}
```

The `interval` query parameter is not a valid value. Valid intervals are `1min`, `5min`, `15min`, `1hour`, `4hour`, `12hour`, and `1day`.

***

### INVALID\_RANGE

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_RANGE",
  "message": "invalid time range: 2month; valid ranges: 1day, 1month, 3month, 6month, 1year, all"
}
```

The `range` query parameter is not a valid value. Valid ranges are `1day`, `1month`, `3month`, `6month`, `1year`, and `all`.

***

### INVALID\_INTERVAL\_RANGE\_PAIR

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_INTERVAL_RANGE_PAIR",
  "message": "invalid interval/range pair: 1min/1year; valid pairs: 1min/1day, 5min/1day, 15min/1day, 1hour/1month, 4hour/3month, 12hour/6month, 1day/1year, 1day/all"
}
```

The combination of `interval` and `range` parameters is not supported. See the OHLC endpoint documentation for valid pairs.

***

### MISSING\_TICKER\_ID

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "MISSING_TICKER_ID",
  "message": "missing ticker ID"
}
```

The required `tickerId` parameter was not provided.

***

### INVALID\_TICKER\_ID

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_TICKER_ID",
  "message": "invalid ticker ID"
}
```

The provided `tickerId` is not a valid ticker identifier. Ticker IDs are formatted as `<base>_<target>` (e.g., `AAPLon_USDon`).

***

### RESOURCE\_NOT\_FOUND

**Status**: 404 Not Found

```json theme={null}
{
  "code": "RESOURCE_NOT_FOUND",
  "message": "resource not found"
}
```

The requested resource does not exist.

***

### MISSING\_USER\_ADDRESS

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "MISSING_USER_ADDRESS",
  "message": "missing user address"
}
```

The `user_address` field is required for firm attestation requests on Solana chains but was not provided.

***

### INVALID\_USER\_ADDRESS

**Status**: 400 Bad Request

```json theme={null}
{
  "code": "INVALID_USER_ADDRESS",
  "message": "invalid user address"
}
```

The `user_address` provided for a firm attestation request on a Solana chain is not a valid Solana public key.

***

### GAS\_FEE\_EXCEEDS\_ORDER\_VALUE

**Status**: 400 Bad Request

```json theme={null}
{
  "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

```json theme={null}
{
  "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 us at [support@ondo.finance](mailto:support@ondo.finance).
