Ir al contenido principal

Productos

Listar, crear, editar y borrar productos, uno a uno o muchos a la vez.

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.

List or search the products

get/restaurants/{ref}/productsrequiere menu:readlistProducts

Every product, hidden ones included and flagged. With q, only those whose name or description contains the text.

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants
qqueryOnly products whose name or description contains this text (accent- and case-insensitive)hasta 100 caracteres

Ejemplo

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

Respuesta 200

{
  "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
            }
          ]
        }
      ]
    }
  ],
  "count": 1
}

Campos de la respuesta

CampoTipoDescripción
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
count*integermin -9007199254740991 · max 9007199254740991

Errores

  • 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

Create a product

post/restaurants/{ref}/productsrequiere menu:writecreateProduct

Adds a product to a category, at the end. Price is in the restaurant's currency, major units. Variants are optional choices (sizes, extras) with their own option prices.

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants

Cuerpo (JSON)

CampoTipoDescripción
category_id*stringThe category the product belongs to (from get_menu)hasta 128 caracteres
name*stringProduct namehasta 50 caracteres
price*numberPrice in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0
descriptionstringOptional description. Pass an empty string to remove it.hasta 3000 caracteres
original_pricenumber | nullThe price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0
availablebooleanfalse shows the product as "Sin stock": visible but not orderable. Default true.
hiddenbooleantrue keeps the product off the public menu entirely. Default false.
variantsobject[]Choices the diner makes (sizes, extras). Replaces the whole list when provided; a variant or option sent without translations keeps the ones stored under the same name.
name*stringVariant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres
translationsobjectThe variant name in the menu's other languages, e.g. { "en": { "name": "Size" } }. Omit it to keep the translations of the stored variant with the same name; {} removes them.
esobject
namestringThe name in that languagehasta 50 caracteres
enobject
namestringThe name in that languagehasta 50 caracteres
ptobject
namestringThe name in that languagehasta 50 caracteres
frobject
namestringThe name in that languagehasta 50 caracteres
deobject
namestringThe name in that languagehasta 50 caracteres
itobject
namestringThe name in that languagehasta 50 caracteres
min_selectionsintegerOptions the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0
max_selectionsintegerOptions the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0
max_per_optionintegerHow many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991
options*object[]
name*stringOption name, e.g. "Grande"hasta 50 caracteres
translationsobjectThe option name in the menu's other languages, e.g. { "en": { "name": "Large" } }. Omit it to keep the translations of the stored option with the same name; {} removes them.
esobject
enobject
ptobject
frobject
deobject
itobject
pricenumberExtra charge for this option on top of the product price. 0 when it costs nothing.min 0 · por defecto 0
showbooleanfalse hides the option from diners without deleting itpor defecto true
translationsobjectThe product name and description in the menu's other languages, e.g. { "en": { "name": "Lemonade", "description": "Freshly squeezed" } }. Keyed by language code (es, en, pt, fr, de, it). Shown to diners who read the menu in that language; a language without a translation falls back to the original text, and an entry in the menu's primary language is ignored. Replaces the whole map when provided; {} removes every translation. Variant and option names are translated inside each variant and option.
esobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
enobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
ptobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
frobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
deobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
itobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres

Ejemplo

curl -X POST "https://delimenu.co/api/v1/restaurants/pizzeria-roma/products" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"category_id":"k3Qm8vXb2LpN7wRt1YaZ","name":"Pizza Margarita","price":32000,"description":"Tomate, mozzarella y albahaca fresca","variants":[{"name":"Tamaño","min_selections":1,"max_selections":1,"options":[{"name":"Personal","price":0},{"name":"Familiar","price":12000}]}]}'

Respuesta 201

{
  "product": {
    "id": "p9Hs4TqL2mNc8VbX6Rdy",
    "category_id": "k3Qm8vXb2LpN7wRt1YaZ",
    "name": "Pizza Margarita",
    "price": 32000,
    "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

CampoTipoDescripción
product*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

Errores

  • 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

Update many products

patch/restaurants/{ref}/productsrequiere menu:writebulkUpdateProducts

Applies a patch to up to 50 products in one write — for "raise every price 10%" or "mark these as out of stock". Same fields as updating one product.

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants

Cuerpo (JSON)

CampoTipoDescripción
updates*object[]Up to 50 products, each with only the fields to change
product_id*stringhasta 128 caracteres
changes*object
category_idstringMove the product to another categoryhasta 128 caracteres
namestringProduct namehasta 50 caracteres
pricenumberPrice in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0
descriptionstringOptional description. Pass an empty string to remove it.hasta 3000 caracteres
original_pricenumber | nullThe price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0
availablebooleanfalse shows the product as "Sin stock": visible but not orderable. Default true.
hiddenbooleantrue keeps the product off the public menu entirely. Default false.
variantsobject[]Choices the diner makes (sizes, extras). Replaces the whole list when provided; a variant or option sent without translations keeps the ones stored under the same name.
name*stringVariant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres
translationsobjectThe variant name in the menu's other languages, e.g. { "en": { "name": "Size" } }. Omit it to keep the translations of the stored variant with the same name; {} removes them.
min_selectionsintegerOptions the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0
max_selectionsintegerOptions the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0
max_per_optionintegerHow many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991
options*object[]
translationsobjectThe product name and description in the menu's other languages, e.g. { "en": { "name": "Lemonade", "description": "Freshly squeezed" } }. Keyed by language code (es, en, pt, fr, de, it). Shown to diners who read the menu in that language; a language without a translation falls back to the original text, and an entry in the menu's primary language is ignored. Replaces the whole map when provided; {} removes every translation. Variant and option names are translated inside each variant and option.
esobject
enobject
ptobject
frobject
deobject
itobject

Ejemplo

curl -X PATCH "https://delimenu.co/api/v1/restaurants/pizzeria-roma/products" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"updates":[{"product_id":"p9Hs4TqL2mNc8VbX6Rdy","changes":{"price":35000}},{"product_id":"q2Jk5Lm8Np1Qr4St7Uv0","changes":{"available":false}}]}'

Respuesta 200

{
  "updated": 2
}

Campos de la respuesta

CampoTipoDescripción
updated*integermin -9007199254740991 · max 9007199254740991

Errores

  • 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

Get a product

get/restaurants/{ref}/products/{id}requiere menu:readgetProduct

translations is present only where something is translated: on the product (name, description) and inside each variant and option (name).

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants
id*rutaThe product id, from GET /restaurants/{ref}/products

Ejemplo

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

Respuesta 200

{
  "product": {
    "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,
            "translations": {
              "en": {
                "name": "Family"
              }
            }
          }
        ],
        "translations": {
          "en": {
            "name": "Size"
          }
        }
      }
    ],
    "translations": {
      "en": {
        "name": "Margherita Pizza",
        "description": "Tomato, mozzarella and fresh basil"
      }
    }
  }
}

Campos de la respuesta

CampoTipoDescripción
product*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

Errores

  • 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 product

patch/restaurants/{ref}/products/{id}requiere menu:writeupdateProduct

Changes only the fields given: name, price, description, original_price (promotion), available, hidden, variants (replaces all), translations (replaces all) or category_id (moves it). Raising price above an existing original_price ends the promotion. A variant or option sent without translations keeps the ones stored under the same name, so repricing an option does not erase them; send translations: {} on it to remove them.

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants
id*rutaThe product id, from GET /restaurants/{ref}/products

Cuerpo (JSON)

CampoTipoDescripción
category_idstringMove the product to another categoryhasta 128 caracteres
namestringProduct namehasta 50 caracteres
pricenumberPrice in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0
descriptionstringOptional description. Pass an empty string to remove it.hasta 3000 caracteres
original_pricenumber | nullThe price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0
availablebooleanfalse shows the product as "Sin stock": visible but not orderable. Default true.
hiddenbooleantrue keeps the product off the public menu entirely. Default false.
variantsobject[]Choices the diner makes (sizes, extras). Replaces the whole list when provided; a variant or option sent without translations keeps the ones stored under the same name.
name*stringVariant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres
translationsobjectThe variant name in the menu's other languages, e.g. { "en": { "name": "Size" } }. Omit it to keep the translations of the stored variant with the same name; {} removes them.
esobject
namestringThe name in that languagehasta 50 caracteres
enobject
namestringThe name in that languagehasta 50 caracteres
ptobject
namestringThe name in that languagehasta 50 caracteres
frobject
namestringThe name in that languagehasta 50 caracteres
deobject
namestringThe name in that languagehasta 50 caracteres
itobject
namestringThe name in that languagehasta 50 caracteres
min_selectionsintegerOptions the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0
max_selectionsintegerOptions the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0
max_per_optionintegerHow many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991
options*object[]
name*stringOption name, e.g. "Grande"hasta 50 caracteres
translationsobjectThe option name in the menu's other languages, e.g. { "en": { "name": "Large" } }. Omit it to keep the translations of the stored option with the same name; {} removes them.
esobject
enobject
ptobject
frobject
deobject
itobject
pricenumberExtra charge for this option on top of the product price. 0 when it costs nothing.min 0 · por defecto 0
showbooleanfalse hides the option from diners without deleting itpor defecto true
translationsobjectThe product name and description in the menu's other languages, e.g. { "en": { "name": "Lemonade", "description": "Freshly squeezed" } }. Keyed by language code (es, en, pt, fr, de, it). Shown to diners who read the menu in that language; a language without a translation falls back to the original text, and an entry in the menu's primary language is ignored. Replaces the whole map when provided; {} removes every translation. Variant and option names are translated inside each variant and option.
esobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
enobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
ptobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
frobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
deobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres
itobject
namestringThe product name in that languagehasta 50 caracteres
descriptionstringThe description in that languagehasta 3000 caracteres

Ejemplo

curl -X PATCH "https://delimenu.co/api/v1/restaurants/pizzeria-roma/products/p9Hs4TqL2mNc8VbX6Rdy" \
  -H "Authorization: Bearer dmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"price":30000,"original_price":38000,"translations":{"en":{"name":"Margherita Pizza","description":"Tomato, mozzarella and fresh basil"}}}'

Respuesta 200

{
  "product": {
    "id": "p9Hs4TqL2mNc8VbX6Rdy",
    "category_id": "k3Qm8vXb2LpN7wRt1YaZ",
    "name": "Pizza Margarita",
    "price": 30000,
    "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,
            "translations": {
              "en": {
                "name": "Family"
              }
            }
          }
        ],
        "translations": {
          "en": {
            "name": "Size"
          }
        }
      }
    ],
    "translations": {
      "en": {
        "name": "Margherita Pizza",
        "description": "Tomato, mozzarella and fresh basil"
      }
    }
  }
}

Campos de la respuesta

CampoTipoDescripción
product*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

Errores

  • 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

Delete a product

delete/restaurants/{ref}/products/{id}requiere menu:writedeleteProduct

Permanent, photo included. Prefer hidden: true when the owner may want it back.

Parámetros

NombreDóndeDescripción
ref*rutaThe restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants
id*rutaThe product id, from GET /restaurants/{ref}/products

Ejemplo

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

Respuesta 200

{
  "deleted": "p9Hs4TqL2mNc8VbX6Rdy"
}

Campos de la respuesta

CampoTipoDescripción
deleted*string

Errores

  • 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

Desarrolladores