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

# Errors

> Predictable, machine-readable error codes.

Failures return `{ error: { code, message, details? }, meta }`. Branch on the stable `code`,
because the human-readable `message` may change.

| Code | HTTP | Meaning |
| - | - | - |
| `INVALID_REQUEST` | 400 | The body or params failed validation. The `details` field lists the fields. |
| `UNSUPPORTED_TOKEN` | 400 | The token is not resolvable on that chain. |
| `UNSUPPORTED_CHAIN` | 400 | The chain ID isn't one RAVN supports. |
| `NO_LIQUIDITY` | 404 | No venue could quote this pair or amount. |
| `NOT_FOUND` | 404 | The resource doesn't exist for this caller, for example [`PATCH /v1/keys`](/api-reference/keys) `feeBps` on a non-self-serve key. |
| `QUOTE_EXPIRED` | 410 | The `quoteToken` is past expiry. Request a new quote. |
| `QUOTE_INVALID` | 400 | The `quoteToken` is malformed or tampered. |
| `QUOTE_NOT_EXECUTABLE` | 400 | The `quoteToken` decodes fine but is a preview only (`executable: false` on the quote). Request a fresh quote with the missing destination or refund address. |
| `RATE_LIMITED` | 429 | Your tier's rate limit was exceeded (see [Authentication](/authentication)). |
| `UNAUTHORIZED` | 401 | A presented `x-api-key` doesn't match any known key. No key at all is fine, that's the anonymous tier. |
| `INTERNAL` | 500 | An unexpected or venue-side error occurred. |

```json theme={null}
{
  "error": {
    "code": "NO_LIQUIDITY",
    "message": "No liquidity available for this pair/amount",
    "details": {
      "routeType": "EVM_CROSS_CHAIN",
      "eligibleVenues": ["across", "relay", "mayan"],
      "excludedVenues": []
    }
  },
  "meta": { "requestId": "6b50...19e", "version": "2024-01" }
}
```

<Tip>
  **Debugging `NO_LIQUIDITY`:** read `details` before assuming it's a real liquidity gap.
  `eligibleVenues` is every venue that *could* serve this chain pair, computed before your own
  `excludeVenues` is applied; `excludedVenues` echoes back what you passed. If `eligibleVenues` is
  non-empty but you also passed `excludeVenues`, you may have excluded every venue that could have
  served the route yourself. A route through Bitcoin-source THORChain specifically drops out of
  `eligibleVenues` whenever THORChain's `HALTMEMOLESS` flag is set, see
  [Supported Chains & Venues](/supported#venues), while Chainflip, Relay, and NEAR Intents stay
  unaffected for the same pair.
</Tip>

<Tip>
  Always log the `requestId` from `meta`, which is also in the `x-request-id` header. Include it
  when you contact support and we can trace the exact request.
</Tip>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.