- Desarrolladores
- Referencia de la API
- Menú público
Menú público
El endpoint sin clave que devuelve la carta de un restaurante tal como la ve un comensal.
No key needed. What delimenu.co/{identifier} shows.
Cada operación trae su curl y su respuesta de ejemplo; las claves y los ids de los ejemplos son ficticios. Los campos marcados con * son obligatorios.
Public menu of a restaurant
/menus/{identifier}públicogetPublicMenuThe categories with at least one visible product, in display order, each with its visible products in display order. Hidden products and empty categories are never included. restaurant.language is the language name and description are written in, and restaurant.languages the ones the menu is translated into: to render one of those, read translations[code] on each category, product, variant and option and fall back to the original field when it is missing. Cached at the edge and refreshed on every change the owner makes; a differently-cased identifier is redirected to the lowercase one.
Parámetros
| Nombre | Dónde | Descripción |
|---|---|---|
identifier* | ruta | The slug in the public URL: delimenu.co/{identifier} |
Ejemplo
curl -X GET "https://delimenu.co/api/v1/menus/pizzeria-roma"Respuesta 200
{
"restaurant": {
"id": "aR3kX9pLm2QzT7vN4bYc",
"identifier": "pizzeria-roma",
"name": "Pizzería Roma",
"currency": "COP",
"type": "whatsapp",
"phone": "+573001234567",
"address": "Calle 10 # 5-20, Bogotá",
"menu_url": "https://delimenu.co/pizzeria-roma",
"logo_url": "https://firebasestorage.googleapis.com/v0/b/example/o/logo_512x512.png?alt=media",
"banner_url": null,
"language": "es",
"languages": [
"en"
]
},
"categories": [
{
"id": "k3Qm8vXb2LpN7wRt1YaZ",
"name": "Pizzas",
"position": 1,
"products": [
{
"id": "p9Hs4TqL2mNc8VbX6Rdy",
"category_id": "k3Qm8vXb2LpN7wRt1YaZ",
"name": "Pizza Margarita",
"price": 32000,
"original_price": 38000,
"description": "Tomate, mozzarella y albahaca fresca",
"available": true,
"hidden": false,
"has_image": true,
"image_url": "https://firebasestorage.googleapis.com/v0/b/example/o/margarita_1080x1080.jpg?alt=media",
"variants": [
{
"id": "26fed9f6-2e3b-4310-b899-5641bf98e2f0",
"name": "Tamaño",
"min_selections": 1,
"max_selections": 1,
"options": [
{
"id": "5c4f8896-06a3-4482-99d1-185a909d0415",
"name": "Personal",
"price": 0,
"show": true
},
{
"id": "b1e0c4d2-7f3a-4c8e-9d21-0a5f6e7b8c9d",
"name": "Familiar",
"price": 12000,
"show": true
}
]
}
]
}
]
}
]
}Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
restaurant* | object | |
id* | string | |
identifier* | string | |
name* | string | |
currency* | string | ISO 4217 code every price is in |
type* | "whatsapp" | "read_only" | "whatsapp" takes orders by WhatsApp; "read_only" only shows the menu |
phone* | string | null | WhatsApp number in E.164, when ordering is enabled |
address* | string | null | |
menu_url* | string | |
logo_url* | string | null | |
banner_url* | string | null | |
language* | "es" | "en" | "pt" | "fr" | "de" | "it" | The primary language: the one name, description and every untranslated field are written in |
languages* | "es" | "en" | "pt" | "fr" | "de" | "it"[] | The additional languages diners can read the menu in, translated through `translations`. Empty for a menu in one language. |
categories* | object[] | Categories with at least one visible product, in display order |
id* | string | |
name* | string | |
translations | object | The name in other languages, keyed by language code, e.g. { "en": { "name": "Large" } }. Absent when nothing is translated; a language missing here falls back to `name`. |
es | object | |
name | string | |
en | object | |
name | string | |
pt | object | |
name | string | |
fr | object | |
name | string | |
de | object | |
name | string | |
it | object | |
name | string | |
position* | integer | 1-based display positionmin -9007199254740991 · max 9007199254740991 |
products* | object[] | |
id* | string | |
category_id* | string | |
name* | string | |
price* | number | Major units in the restaurant's currency |
original_price | number | Present while the product is on promotion |
description | string | |
available* | boolean | false renders "Sin stock" |
hidden* | boolean | true keeps it off the public menu |
has_image* | boolean | |
image_url | string | |
variants* | object[] | |
id* | string | |
name* | string | |
min_selections* | integer | min -9007199254740991 · max 9007199254740991 |
max_selections* | integer | 0 is no limitmin -9007199254740991 · max 9007199254740991 |
max_per_option | integer | min -9007199254740991 · max 9007199254740991 |
options* | object[] | |
translations | object | The name in other languages, keyed by language code, e.g. { "en": { "name": "Large" } }. Absent when nothing is translated; a language missing here falls back to `name`. |
translations | object | Name and description in other languages, keyed by language code. Absent when nothing is translated; a language or field missing here falls back to `name` / `description`. |
es | object | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object |
Errores
403RESTAURANT_UNAVAILABLE — the restaurant exists but has no active plan; only its name is returned404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment