Ir para o conteúdo principal

Cardápio público

O endpoint sem chave que retorna o cardápio de um restaurante exatamente como um cliente o vê.

No key needed. What delimenu.co/{identifier} shows.

Cada operação traz seu curl e sua resposta de exemplo; as chaves e os ids dos exemplos são fictícios. Os campos marcados com * são obrigatórios.

Public menu of a restaurant

get/menus/{identifier}públicogetPublicMenu

The 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

NomeOndeDescrição
identifier*caminhoThe slug in the public URL: delimenu.co/{identifier}

Exemplo

curl -X GET "https://delimenu.co/api/v1/menus/pizzeria-roma"

Resposta 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 da resposta

CampoTipoDescrição
restaurant*object
id*string
identifier*string
name*string
currency*stringISO 4217 code every price is in
type*"whatsapp" | "read_only""whatsapp" takes orders by WhatsApp; "read_only" only shows the menu
phone*string | nullWhatsApp 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
translationsobjectThe 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`.
esobject
namestring
enobject
namestring
ptobject
namestring
frobject
namestring
deobject
namestring
itobject
namestring
position*integer1-based display positionmin -9007199254740991 · max 9007199254740991
products*object[]
id*string
category_id*string
name*string
price*numberMajor units in the restaurant's currency
original_pricenumberPresent while the product is on promotion
descriptionstring
available*booleanfalse renders "Sin stock"
hidden*booleantrue keeps it off the public menu
has_image*boolean
image_urlstring
variants*object[]
id*string
name*string
min_selections*integermin -9007199254740991 · max 9007199254740991
max_selections*integer0 is no limitmin -9007199254740991 · max 9007199254740991
max_per_optionintegermin -9007199254740991 · max 9007199254740991
options*object[]
translationsobjectThe 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`.
translationsobjectName 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`.
esobject
enobject
ptobject
frobject
deobject
itobject

Erros

  • 403 RESTAURANT_UNAVAILABLE — the restaurant exists but has no active plan; only its name is returned
  • 404 NOT_FOUND — no such restaurant in this account, or no such item in it
  • 500 INTERNAL — something failed on our side; retry in a moment

Desenvolvedores