Sandbox carts at real restaurants
In sandbox, POST /v1/carts and the MCP order tool build a cart at a real restaurant from that restaurant’s menu as Layout holds it, with its real items and choices. No browser opens, and the same code you ship builds it.
What changed
simulateon a sandbox cart picks its ending:placed(the default),failed,unconfirmed,challenge,code,card_declined,price_changed,closedorpickup_later.latency:realistic(the default) takes 30 seconds for one item and 10 more for each item after it, at most 90;instantskips every wait.engine:shadow(the default) builds from the menu Layout holds;realbuilds on the restaurant’s own site, 10 a day per developer account.- Production refuses
simulate,latencyandenginewith400 invalid_request, and MCP withsandbox_only. 409 menu_not_heldanswers a sandbox cart or menu read at a restaurant whose menu Layout does not hold, or a sandbox cart that names no place.- Sandbox places searches and browses list only restaurants whose menu Layout holds. A list emptied for that reason carries
emptyBecause: "no_held_menu". - Sandbox
POST /v1/menusanswers only with the menu Layout holds, the one a sandbox cart is priced from, and never reads one live. - MCP
menuis on sandbox build sessions, and answers the same way.mcp-tools.jsonlists the tools a sandbox session reads differently assandboxSessionTools, and the session’s owninstructions. - Sandbox places list a restaurant only when its held menu shows at least 3 items. An option that takes money off reads like
No Rice (-$1.00). soldOut: truemarks a menu item that is sold out.GET /v1/usagelists sandbox builds that open no browser assimulated_builds, 10,000 a day. In sandbox,buildscounts only builds with"engine": "real".
What to do
Build sandbox carts with a placeId from a sandbox places search. Test each ending with simulate, and "latency": "instant" in CI. See Sandbox.
Breaking changes
A sandbox cart opens the restaurant’s site only with "engine": "real". A sandbox cart or menu read at a restaurant whose menu Layout does not hold answers menu_not_held. The GET /v1/usage pool test_restaurant_builds is renamed simulated_builds.