Definiciones
Catálogos múltiples
Para tiendas que contratan servicios como para recoger, es posible gestionar diferentes catálogos para cada tipo de operación. Esto te permite tener diferentes precios, disponibilidad o incluso diferentes categorías y artículos.![]()

Categoria
La categoría es la entidad en la que puedes almacenar tus artículos para que sea más fácil para el usuario encontrarlos o querer comprarlos. Las categorías tienen estados de venta de pausado y activado.En pausa
Cuando una categoría está en pausa, todos los artículos contenidos en esa categoría se pausarán automáticamente y no se mostrarán al consumidor final.
Cuando una categoría tiene todos sus elementos pausados por separado, se pausa automáticamente.Activado
Cuando se activa una categoría, se muestra al consumidor final, por lo que tenemos elementos de contenido que tienen su propio estado de venta.
Cuando una categoría tiene artículos con diferentes estados de venta, cuando están en pausa, todos los artículos también se pausan y cuando se reactivan, los artículos vuelven a sus estados originales (en pausa o activados, como antes).Categoría de artículo
Categoría de artículo es una categoría formada por artículos genéricos que pueden o no tener grupos de adiciones y adiciones.![]()

Categoria de pizza
La categoría de pizza es una categoría, en el Portal do Parceiro, con un template que contiene tamaños de pizza, masas, bordes y sabores, lo que facilita el registro. Para integraciones es necesario crear una categoría con template PIZZA y asociar la pizza previamente creada en esa categoría, pasando los valores de sus sabores, bordes y masas.![]()
Arquitectura de la Información - Categorías![]()

Producto
El producto es la entidad del catálogo que contiene toda la información general. Ellas son: Nombre, descripción, código externo, imagen, disponibilidad en turnos, talla, restricciones dietéticas y EAN (European Article Number), utilizado principalmente por mercados. El producto se puede ofrecer en un catálogo como item principal o adicional. Y, para una misma tienda, incluso se puede reutilizar en diferentes catálogos.Personas por porción
El tamaño del producto es fundamental para saber de que tamaño es el hambre, por ejemplo:
¿Este producto es ideal para 1, 2, 3 o 4 personas?
Se da el caso de que este tamaño no se aplica también al producto, como las bebidas.![]()

Grupo de Adiciones
El grupo de adiciones es la entidad utilizada para agrupar las personalizaciones de un producto, por ejemplo: "Elige tu bebida:"Un grupo de adiciones puede ser compartido por varios elementos siempre que estén contenidos en la misma categoría.![]()
Obligatorio
El grupo de adiciones puede ser obligatorio u opcional.Obligatorio
En los casos de grupos de adiciones obligatorias, el usuario final deberá seleccionar al menos la cantidad mínima configurada de opciones dentro del grupo para poder realizar la compra. Las adiciones obligatorias tienen una cantidad mínima y máxima, y la máxima debe ser un número mayor que la mínima![]()
Opcional
En los casos de un grupo de adiciones opcionales, el usuario puede comprar el producto sin que se muestre ninguna opción. Las adiciones opcionales no tienen una cantidad mínima pero sí una cantidad máxima.![]()

Adiciones
Las adiciones son las opciones de un grupo de adiciones. Se puede definir como: “Un producto relacionado con un grupo de adiciones”. La adición tiene su propio estado de venta, pudiendo pausar o activarse cuando sea necesario. Es posible que una adición le cueste R$ 0,00 independientemente de si es obligatorio u opcional.![]()

Restricciones Dietéticas
El producto se puede caracterizar en base a algunas restricciones dietéticas, tales como:- Vegano
- Vegetariano
- Orgánico
- Sin gluten
- Sin azúcar
- Cero lactosa
Las restricciones dietéticas son información opcional y el producto puede contener más de una opción seleccionada.![]()

Disponibilidad en turnos
Para productos que solo se venden en determinados periodos de la semana, es posible configurar su disponibilidad por turnos. Por ejemplo:
Cazuela de frijoles solo se vende los miércoles de 10:00 a 16:00Siempre disponible
Cuando se selecciona un artículo como siempre disponible, se verá cada vez que la tienda esté abierta y el estado de venta (Como artículo principal o Adición) esté activado.![]()
Disponible en días y horarios específicos
Cuando un artículo se selecciona como disponible en días y horarios específicos, el usuario puede seleccionar qué días estará disponible el artículo, en qué horarios y/o crear turnos.![]()

![]()

Item
El Item puede considerarse una oferta de producto.
Análogamente a las adiciones, el item es un producto relacionado con la categoría.
Los item tags tienen como objetivo proporcionar información sobre las características del item, a diferencia de una product tag, la item tag puede ser transitiva, es decir, el mismo producto puede venderse en congelado o no.Disponibilidad
El elemento tiene dos estados, habilitado y en pausa.
Se configuran para definir si el artículo debe aparecer o no a la venta.
En caso de un artículo en pausa, aunque se configure una disponibilidad de turno, el artículo no aparecerá a la venta.![]()

Inventario
Le permite agregar una cantidad máxima que se puede vender un producto determinado. Si se crea un inventario para un producto con cantidad 10, solo se pueden vender 10 artículos relacionados con ese producto. Después de que se puedan vender 10 productos, el producto se marcará como "Agotado" y ya no se venderá.Código externo (integración)
El código externo, también conocido como PDV, es la identificación que la tienda puede añadir a sus artículos para que, al recibir el pedido, pueda realizar algún tipo de integración, por ejemplo, el control de stock.![]()

Fijación de precios
La venta de un producto siempre está relacionada con su precio. Este precio puede variar dependiendo de dónde se encuentre el producto (Como artículo principal o adición), o agregando precios promocionales al Item.ItemEl precio del item se da en la oferta de un producto en una categoría.![]()

![]()
Precio al por mayorCaracterística exclusiva
Esta función no está disponible actualmente para restaurantes. En caso de que un colaborador que sea un restaurante intente utilizar esta función, se emitirá un error de permiso denegado (403). Si está interesado en usar las funciones de esta API, comuníquese con nuestro Equipo de soporte. Además del precio regular, también puede asignar precios personalizados que dependen de la cantidad comprada del artículo. Para usar la función de precio al por mayor, simplemente agregue el campo a continuación al cuerpo en las API de creación y edición de elementos."scale_prices": [
{
"min": 1,
"value": 9.99
},
{
"min": 10,
"value": 8.99
}
]
Según el ejemplo anterior, el precio del artículo será de R$ 9,99 si el cliente compra una cantidad de hasta 9 de este artículo. Si el cliente compra más de 9, el precio será de R$ 8,99.AdiciónEl precio de la adición se basa en la oferta de un producto en un grupo de adiciones.
A diferencia del item, no tiene funcionalidad de precios promocionales.![]()

Pizza
La pizza es un producto que tiene características predefinidas, a saber: Tamaños, masas, bordes, sabores y disponibilidad en turnos. El producto pizza solo se puede asociar a una categoría tipo PIZZA. A través del portal, esta asociación es automática, pero para las integraciones es necesario crear la Pizza, crear la Categoría y finalmente asociar los dos.
Los precios de sabores, bordes y masas pueden, a través de las API de integración, ser diferentes en diferentes catálogos (Delivery / On the Table).![]()

Tamaño
El tamaño de la pizza se define por algunos aspectos:- Nombre, tradicionalmente "Pequeño", "Medio" y "Grande", pero se puede personalizar.
- Número de piezas en que se corta cada uno de los tamaños.
- Número de fracciones, es decir, este tamaño se puede vender ½ sabor 1 y ½ sabor 2. Se puede dividir hasta en 4 fracciones
![]()

Massa
La masa es una personalización de la pizza, ejemplo: “Tradicional”, “Integral” y puede tener un precio adicional al costo de la pizza, si se configura. Tradicional hoy en día viene por defecto para el usuario pero no se aborda en la API.![]()

Borde
El borde, al igual que la masa, es una personalización de la pizza, ejemplo: “Borde con relleno de queso” y puede tener un precio adicional al costo de la pizza, si se configura. Tradicional hoy en día viene por defecto para el usuario pero no se aborda en la API.![]()

Sabor
El sabor define qué tipos de pizza se venden. Los sabores tienen un precio por cada tamaño, por ejemplo:
Pepperoni Grande - $ 50.000
Peperoni Pequeño - $ 25.000![]()

En diferentes catálogos los sabores pueden tener precios diferentes para cada tamaño.
Utilizando la API
Listado de catálogos
El primer paso en las API de catálogo es el listado de catálogos, a través de la API GET /merchants/{merchantId}/catalogs. Actualmente contamos con los catálogos DEFAULT e INDOOR, indicando que este catálogo es para Entrega.Solicitud:curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs' \
--header 'Authorization: Bearer TOKEN
Respuesta:[
{
"catalogId": "10e0fbbe-7279-4ee3-9a2f-caf1f93f7b8e",
"context": ["DEFAULT"],
"status": "AVAILABLE",
"modifiedAt": 1597350642.71608
}
]
Listado de categorías
Con la identificación del catálogo en la mano, es posible enumerar todas las categorías y artículos en un catálogo a través de la API GET /merchants/{merchantId}/catalogs/{catalogId}/categories.Solicitud:curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs/10e0fbbe-7279-4ee3-9a2f-caf1f93f7b8e/categories?include_items=true \
--header 'Authorization: Bearer TOKEN
Respuesta:[]
Como aún no hemos agregado nada a nuestro catálogo, ¡devolverá una lista vacía!
Siguiendo los siguientes pasos aprenderás a armar tu catálogo.Creación de una categoría (artículos simples)
Como se explicó anteriormente, la categoría es un agrupador de items. Así que vamos a crear nuestra primera categoría. Para ello, utilizaremos la API POST /merchants/{merchantId}/catalogs/{catalogId}/categories.Solicitud:curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs/10e0fbbe-7279-4ee3-9a2f-caf1f93f7b8e/categories' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Lanches",
"status": "AVAILABLE",
"template": "DEFAULT",
"sequence": 0
}'
Respuesta:{
"id": "4e6d3f79-f003-4992-8d4f-4c48d7ac5284",
"name": "Lanches",
"sequence": 0,
"status": "AVAILABLE",
"template": "DEFAULT"
}
![]()

Creando un producto
El producto, como se mencionó anteriormente, lleva toda la información principal de los ítems o adiciones que están a la venta. Este es un ejemplo de creación de un producto, que se puede realizar mediante la API POST /merchants/{merchantId}/products.curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/products' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "X-Burger",
"description": "Pão, carne e queijo",
"externalCode": "BG-1",
"image": "",
"shifts": [
{
"startTime": "00:00",
"endTime": "23:59",
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
}
],
"serving": "SERVES_1",
"dietaryRestrictions": [
"ORGANIC"
],
"ean": ""
}'
Respuesta:{
"id": "ec16fb62-7bdd-43e4-940c-10b5a2845f13",
"name": "X-burger",
"description": "Pão, carne e queijo",
"externalCode": "BG-1",
"image": "",
"shifts": [
{
"startTime": [0, 0],
"endTime": [23, 59],
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
}
],
"serving": "SERVES_1",
"dietaryRestrictions": ["ORGANIC"],
"ean": ""
}
Creando un Item
Una vez creado el producto, ¡es hora de que lo asocies a una categoría y empieces a venderlo!
Para ello utilizamos la API de creación de artículos POST /merchants/{merchantId}/categories/{categoryId}/products/{productId} y en ella puede decidir a qué precio se venderá este artículo.curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/categories/4e6d3f79-f003-4992-8d4f-4c48d7ac5284/products/ec16fb62-7bdd-43e4-940c-10b5a2845f13' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"status": "AVAILABLE",
"price": {
"value": 20,
"originalValue": 30
},
"externalCode": "BG-1",
"sequence": 0
}'
Respuesta:{
"status": "AVAILABLE",
"price": {
"value": 20,
"originalValue": 30
},
"externalCode": "BG-1"
}
![]()

Descubriendo los Items que están a la venta en el catálogo
Este endpoint devuelve todos los artículos que están en oferta en el menú : GET /merchants/{merchantId}/catalogs/{groupId}/sellableItems
El groupId es la información devuelta como parámetro de la respuesta del endpoint GET /merchants/{merchantId}/catalogscurl --location --request https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs/ffca0022-eb43-4205-9a1b-73a72f8e3f95/sellableItems --header 'Authorization: Bearer TOKEN
Respuesta:[
{
"itemId": "ec16fb62-7bdd-43e4-940c-10b5a2845f13",
"categoryId": "4e6d3f79-f003-4992-8d4f-4c48d7ac5284",
"itemEan": "",
"itemExternalCode": "BG-1",
"categoryName": "Lanches",
"categoryIndex": 0,
"itemName": "X-burger",
"itemDescription": "Pão, carne e queijo",
"itemAdditionalInformation": "",
"logosUrls": [],
"itemIndex": 0,
"itemPrice": {
"value": 20,
"originalValue": 30
},
"itemMinSalePrice": 20,
"itemSchedules": [],
"itemPackaging": "string",
"itemQuantity": 0,
"itemUnit": "string",
"itemOptionGroups": [],
"itemSellingOption": {
"minimum": 0,
"incremental": 0,
"availableUnits": [
"g"
]
},
"itemGeneralTags": [],
"itemProductTags": [
{
"group": "PORTION_SIZE",
"tags": [
"SERVES_2"
]
}
]
}
]
Descubriendo los Items que no están a la venta en el catálogo y entender por qué
Este endpoint devuelve todos los items que no están a la venta en el menú con el motivo de la restricción: GET /merchants/{merchantId}/catalogs/{catalogId}/unsellableItemscurl --location --request https://merchant-api.ifood.com.br/catalog/v1.0/merchants/1cdfa2d0-6c89-4ca8-a544-3b39009fe03c/catalogs/1cdfa2d0-6c89-4ca8-a544-3b39009fe03c/unsellableItems --header 'Authorization: Bearer TOKEN
Respuesta:{
"categories": []
}
Creación de un inventario para un producto
curl -X POST "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/inventory"
-H "accept: application/json" -H "Content-Type: application/json"
-d "{\"productId\":\"ec16fb62-7bdd-43e4-940c-10b5a2845f13\",\"amount\":10,\"inStock\":true}"
Listado del inventario de un producto
curl -X GET "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/inventory/ec16fb62-7bdd-43e4-940c-10b5a2845f13"
-H "accept: application/json""
Eliminación de un inventario de productos
curl -X POST "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/inventory/batchDelete"
-H "accept: */*" -H "Content-Type: application/json"
-d "{\"productIds\":[\"ec16fb62-7bdd-43e4-940c-10b5a2845f13\"]}"
Creación de un grupo de adiciones
Puedes personalizar tus productos creando grupos de adiciones, por ejemplo bebidas para tus snacks. Para eso necesitarás crear tu grupo, asociarlo a tu producto y finalmente asociar los productos que quieras tener como adiciones en este grupo.
Esto se puede hacer a través de la API POST /merchants/{merchantId}/optionGroups.curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/optionGroups' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Escolha sua bebida"
}'
Resposta:{
"id": "daf9ba2c-dca9-43b1-b02a-0fc2c4b01967",
"name": "Escolha sua bebida"
}
![]()

Los grupos de adiciones con un mínimo de 1 se consideran obligatorios, por lo que, si bien no existe una opción para que el usuario seleccione, los artículos asociados con ese grupo no aparecerán en la aplicación iFood para ser vendidos.
El filtro includeOptions
admite un máximo de 10.000 opciones. Si el catálogo tiene un número de opciones superior a este límite, la API puede devolver un error (InternalServerError).
Creación de una adición
Al igual que el Item, es necesario crear un producto antes de asociarlo con el grupo de adiciones.
Entonces, comencemos con eso, a través de API POST /merchants/{merchantId}/products:curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/products' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Coca-cola lata",
"description": "300 ml",
"externalCode": "LT-1",
"image": "",
"shifts": [
],
"serving": "NOT_APPLICABLE",
"dietaryRestrictions": [
],
"ean": ""
}'
Respuesta:{
"id": "5f3d5725-dea8-4c82-bdf6-5fb401c243f6",
"name": "Coca-Cola lata",
"description": "300 ml",
"externalCode": "LT-1",
"image": "",
"shifts": [
{
"startTime": [0, 0],
"endTime": [23, 59, 59],
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
}
],
"serving": "NOT_APPLICABLE",
"dietaryRestrictions": [],
"ean": ""
}
Con el producto en la mano, ¡es hora de agregarlo al grupo de complementos!
Esto se hará a través de la API POST /merchants/{merchantId}/optionGroups/{optionGroupId}/products/{productId}:curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/optionGroups/daf9ba2c-dca9-43b1-b02a-0fc2c4b01967/products/5f3d5725-dea8-4c82-bdf6-5fb401c243f6/option' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"status": "AVAILABLE",
"price": {
"value": 5
},
"externalCode": "LT-1",
"sequence": 0
}'
Respuesta:{
"status": "AVAILABLE",
"price": {
"value": 5
},
"externalCode": "LT-1",
"sequence": 0
}
![]()

Validando el catálogo
Con todo registrado, ¿vamos a ver cómo quedó la lista de categorías de tu catálogo?
Como se mencionó anteriormente, se utilizará la API GET /merchants/{merchantId}/catalogs/{catalogId}/categoriescurl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs/10e0fbbe-7279-4ee3-9a2f-caf1f93f7b8e/categories?includeItems=true \
--header 'Authorization: Bearer TOKEN
Resultado:[
{
"id": "4e6d3f79-f003-4992-8d4f-4c48d7ac5284",
"name": "Lanches",
"status": "AVAILABLE",
"sequence": 0,
"template": "DEFAULT",
"items": [
{
"id": "a51939d2-e2d6-4bf5-8161-f957bc4ee895",
"name": "X-burger",
"description": "Pão, carne e queijo",
"externalCode": "BG-1",
"status": "AVAILABLE",
"sequence": 0,
"productId": "ec16fb62-7bdd-43e4-940c-10b5a2845f13",
"imagePath": "",
"price": {
"value": 20,
"originalValue": 30
},
"shifts": [
{
"startTime": "00:00",
"endTime": "23:59",
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": true
}
],
"serving": "SERVES_1",
"dietaryRestrictions": ["ORGANIC"],
"optionGroups": [
{
"id": "daf9ba2c-dca9-43b1-b02a-0fc2c4b01967",
"name": "Escolha sua bebida",
"min": 0,
"max": 1,
"sequence": 0,
"status": "AVAILABLE",
"options": [
{
"id": "02740dbe-bfc0-4609-aabd-55316590638e",
"name": "Coca-Cola lata",
"description": "300 ml",
"externalCode": "LT-1",
"status": "AVAILABLE",
"sequence": 0,
"imagePath": "",
"price": {
"value": 5
}
}
]
}
]
}
]
}
]
Cambio de precio de artículos y adiciones en Batch - Async
Es posible editar el precio en batch por producto o código externo. El siguiente ejemplo usa el código externo, pero si desea usar el ID del producto, simplemente reemplaza el campo
"externalCode":"burguerX43"
por "productId":"058dd32f-3b26-41e9-aa39-30a64d3f2b81"
.Solicitud: curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/products/price' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '[{
"externalCode":"burguerX43",
"price": {
"value":25,
"originalValue":30
},
"resources":["ITEM", "OPTION"]
}]'
- Para actualizar solo ITEM, el campo de
resources
debe ser igual a "resources":["ITEM"]
. Lo mismo ocurre con las OPTIONS.
Respuesta{
"batchId": "311afcf1-541a-41af-a9a5-4651d676731e",
"url": "/v1.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/batch/311afcf1-541a-41af-a9a54651d676731e"
}
Seguimiento de operaciones en Batch
Las operaciones en Batch se pueden realizar en situaciones como, por ejemplo, actualizar muchos productos.
Para verificar qué operaciones fueron exitosas o no, y si el batch completo ya se procesó, usamos la API de listado de resultados de operaciones por batch GET /merchants/{merchantId}/batch/{batchId}curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/batch/bca9a293-b121-4027-b3e3-bce675581fbd' \
--header 'Authorization: Bearer TOKEN'
Resultado:{
"batchStatus": "COMPLETED",
"results": [
{
"resourceId": "fd1c993b-4882-44e7-8c21-aa7d637ccdf8",
"result": "SUCCESS"
},
{
"resourceId": "ec16fb62-7bdd-43e4-940c-10b5a2845f13",
"result": "SUCCESS"
}
]
}
Pizza
La API permite utilizar las categorías con el template PIZZA como se hace en el Portal do Parceiro. Para ello, existen APIs específicas para realizar esta gestión. A continuación se muestra una guía paso a paso sobre cómo registrar tu primera pizza en la plataforma iFood.Creación de una categoría de pizza
Primero, creamos una categoría de Pizza a través de la API POST /merchants/{merchantId}/catalogs/{catalogId}/categoriesSolicitud:curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/ff4e9e03-588c-4c15-8d16-3225b795c1d0/catalogs/2b642cd5-8076-40d0-9b88-1da507f8a4b4/categories' \
--header 'Content-Type: application/json' \
--data-raw '{
"externalCode": "pz1",
"name": "Pizzas Salgadas",
"sequence": 0,
"status": "AVAILABLE",
"template": "PIZZA"
}'
Respuesta:{
"id": "175dbe63-4a63-46f9-ae5f-6f98bd79b67b",
"name": "Pizzas Salgadas",
"externalCode": "pz1",
"sequence": 0,
"status": "AVAILABLE",
"template": "PIZZA"
}
Una categoría con template PIZZA sin una pizza asociada aún no es compatible con el Portal do Parceiro, por esta razón, una vez creada, solo aparecerá cuando tenga una pizza asociada.
Creación de un producto de pizza
Con la categoría creada, análoga al producto y al item, vamos a crear un producto de pizza que va a contener todos sus tamaños, masas, bordes y sabores.
Esto se hará a través de la API POST /merchants/{merchantId}/pizzasSolicitud:curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/7f357e2c-599d-4023-8930-e39a778338d6/pizzas' \
--header 'Content-Type: application/json' \
--data-raw '{
"crusts": [
{
"name": "Massa Tradicional",
"sequence": 0,
"status": "AVAILABLE",
"externalCode": "M1"
}
],
"edges": [
{
"name": "Borda de Catupiry",
"sequence": 0,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00",
"endTime": "23:15",
"monday": true,
"tuesday": true,
"wednesday": true,
"thursday": true,
"friday": true,
"saturday": true,
"sunday": false
}
],
"sizes": [
{
"acceptedFractions": [
1
],
"name": "Grande",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE",
"externalCode": "G1"
}
],
"toppings": [
{
"description": "Calabresa com queijo",
"externalCode": "C1",
"name": "Calabresa",
"sequence": 0,
"status": "AVAILABLE",
"dietaryRestrictions": [
"ORGANIC"
]
}
]
}'
Respuesta:{
"id": "ecb42fd8-a735-4ffa-90be-04e01e12e96f",
"toppings": [
{
"description": "Calabresa com queijo",
"name": "Calabresa",
"externalCode": "C1",
"id": "2ef286ec-e968-43cb-a450-df1183e60f46",
"sequence": 0,
"status": "AVAILABLE",
"dietaryRestrictions": ["ORGANIC"]
}
],
"crusts": [
{
"id": "0c3b2a90-463a-4892-be85-7c461da05248",
"sequence": 0,
"name": "Massa Tradicional",
"status": "AVAILABLE",
"ownerId": "7f357e2c-599d-4023-8930-e39a778338d6",
"externalCode": "M1"
}
],
"edges": [
{
"id": "d0bc788f-8bc1-4cbc-bcb0-95bdf532e8f2",
"name": "Borda de Catupiry",
"sequence": 0,
"status": "AVAILABLE"
}
],
"sizes": [
{
"id": "b08a8cbf-3bd0-44a6-8cec-ddb73b659f3c",
"acceptedFractions": [1],
"externalCode": "G1",
"name": "Grande",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00 GMT-0300 (GMT-03:00)",
"endTime": "23:15:00 GMT-0300 (GMT-03:00)",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}
Asociar un producto de pizza a una categoría
Finalmente, con la categoría y el producto pizza creados, es hora de asociarlos. ¡En esta asociación es necesario pasar el precio de cada uno de los componentes del producto pizza para empezar a venderlos!
Los tamaños de pizza no tienen precio, sin embargo, debe pasar el precio de cada tamaño dentro del objeto de sabores.
Para ello se utilizará la API POST /merchants/{merchantId}/pizzas/{pizzaId}/categories/{categoryId}curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/7f357e2c-599d-4023-8930-e39a778338d6/pizzas/ecb42fd8-a735-4ffa-90be-04e01e12e96f/categories/99fe1c07-5d4e-42d9-90f4-9d16931d0aec' \
--header 'Content-Type: application/json' \
--data-raw '{
"catalogId": "91720b2e-7dad-424e-9af6-996eb9dd49ad",
"crusts": [
{
"id": "0c3b2a90-463a-4892-be85-7c461da05248",
"price": {
"value": 0
}
}
],
"edges": [
{
"id": "d0bc788f-8bc1-4cbc-bcb0-95bdf532e8f2",
"price": {
"value": 5
}
}
],
"toppings": [
{
"id": "2ef286ec-e968-43cb-a450-df1183e60f46",
"prices": {
"b08a8cbf-3bd0-44a6-8cec-ddb73b659f3c": {
"value": 45
}
}
}
]
}'
Respuesta:{
"id": "ecb42fd8-a735-4ffa-90be-04e01e12e96f",
"toppings": [
{
"description": "Calabresa com queijo",
"name": "Calabresa",
"externalCode": "C1",
"id": "2ef286ec-e968-43cb-a450-df1183e60f46",
"sequence": 0,
"status": "AVAILABLE",
"prices": {
"b08a8cbf-3bd0-44a6-8cec-ddb73b659f3c": {
"value": 45
}
},
"dietaryRestrictions": ["ORGANIC"]
}
],
"crusts": [
{
"id": "0c3b2a90-463a-4892-be85-7c461da05248",
"sequence": 0,
"name": "Massa Tradicional",
"status": "AVAILABLE",
"ownerId": "7f357e2c-599d-4023-8930-e39a778338d6",
"price": {
"id": "cc426276-f65c-4eff-8f4b-9ef39341e655",
"value": 0,
"promotionalFromPrice": 0,
"effectiveStart": 1600271268.573968,
"customizationOptionId": "0c3b2a90-463a-4892-be85-7c461da05248",
"type": "CUSTOMIZATION_OPTION"
},
"externalCode": "M1"
}
],
"edges": [
{
"id": "d0bc788f-8bc1-4cbc-bcb0-95bdf532e8f2",
"name": "Borda de Catupiry",
"sequence": 0,
"status": "AVAILABLE",
"price": {
"value": 5
}
}
],
"sizes": [
{
"id": "b08a8cbf-3bd0-44a6-8cec-ddb73b659f3c",
"acceptedFractions": [1],
"externalCode": "G1",
"name": "Grande",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00 GMT-0300 (GMT-03:00)",
"endTime": "23:15:00 GMT-0300 (GMT-03:00)",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}
Edición del producto Pizza
Una vez creado, es posible editar un producto de pizza a través de la API PUT /merchants/{merchantId}/pizzas/{pizzaId}. Si está asociado en más de una categoría al mismo tiempo, estos cambios se aplicarán en todos los lugares donde esté asociado ese producto.Solicitud:curl --location --request PUT 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/ff4e9e03-588c-4c15-8d16-3225b795c1d0/pizzas/5b82a9d0-02e0-4bf2-98bc-6f27e06627ed' \
--header 'Content-Type: application/json' \
--data-raw '{
"id": "5b82a9d0-02e0-4bf2-98bc-6f27e06627ed",
"toppings": [
{
"description": "Edited-string",
"name": "Edited-bbb-Toppin",
"externalCode": "Edited-string",
"id": "26819c3b-cacb-40c1-97ae-44ffa348c107",
"sequence": 0,
"status": "UNAVAILABLE",
"dietaryRestrictions": [
"VEGAN"
]
}
],
"crusts": [
{
"id": "fc8f873c-e0f7-4054-865b-0920b34cc31d",
"sequence": 2,
"name": "Edited-BBB-Crust",
"status": "AVAILABLE",
"ownerId": "ff4e9e03-588c-4c15-8d16-3225b795c1d0",
"externalCode": "666"
}
],
"edges": [
{
"id": "cac27696-168d-4fbb-9353-dbefbeca0b1b",
"name": "Edited-BBB-edge",
"sequence": 2,
"status": "AVAILABLE"
}
],
"sizes": [
{
"id": "b602db20-51ce-40a6-acd8-bb6516f4da08",
"acceptedFractions": [
1
],
"externalCode": "666",
"name": "Edited-AAA-Size",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00",
"endTime": "23:15:00",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}'
Respuesta:{
"id": "5b82a9d0-02e0-4bf2-98bc-6f27e06627ed",
"toppings": [
{
"description": "Edited-string",
"name": "Edited-bbb-Toppin",
"externalCode": "Edited-string",
"id": "26819c3b-cacb-40c1-97ae-44ffa348c107",
"sequence": 0,
"status": "UNAVAILABLE",
"dietaryRestrictions": ["VEGAN"]
}
],
"crusts": [
{
"id": "fc8f873c-e0f7-4054-865b-0920b34cc31d",
"sequence": 2,
"name": "Edited-BBB-Crust",
"status": "AVAILABLE",
"ownerId": "ff4e9e03-588c-4c15-8d16-3225b795c1d0",
"externalCode": "666"
}
],
"edges": [
{
"id": "cac27696-168d-4fbb-9353-dbefbeca0b1b",
"name": "Edited-BBB-edge",
"sequence": 2,
"status": "AVAILABLE"
}
],
"sizes": [
{
"id": "b602db20-51ce-40a6-acd8-bb6516f4da08",
"acceptedFractions": [1],
"externalCode": "666",
"name": "Edited-AAA-Size",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00 GMT-0300 (GMT-03:00)",
"endTime": "23:15:00 GMT-0300 (GMT-03:00)",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}
Cambiar el precio de la pizza por código externo en Batch: Async
Solicitud: curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/{merchantId}/pizzas/pricesByExternalCode' \
--header 'accept: application/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"crusts": [
{
"crustExternalCode": "crustPDV",
"price": {
"value": 20,
"originalValue": 30
}
}
],
"edges": [
{
"edgeExternalCode": "edgePDV",
"price": {
"value": 20,
"originalValue": 30
}
}
],
"toppings": [
{
"toppingExternalCode": "toppingPDV",
"sizeExternalCode": "sizePDV",
"price": {
"value": 20,
"originalValue": 30
}
}
]
}'
Respuesta{
"batchId": "e58cae69-f731-49ce-8578-df63357e7f0b",
"url": "/v1.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/batch/e58cae69-f731-49ce-8578-df63357e7f0b"
}
Listado de productos de pizza
Si has creado varios productos de pizza, por ejemplo, "Pizza Salada" y "Pizza dulce", puede enumerarlos para verificar los atributos a través de la API GET /merchants/{merchantId}/pizzas.curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/ff4e9e03-588c-4c15-8d16-3225b795c1d0/pizzas'
Respuesta:[
{
"id": "5b82a9d0-02e0-4bf2-98bc-6f27e06627ed",
"toppings": [
{
"description": "Edited-string",
"name": "Edited-bbb-Toppin",
"externalCode": "Edited-string",
"id": "26819c3b-cacb-40c1-97ae-44ffa348c107",
"sequence": 0,
"status": "UNAVAILABLE",
"dietaryRestrictions": ["VEGAN"]
}
],
"crusts": [
{
"id": "fc8f873c-e0f7-4054-865b-0920b34cc31d",
"sequence": 2,
"name": "Edited-BBB-Crust",
"status": "AVAILABLE",
"ownerId": "ff4e9e03-588c-4c15-8d16-3225b795c1d0",
"externalCode": "666"
}
],
"edges": [
{
"id": "cac27696-168d-4fbb-9353-dbefbeca0b1b",
"name": "Edited-BBB-edge",
"sequence": 2,
"status": "AVAILABLE"
}
],
"sizes": [
{
"id": "b602db20-51ce-40a6-acd8-bb6516f4da08",
"acceptedFractions": [1],
"externalCode": "666",
"name": "Edited-AAA-Size",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00 GMT-0300 (GMT-03:00)",
"endTime": "23:15:00 GMT-0300 (GMT-03:00)",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}
]
Agregar un sabor a una pizza existente
Si deseas agregar un sabor a una pizza existente, se requieren 2 solicitudes.1 - Edita el producto de pizza a través del endpoint /merchants/{merchantId}/pizzas/{pizzaId}. Todas las entidades deben estar presentes en el payload con sus ID, excepto el nuevo tipo que se creará y aún no lo tiene, como en la siguiente payload.[
{
"id": "5b82a9d0-02e0-4bf2-98bc-6f27e06627ed",
"toppings": [
{
"description": "Edited-string",
"name": "Edited-bbb-Toppin",
"externalCode": "Edited-string",
"id": "26819c3b-cacb-40c1-97ae-44ffa348c107",
"sequence": 0,
"status": "UNAVAILABLE",
"dietaryRestrictions": ["VEGAN"]
},
{
"description": "string",
"name": "Novo Sabor",
"externalCode": "string",
"sequence": 0,
"status": "AVAILABLE",
"dietaryRestrictions": ["VEGAN"]
}
],
"crusts": [
{
"id": "fc8f873c-e0f7-4054-865b-0920b34cc31d",
"sequence": 2,
"name": "Edited-BBB-Crust",
"status": "AVAILABLE",
"ownerId": "ff4e9e03-588c-4c15-8d16-3225b795c1d0",
"externalCode": "666"
}
],
"edges": [
{
"id": "cac27696-168d-4fbb-9353-dbefbeca0b1b",
"name": "Edited-BBB-edge",
"sequence": 2,
"status": "AVAILABLE"
}
],
"sizes": [
{
"id": "b602db20-51ce-40a6-acd8-bb6516f4da08",
"acceptedFractions": [1],
"externalCode": "666",
"name": "Edited-AAA-Size",
"sequence": 0,
"slices": 8,
"status": "AVAILABLE"
}
],
"shifts": [
{
"startTime": "00:00:00 GMT-0300 (GMT-03:00)",
"endTime": "23:15:00 GMT-0300 (GMT-03:00)",
"monday": true,
"wednesday": true,
"tuesday": true,
"thursday": true,
"sunday": false,
"saturday": true,
"friday": true
}
]
}
]
2 - Asigna el precio de este nuevo sabor al tamaño existente, a través de la api [POST /merchants/{merchantId}/pizzas/prices].
Suponiendo que el id del nuevo sabor es ba60a17c-5b46-415b-b1ee-61c49302de5c, la carga útil de la solicitud sería:{
"catalogId": "91720b2e-7dad-424e-9af6-996eb9dd49ad",
"crusts": [],
"edges": [],
"toppings": [
{
"id": "ba60a17c-5b46-415b-b1ee-61c49302de5c",
"prices": {
"b602db20-51ce-40a6-acd8-bb6516f4da08": {
"value": 10,
"originalValue": 30
}
}
}
]
}
Edición del status de la pizza
Puedes pausar y activar los componentes de pizza a través de API PATCH /merchants/{merchantId}/pizzas/{pizzaId}:Solicitud:curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v1.0/merchants/ff4e9e03-588c-4c15-8d16-3225b795c1d0/pizzas/5b82a9d0-02e0-4bf2-98bc-6f27e06627ed' \
--header 'Content-Type: text/plain' \
--data-raw '{
"status": "UNAVAILABLE",
"sizeIds": [
"b602db20-51ce-40a6-acd8-bb6516f4da08"
],
"crustIds": [
"fc8f873c-e0f7-4054-865b-0920b34cc31d"
],
"edgeIds": [
"cac27696-168d-4fbb-9353-dbefbeca0b1b"
],
"toppingIds": [
"26819c3b-cacb-40c1-97ae-44ffa348c107"
]
}'
Respuesta:200 - OK