Layout Documentation

Limits and availability

Layout meters the connector for two reasons, and only one of them is abuse. The other is that some calls cost real money the moment they run, so an enthusiastic loop is expensive rather than merely noisy.

Rate limits

Every tool call is limited per user and per connecting client, and a call has to pass both. The limit is a token bucket, so a short burst is fine and a sustained loop is not.

A rejected call comes back as a rate limit with a stable error code, not as an empty result. A host model that receives an empty menu concludes the restaurant has no food; one that receives a rate limit knows to wait.

The metered read

Reading a live menu opens a real browser against a real website, which costs us cents rather than fractions of a cent. Two guards apply to it:

  • A daily allowance per user. Generous for ordering, finite for browsing.
  • A cooldown on re-reading the same restaurant. A repeat inside the window is free and instant rather than a second billed session.

Both are stated to the caller when they bite, and both exist because of a real incident rather than a theory: a question a model could not use with the answer it got was immediately re asked, and the second read cost the same as the first.

Timeouts, and why a build takes minutes

Building a cart at a restaurant we have not seen before takes roughly two to three minutes. That is a real browser working through a real ordering site, and it is bounded: a session has a hard ceiling, so a stuck run ends rather than running up a bill.

The consequence for a host is that order may return a "building" status and finish later. That is a normal answer and not an error. The right response is to relay the tracking link and poll order_status, which is free. Starting a second build is the one action that produces two carts and two charges, so it is worth saying plainly: do not.

Idempotency

State changing calls require an idempotency key. A retry with the same key and payload replays the stored result; the same key with a different payload is refused. This is what makes a network timeout safe to retry.

Availability

Current status, incidents and history: status.layout.link.

Layout depends on a restaurant's own website being up. When theirs is down, ours reports a failure that is honest about whose it was, because "we could not reach the restaurant" and "we broke" send a person to two different places.

Beta scale

Layout is in invited beta and sized for it. We would rather say that than imply a capacity we have not tested. If you are planning something that would put real volume through the connector, talk to us first at contact@layout.link so the answer is a plan rather than a rate limit.

Updated August 17, 2026