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

# Errors

> Every error the relay returns, by status, and what to do about it.

Every error is a JSON body with an `error` string. Some carry a `detail`, a `chainId`, a `status`, or
`issues` (the schema validation failures for `invalid_request`).

## 400

| `error`                                                             | Meaning                                                                                |
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `invalid_request`                                                   | The body failed validation; `issues` lists each field                                  |
| `wrong_chain`                                                       | No such chain on this relay; `chains` lists the ones served                            |
| `same_token`                                                        | Sell and buy token are the same                                                        |
| `unsupported_token`                                                 | The token is not listed on that chain                                                  |
| `unsupported_pair`                                                  | Solana: the two mints are not a configured corridor                                    |
| `zero_amount`                                                       | `sellAmount` is zero                                                                   |
| `invalid_steering`                                                  | More than 10 wallets, or a value that is not an address                                |
| `bad_signature`                                                     | The signature does not recover to the taker (or maker)                                 |
| `bad_transaction`                                                   | Solana: the message differs from the quoted one or is unparseable                      |
| `taker_not_ready`                                                   | The taker's balance or approval cannot cover the swap; `reason` and `detail` say which |
| `recipient_unsupported`                                             | Solana: the recipient is not the taker                                                 |
| `taker_unsupported`                                                 | Solana: the taker is the keeper, the treasury or the program                           |
| `idempotency_key_too_long`                                          | Over 128 characters                                                                    |
| `limit_orders_unsupported`                                          | Limit orders on a Solana chain                                                         |
| `invalid_address`, `taker_required`                                 | A malformed or missing address on a query route                                        |
| `below_minimum`, `bad_expiry`, `limit_below_fees`, `terms_mismatch` | A limit order's terms are not fillable; `detail` explains                              |

## 401

`taker_proof_required`, `taker_proof_expired`, `taker_proof_invalid`: see [Taker proof](/integrators/taker-proof).
On `POST /v1/resolvers/register`, `bad_signature`.

## 404

`not_found`, `quote_not_found`, `limit_orders_disabled`.

## 409

| `error`               | Meaning                                                                   |
| --------------------- | ------------------------------------------------------------------------- |
| `quote_not_open`      | The quote was already executed, expired or cancelled; `status` says which |
| `quote_expired`       | The 20-second window closed                                               |
| `nonce_used`          | A limit order's Permit2 nonce was already spent                           |
| `wrong_chain`         | The quote or order is for a chain this relay no longer serves             |
| `filling`, `not_open` | A limit order cannot be cancelled in its current state                    |

## 429

`rate_limited` (per-IP budget), `too_many_outstanding_rfqs` (more than 4 in flight for this taker),
`too_many_open` (more than 20 open limit orders).

## 503

| `error`             | Meaning                                                                                          |
| ------------------- | ------------------------------------------------------------------------------------------------ |
| `broadcast_failed`  | The network did not accept the transaction, so nothing moved; sign again while the quote is open |
| `not_leader`        | This replica is not the keeper leader; retry after the `retry-after` header (2 seconds)          |
| `chain_unavailable` | The RPC did not answer a limits query                                                            |

## `no_quote` reasons

A `200` with `status: "no_quote"` is not an error. Its `reason` is one of:

| Reason                  | Meaning                                                                     |
| ----------------------- | --------------------------------------------------------------------------- |
| `below_minimum`         | Under the corridor's minimum; `minimum` is included                         |
| `insufficient_balance`  | The taker cannot cover the swap; `balance` and `maxSellAmount` are included |
| `no_resolvers`          | No resolver is online for this corridor                                     |
| `steering_excluded_all` | The restricted list left nobody                                             |
| `no_replies`            | Every resolver was silent inside the window                                 |
| `all_declined`          | Every resolver declined; `declines` lists each with its reason              |
| `no_valid_offers`       | Every offer failed validation; `rejected` lists each                        |
| `paused`                | Settlement is paused network-wide                                           |
