Layout

Developer platform

Layout gives your app real restaurant ordering. Find a place, read its live menu, build a priced cart, show the person the total, and confirm it when they say yes. Layout drives the restaurant's own ordering site, so there is no restaurant integration to build.

The reference, the console and your keys are at developer.layout.link. This page is the short version.

Open the quickstart

Two doors, one engine

REST at api.layout.link/v1 and MCP at mcp.layout.link run the same ordering engine with the same checks and money rules. Your app acts for a person with one of two credentials:

  • A build grant for a person you provisioned by phone number. It lasts 15 minutes and you refresh it.
  • An OAuth token for a person who signs in with their own Layout account through Sign in with Layout and approves your app.

How Layout works maps every step across both doors.

Sandbox first

Create an application in the console and you get a sandbox key at once. Sandbox runs the real engine against real restaurant sites, but a confirm is simulated: no restaurant receives it, nothing is charged, and nobody is texted. Test restaurants script each outcome, from a price change to an order Layout cannot confirm, without opening a browser.

Production needs a review by a person here, usually within a business day. The production key is revealed once the application is approved, and sandbox keeps working whatever the review decides. See environments and approval.

How a person connects

Layout, not your app, asks the person. What they see:

  • A new number gets a text from Layout: "Layout: 123456 links this number to your app, which can then place orders for you." Their code makes their Layout account.
  • Someone who already has a Layout account gets a text by default: "Your app wants to place food orders for you through Layout. Tap to approve." You can deliver the link yourself instead. They sign in to Layout and approve a screen that says your app will be able to place orders for them, paid with the card on file in their Layout account, and that they can disconnect it anytime.

Your app's name appears in those texts and screens only once Layout approves your application.

The card is added on a Layout page you send them, a card link, which shows your app's name and logo and says your app never sees the card. It never touches your servers. The card belongs to the person's Layout account, so it works in every app they connect.

Apps that use Layout is the same flow from the person's side.

What stays with Layout

Every charge is the person's to approve, and a confirm must match the cart's current total. Layout texts them a six-digit code when one is due, for example on a first order through your app if they connected without agreeing to your app ordering for them. Their daily spending limit applies to your orders like any other. They can disconnect your app from their Layout account at any time, and your next build for them stops.

Also on the platform

  • Webhooks: a signed event when an order changes state, with retries and replay.
  • Layout CLI: sandbox keys, webhook forwarding and test orders from a terminal, and a guide for coding agents.
  • Rate limits: every ceiling that can refuse a call, and how to ask for more.

Developer questions go to developer@layout.link.

Updated October 21, 2026