Site catalog
Toast (order.toasttab.com) for AI Agents
order.toasttab.com: 42 mapped actions across 3 screens
Toast's online ordering surface is multi-tenant: each restaurant lives at its own page under order.toasttab.com/online/{slug}. Through Rindler, your agent drives that ordering surface as a set of deterministic actions instead of a rendered menu: pick pickup or delivery, search the menu, open an item, select its modifiers, build a cart, apply a promo code, set a tip, and check out.
The config maps 42 actions across three screens (menu, item, checkout), and it is restaurant-agnostic: one session can hop between any Toast restaurants by slug. Your agent reads menus and order totals as structured records, not raw HTML.
What your agent can do
The mapped surface covers the whole guest ordering flow. set_fulfillment switches between pickup and delivery. On the menu, search_menu filters items by name and view_category jumps the page to a named section like 'Pizza' or 'Desserts'. view_item opens an item's modifier modal, where select_modifier toggles options (size, toppings, removals) and set_quantity steps the count up or down. add_to_cart confirms the configured item and returns to the menu.
From there the checkout lane takes over: proceed_to_checkout moves to the checkout page, add_promo_code applies a code through the promo modal, set_tip sets the tip, and set_contact_info fills the guest contact form. Cart review is always available via open_cart from the header icon on any screen. Because Toast is multi-tenant, change_restaurant lets the same session compare menus or place orders at several restaurants.
Quirks worth knowing
These come straight from the mapped action behavior, not guesswork:
- **Required modifiers fail loudly, then recover.**
add_to_cartfails if a required modifier group has no selection, and the error message names the missing group(s). The recovery loop is mechanical: callselect_modifierfor each named group, then retryadd_to_cart. - **Set fulfillment before browsing.** Prices and availability can differ between pickup and delivery, so call
set_fulfillmentbefore viewing items if the current mode is wrong. - **One session, many restaurants.** Use
change_restaurantwith arestaurant_slug(the path segment after /online/ in the URL) instead of starting a new session per restaurant. - **Tips are preset or custom, never both.**
set_tiptakes a presetpercent(15, 18, 20, or 22) to click the matching button, or a custom dollaramount. Pass one or the other. - **The menu search box starts collapsed.**
search_menuexpands it, types the query, and the visible item list updates in place without leaving the menu screen.
Signing in (mostly optional)
Nearly the entire surface is public. Only three actions are flagged as requiring auth: checkout, view_order_detail, and save_to_wishlist. When sign-in is needed, the mapped login entry point is https://www.toasttab.com/login.
The config also maps a guest lane: set_contact_info fills the guest contact form (email, first name, last name, phone), which is required for guest checkout. Toast does not send a confirmation OTP for those fields, so your agent fills them and moves on with no verification detour.
Reading results as structured records
Instead of scraping the page, your agent calls dedicated extraction actions on each screen:
- **Menu:**
extract_menusettles the page and returnsdata.listings, an array of{name, url, details}records. Theurlis exactly whatview_itemexpects (it looks like /online/{slug}/item-{name}_{uuid}). Only fall back toextract_contentifdata.listingscomes back empty. - **Checkout:**
extract_order_summaryreturnsdata.listingwithsubtotal,tax,total, andtip_optionsfor the currently displayed order. - **Item modal:**
extract_item_modifiersreturns the open item's name and URL. Toast's modifier groups (the radios and checkboxes inside the modal) are not yet exposed as structured data, so the agent reads them fromextract_content's ARIA fallback; thegroup_uuidandoption_uuidthatselect_modifierneeds appear as{group}_{option}-inputtestids in the page source.
Example session
start_session(url: "https://order.toasttab.com/online/a16-san-francisco")
dispatch_action(action: "set_fulfillment", params: { mode: "pickup" })
dispatch_action(action: "extract_menu")
# -> data.listings: [{ name, url, details }, ...]
# each url feeds view_item's item_url param
close_session()
Every mapped action
Generated from the live site config. 3 of 42 actions require a signed-in session.
| Action | What it does |
|---|---|
| account_addresses | |
| account_payment_methods | |
| add_promo_code | Apply a promo code to the order. Opens the promo modal, types the code, and confirms. |
| add_to_cart | Confirm the configured item and add it to the cart. Use after selecting any required modifiers and setting the quantity. Returns to the menu screen. FAILS if a required modifier group has no selection — in that case the error message will name the group(s); call select_modifier for each, then retry. |
| apply_promo | |
| browse_category | |
| cancel_order | |
| capture_login | |
| change_restaurant | Navigate to a different Toast restaurant within the existing session. Use this INSTEAD of starting a new session when you want to compare menus or place orders at multiple restaurants. The slug is the path segment after /online/ in the URL (e.g. 'a16-san-francisco' from order.toasttab.com/online/a16-san-francisco). |
| checkoutauth | |
| close_item | Close the item modal without adding to cart. |
| extract_item_modifiers | Settle the page and return the currently-open item's name and URL. NOTE: Toast's modifier groups (the radios + checkboxes inside the modal) are not yet exposed as structured data; the agent should read them from extract_content's ARIA fallback. The select_modifier action requires the raw group_uuid and option_uuid which appear as `{group}_{option}-input` testids in the page source. |
| extract_menu | Settle the page and return the current menu items. The result's `data.listings` field is an array of `{name, url, details}` records — use those directly. The `url` is what view_item expects. Only fall back to extract_content if `data.listings` is empty. |
| extract_order_summary | Settle the checkout page and return the order totals. The result's `data.listing` field has `subtotal`, `tax`, `total`, and `tip_options` for the currently-displayed order. |
| filter_results | |
| open_cart | Open the cart popover to review the current order. Available from any screen via the header cart icon. |
| proceed_to_checkout | Navigate to the checkout page. Opens the cart popover (if not already open) and clicks Checkout. Cart must have at least one item or this will fail. |
| redeem_points | |
| remove_from_cart | |
| return_order | |
| save_to_wishlistauth | |
| search_menu | Filter the menu by item name. The search box starts collapsed; this action expands it and types the query. The visible item list updates in place. Stays on the menu screen. |
| search_products | |
| select_modifier | Toggle a modifier option (e.g. 'Large', 'No cheese', 'Extra sauce'). Pass both the group_uuid (the modifier group, e.g. 'Size') and option_uuid (the specific choice) from the item extraction. Works for both single-select (radio) and multi-select (checkbox) groups — Toast resolves which based on the group config. |
| select_variant | |
| set_contact_info | Fill the guest contact information form (email, first name, last name, phone). Required for guest checkout. Toast does NOT send a confirmation OTP for these fields. |
| set_fulfillment | Switch between pickup and delivery. Toast restaurants may support either or both. Call this before viewing items if the current mode is wrong, since prices and availability can differ. |
| set_quantity | Adjust the quantity of the item being added. Pass direction='up' to increment or 'down' to decrement. Each call changes the quantity by 1; call multiple times for larger numbers. |
| set_tip | Set the tip. Pass a preset percentage (15, 18, 20, or 22) to click the corresponding preset button, OR pass a custom dollar amount via the 'amount' param. Use one or the other, not both. |
| sort_results | |
| track_order | |
| update_quantity | |
| view_cart | |
| view_category | Scroll the menu to a specific category section (e.g. 'Pizza', 'Desserts'). Use the category name exactly as it appears in the menu navigation tabs. Stays on the menu screen. |
| view_item | Open a menu item's modifier modal. Pass the full item_url from the menu extraction (it looks like /online/{slug}/item-{name}_{uuid}). Navigates to the item screen. |
| view_loyalty_status | |
| view_order_detailauth | |
| view_order_history | |
| view_product | |
| view_reviews | |
| view_store_locator | |
| view_wishlist |
Screens and structured records
checkoutreturns structured fields recordsitemreturns structured fields recordsmenureturns structured fields, container records