> ## 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", or "overnight").

***

### 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.

***

### 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.

***

### 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).
