# Places and menus over REST

October 1, 2026 · API

The REST API can now do the reading half of an order, for one person: find a restaurant, look at one, and read its live menu. These are the same answers the MCP `places`, `place_facts` and `menu` tools give, because they run the same code.

## What changed

- `GET /v1/places?query=&near=&lat=&lng=&openNow=&limit=` searches restaurants by name or kind of food.
- `GET /v1/places/:placeId` returns one place, its dietary, service and good-for facts, and an `orderability` verdict.
- `POST /v1/menus` reads a restaurant's live menu, named by `placeId` or by `query` and `near`. A read that is not done answers `202` with a `menuId`; poll `GET /v1/menus/:menuId`, which is free. A poll that could not be checked is a `503` with `Retry-After`, and the read is not lost.
- [openapi.json](https://developer.layout.link/openapi.json) is now generated from the shapes the API validates every request with, and covers every endpoint in this reference.
- Every error `code` is one of a published list. The 400 code is `invalid_request`; the reference said `invalid_input`, which no developer endpoint sends.

## Why it matters

You can show a person where they can eat and what a place serves without driving an MCP session. These routes read and never build, confirm or charge.

## What to do

Call them with a person credential, not your application secret: the access token of someone who connected your application, or an `lgb_` build grant.

```bash
curl -X POST https://api.layout.link/v1/menus \
  -H "Authorization: Bearer $LAYOUT_PERSON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "placeId": "ChIJbloomCoffee" }'

202 Accepted
Retry-After: 5

{ "status": "reading", "menuId": "mnu_Q2hJSmJsb29t…", "assumedNearest": false, "retryAfterSec": 5,
  "restaurant": { "name": "Layout test kitchen", "address": "1194 Roseville Pkwy, Rocklin, CA 95677, USA" } }
```

Each developer account has a daily allowance, counted across all its applications: 5,000 place reads, 200 live menu reads and 100 knowledge answers in sandbox and for an application not yet approved, and 50,000, 1,000 and 1,000 for an approved production application. A spent allowance is a `429` that names the limit and says whether it was your account's limit or the pool's ceiling across every developer. Open Usage in the console to ask for more. See the [API reference](https://developer.layout.link/reference/api#get-v1-places) and [limits](https://developer.layout.link/reference/limits#place-and-menu-reads).

## Breaking changes

None. These are new endpoints, and the spec describes the existing ones as they already behave.
