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

# Devnet Sandbox

> Endpoints, account provisioning, funding, and on-chain identity for testing a market-making bot against Joyride on Solana Devnet

## Devnet endpoints

The sandbox is a full Joyride deployment at `https://devnet.joyride.exchange`, backed by a vault program on Solana Devnet. Paths are the same as on Mainnet; only the host differs.

| Surface                                           | URL                                               |
| ------------------------------------------------- | ------------------------------------------------- |
| Trading WebSocket (authentication, RFQ)           | `wss://devnet.joyride.exchange/api/client`        |
| Oracle WebSocket (spot price)                     | `wss://devnet.joyride.exchange/api/oracle`        |
| Query HTTP (self-scoped reads)                    | `https://devnet.joyride.exchange/api/query/*`     |
| Public market HTTP (config, instruments, mark IV) | `https://devnet.joyride.exchange/api/v1/market/*` |

Authentication, session rules, rate budgets, and error codes are as described on [Connectivity for Bots](/market-makers/connectivity). Moving a bot from Devnet to Mainnet means changing the origin and using a wallet provisioned on Mainnet.

## Requesting access

Email [support@joyride.exchange](mailto:support@joyride.exchange) with:

* The base58 ed25519 public key the bot will sign in with. Generate a separate key for the sandbox; the Mainnet key is provisioned separately and need not match.
* A request for the quoter role. The role and the on-chain subaccount are created in the same pass as the account.

Provisioning returns:

* An account bound to the public key, with a margin policy and fee tier. `public/auth` on the Devnet trading WebSocket succeeds once it exists.
* A subaccount on the Devnet vault owned by the key. `GET /api/query/vault-subaccount` returns one row for the account when it is ready.

There is no self-serve signup for bots on Devnet or Mainnet.

## Funding

Deposits are Devnet USDC sent to the Joyride vault through its deposit instruction. Transaction fees need Devnet SOL (`solana airdrop` on the Devnet cluster). The USDC mint is listed under [Devnet identity](#devnet-identity); a Devnet USDC faucet can supply it.

| Parameter          | Value                              | Applies to                                                                                                                                                                |
| ------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Deposit asset      | USDC on Solana Devnet (6 decimals) | every vault deposit                                                                                                                                                       |
| Deposit cap        | 100,000 USDC                       | the vault's net custody across every account (total deposited minus total withdrawn); a deposit that would push it above the cap is rejected on chain                     |
| Withdrawal cap     | 100,000 USDC                       | the vault's lifetime total withdrawn across every account; a withdrawal that would push it above the cap is rejected on chain                                             |
| Outflow window cap | 10,000 USDC                        | the vault's total withdrawn in any 24-hour window across every account; a withdrawal that would push the window above the cap is rejected on chain until the window rolls |

The caps are set in the vault's on-chain configuration and are shared by every sandbox account, so other users' activity can cause a rejection. Email [support@joyride.exchange](mailto:support@joyride.exchange) if a cap blocks testing.

A deposit is credited once its transaction is finalized on Devnet. `GET /api/query/deposits` lists it, and `GET /api/query/vault-subaccount` shows the funded `free_balance`. Only deposits made through the vault's deposit instruction are credited; a plain token transfer to the vault is not.

Devnet USDC has no value. The caps bound what the sandbox vault holds and releases. Mainnet collateral is agreed per maker, as described on [Becoming an RFQ Quoter](/market-makers/becoming-a-quoter).

## Devnet identity

Quotes bind to the deployment they are signed for, so a quote signed for Devnet is rejected on Mainnet and the reverse. The `deployment` object on every RFQ `open` event carries the identity of the connected environment; comparing it with the configured value at startup catches a wrong-environment deployment before the first quote.

| Field            | Value                                          |
| ---------------- | ---------------------------------------------- |
| Cluster          | Solana `devnet`                                |
| Vault program id | `4BecHK2cEh6DgfpCdxbQAm812audv4ZXxTQB12RkMWB8` |
| Config PDA       | `ECJGDQXPnzjoaaPveifT4FSKmYgSbNf1GeiHbtdi626u` |
| USDC mint        | `4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU` |

The deployment id and the Mainnet values are on [Program Addresses](/exchange/programs).

## Verifying readiness

Readiness is checked from the account's own session once provisioning is complete.

Run the checklist on [Becoming an RFQ Quoter](/market-makers/becoming-a-quoter) against the Devnet origin: `public/auth` roles include `rfq_quoter`, `rfq.maker.subscribe` succeeds, `GET /api/query/vault-subaccount` returns a row, and `rfq.maker.poll` returns without `RFQ_NOT_READY`.

RFQs arrive only when a Devnet taker sends one, so testing the quoting path requires driving the taker side as well. A quiet sandbox does not indicate an outage.

## What Devnet shares with Mainnet

The sandbox runs the same software as Mainnet.

| Identical on both                                                               | Different on Devnet                                                                                                                                                            |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| The JSON-RPC protocol on every WebSocket and the HTTP query surface             | Origin: `devnet.joyride.exchange` instead of `joyride.exchange`                                                                                                                |
| The signed quote and every gateway frame                                        | Program identity: vault program id, deployment id, config PDA, USDC mint                                                                                                       |
| Fee mechanics: maker and taker fees, settlement fees, and where each is debited | Funds: Devnet USDC with no value, and vault-wide caps of 100,000 USDC on net deposits, 100,000 USDC on lifetime withdrawals, and 10,000 USDC on withdrawals per 24-hour window |
| Error codes and close codes, including `1007`, `1200`, and `4001`               | Provisioned accounts: Devnet and Mainnet accounts are separate records                                                                                                         |
| Rate budgets, session limits, and quote TTL bounds                              | Flow: RFQs are whatever Devnet takers send                                                                                                                                     |

A bot that passes readiness on Devnet needs only its origin, wallet key, and identity configuration changed for Mainnet.

Next: [Fees and Limits](/market-makers/fees-and-limits)
