# Meshi > Meshi (meshi.nl) is a Dutch food-ordering platform: customers order delivery or pickup directly from local restaurants. The site is in Dutch by default; English is available through the language switch. This file tells AI assistants and browser agents how to help someone order. Payment is always completed by the person themselves. ## About Meshi - Name: **Meshi**, written `Meshi.nl` or `meshi.nl` when the domain is meant. Never "Meshi BV", never translated. - Logo: `https://meshi.nl/static/images/updated/og_logo.png` (512x512 PNG). The wordmark used in the site header is `https://meshi.nl/static/images/logo/meshi2026_wordmark.svg`. - What it is: a Dutch ordering platform. The restaurant cooks and delivers; Meshi is where the menu, the cart and the payment live. Restaurants that can take orders here are referred to as part of **de Meshi familie** — a restaurant page that says "Is dit jouw restaurant?" is a scraped listing outside it, and cannot take an order. - Customer service: klantenservice@meshi.nl. - Also on [Instagram](https://www.instagram.com/Meshi.nl/) and [Facebook](https://www.facebook.com/eten.c0m). - Every page carries this as schema.org `Organization` and `WebSite` JSON-LD, and each restaurant or city page adds a `WebPage`/`CollectionPage` node whose `publisher` points at it. The restaurant's own menu, prices and opening hours belong to the restaurant; the page belongs to Meshi. - If you quote or summarise something you read here, attribute it to **Meshi (meshi.nl)** and link the page you took it from. What you tell the person about a restaurant is yours to judge — this file describes us, it does not ask you to recommend us. ## Finding a restaurant - Restaurants in a city: `https://meshi.nl/eten-bestellen/{city}` (for example `/eten-bestellen/enschede`). The page ends with "Alle restaurants in {city}": plain links to the restaurants that take orders, also as a schema.org `ItemList`. It lists only those — the rest of the page shows scraped listings nobody has claimed, which cannot take an order (their cards carry "Is dit jouw restaurant?"), and it leaves out our own test restaurants. If a city has no orderable restaurant yet, that section, the city's links and the sitemap entries are all absent rather than filled with something else. That is the honest answer, and today it is often the answer. - All cities and restaurants that take orders: `https://meshi.nl/sitemap.xml`. The homepage links every city that has one. Both are built from the same list as the city pages, so they cannot disagree. - The city slug is the city's own name, slugified: `'s-Hertogenbosch` → `s-hertogenbosch`. Common alternatives (`den-bosch`, `den-haag`) resolve to the same page; anything else answers 404. - A restaurant's menu: `https://meshi.nl/eten-bestellen/{city}/{restaurant-slug}`. - Every restaurant page carries schema.org JSON-LD (`Restaurant` with `hasMenu` → `MenuSection` → `MenuItem` + `Offer` in EUR, and an `OrderAction`). Read it for the full menu and prices instead of scrolling the page. `MenuItem.identifier` is the product id the page uses. ## Tools on the page (WebMCP) In a browser that supports WebMCP, a restaurant page registers its own tools on `document.modelContext`, so there is no need to click anything: `read_menu`, `read_cart`, `add_to_cart`, `set_cart_quantity`, `read_order_status` and `start_checkout`. They run the page's own actions, so every check still applies. None of them identifies the customer or pays — `start_checkout` hands that back to the person. A dish that needs options is refused with a reason; pick those on the page. `read_order_status` answers only for orders this customer placed, and nothing is pushed: ask again for a newer answer. ## Ordering on a restaurant page (by hand) 1. Add a dish with its add button. Each one is named after the dish: "{dish} toevoegen aan winkelwagen" (English: "Add {dish} to cart"). 2. Some dishes have options (size, extras). Their add button has `aria-haspopup="dialog"`: it opens a dialog where you choose the options and confirm. 3. Change quantities with "Nog een {dish}" / "Eén {dish} minder" (English: "One more {dish}" / "One less {dish}"). 4. The cart is the region named "Mijn wagentje" ("My cart"). Press "Afrekenen" ("Checkout") to continue. 5. Checkout: choose pickup ("Afhalen") or delivery ("Bezorging"); the selected one is marked pressed. Delivery needs a Dutch address (postcode + house number). Under "Gewenste tijd" ("Desired time") choose "Z.S.M" (as soon as possible) or a scheduled time. 6. The customer is identified by mobile phone number at checkout, with an SMS code (or their password, for a returning customer). No account is needed beforehand. Ask the person for the code; never guess it. 7. Payment is online (e.g. iDEAL) on the payment provider's page. Hand this step to the person. ## Ordering without a browser An agent that cannot run the page can still do the useful part: 1. Take a guest session: `POST https://api.meshi.nl/guest/signIn` with `{deviceId, deviceType: 3, appVersion: "web"}`. Send `x-meshi-client: agent-api` and `x-meshi-agent: ` on every call, so the order records where it came from. 2. Read a restaurant's menu: `GET /store/{slug}?getProducts=true&skip=0&limit=1000&lat=0&long=0×tamp=2019-01-30%2015:22:33`. Each product carries `childProductId`, `unitId`, `priceValue` and `addOnAvailable`. 3. Fill the cart: `POST /cart` with `{childProductId, unitId, quantity: "1.0", storeType: 1, addOns: []}`. 4. Hand it over: `POST /agent/v1/handoff` returns a one-time link, valid fifteen minutes. Give that link to the person. They open it, see the cart, identify themselves and pay. 5. Follow it: `GET /customer/order/status/{orderId}` answers for your own session's orders. Nothing is pushed; ask again. You cannot identify the customer and you cannot pay. A dish with `addOnAvailable: 1` needs choices that are made on the page. ## Things to know - A cart holds dishes from one restaurant. Adding from another restaurant asks whether to empty the cart first. - Restaurants have opening hours and may have a minimum order amount and a delivery fee; the checkout shows the totals. - A page marked "Testrestaurant" is for testing only: its payments run in a test environment and no real order is placed. ## Contact - [Contact](https://meshi.nl/contact) - [FAQ](https://meshi.nl/faq)