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

# Becoming an RFQ Quoter

> What Joyride provisions for an RFQ quoter, the readiness checklist, and the obligations of a quoter

## What onboarding produces

Quoting RFQs is a provisioned role; no API call enables it.

| Provisioned                               | Observable outcome                                                                        |
| ----------------------------------------- | ----------------------------------------------------------------------------------------- |
| An account                                | `public/auth` succeeds for your wallet and returns an `account_id`                        |
| The RFQ quoter role                       | `roles` in the `public/auth` response contains `rfq_quoter`                               |
| An on-chain RFQ subaccount, reconciled    | `GET /api/query/vault-subaccount` returns 1 row for your account                          |
| Strategy quoting enabled for your account | `rfq.maker.poll` returns a page without `RFQ_NOT_READY`, and `open` events carry `legs[]` |

| Required from the maker                      | Used for                                         |
| -------------------------------------------- | ------------------------------------------------ |
| The ed25519 public key of the signing wallet | Account binding and quote signature verification |
| A contact address                            | Provisioning confirmation and incident traffic   |

The wallet key is the credential; there are no API keys. The quoter role is bound to that wallet, so binding a new key goes through Joyride.

## Readiness checklist

Run these four checks in order on one authenticated WebSocket session. Each depends on the one before it. Request and response frames are on [Connectivity for Bots](/market-makers/connectivity) and [Quoting RFQs](/market-makers/rfq-quoting).

1. **Role.** `public/auth` returns `roles` containing `rfq_quoter`. An empty list means the account exists without the role, and every `rfq.maker.*` method returns `RFQ_WRONG_ROLE`.
2. **Subscription.** `rfq.maker.subscribe` returns `subscribed: true`.
3. **Subaccount.** `GET /api/query/vault-subaccount`, with the session token as bearer, returns one row for the account.
4. **Readiness.** `rfq.maker.poll` returns a page instead of `RFQ_NOT_READY`.

The checklist passes when step 4 returns a page. A session that has not passed must not quote.

## Reading RFQ\_NOT\_READY

`RFQ_NOT_READY` is one error code with five causes, told apart by the `message` field. All five are `retryable: true`, but only two clear on their own.

| Cause                                                          | Symptom                                                                                                                                                                    | Resolved by                                                                                                                                     |
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| No reconciled subaccount                                       | `authenticated account has no verified on-chain RFQ subaccount` on `rfq.maker.poll` or `rfq.maker.respond`; `GET /api/query/vault-subaccount` returns an empty `rows` list | Joyride. Reconciliation is part of provisioning; if the row has not appeared, email [support@joyride.exchange](mailto:support@joyride.exchange) |
| Chain service still warming                                    | `RFQ chain-service state is not warm` on `rfq.maker.poll` or `rfq.maker.respond`, typically for a few seconds after a gateway restart                                      | Nobody. Retry with backoff; the warm-up completes on its own. Escalate if it persists past 60 seconds                                           |
| No ready deployment epoch                                      | `RFQ deployment snapshot is not ready` or `RFQ deployment is not ready` on `rfq.maker.poll` or `rfq.maker.respond`, and `open` events stop arriving                        | Joyride. The deployment identity is ours to publish; retry with backoff and escalate if it persists past 60 seconds                             |
| Stale mark, IV, or spot inputs                                 | `mark/IV/spot for this instrument or the account's positions are not fresh` on `rfq.maker.respond` only; `rfq.maker.poll` and `rfq.maker.decline` still succeed            | Nobody. Retry the respond inside the request window; if it does not clear, let the request time out or decline with `stale_data`                |
| Your maker subaccount not yet registered with the fill relayer | `maker subaccount is not resident in the fill lookup table` on `rfq.maker.respond` only; subscribe and poll succeed and `open` events arrive                               | Joyride. Registration is part of provisioning; report it when steps 1 through 4 pass and every respond fails this way                           |

`retryable: true` means the request was well formed and may succeed later. For the three Joyride-owned causes, a retry alone will not clear it. Email [support@joyride.exchange](mailto:support@joyride.exchange) if one of those persists.

## Obligations

* A delivered quote is firm until its `expires_at`, with no cancel and no replace. Choose a TTL that hedging can honor, since the quote stands even if prices move.
* Never call the vault's `cancel_nonce` for a nonce once its RFQ is `accepted`.
* Reconcile from durable history: `GET /api/query/rfq-fills?role=maker` is the record of fills, and open requests are purged at settlement.

## Capital

Collateral is agreed per maker during onboarding. The on-chain subaccount holds the USDC that backs fills. The amount, the deposit path, and any staged increase are not published. Devnet uses a fixed cap described on [Devnet Sandbox](/market-makers/sandbox).

## Contact

Provisioning, role changes, wallet rotation, and every Joyride-owned cause in the table above go through [support@joyride.exchange](mailto:support@joyride.exchange). Accounts that are not yet provisioned start from [Market Making on Joyride](/market-makers/overview).

Next: [Quoting RFQs](/market-makers/rfq-quoting)
