Article: A July test of 200 Amsterdam restaurants showed that current AI assistants can’t finish a table reservation because the booking widget is hidden inside an iframe.
Why the iframe blocks agents
Most online reservation tools are delivered as an embedded iframe. A visitor clicks a “Reserve” button, a calendar pops up, and the user selects a time slot. To a human, the process works; to an AI agent, it stalls.
- The agent parses the main HTML page.
- The booking button points to a URL on a different domain.
- The browser loads that URL inside an iframe, isolating it from the parent page.
Because the same-origin policy blocks scripts in the parent page from reading the iframe’s DOM or intercepting its network calls, an AI agent that reads page content and sends HTTP requests sees only the button. It never sees the calendar, the time slots, or the confirmation flow. Even if it clicks the button, it still must solve captchas, adapt to layout changes, or dodge anti-automation defenses many booking services employ.
The missing machine-readable link
A separate audit of 163 functional restaurant sites found only nine that exposed any machine-readable booking data. Those nine listed basic information—name and address—using schema.org markup, but none included reservation actions an agent could invoke. Schema.org defines types such as ReserveAction for this purpose, yet most sites publish only descriptive metadata, not actionable instructions.
In practice, an assistant looks for structured data that tells it how to perform a task, not just what the task is. Without a ReserveAction or a comparable endpoint, the agent falls back to mimicking a human click, which, as described above, is unreliable.
A practical fix that doesn’t rip up the UI
- Publish a booking API – Create a lightweight HTTP endpoint that accepts JSON requests for availability queries and reservation creation. The API returns fields such as date, time, party size, and confirmation code. Any agent can consume it without rendering a page.
- Make the API discoverable – Place a pointer in a well-known location, such as
/.well-known/booking, or embed aReserveActionentry in the page’s schema.org markup. This tells agents “there is a programmatic way to book here” without requiring scraping. - Adopt the Model Context Protocol (MCP) – MCP lets assistants invoke external tools directly, passing inputs and receiving structured outputs. Major AI providers already support MCP, so a restaurant that implements an MCP-compatible endpoint can be called by agents as if it were a built-in function.
These steps let the visual iframe stay for human users while giving agents a clean, reliable path to the same reservation data.
Takeaway
Embedding a calendar inside an iframe protects the visual flow for humans but leaves AI assistants blind. Adding a modest, well-documented booking API and advertising it through standard metadata or MCP opens a new reservation channel without overhauling the website. The effort boosts visibility to the next generation of digital assistants, and the risk can be managed with the same security controls already used on the existing UI.
