# Sandbox

Build and test without dispatching a real driver or charging a real card.

> **Note:** COMING SOON — sandbox is not open yet.

Sandbox is a separate environment with separate credentials and a separate base URL. Nothing done there reaches a real driver, courier, provider, merchant or payment method.

|  | Base URL |
| --- | --- |
| Sandbox | https://sandbox-api.ryde.us.com |
| Production | https://api.ryde.us.com |

> **Info:** These hostnames are the published targets for the Agent Network. They are not resolving yet — the platform API currently answers only on its internal origin — and this page will carry a live status once they are.

## What is simulated

- Transactions — rides, orders, deliveries, bookings and tasks — are held in a separate store that the marketplace never reads. No driver is dispatched, no merchant is notified, no money moves and no push notification is sent. The isolation is structural rather than a flag, so nothing has to remember to filter your test data out.
- Discovery, menus, availability and QUOTES are the real thing. A fake catalogue would teach you to integrate against merchants and prices that do not exist, so sandbox reads answer from the live marketplace.
- Failures you need to handle: no driver found, a merchant rejecting, a slot lost to someone else, a payment declined.
- The Ryde One boundary, on both sides — a test customer with a membership and one without, so you can exercise the 403 path deliberately.

## Driving a lifecycle yourself

No driver is going to accept your test ride and no merchant is going to mark your test ticket ready, so waiting for either would make the interesting paths untestable. Advance a sandbox resource whenever you like:

```bash
curl -sX POST 'https://sandbox-api.ryde.us.com/v1/sandbox/simulate' \
  -H "Authorization: Bearer $RYDE_ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "resource_id": "<id>", "status": "driver_assigned" }'
```

The transitions offered are the platform's real state machines, so a handler you write against the sandbox is a handler that works in production. A move the real machine does not allow is refused, and the refusal lists what is available from the current state.

> **Info:** The control exists only for sandbox credentials. A production token calling it is refused — nothing may rewrite the state of a real ride or order from the outside.

> **Note:** Sandbox is for correctness, not load. Its rate limits are lower than production's, and a sandbox pass does not by itself demonstrate that your integration will hold up under real traffic.
