Your First Request
This page walks through the simplest available GET endpoint, GET /v1/third-party/menu/, end to end: request, headers, and the full response shape.
The endpoint
Section titled “The endpoint”| Method | GET |
| Path | /v1/third-party/menu/ |
| Auth required | Yes — X-API-Key / X-API-Secret |
| Path/query parameters | None — the tenant is resolved from your credential. |
This returns the same dish data RestroLab staff see internally (category, kitchen, sub-menu, menu set, tax settings, price variants, add-ons), with one deliberate exception: ingredients is always omitted, since it would otherwise leak internal staff and supplier data.
Make the request
Section titled “Make the request”curl https://api.restrolab.com/v1/third-party/menu/ \ -H "X-API-Key: YOUR_API_KEY" \ -H "X-API-Secret: YOUR_API_SECRET"JavaScript
Section titled “JavaScript”const response = await fetch('https://api.restrolab.com/v1/third-party/menu/', { headers: { 'X-API-Key': 'YOUR_API_KEY', 'X-API-Secret': 'YOUR_API_SECRET', },});
if (!response.ok) { throw new Error(`Request failed: ${response.status}`);}
const dishes = await response.json();console.log(dishes);Python
Section titled “Python”import requests
response = requests.get( "https://api.restrolab.com/v1/third-party/menu/", headers={"X-API-Key": "YOUR_API_KEY", "X-API-Secret": "YOUR_API_SECRET"},)response.raise_for_status()print(response.json())The response
Section titled “The response”A successful call returns 200 OK with a plain JSON array of dishes matching the ThirdPartyDish schema in openapi.json (this endpoint is not paginated — see Pagination). Field values below are illustrative; the field names and types are taken directly from the schema:
[ { "id": "b3f1e2c0-9d3e-4a2b-8f1a-1234567890ab", "name": "Margherita Pizza", "description": "San Marzano tomato, fresh mozzarella, basil.", "sku": "PIZZA-MARG-01", "dish_type": "veg", "price": "9.99", "currency": "USD", "is_active": true, "is_taxable": true, "extra_tax_percentage": "0.00", "image": null, "category": { "id": "8a1e2b3c-4d5e-6f70-8192-a3b4c5d6e7f8", "name": "Pizza", "dish_count": "12" }, "sub_menu": { "id": "1a2b3c4d-5e6f-7081-92a3-b4c5d6e7f8a9", "name": "Dinner Menu", "is_active": true }, "kitchen": { "id": "2b3c4d5e-6f70-8192-a3b4-c5d6e7f8a9b0", "name": "Main Kitchen" }, "menu_set": { "id": "3c4d5e6f-7081-92a3-b4c5-d6e7f8a9b0c1", "name": "All Day", "service": "dine_in", "status": "unused" }, "price_variants": [ { "id": "4d5e6f70-8192-a3b4-c5d6-e7f8a9b0c1d2", "name": "Regular", "price": "9.99", "currency": "USD" }, { "id": "5e6f7081-92a3-b4c5-d6e7-f8a9b0c1d2e3", "name": "Large", "price": "13.99", "currency": "USD" } ], "addons": [] }]| Field | Type | Description |
|---|---|---|
id |
uuid | Internal identifier for the dish. |
sku |
string | The dish’s own SKU — echo this back as item_id when placing an order. See Your First Order in the API Reference. |
name, description |
string | Display fields. |
dish_type |
enum | One of veg, non_veg, halal, vegan, gluten_free, sugar_free (or blank/null). |
price, currency |
string | Base price and currency. |
price_variants |
array | Alternate sizes/prices for the same dish. |
addons |
array | Available add-ons for this dish (see ThirdPartyAddOn in the API Reference). |
category, sub_menu, kitchen, menu_set |
object | Nested classification objects — full shape in the API Reference. |
Next steps
Section titled “Next steps”- Place your first order with
POST /v1/third-party/orders/, echoing a dish’sskuback asitem_id— full request/response schemas in the API Reference. - Learn why list endpoints return the full array at once in Pagination.
- Learn what error responses look like in Error Handling.
