Ryde One is the transaction entitlement
OAuth authorization does not grant transaction authority. An active Ryde One membership does.
A customer connecting their Ryde account to your application authorizes you to act for them. It does not, by itself, entitle them to transact through external software. That entitlement is Ryde One, the customer's own paid membership — held by the customer, never by the developer.
One membership cannot cover many customers. The entitlement is checked against the individual whose token you are holding, on every transacting call. There is no application-level or organization-level substitute.
What a non-member can do
Read, quote and track — never create. The rule is deliberately generous on the read side, so an agent can demonstrate real value and then explain the membership, rather than hitting a wall before it can say anything useful.
| Capability | No Ryde One | Active Ryde One |
|---|---|---|
| Connect a Ryde account | ✓ | ✓ |
| Check membership status | ✓ | ✓ |
| Search merchants and read menus | ✓ | ✓ |
| See ride options and fare quotes | ✓ | ✓ |
| Price a basket or a delivery | ✓ | ✓ |
| Find providers and read availability | ✓ | ✓ |
| Track an existing ride, order or booking | ✓ | ✓ |
| Retrieve an existing receipt | ✓ | ✓ |
| Cancel something already in progress | ✓ | ✓ |
| Request a new ride | ✗ | ✓ |
| Place a food order | ✗ | ✓ |
| Request a new delivery | ✗ | ✓ |
| Book a service provider | ✗ | ✓ |
| Create a task | ✗ | ✓ |
| Autonomous spending without confirmation | ✗ | planned |
The refusal
403, not 401 — the token is fine, so refreshing it or re-running OAuth will not help and will only trap the customer in a loop. The body carries everything you need to route them to a fix.
HTTP/1.1 403 Forbidden
X-Ryde-Request-ID: req_9f2c41ab7d0e4c58
{
"error": {
"code": "RYDE_ONE_REQUIRED",
"message": "An active Ryde One membership is required to create this transaction.",
"request_id": "req_9f2c41ab7d0e4c58",
"details": {
"requested_action": "food.order",
"membership_status": "none",
"join_url": "https://www.ryde.us.com/one"
}
}
}
Handle it as a product moment, not an error. The customer has just been shown a real basket and a real price; the only thing missing is the membership. Surface join_url and offer to continue afterwards.
A membership that lapses mid-transaction
A membership expiring never strands a customer. Once a ride, order, booking or task exists, reading it, tracking it, fetching its receipt and CANCELLING it all keep working regardless of membership state. Only creating something NEW is refused. Getting out of a transaction is not a privilege.
Ryde evaluates the entitlement against the clock, not a stored flag, and it fails closed. Membership status also appears as an advisory claim on the access token for your UI, but the platform never trusts that claim for the gate — it re-reads the live state on every transacting call, so a token minted a few minutes ago cannot buy a ride the membership no longer covers.