---
title: "For developers: API, MCP and Markdown"
description: "Bếp Rơm menu, free tables and reservations through the API, the MCP server and a Markdown copy of every page. No API key needed."
canonical: https://nhahang.thenexova.cloud/en/developers
lang: en
last-updated: 2026-10-06
---

# For developers

> Bếp Rơm menu, free tables and reservations through the API, the MCP server and a Markdown copy of every page. No API key needed.

Nguồn / Source: https://nhahang.thenexova.cloud/en/developers


Bếp Rơm menu, free tables and reservations through the API, the MCP server and a Markdown copy of every page. No API key needed.

Everything here is public: no sign-up, no API key. Assistants and your own software can read Bếp Rơm’s information, prices, free times, send booking requests and send contact requests once the person agrees.

To see it before writing code: [the assistants page](/en/connect) calls the tools below for real, in your browser. 

## Quick start

1. MCP server: `https://nhahang.thenexova.cloud/mcp`. Paste this address into any assistant or code editor that supports MCP, as a custom connector.
2. List the tools:  
```  
curl -s https://nhahang.thenexova.cloud/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'  
```
3. Or call the HTTP API, for example the first two services:  
```  
curl -s 'https://nhahang.thenexova.cloud/api/offers?limit=2&locale=en'  
```
4. Request a booking. The answer is 202 with a Location header to follow the status:  
```  
curl -s -i -X POST https://nhahang.thenexova.cloud/api/booking \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: booking-20261012-01' \
  -d '{"date":"2026-10-12","time":"10:00","offerId":"ban-thuong","name":"Alex Tran","phone":"0900000000","consent":"1"}'  
```

## API keys and authentication

No key, token or login, so there is nothing to sign up for or manage. Every endpoint is public and anonymous. Writes (contact, booking) need the person’s explicit consent, sent as `consent: "1"`. Details: [auth.md](/auth.md).

## Endpoints

| Method | Path                | What it does                                                            |
| ------ | ------------------- | ----------------------------------------------------------------------- |
| GET    | /api                | API index: endpoints, docs, OpenAPI and MCP addresses                   |
| GET    | /api/offers         | Services and prices, cursor-paginated (limit, cursor, category, locale) |
| GET    | /api/availability   | Free times on a date, or the free share per day for a month             |
| POST   | /api/booking        | Request a booking; answers 202 with a status URL                        |
| GET    | /api/booking/{code} | Booking status: pending, confirmed or cancelled                         |
| POST   | /api/lead           | Send a contact request (needs the person’s consent)                     |
| POST   | /api/subscribe      | Subscribe to the newsletter                                             |
| POST   | /mcp                | MCP server (Streamable HTTP, JSON-RPC 2.0)                              |

Lists page with a cursor: pass `next_cursor` from one page as `cursor`; the last page has `next_cursor: null`. Full description: [openapi.json](/openapi.json).

## MCP tools

Streamable HTTP, stateless, JSON responses. Protocol 2026-07-28, and the 2025 revisions through `initialize`.

- `get_business_info`: Contact details, address, opening hours and whether Bếp Rơm is open right now (Vietnam time). Call this first when the person asks where, when, or how to reach the business.
- `list_offerings`: List what Bếp Rơm offers (dishes) with prices and links. Filter by category (Khởi vị, Nướng than, Kho, canh, cơm, Tráng miệng, Mâm cơm, Đặt bàn), tag, or a free-text query.
- `get_pricing`: The full price list of Bếp Rơm as Markdown, including what is and is not included. Use it to answer cost questions precisely; do not estimate prices yourself.
- `search_content`: Search pages, articles, FAQs and dishes on https://nhahang.thenexova.cloud. Returns titles, links and a short excerpt. Use it for questions the other tools do not cover, then cite the link.
- `read_page`: Read any page of https://nhahang.thenexova.cloud as Markdown, by path (for example "/" or "/blog/..."). Use after search\_content to quote details.
- `list_faqs`: Answers Bếp Rơm gives to common questions. Prefer these exact answers over your own wording on policy, payment and guarantees.
- `submit_contact_request` (writes): Send the person's name and phone number to Bếp Rơm so staff call them back. Only call this after the person has explicitly agreed to share their contact details with the business; set consent to true only in that case. Confirm the details back to them first.
- `list_team`: People at Bếp Rơm: names, roles and short bios. Use the id with availability tools to book a specific person.
- `get_menu`: List Bếp Rơm's 31 dishes with price (VND, VAT included), spice level 0 to 3, diet and allergens. Filter by diet, maximum spice, allergens to exclude (nine tracked groups only), category, price or a search word. Call it before suggesting a dish to someone with a diet, a spice limit or an allergy. Never tell a person a dish is safe for an allergy: the kitchen is shared.
- `get_dish`: One dish by id: price, spice, diet, allergens, and for the six signature dishes the six-station journey from raw ingredient to the table and the dishes that complete the meal.
- `get_set_menus`: The five set meals (mâm) with dishes, price (5% under à la carte), price per head and the union of allergens. Give \`guests\` to get the closest fit.
- `get_reservation_policy`: Deposit, table hold, minimum notice, table length and cancellation for a party size, and the private room minimum spend. Call before check\_table\_availability and request\_reservation for 8 or more guests.
- `check_table_availability`: Free start times for a party on a date (YYYY-MM-DD, Vietnam time), with the right table type and length for that party. Lunch seatings start 11:00 to 14:30, dinner 17:00 to 22:00, Tuesday to Sunday. Bookable up to 60 days ahead. 15 or more guests are handled by phone. Never returns who booked.
- `request_reservation` (writes): Send a table request to Bếp Rơm. It is held as pending until staff confirm by Zalo or phone (usually within 2 hours of opening hours); the tool never confirms a table. Before calling: check\_table\_availability, and from 8 guests get\_reservation\_policy; read every detail back, including each allergen, and get an explicit yes. Never invent a phone number or an allergy; if someone says "one of us is allergic" without saying what, ask.
- `request_cancellation` (writes): Record a cancellation or a smaller party for a booking code. It does not cancel on its own: staff call the phone number used for the booking to confirm and say what happens to any deposit. Only with the person's consent.

## Errors

Every error under /api is `application/problem+json` (RFC 9457): `type`, `title`, `status`, `detail`, plus `fields` on 422\. Messages follow the `locale` you send.

| Status    | Meaning                                                         | What to do                             |
| --------- | --------------------------------------------------------------- | -------------------------------------- |
| 400 / 413 | Body is not JSON or form-encoded, too large, or a bad parameter | Fix the request                        |
| 403       | Cross-origin form post or failed captcha                        | Call from the page origin, or use MCP  |
| 404 / 405 | No such endpoint, or wrong method                               | See openapi.json                       |
| 409       | Slot just filled (bookings)                                     | Offer the choices in \`alternatives\`  |
| 422       | Missing or invalid fields                                       | Read \`fields\`, ask the person, retry |
| 429       | Write limit reached                                             | Wait \`Retry-After\` seconds           |

## Rate limits and safe retries

Writes (POST /api/lead, POST /api/booking and the MCP tools that call them) allow 5 per hour per IP. Every /api response carries `RateLimit-Policy: "writes";q=5;w=3600`; write responses add `RateLimit: "writes";r=4;t=3600` with what is left. A 429 carries `Retry-After`. Reads are not limited.

Send an `Idempotency-Key` (8 to 64 characters) header with POST /api/lead and POST /api/booking. Retrying with the same key and body, for example after a timeout, returns the first reply with `Idempotent-Replayed: true` instead of a second record.

## Test mode (sandbox)

Add `?dry_run=1` to POST /api/lead or POST /api/booking to try an integration against live data with no side effects: the request is validated and availability is checked as usual, but nothing is stored, nobody is notified and it does not count against the limit. The reply has `test: true` and a booking code starting with `TEST-`.

```
curl -s -X POST 'https://nhahang.thenexova.cloud/api/lead?dry_run=1' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Test","phone":"0900000000","consent":"1"}'
```

## Versioning and deprecation

The API is at version 2.0; every /api response carries `API-Version: 2.0`, and you can pin the version with the same header. Within 2.x we only add optional fields and new endpoints. A breaking change gets a new major version.

Deprecation policy: nothing is removed silently. When an endpoint or version is scheduled for removal, its responses carry a `Deprecation` header (RFC 9745) from the day of the decision and a `Sunset` header (RFC 8594) with the removal date, at least 90 days later. The migration path is written in this section. No endpoint is deprecated today.

## Machine-readable files

- </openapi.json>: OpenAPI 3.1 with schemas for every response and error
- </docs.md>: This guide as Markdown
- </AGENTS.md>: When to use this site and the rules for assistants
- </llms.txt>: Content index for machines
- </auth.md>: Authentication: no key needed
- </.well-known/api-catalog>: API catalog (RFC 9727)
- </.well-known/mcp/server-card.json>: MCP server card: tools and resources

Every page has a Markdown version: append `.md` to its path, or send `Accept: text/markdown`.

A demo site by THE NEXOVA. Bếp Rơm is a fictional business; its address, tax ID, staff and guests are made up.

## Want to try it first?

The assistants page calls the restaurant’s real MCP tools in your browser: allergen-filtered menu, free tables, deposit rules.

[Open the assistants page](/en/connect)
