Linking merchants into the portal
The stable merchant-portal web addresses an integration, an email or an AI agent may send a store owner to, and the rules that come with them.
Sometimes the right answer for a merchant is not an API call but a page: "open your opening hours", "review this approval", "add your first product". Every screen of the merchant portal has a web address that names exactly that screen, so you can send a store owner straight to it from your own app, an email, a chat message or an AI agent's reply.
The shape of a link
https://www.ryde.us.com/merchant/{store-id}/{screen}/{object-id}?{view-state}
https://www.ryde.us.com/merchant/64b7f0c2a1e4d5f6a7b8c9d0/settings/hours
https://www.ryde.us.com/merchant/64b7f0c2a1e4d5f6a7b8c9d0/menu/new
https://www.ryde.us.com/merchant/64b7f0c2a1e4d5f6a7b8c9d0/money/day?date=2026-10-03
- {store-id} is the store's 24-character hexadecimal account id — the same id that appears in the store's public page, /stores/{store-id}. Never a name or a slug.
- The path names an OBJECT: a screen, then optionally one record on it. new is an id like any other and means "the add form".
- The query names VIEW STATE: a tab, a filter, a lane, a search box, a date. It chooses what is shown; it never changes or grants anything.
Destinations you can rely on
| Path after /merchant/{store-id} | Opens |
|---|---|
| (none) | The store's home: today's sales and the Open toggle. |
| /orders | The order queue. ?lane= picks a lane on a phone layout (new, accepted, preparing, ready, out, done, problem). |
| /orders/{order-id} | One order. |
| /menu | The catalog. |
| /menu/new · /menu?add=1 | The Add product form. Both forms work. |
| /menu/{product-id} | That product's editor. |
| /inventory | Stock. ?filter=all shows every product instead of the ones that need attention. |
| /settings/{section} | One section of the store settings: status, photos, details, notifications, cash-drawer, taxes, e-cf, table-service, video, payments, waiver, location, service-area, hours, ryde-one. |
| /money/{tab} | Money: earnings, reports, transactions, payouts, cash, shifts, day. /money/day?date=YYYY-MM-DD opens that store day's close. |
| /staff · /staff/new | The team list, and the Add employee form. |
| /approvals/{request-id} | One approval request waiting for the owner. |
| /integrations/{key} | One connector's panel. |
| /accounting · /accounting/reports | Accounting home and its reports, when Accounting is switched on for the store. |
| /payroll · /payroll/employees · /payroll/run | Payroll home, employees and payroll runs, when Payroll is switched on for the store. |
| /verification | Contact and agreement verification. |
An id the portal cannot find is never a blank page: the merchant lands on that screen's list with a short notice.
The rules
- A link is not an API. It opens a page for a person; it does not perform an action, and nothing about it is a contract for software to call. To change data, use the operations in the API reference.
- A link carries no credentials. Never put a token, a code or a password in it. If the merchant is not signed in, they sign in first and land on the same page.
- The portal re-checks permissions every time. A link only ever opens what the signed-in person is allowed to see: an employee signed in with a staff PIN sees only what their role can use, and Accounting or Payroll pages open only where that product is switched on.
- Query names are view state. They may gain values over time; an unknown value falls back to the screen's default view rather than failing.
- These are web addresses. On a phone they open the web portal in the browser; they are not app links into the Ryde mobile app.
Do not guess a path that is not on this page. Inside the portal, the menu and its search are deliberately not part of the address: which menu section is open and what was typed in "Search menu" are never in a link.