Ir para o conteúdo principal

Restaurantes

Os restaurantes da conta da chave: listá-los, ler o cardápio completo e editar seus dados.

The restaurants of the account the key belongs to.

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.

List the restaurants of the account

get/restaurantsrequer menu:readlistRestaurants

Call this first; every other endpoint takes one of these by identifier or id.

Exemplo

curl -X GET "https://delimenu.co/api/v1/restaurants" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Resposta 200

{
  "restaurants": [
    {
      "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"
      ],
      "trial_active": false
    }
  ]
}

Campos da resposta

CampoTipoDescrição
restaurants*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.
trial_active*boolean

Erros

  • 401 UNAUTHORIZED — the key is missing, unknown or revoked
  • 402 NOT_PREMIUM — the restaurant has no active subscription or trial
  • 403 FORBIDDEN — the key lacks the scope this endpoint needs
  • 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

Get a restaurant

get/restaurants/{ref}requer menu:readgetRestaurant

Parâmetros

NomeOndeDescrição
ref*caminhoThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants

Exemplo

curl -X GET "https://delimenu.co/api/v1/restaurants/pizzeria-roma" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

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"
    ],
    "trial_active": false
  }
}

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.
trial_active*boolean

Erros

  • 401 UNAUTHORIZED — the key is missing, unknown or revoked
  • 402 NOT_PREMIUM — the restaurant has no active subscription or trial
  • 403 FORBIDDEN — the key lacks the scope this endpoint needs
  • 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

Update a restaurant

patch/restaurants/{ref}requer menu:writeupdateRestaurant

Changes only the fields given: name, WhatsApp phone, address, currency, type, language (the primary one) or languages (the additional ones, never the primary). Changing the currency converts no prices and changing a language translates nothing. The identifier has its own endpoint.

Parâmetros

NomeOndeDescrição
ref*caminhoThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants

Corpo (JSON)

CampoTipoDescrição
namestringaté 50 caracteres
phonestringWhatsApp number that receives orders, in E.164 format (+573001234567)
addressstringStreet address shown on the menu. Empty string removes it.até 65 caracteres
currencystringISO 4217 code every price is shown in. Changing it converts nothing.
type"whatsapp" | "read_only""whatsapp" takes orders by WhatsApp; "read_only" only shows the menu
language"es" | "en" | "pt" | "fr" | "de" | "it"The primary language of the menu: the one its names and descriptions are written in, and the one WhatsApp orders are composed in. Changing it translates nothing. If the new one was among `languages`, it is taken out of that list.
languages"es" | "en" | "pt" | "fr" | "de" | "it"[]Up to 3 additional languages diners can read the menu in, translated by hand through `translations`. Never the primary language. Replaces the whole list; [] leaves the menu in one language.

Exemplo

curl -X PATCH "https://delimenu.co/api/v1/restaurants/pizzeria-roma" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+573009876543","address":"Carrera 7 # 45-10, Bogotá"}'

Resposta 200

{
  "restaurant": {
    "id": "aR3kX9pLm2QzT7vN4bYc",
    "identifier": "pizzeria-roma",
    "name": "Pizzería Roma",
    "currency": "COP",
    "type": "whatsapp",
    "phone": "+573009876543",
    "address": "Carrera 7 # 45-10, 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"
    ],
    "trial_active": false
  }
}

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.
trial_active*boolean

Erros

  • 400 VALIDATION — a field is missing or malformed; `issues` names it
  • 401 UNAUTHORIZED — the key is missing, unknown or revoked
  • 402 NOT_PREMIUM — the restaurant has no active subscription or trial
  • 403 FORBIDDEN — the key lacks the scope this endpoint needs
  • 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

Change the public URL

put/restaurants/{ref}/identifierrequer menu:writeupdateRestaurantIdentifier

Changes the slug of the menu (delimenu.co/{identifier}). The old URL stops working immediately; printed QR codes keep working because they point at the restaurant id.

Parâmetros

NomeOndeDescrição
ref*caminhoThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants

Corpo (JSON)

CampoTipoDescrição
identifier*stringThe new public slug: lowercase letters, digits, dots, hyphens and underscores, e.g. "pizzeria-roma"até 50 caracteres

Exemplo

curl -X PUT "https://delimenu.co/api/v1/restaurants/pizzeria-roma/identifier" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"identifier":"pizzeria-roma-chapinero"}'

Resposta 200

{
  "restaurant": {
    "id": "aR3kX9pLm2QzT7vN4bYc",
    "identifier": "pizzeria-roma-chapinero",
    "name": "Pizzería Roma",
    "currency": "COP",
    "type": "whatsapp",
    "phone": "+573001234567",
    "address": "Calle 10 # 5-20, Bogotá",
    "menu_url": "https://delimenu.co/pizzeria-roma-chapinero",
    "logo_url": "https://firebasestorage.googleapis.com/v0/b/example/o/logo_512x512.png?alt=media",
    "banner_url": null,
    "language": "es",
    "languages": [
      "en"
    ],
    "trial_active": false
  }
}

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.
trial_active*boolean

Erros

  • 400 VALIDATION — a field is missing or malformed; `issues` names it
  • 401 UNAUTHORIZED — the key is missing, unknown or revoked
  • 402 NOT_PREMIUM — the restaurant has no active subscription or trial
  • 403 FORBIDDEN — the key lacks the scope this endpoint needs
  • 404 NOT_FOUND — no such restaurant in this account, or no such item in it
  • 409 CONFLICT — the identifier is already taken
  • 500 INTERNAL — something failed on our side; retry in a moment

Get the whole menu

get/restaurants/{ref}/menurequer menu:readgetMenu

Every category in display order, each with its products in display order, prices, availability and variants. Hidden products are omitted unless include_hidden is true. Uncategorized products are listed apart.

Parâmetros

NomeOndeDescrição
ref*caminhoThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants
include_hiddenqueryAlso return the products hidden from the public menu

Exemplo

curl -X GET "https://delimenu.co/api/v1/restaurants/pizzeria-roma/menu?include_hidden=true" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

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"
    ],
    "trial_active": false
  },
  "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
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "uncategorized_products": [],
  "hidden_products_omitted": 2,
  "note": "Prices are in COP, major units."
}

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.
trial_active*boolean
categories*object[]
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
uncategorized_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[]
id*string
name*string
price*numberExtra charge on top of the product price
show*boolean
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`.
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
enobject
ptobject
frobject
deobject
itobject
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
namestring
descriptionstring
enobject
namestring
descriptionstring
ptobject
namestring
descriptionstring
frobject
namestring
descriptionstring
deobject
namestring
descriptionstring
itobject
namestring
descriptionstring
hidden_products_omitted*integermin -9007199254740991 · max 9007199254740991
note*string

Erros

  • 400 VALIDATION — a field is missing or malformed; `issues` names it
  • 401 UNAUTHORIZED — the key is missing, unknown or revoked
  • 402 NOT_PREMIUM — the restaurant has no active subscription or trial
  • 403 FORBIDDEN — the key lacks the scope this endpoint needs
  • 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