- Desarrolladores
- Referencia de la API
- Productos
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
/restaurants/{ref}/productsrequiere menu:readlistProductsEvery product, hidden ones included and flagged. With q, only those whose name or description contains the text.
Parámetros
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
q | query | Only 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
| Campo | Tipo | Descripción |
|---|---|---|
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[] | |
id* | string | |
name* | string | |
price* | number | Extra charge on top of the product price |
show* | boolean | |
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 | 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 | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
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 | |
name | string | |
description | string | |
en | object | |
name | string | |
description | string | |
pt | object | |
name | string | |
description | string | |
fr | object | |
name | string | |
description | string | |
de | object | |
name | string | |
description | string | |
it | object | |
name | string | |
description | string | |
count* | integer | min -9007199254740991 · max 9007199254740991 |
Errores
400VALIDATION — a field is missing or malformed; `issues` names it401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment
Create a product
/restaurants/{ref}/productsrequiere menu:writecreateProductAdds 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
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
Cuerpo (JSON)
| Campo | Tipo | Descripción |
|---|---|---|
category_id* | string | The category the product belongs to (from get_menu)hasta 128 caracteres |
name* | string | Product namehasta 50 caracteres |
price* | number | Price in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0 |
description | string | Optional description. Pass an empty string to remove it.hasta 3000 caracteres |
original_price | number | null | The price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0 |
available | boolean | false shows the product as "Sin stock": visible but not orderable. Default true. |
hidden | boolean | true keeps the product off the public menu entirely. Default false. |
variants | object[] | 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* | string | Variant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres |
translations | object | The 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. |
es | object | |
name | string | The name in that languagehasta 50 caracteres |
en | object | |
name | string | The name in that languagehasta 50 caracteres |
pt | object | |
name | string | The name in that languagehasta 50 caracteres |
fr | object | |
name | string | The name in that languagehasta 50 caracteres |
de | object | |
name | string | The name in that languagehasta 50 caracteres |
it | object | |
name | string | The name in that languagehasta 50 caracteres |
min_selections | integer | Options the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0 |
max_selections | integer | Options the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0 |
max_per_option | integer | How many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991 |
options* | object[] | |
name* | string | Option name, e.g. "Grande"hasta 50 caracteres |
translations | object | The 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. |
es | object | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
price | number | Extra charge for this option on top of the product price. 0 when it costs nothing.min 0 · por defecto 0 |
show | boolean | false hides the option from diners without deleting itpor defecto true |
translations | object | The 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. |
es | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
en | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
pt | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
fr | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
de | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
it | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The 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
| Campo | Tipo | Descripción |
|---|---|---|
product* | 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[] | |
id* | string | |
name* | string | |
price* | number | Extra charge on top of the product price |
show* | boolean | |
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 | 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 | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
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 | |
name | string | |
description | string | |
en | object | |
name | string | |
description | string | |
pt | object | |
name | string | |
description | string | |
fr | object | |
name | string | |
description | string | |
de | object | |
name | string | |
description | string | |
it | object | |
name | string | |
description | string |
Errores
400VALIDATION — a field is missing or malformed; `issues` names it401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment
Update many products
/restaurants/{ref}/productsrequiere menu:writebulkUpdateProductsApplies 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
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
Cuerpo (JSON)
| Campo | Tipo | Descripción |
|---|---|---|
updates* | object[] | Up to 50 products, each with only the fields to change |
product_id* | string | hasta 128 caracteres |
changes* | object | |
category_id | string | Move the product to another categoryhasta 128 caracteres |
name | string | Product namehasta 50 caracteres |
price | number | Price in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0 |
description | string | Optional description. Pass an empty string to remove it.hasta 3000 caracteres |
original_price | number | null | The price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0 |
available | boolean | false shows the product as "Sin stock": visible but not orderable. Default true. |
hidden | boolean | true keeps the product off the public menu entirely. Default false. |
variants | object[] | 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* | string | Variant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres |
translations | object | The 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_selections | integer | Options the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0 |
max_selections | integer | Options the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0 |
max_per_option | integer | How many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991 |
options* | object[] | |
translations | object | The 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. |
es | object | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object |
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
| Campo | Tipo | Descripción |
|---|---|---|
updated* | integer | min -9007199254740991 · max 9007199254740991 |
Errores
400VALIDATION — a field is missing or malformed; `issues` names it401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment
Get a product
/restaurants/{ref}/products/{id}requiere menu:readgetProducttranslations is present only where something is translated: on the product (name, description) and inside each variant and option (name).
Parámetros
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
id* | ruta | The 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
| Campo | Tipo | Descripción |
|---|---|---|
product* | 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[] | |
id* | string | |
name* | string | |
price* | number | Extra charge on top of the product price |
show* | boolean | |
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 | 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 | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
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 | |
name | string | |
description | string | |
en | object | |
name | string | |
description | string | |
pt | object | |
name | string | |
description | string | |
fr | object | |
name | string | |
description | string | |
de | object | |
name | string | |
description | string | |
it | object | |
name | string | |
description | string |
Errores
401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment
Update a product
/restaurants/{ref}/products/{id}requiere menu:writeupdateProductChanges 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
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
id* | ruta | The product id, from GET /restaurants/{ref}/products |
Cuerpo (JSON)
| Campo | Tipo | Descripción |
|---|---|---|
category_id | string | Move the product to another categoryhasta 128 caracteres |
name | string | Product namehasta 50 caracteres |
price | number | Price in the restaurant's currency, in major units (12500 for COP $12.000, 5.99 for USD $5.99). Never cents.min 0 |
description | string | Optional description. Pass an empty string to remove it.hasta 3000 caracteres |
original_price | number | null | The price before a promotion. Must be greater than price; the menu shows it struck through. Pass null to end the promotion.min 0 |
available | boolean | false shows the product as "Sin stock": visible but not orderable. Default true. |
hidden | boolean | true keeps the product off the public menu entirely. Default false. |
variants | object[] | 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* | string | Variant name, e.g. "Tamaño" or "Adiciones"hasta 50 caracteres |
translations | object | The 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. |
es | object | |
name | string | The name in that languagehasta 50 caracteres |
en | object | |
name | string | The name in that languagehasta 50 caracteres |
pt | object | |
name | string | The name in that languagehasta 50 caracteres |
fr | object | |
name | string | The name in that languagehasta 50 caracteres |
de | object | |
name | string | The name in that languagehasta 50 caracteres |
it | object | |
name | string | The name in that languagehasta 50 caracteres |
min_selections | integer | Options the diner must pick. 0 makes the variant optional.min 0 · max 9007199254740991 · por defecto 0 |
max_selections | integer | Options the diner may pick. 0 is no limit; 1 renders a single choice.min 0 · max 9007199254740991 · por defecto 0 |
max_per_option | integer | How many times one option may be repeated. Omit or 0 for no limit.min 0 · max 9007199254740991 |
options* | object[] | |
name* | string | Option name, e.g. "Grande"hasta 50 caracteres |
translations | object | The 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. |
es | object | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
price | number | Extra charge for this option on top of the product price. 0 when it costs nothing.min 0 · por defecto 0 |
show | boolean | false hides the option from diners without deleting itpor defecto true |
translations | object | The 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. |
es | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
en | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
pt | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
fr | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
de | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The description in that languagehasta 3000 caracteres |
it | object | |
name | string | The product name in that languagehasta 50 caracteres |
description | string | The 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
| Campo | Tipo | Descripción |
|---|---|---|
product* | 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[] | |
id* | string | |
name* | string | |
price* | number | Extra charge on top of the product price |
show* | boolean | |
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 | 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 | |
en | object | |
pt | object | |
fr | object | |
de | object | |
it | object | |
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 | |
name | string | |
description | string | |
en | object | |
name | string | |
description | string | |
pt | object | |
name | string | |
description | string | |
fr | object | |
name | string | |
description | string | |
de | object | |
name | string | |
description | string | |
it | object | |
name | string | |
description | string |
Errores
400VALIDATION — a field is missing or malformed; `issues` names it401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment
Delete a product
/restaurants/{ref}/products/{id}requiere menu:writedeleteProductPermanent, photo included. Prefer hidden: true when the owner may want it back.
Parámetros
| Nombre | Dónde | Descripción |
|---|---|---|
ref* | ruta | The restaurant identifier (the slug in its public URL, e.g. "pizzeria-roma") or its id, as returned by GET /restaurants |
id* | ruta | The 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
| Campo | Tipo | Descripción |
|---|---|---|
deleted* | string |
Errores
401UNAUTHORIZED — the key is missing, unknown or revoked402NOT_PREMIUM — the restaurant has no active subscription or trial403FORBIDDEN — the key lacks the scope this endpoint needs404NOT_FOUND — no such restaurant in this account, or no such item in it500INTERNAL — something failed on our side; retry in a moment