logo
logo

Definiciones

La arquitectura se basa en catálogos y se pueden utilizar en diferentes contextos. Hoy tenemos 2 contextos predefinidos (Entrega, Catálogo Digital), sin embargo se pueden crear nuevos contextos. La estructura del catálogo está unificada y compartida en todos los contextos, siendo posible modificar el precio y el estado para cada contexto. Tenemos las categorías, tipos de artículos, grupos de adiciones y adiciones. Si un elemento o adición está disponible solo en un contexto, debe dejarse como no disponible en los otros.Micro visiónPara las tiendas que contratan un solo servicio, como iFood Delivery, la vista se puede simplificar como se ve a continuación.
Para tiendas que contraten más de un servicio como Menú Digital y iFood Delivery, es posible gestionar el catálogo con modificaciones para cada tipo de operativa. Esto te permite tener diferentes precios y estados, con las mismas disponibilidades, categorías y artículos.
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 es una categoría formada por artículos genéricos que pueden o no tener grupos de adiciones y adiciones.La categoría de pizza es una categoría en el portal de socios para un tipo específico de artículo: pizza. La pizza necesita necesariamente grupos de complementos de los tipos tamaño, masa, filo y sabor. Para las integraciones, es necesario usar el endpoint PUT item omitiendo la identificación de la categoría al crear el elemento, por lo que la categoría de tipo de pizza se crea automáticamente.Arquitectura de la Información - Categorías
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.
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ínimaOpcional 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.
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.
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.
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.
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.
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á.
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.El código externo es único entre los productos de la tienda, es decir, si se crea un producto con el mismo external_code que un producto existente en la tienda, se reutiliza el producto existente en lugar de crear el producto informado en la solicitud. Esta regla también se aplica al PUT item.
La venta de un producto siempre está relacionada con su precio. Este precio puede variar dependiendo de dónde se encuentre este producto (Como artículo principal o complemento), o agregando precios promocionales al artículo. También es posible que los precios de un artículo sean diferentes según el contexto en el que se ofrece (Entrega o Catálogo Digital).ItemEl precio del item se da en la oferta de un producto en una categoría.Precio al por mayor
Caracterí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.
La pizza es un producto que tiene 4 grupos de complementos obligatorios, a saber: Tamaños, masas, bordes y sabores.El producto pizza solo se puede asociar a una categoría de tipo PIZZA. A través del portal, esta asociación es automática, pero para las integraciones es necesario usar endpoint PUT item omitiendo el id de categoría al crear el artículo, por lo que la categoría de tipo de pizza se crea automáticamente.El precio y la disponibilidad de sabores, bordes y masas pueden, a través de las API de integración, ser diferentes en diferentes contextos.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
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.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.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.
En la nueva versión de la api, hemos hecho que la estructura del catálogo sea unificada y compartida entre contextos, siendo posible modificar diferentes precios y estados para cada contexto.¿Que significa eso? Si tu tienda tiene más de un servicio iFood (por ejemplo iFood Delivery y Menú Digital), se ha facilitado la gestión de ambos contextos.Los artículos y complementos se comparten entre contextos sin necesidad de crear o editar dos catálogos diferentes. Se agregó el parámetro catalogContext en los endpoints relacionados con artículos y complementos, para informar en qué contexto se debe realizar la operación, si no se informa el parámetro, el cambio se refleja en todos los contextos.Se hizo una adición importante: ahora, en la devolución de las entidades que representan artículos, incluimos un nuevo objeto llamado contextModifier. Este objeto contiene los ID que se asociarán con este artículo en diferentes contextos. Por ejemplo, el itemContextId del contexto DEFAULT será el ID utilizado cuando haya un pedido para ese artículo en el contexto de entrega. Ejemplo de objeto:
"contextModifiers": [
    {
        "catalogContext": "WHITELABEL",
        "itemContextId": "83cd029d-d833-42dd-bbd6-017c12312968"
    },
    {
        "catalogContext": "DEFAULT",
        "itemContextId": "d2e6820e-cc5c-42e3-99db-c180c2bcf4ad"
    }
]
Otra novedad es el punto final para la creación y edición de un Artículo Completo, donde es posible crear un artículo y sus complementos con una sola solicitud.Finalmente, Pizza ha sido remodelada y ya no tiene puntos finales únicos. Ahora bien, es un artículo con características predefinidas. Por lo tanto, las API de Pizza NO son compatibles con versiones anteriores de V2 y la gestión de elementos de tipo Pizza ya no la realizan puntos finales específicos de Pizza. Para utilizar la nueva versión de la API, es necesario actualizar la versión del catálogo de la tienda.La versión actual de catálogo se puede consultar a través del endpoint GET Version.Esto se puede hacer llamando el endpoint Upgrade Version, la respuesta es un ID de batch ya que el proceso se realiza de forma asíncrona y debe ser acompañada por el endpoint GET Batch.Es posible elegir si el proceso debe limpiar todo el catálogo o si los artículos se deben mantener a través del query param cleanMigration.Los artículos mantenidos pueden tener sus IDs cambiados, por lo tanto, después de la migración, se recomienda recrear los artículos en la base de la integradora utilizando el endpoint de listado por categorías, incluyendo los artículos Listando categorias. Recuerda que el campo contextModifier devolverá los IDs de cada contexto, que se mostrarán en las órdenes.Si es necesario devolver la tienda a la versión 1.0, con la gestión separada de cada menú, es posible invertir el procedimiento con el endpoint Downgrade Version.No será posible realizar réplicas entre menús que se encuentren en versiones diferentes.

Utilizando la API

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/v2.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
  }
]
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/v2.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/catalogs/10e0fbbe-7279-4ee3-9a2f-caf1f93f7b8e/categories?include_items=true \
--header 'Authorization: Bearer TOKEN
Respuesta:
[]
Aquí tenemos un ejemplo del resultado de este endpoint con un artículo ya creado:Ejemplo de respuesta:
[
  {
    "id": "a8533d43-aec8-467c-adf6-8a24791829a0",
    "name": "Lanches",
    "status": "AVAILABLE",
    "sequence": 0,
    "index": 0,
    "template": "DEFAULT",
    "items": [
      {
        "id": "16ae5fc9-7e34-4623-8a0c-722d12fd49e9",
        "name": "X-Burguer",
        "description": "Pão, carne, queijo e salada",
        "externalCode": "xburguer_wl",
        "status": "AVAILABLE",
        "sequence": 0,
        "index": 0,
        "productId": "fdb50f52-7b62-46f7-a574-f3bc00c3f673",
        "imagePath": "",
        "price": {
          "value": 10,
          "originalValue": 15
        },
        "shifts": [
          {
            "startTime": "00:00",
            "endTime": "20:59",
            "monday": true,
            "tuesday": true,
            "wednesday": true,
            "thursday": true,
            "friday": true,
            "saturday": true,
            "sunday": true
          }
        ],
        "serving": "SERVES_2",
        "dietaryRestrictions": [
          
        ],
        "optionGroups": [
          {
            "id": "13736a09-ac48-4f8f-bcb1-56d6a5dcdf33",
            "name": "Acompanhamentos",
            "min": 0,
            "max": 1,
            "sequence": 0,
            "index": 0,
            "status": "AVAILABLE",
            "options": [
              {
                "id": "105f9323-0afb-41a1-b8af-13851424c603",
                "name": "Batata Frita",
                "description": "200 g",
                "externalCode": "option_fritas_wl",
                "productId": "38cea6cb-19d5-42b4-87b9-f46c90e7bc1d",
                "status": "UNAVAILABLE",
                "sequence": 0,
                "index": 0,
                "price": {
                  "value": 20
                }
              },
              {
                "id": "78490bf7-a924-4eb2-94a3-4489eadd4f3c",
                "name": "Onion Rings",
                "description": "200 g",
                "externalCode": "option_onion_ring_wl",
                "productId": "0f309165-3c72-468c-bdf5-637b272bc09c",
                "status": "AVAILABLE",
                "sequence": 1,
                "index": 1,
                "price": {
                  "value": 3
                }
              }
            ]
          }
        ],
        "hasOptionGroups": true,
        "contextModifiers": [
            {
                "catalogContext": "WHITELABEL",
                "itemContextId": "83cd029d-d833-42dd-bbd6-017c12312968"
            },
            {
                "catalogContext": "DEFAULT",
                "itemContextId": "d2e6820e-cc5c-42e3-99db-c180c2bcf4ad"
            }
        ]
      }
    ]
  }
]
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.
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/v2.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"
}
El endpoint PUT item es válido para todo tipo de artículos, incluida la pizza. Se crea el artículo con todas las dependencias que lo componen: productos, grupos de complementos y complementos. Si los id informados ya existen en la base, se actualizarán las entidadesTenga en cuenta que, si se informa, los valores dentro de los contextModifiers tendrán prioridad sobre los valores del item o la adición, por ejemplo, si se informa un precio en el modificador de contexto, el precio del item se sobrescribirá en ese contexto.Solicitud:
curl --location --request PUT 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "item": {
    "id": "cff648d8-fc31-41b0-b80e-81fc3651ca7a",
    "type": "DEFAULT",
    "categoryId": "beab216d-33dc-4ce4-8b35-5372e135093d",
    "status": "AVAILABLE",
    "price": {
      "value": 11.00,
      "originalValue": 12.50
    },
    "externalCode": "public_item",
    "index": 0,
    "productId": "62133b9f-5542-401d-8743-49ec7da8c847",
    "shifts": null,
    "tags": null,
    "contextModifiers": [
      {
        "catalogContext": "WHITELABEL",
        "status": "AVAILABLE",
        "price": {
          "value": 13,
          "originalValue": 16
        },
        "externalCode": "whitelabel_ec2"
      },
      {
        "catalogContext": "INDOOR",
        "status": "AVAILABLE",
        "price": {
          "value": 13,
          "originalValue": 17
        },
        "externalCode": "indoor_ec"
      }
    ]
  },
  "products": [
    {
      "id": "62133b9f-5542-401d-8743-49ec7da8c847",
      "externalCode": "item_product_ec2",
      "name": "X-Burguer",
      "description": "Pão, carne, queijo e salada",
      "additionalInformation": "some additional Information",
      "image": null,
      "ean": "EAN112233414",
      "serving": "SERVES_2",
      "dietaryRestrictions": null,
      "quantity": null,
      "optionGroups": [
        {
            "id":"1e5e5eb5-84c7-4eca-b0c1-921860434f70",
            "min": 0,
            "max": 1
        }
      ]
    },
    {
      "id": "713713e7-641e-44fd-bd92-13ba43daf6a8",
      "externalCode": "option_product_ec2",
      "name": "Batata Frita",
      "description": "200 g",
      "additionalInformation": "some additional Information",
      "image": null,
      "ean": "EAN112253553344",
      "serving": "SERVES_1",
      "dietaryRestrictions": null,
      "quantity": null,
      "optionGroups": null
    }
  ],
  "optionGroups": [
    {
      "id": "1e5e5eb5-84c7-4eca-b0c1-921860434f70",
      "name": "Acompanhamentos",
      "externalCode": "option_group_ec2",
      "status": "AVAILABLE",
      "index": 0,
      "optionGroupType": "DEFAULT",
      "optionIds": [
        "d3e31829-a215-47e3-9576-3fddec9417ec"
      ]
    }
  ],
  "options": [
    {
      "id": "d3e31829-a215-47e3-9576-3fddec9417ec",
      "status": "AVAILABLE",
      "index": 0,
      "productId": "713713e7-641e-44fd-bd92-13ba43daf6a8",
      "price": {
        "value": 4,
        "originalValue": 7
      },
      "contextModifiers": [
        {
          "parentOptionId": null,
          "catalogContext": "WHITELABEL",
          "status": "AVAILABLE",
          "price": {
            "value": 5,
            "originalValue": 6
          },
          "externalCode": "op_whitelabel_ec"
        }
      ],
    "fractions": null,
    "externalCode": "option_ec"
    }
  ]
}'
Informando el id de una categoría existente en el endpoint GET Items, se listarán todos los artículos, productos, grupos de complementos y complementos disponibles en ella. El formato del JSON devuelto es similar al utilizado en la creación de un artículos completo.Solicitud:
curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/categories/beab216d-33dc-4ce4-8b35-5372e135093d/items' \
--header 'Authorization: Bearer TOKEN'
Respuesta:
{
   "categoryId": "beab216d-33dc-4ce4-8b35-5372e135093d",
   "items":[
      {
         "id":"cff648d8-fc31-41b0-b80e-81fc3651ca7a",
         "type":"DEFAULT",
         "categoryId":"beab216d-33dc-4ce4-8b35-5372e135093d",
         "status":"AVAILABLE",
         "price":{
            "value":11.00,
            "originalValue":12.50
         },
         "externalCode":"public_item",
         "index":0,
         "productId":"62133b9f-5542-401d-8743-49ec7da8c847",
         "shifts":null,
         "tags":null,
         "contextModifiers":[
            {
              "itemContextId": "600308db-437f-4ec5-84de-aef08d7729d2",
               "catalogContext":"WHITELABEL",
               "status":"AVAILABLE",
               "price":{
                  "value":13,
                  "originalValue":16
               },
               "externalCode":"whitelabel_ec2"
            },
            {
              "itemContextId": "bb4be583-c4d0-4091-bb6b-6e4a552993bf",
               "catalogContext":"INDOOR",
               "status":"AVAILABLE",
               "price":{
                  "value":13,
                  "originalValue":17
               },
               "externalCode":"indoor_ec"
            }
         ]
      }
   ],
   "products":[
      {
         "id":"62133b9f-5542-401d-8743-49ec7da8c847",
         "externalCode":"item_product_ec2",
         "name":"X-Burguer",
         "description":"Pão, carne, queijo e salada",
         "additionalInformation":"some additional Information",
         "image":null,
         "ean":"EAN112233414",
         "serving":"SERVES_2",
         "dietaryRestrictions":null,
         "quantity":null,
         "optionGroups":[
           {
             "id":"1e5e5eb5-84c7-4eca-b0c1-921860434f70",
             "min": 0,
             "max": 1
           }
         ]
      },
      {
         "id":"713713e7-641e-44fd-bd92-13ba43daf6a8",
         "externalCode":"option_product_ec2",
         "name":"Batata Frita",
         "description":"200 g",
         "additionalInformation":"some additional Information",
         "image":null,
         "ean":"EAN112253553344",
         "serving":"SERVES_1",
         "dietaryRestrictions":null,
         "quantity":null,
         "optionGroups":null
      }
   ],
   "optionGroups":[
      {
         "id":"1e5e5eb5-84c7-4eca-b0c1-921860434f70",
         "name":"Acompanhamentos",
         "externalCode":"option_group_ec2",
         "status":"AVAILABLE",
         "index":0,
         "optionGroupType":"DEFAULT",
         "optionIds":[
            "d3e31829-a215-47e3-9576-3fddec9417ec"
         ]
      }
   ],
   "options":[
      {
         "id":"d3e31829-a215-47e3-9576-3fddec9417ec",
         "status":"AVAILABLE",
         "index":0,
         "productId":"713713e7-641e-44fd-bd92-13ba43daf6a8",
         "price":{
            "value":4,
            "originalValue":7
         },
         "contextModifiers":[
            {
               "parentOptionId":null,
               "catalogContext":"WHITELABEL",
               "status":"AVAILABLE",
               "price":{
                  "value":5,
                  "originalValue":6
               },
               "externalCode":"op_whitelabel_ec"
            }
         ],
         "fractions":null,
         "externalCode":"option_ec"
      }
   ]
}
De manera similar al punto final anterior, es posible enumerar los recursos que componen un item a través de su id en el endpoint GET Item flat. El formato del JSON devuelto es el mismo que se utiliza en la creación de un artículos completo.Solicitud:
curl --location --request GET 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items/af983271-3981-46fa-94eb-46cb81c439e2/flat' \
--header 'Authorization: Bearer TOKEN'
Respuesta:
{
    "item": {
        "id": "af983271-3981-46fa-94eb-46cb81c439e2",
        "type": "DEFAULT",
        "categoryId": "ea2c31a9-472f-443b-ae8f-72331153915c",
        "status": "AVAILABLE",
        "price": {
            "value": 11,
            "originalValue": 12.5
        },
        "externalCode": "public_item_code",
        "index": 0,
        "productId": "f40ac7e7-da05-4800-90b2-2ee85f486d75",
        "shifts": [
            {
                "startTime": "00:00",
                "endTime": "23:59",
                "monday": true,
                "tuesday": true,
                "wednesday": true,
                "thursday": true,
                "friday": true,
                "saturday": true,
                "sunday": true
            }
        ],
        "contextModifiers": [
            {
                "catalogContext": "WHITELABEL",
                "externalCode": "item_code_for_whitelabel",
                "price": {
                    "value": 13,
                    "originalValue": 16
                },
                "status": "AVAILABLE",
                "itemContextId": "12798f58-ce7b-4195-b719-7ae49d1b2f34"
            },
            {
                "catalogContext": "DEFAULT",
                "status": "AVAILABLE",
                "itemContextId": "78a6faea-1628-4f66-896b-627bc91251bc"
            }
        ]
    },
    "optionGroups": [
        {
            "id": "d65789c8-cc81-47bc-b741-6847d0390fc6",
            "name": "Option Group Name",
            "status": "AVAILABLE",
            "optionGroupType": "DEFAULT",
            "optionIds": [
                "0e1a8e32-0a49-4c15-8b96-d8b7c5c4dc78",
                "b7da158f-4e05-4e2c-9e22-e042baea2a49"
            ]
        },
        {
            "id": "d7955b3a-3cc8-4cd3-983c-31954cee8cff",
            "name": "Option Group Name3",
            "status": "AVAILABLE",
            "optionGroupType": "DEFAULT",
            "optionIds": [
                "d8957077-36d0-476f-8766-81bac38a69cc"
            ]
        },
        {
            "id": "17532d15-2a2e-4e19-8fc7-3c7cec8bc30c",
            "name": "Option Group Name 2",
            "status": "AVAILABLE",
            "optionGroupType": "DEFAULT",
            "optionIds": [
                "abecc2d8-f91a-4cc7-b66f-59d406748ffb",
                "4034fa88-8804-46c9-8dec-92c8244ec932"
            ]
        }
    ],
    "options": [
        {
            "id": "0e1a8e32-0a49-4c15-8b96-d8b7c5c4dc78",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "220f1d53-3eef-44b1-9f6d-ba2e48d26fd4",
            "price": {
                "value": 4,
                "originalValue": 7
            },
            "externalCode": "option_code",
            "contextModifiers": [
                {
                    "catalogContext": "WHITELABEL",
                    "externalCode": "option_code_for_whitelabel",
                    "price": {
                        "value": 5,
                        "originalValue": 6
                    },
                    "status": "AVAILABLE"
                },
                {
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE"
                }
            ]
        },
        {
            "id": "b7da158f-4e05-4e2c-9e22-e042baea2a49",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "abed1844-7220-40b2-abda-fbf86e331209",
            "price": {
                "value": 4,
                "originalValue": 7
            },
            "externalCode": "option_code2",
            "contextModifiers": [
                {
                    "catalogContext": "WHITELABEL",
                    "externalCode": "option_code_for_whitelabel2",
                    "price": {
                        "value": 5,
                        "originalValue": 6
                    },
                    "status": "AVAILABLE"
                },
                {
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE"
                }
            ]
        },
        {
            "id": "d8957077-36d0-476f-8766-81bac38a69cc",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "eec65205-110d-43aa-9729-e4ebcf9f8106",
            "price": {
                "value": 4,
                "originalValue": 7
            },
            "externalCode": "option_code5",
            "contextModifiers": [
                {
                    "catalogContext": "WHITELABEL",
                    "externalCode": "option_code_for_whitelabel5",
                    "price": {
                        "value": 5,
                        "originalValue": 6
                    },
                    "status": "AVAILABLE"
                },
                {
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE"
                }
            ]
        },
        {
            "id": "abecc2d8-f91a-4cc7-b66f-59d406748ffb",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "2b9da9a4-e4f4-46cb-8d29-687fbd3a7f6f",
            "price": {
                "value": 4,
                "originalValue": 7
            },
            "externalCode": "option_code3",
            "contextModifiers": [
                {
                    "catalogContext": "WHITELABEL",
                    "externalCode": "option_code_for_whitelabel3",
                    "price": {
                        "value": 5,
                        "originalValue": 6
                    },
                    "status": "AVAILABLE"
                },
                {
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE"
                }
            ]
        },
        {
            "id": "4034fa88-8804-46c9-8dec-92c8244ec932",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "7c878419-e240-417d-a322-5c32f06f47c6",
            "price": {
                "value": 4,
                "originalValue": 7
            },
            "externalCode": "option_code4",
            "contextModifiers": [
                {
                    "catalogContext": "WHITELABEL",
                    "externalCode": "option_code_for_whitelabel4",
                    "price": {
                        "value": 5,
                        "originalValue": 6
                    },
                    "status": "AVAILABLE"
                },
                {
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE"
                }
            ]
        }
    ],
    "products": [
        {
            "id": "f40ac7e7-da05-4800-90b2-2ee85f486d75",
            "name": "Default name",
            "description": "Default description",
            "ean": "EAN112233414",
            "serving": "SERVES_2",
            "dietaryRestrictions": [],
            "optionGroups": [
                {
                    "id":"d65789c8-cc81-47bc-b741-6847d0390fc6",
                    "min": 0,
                    "max": 1
                },
                {
                    "id":"d7955b3a-3cc8-4cd3-983c-31954cee8cff",
                    "min": 1,
                    "max": 1
                },
                {
                    "id":"17532d15-2a2e-4e19-8fc7-3c7cec8bc30c",
                    "min": 0,
                    "max": 1
                }
            ]
        },
        {
            "id": "220f1d53-3eef-44b1-9f6d-ba2e48d26fd4",
            "name": "Option name",
            "externalCode": "option_product_code",
            "description": "Default description",
            "ean": "EAN112253553344",
            "serving": "SERVES_1",
            "dietaryRestrictions": [],
            "optionGroups": []
        },
        {
            "id": "abed1844-7220-40b2-abda-fbf86e331209",
            "name": "Option name2",
            "externalCode": "option_product_code2",
            "description": "Default description",
            "ean": "EAN112253553344",
            "serving": "SERVES_1",
            "dietaryRestrictions": [],
            "optionGroups": []
        },
        {
            "id": "eec65205-110d-43aa-9729-e4ebcf9f8106",
            "name": "Option name5",
            "externalCode": "option_product_code5",
            "description": "Default description",
            "ean": "EAN112253553344",
            "serving": "SERVES_1",
            "dietaryRestrictions": [],
            "optionGroups": []
        },
        {
            "id": "2b9da9a4-e4f4-46cb-8d29-687fbd3a7f6f",
            "name": "Option name3",
            "externalCode": "option_product_code3",
            "description": "Default description",
            "ean": "EAN112253553344",
            "serving": "SERVES_1",
            "dietaryRestrictions": [],
            "optionGroups": []
        },
        {
            "id": "7c878419-e240-417d-a322-5c32f06f47c6",
            "name": "Option name4",
            "externalCode": "option_product_code4",
            "description": "Default description",
            "ean": "EAN112253553344",
            "serving": "SERVES_1",
            "dietaryRestrictions": [],
            "optionGroups": []
        }
    ]
}
El producto, como se mencionó anteriormente, contiene toda la información principal de los artículos o complementos que se pondrán a la venta. A continuación, se muestra un ejemplo de creación de producto, que se puede realizar a través de la API. POST /merchants/{merchantId}/products.Solicitud:
curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v2.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": "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": ""
}
Con el producto creado, es posible enviar solo su id en el PUT item, si no se necesita actualizar el producto, es posible omitirlo en la solicitud cuerpo, por ejemplo:Para crear un item con una imagen consulte upload de imagem.Solicitud:
curl --location --request PUT 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "item": {
    "id": "6266d832-1e6c-4418-ac50-3cf5e4390d72",
    "type": "DEFAULT",
    "categoryId": "beab216d-33dc-4ce4-8b35-5372e135093d",
    "status": "AVAILABLE",
    "price": {
      "value": 11.00,
      "originalValue": 12.50
    },
    "externalCode": "item_BG-1",
    "index": 0,
    "productId": "ec16fb62-7bdd-43e4-940c-10b5a2845f13",
    "shifts": null,
    "tags": null,
    "contextModifiers": [
      {
        "catalogContext": "WHITELABEL",
        "status": "AVAILABLE",
        "price": {
          "value": 13,
          "originalValue": 16
        },
        "externalCode": "item_BG-1_whitelabel"
      },
      {
        "catalogContext": "INDOOR",
        "status": "AVAILABLE",
        "price": {
          "value": 13,
          "originalValue": 17
        },
        "externalCode": "item_BG-1_indoor"
      }
    ]
  },
  "products": null,
  "optionGroups": null,
  "options": null
}'
El concepto de reutilización de entidades ya existentes solo es posible en productos y grupos de complementos, el complemento se puede asociar con un solo grupo de complementos. Si la identificación especificada ya existe y se envía en el cuerpo de la solicitud, el recurso se actualiza.
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}/unsellableItems
curl --location --request https://merchant-api.ifood.com.br/catalog/v2.0/merchants/1cdfa2d0-6c89-4ca8-a544-3b39009fe03c/catalogs/1cdfa2d0-6c89-4ca8-a544-3b39009fe03c/unsellableItems --header 'Authorization: Bearer TOKEN
Respuesta:
{
  "categories": [
    {
      "id": "ccf719e9-8fc3-4264-8dff-832ae9e901a8",
      "status": "AVAILABLE",
      "template": "DEFAULT",
      "restrictions": [],
      "unsellableItems": [
        {
          "id": "32545e4b-6664-411f-83c3-524771750fbd",
          "productId": "400c9fc5-f1bb-4538-a2b5-a6d4a98d1a01",
          "restrictions": [
            "ITEM_PAUSED"
          ]
        },
        {
          "id": "fb3cc740-d1ff-43cf-87ef-22491fe2381b",
          "productId": "a22f334e-90c8-4474-8dfe-48ff3a4affe3",
          "restrictions": [
            "ITEM_PAUSED"
          ]
        },
        {
          "id": "7cb6cc89-bebe-489d-9866-7ff4689b2771",
          "productId": "16744979-0280-473b-ae2b-b671de7ffe9c",
          "restrictions": [
            "ITEM_PAUSED"
          ]
        }
      ]
    },
    {
      "id": "86cbba43-51f7-439c-a3c6-ecd0a7c9f402",
      "status": "UNAVAILABLE",
      "template": "DEFAULT",
      "restrictions": [
        "CATEGORY_PAUSED"
      ],
      "unsellableItems": [
        {
          "id": "a6a608e4-6548-442c-8b9f-9fcb6bcb9ef3",
          "productId": "3a9d9df9-18c7-48d0-b0c6-92fc4b5b2a19",
          "restrictions": [
            "CATEGORY_PAUSED",
            "ITEM_PAUSED"
          ]
        },
        {
          "id": "044abde5-dba4-44f0-b039-0da51ddde2a1",
          "productId": "4b31bae7-e415-42f1-b023-dad5083c1cb2",
          "restrictions": [
            "CATEGORY_PAUSED",
            "ITEM_PAUSED"
          ]
        }
      ]
    }
  ]
}
Las posibles restricciones son:
RestriçãoMotivo
CATEGORY_HAS_VIOLATIONSe detectó algún tipo de violación de las reglas de iFood en la categoría
CATEGORY_PAUSEDCategoría en pausa
ITEM_PAUSEDItem en pausa
ITEM_HAS_VIOLATIONSe detectó algún tipo de violación de las reglas de iFood en el artículo
ITEM_PRICE_MISSINGItem sin precio
ITEM_AND_OPTIONS_PRICES_MISSINGEl valor del item con sus complementos obligatorios puede ser cero
ITEM_OUT_OF_STOCKItem agotado
INVALID_OPTION_GROUP_MAX_QUANTITYEl valor máximo de los complementos de grupo es menor o igual a cero
OPTION_GROUP_WITHOUT_AVAILABLE_OPTIONSGrupo de complementos sin complementos vendibles
OPTION_GROUP_MAX_SMALLER_THAN_MINEl valor máximo de los complementos de grupo es inferior al mínimo
OPTION_GROUP_PAUSEDGrupo de complementos en pausa
OPTION_PAUSEDComplemento en pausa
OPTION_OUT_OF_STOCKComplemento agotado
curl -X POST "https://merchant-api.ifood.com.br/catalog/v2.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}"
curl -X GET "https://merchant-api.ifood.com.br/catalog/v2.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/inventory/ec16fb62-7bdd-43e4-940c-10b5a2845f13"
-H "accept: application/json""
curl -X POST "https://merchant-api.ifood.com.br/catalog/v2.0/merchants/6b487a27-c4fc-4f26-b05e-3967c2331882/inventory/batchDelete"
-H "accept: */*" -H "Content-Type: application/json"
-d "{\"productIds\":[\"ec16fb62-7bdd-43e4-940c-10b5a2845f13\"]}"
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". Si se informa externalCode y productId, el cambio solo se realizará considerando el externalCode. Hay un parámetro catalogContext opcional para informar en qué contexto se realizará el cambio. Si no se informa el parámetro, el cambio será efectivo en todos los contextos que correspondan al productId o externalCode informado. Solicitud:
    curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.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": "/v2.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/batch/311afcf1-541a-41af-a9a54651d676731e"
}
Es posible editar el status 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". Si se informa externalCode y productId, el cambio solo se realizará considerando el externalCode. Hay un parámetro catalogContext opcional para informar en qué contexto se realizará el cambio. Si no se informa el parámetro, el cambio será efectivo en todos los contextos que correspondan al productId o externalCode informado.Solicitud:
    curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/products/status' \
    --header 'accept: application/json' \
    --header 'Content-Type: application/json' \
    --data-raw '[{
	    "externalCode":"burguerX43",
	    "status": "UNAVAILABLE",
	    "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": "/v2.0/merchants/411347fb-adc5-456f-95be-03cf10a5b8b5/batch/311afcf1-541a-41af-a9a54651d676731e"
}
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/v2.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"
    }
  ]
}
Con el PATCH Option Price es posible editar globalmente el precio de una adición pasando el campo price con el valor deseado, así como cambiarlo en un menú específico, se debe llenar el campo priceByCatalog respectivamente con sus valores y el contexto del menú cambiado.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/price' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "d3e31829-a215-47e3-9576-3fddec9417ec",
  "price": {
    "value": 5,
    "originalValue": 7
  },
  "parentCustomizationOptionId": null,
  "priceByCatalog": [
    {
      "value": 5,
      "originalValue": 7,
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Con un comportamiento similar a cambiar el precio, es posible editar globalmente el estado de un complemento en el endpoint PATCH Option Status pasando el campo de status con la condición deseada, así como cambiarlo en un menú específico, el campo statusByCatalog debe ser completado respectivamente con el estado y el contexto del menú cambiados.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/status' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "d3e31829-a215-47e3-9576-3fddec9417ec",
  "status": "AVAILABLE",
  "parentCustomizationOptionId": null,
  "statusByCatalog": [
    {
      "status": "UNAVAILABLE",
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Es posible editar globalmente el código externo de un complemento utilizando el PATCH Option External Code pasando el campo externalCode con el código deseado, así como cambiarlo en un menú específico, el campo externalCodeByCatalog debe ser llenado respectivamente con el código y contexto del menú cambiado.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/externalCode' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "d3e31829-a215-47e3-9576-3fddec9417ec",
  "externalCode": "tst-external-code",
  "parentCustomizationOptionId": null,
  "externalCodeByCatalog": [
    {
      "externalCode": "tst-external-code2",
      "catalogContext": "WHITELABEL"
    }
  ]
}'
De manera similar al endpoint de los complementos, es posible editar globalmente el precio de un item con el PATCH Item Price pasando el campo de price con el valor deseado, así como cambiarlo en un menú específico, el campo priceByCatalog debe completarse respectivamente con sus valores y contexto del menú modificado.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items/price' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "itemId": "1621d43c-1ac0-4407-9d79-50e974bbcc90",
  "price": {
    "value": 25,
    "originalValue": 30
  },
  "priceByCatalog": [
    {
      "value": 23,
      "originalValue": 27,
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Con un comportamiento similar a cambiar el precio, con el PATCH Item Status es posible editar globalmente el estado de un item pasando el campo de estado con la condición deseada, así como cambiarlo en un menú específico, el campo statusByCatalog debe ser llenado con el estado y el contexto del menú cambió.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items/status' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "itemId": "1621d43c-1ac0-4407-9d79-50e974bbcc90",
  "status": "AVAILABLE",
  "statusByCatalog": [
    {
      "status": "UNAVAILABLE",
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Con el endpoint PATCH Item External Code es posible editar globalmente el código externo de un ítem pasando el campo externalCode con el código deseado, así como cambiarlo en un menú específico, el campo externalCodeByCatalog debe ser llenado respectivamente con el código y contexto del menú modificado
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items/externalCode' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "itemId": "d3e31829-a215-47e3-9576-3fddec9417ec",
  "externalCode": "tst-external-code",
  "externalCodeByCatalog": [
    {
      "externalCode": "tst-external-code2",
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Para agregar imágenes a su producto en los endpoints de POST o PUT de producto y en el endpoint de PUT de item debe enviar el campo imagePath del producto completado con el retorno del endpoint: Upload Image:
curl --location --request POST 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/image/upload/' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
    "image": "data:image/png;base64,imageBase64"
}'
Al cargar su imagen a través de este endpoint, podrá reutilizar la misma imagen en varios productos. La carga de imágenes por el campo de image con base64 también continúa funcionando para los puntos finales POST y PUT de producto.Los formatos de imagen admitidos son: 'jpg', 'jpeg' y 'png'.El tamaño límite de archivos de imagen (independientemente del formato) es de 5MB. Las solicitudes (tanto en el endpoint de carga de imágenes como en otros endpoints) con un cuerpo de solicitud mayor de 5MB devolverán el estado 413 (Entity Too Large).

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.
Un item tipo pizza contiene obligatoriamente los siguientes grupos de complementos:
  • Tamaños
    • optionGroupType = SIZE
  • Sabores
    • optionGroupType = TOPPING
  • Masas
    • optionGroupType = CRUST
  • Bordes
    • optionGroupType = EDGE
La modificación de los complementos de la pizza se explica en las secciones:
Específicamente para los complementos de sabor, es necesario completar el campo parentCustomizationOptionId al editar su precio, estado o código externo.
Este campo debe completarse con el option.id del tamaño en el que se debe configurar el sabor.
Por ejemplo, en el punto final de edición de estados de complementos, podríamos realizar esta solicitud:
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/status' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "c5ed4d9c-0b79-47b6-8333-d50e66e2147a",
  "parentCustomizationOptionId": "1cae92f1-59ad-401c-a889-dd8ce940fd25",
  "statusByCatalog": [
    {
      "status": "UNAVAILABLE",
      "catalogContext": "WHITELABEL"
    },
    {
      "status": "AVAILABLE",
      "catalogContext": "DEFAULT"
    }
  ]
}'
Considerando 1cae92f1-59ad-401c-a889-dd8ce940fd25 como el id de la opción "Tamaño Grande" y c5ed4d9c-0b79-47b6-8333-d50e66e2147a como el id de la opción "Calabresa", esta llamada al punto final configura el sabor "Calabresa" disponible en "Tamaño Grande" solo en el contexto DEFAULT.
El endpoint PUT item se puede usar para crear y cambiar elementos tipo pizza. Se crea el artículo con todas las dependencias que lo componen: productos, grupos de adiciones y adiciones. Como se mencionó anteriormente, la pizza es un artículo del tipo PIZZA y debe tener grupos de adiciones de los tipos tamaño, masa, borde y sabor. Al crear el artículo, simplemente omita la identificación de categoría y la categoría de tipo de pizza se crea automáticamente.
curl --location --request PUT 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/items' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
    "item": {
        "id": "91de1e0f-3dac-41d2-b9c5-e7de2fa2c20e",
        "type": "PIZZA",
        "status": "AVAILABLE",
        "externalCode": "pizza_item_code",
        "index": 0,
        "productId": "51b644cc-a90c-4456-992f-f86631176796"
    },
    "products": [
        {
            "id": "51b644cc-a90c-4456-992f-f86631176796",
            "externalCode": "pizza_trd_prd_code",
            "name": "Pizzas Tradicionais",
            "optionGroups": [
                {
                    "id": "15af8bd9-6d54-43f2-8c74-43d5d4da32d8",
                    "min": 0,
                    "max": 1
                },
                {
                    "id": "26b1a876-7ee4-4f15-9bb1-d33c840c5049",
                    "min": 0,
                    "max": 1
                },
                {
                    "id": "668a93a9-704e-4036-a515-11e4ddbe4129",
                    "min": 0,
                    "max": 1
                },
                {
                    "id": "d1eed8e6-c1f0-4f09-a235-2d459bb33cbb",
                    "min": 0,
                    "max": 1
                }
            ]
        },
        {
            "id": "9f72cd07-4463-4bfc-8fc1-97129c775e21",
            "externalCode": "massa_trd_prd_code",
            "name": "Massa Tradicional"
        },
        {
            "id": "c8eff6c6-f3c5-48ec-9a5b-aa5b3eeec582",
            "externalCode": "massa_fin_prd_code",
            "name": "Massa fina"
        },
        {
            "id": "27fa98cd-e119-432d-9b0a-8f99a65be1b7",
            "externalCode": "t_m_prd_code",
            "name": "Tamanho médio",
            "quantity": 8,
            "imagePath": "41a3aa60-4b00-4da1-a3c6-c4eaa9544f07/202406201149_4y1nlgnr7a10.png"
        },
        {
            "id": "932e18a2-396d-40d2-8de4-da0cf8f95faf",
            "externalCode": "t_g_prd_code",
            "name": "Tamanho Grande",
            "quantity": 12,
            "imagePath": "41a3aa60-4b00-4da1-a3c6-c4eaa9544f07/202406201150_5z2uxvlq5b34.png"
        },
        {
            "id": "e4ac0247-33ed-476a-ae69-363f27fe0df7",
            "externalCode": "brd_trd_prd_code",
            "name": "Borda Tradicional"
        },
        {
            "id": "eb021b00-0fef-434b-9da5-77e4dbca047e",
            "externalCode": "brd_rech_prd_code",
            "name": "Borda Recheada"
        },
        {
            "id": "d6ae0c15-4db9-454e-868b-a9ec7719da5e",
            "externalCode": "calabresa_prd_code",
            "name": "Calabresa"
        },
        {
            "id": "b4a093cc-7e4a-49d2-909a-fed1cc58c572",
            "externalCode": "marguerita_prd_code",
            "name": "Marguerita"
        }
    ],
    "optionGroups": [
        {
            "id": "15af8bd9-6d54-43f2-8c74-43d5d4da32d8",
            "name": "Tamanhos",
            "externalCode": "tamanhos_code",
            "status": "AVAILABLE",
            "index": 0,
            "optionGroupType": "SIZE",
            "optionIds": [
                "945ef3bc-7741-4bec-a0ce-4660c09a564f",
                "2587c76e-3aa3-45e6-95d9-35c21ac19f9d"
            ]
        },
        {
            "id": "26b1a876-7ee4-4f15-9bb1-d33c840c5049",
            "name": "Massas",
            "externalCode": "massas_code",
            "status": "AVAILABLE",
            "index": 0,
            "optionGroupType": "CRUST",
            "optionIds": [
                "7fb0eac3-43e5-41c6-860e-a38793db4988",
                "d0d0df88-b276-4a21-ab14-063e8f0c3c5d"
            ]
        },
        {
            "id": "668a93a9-704e-4036-a515-11e4ddbe4129",
            "name": "Bordas",
            "externalCode": "bordas_code",
            "status": "AVAILABLE",
            "index": 0,
            "optionGroupType": "EDGE",
            "optionIds": [
                "cc71b438-523f-49ac-918a-82df71244f9b",
                "df8728b2-7773-486b-aa93-47627bdd0c54"
            ]
        },
        {
            "id": "d1eed8e6-c1f0-4f09-a235-2d459bb33cbb",
            "name": "Sabores",
            "externalCode": "sabores_code",
            "status": "AVAILABLE",
            "index": 0,
            "optionGroupType": "TOPPING",
            "optionIds": [
                "0d58a046-1871-433d-bd8d-2b33abfbfa70",
                "a4eb62d0-ca33-459e-82b1-4de25997ba9e"
            ]
        }
    ],
    "options": [
        {
            "id": "945ef3bc-7741-4bec-a0ce-4660c09a564f",
            "status": "AVAILABLE",
            "productId": "27fa98cd-e119-432d-9b0a-8f99a65be1b7",
            "fractions": [
                1
            ],
            "externalCode": "medio_option_code"
        },
        {
            "id": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
            "status": "AVAILABLE",
            "productId": "932e18a2-396d-40d2-8de4-da0cf8f95faf",
            "fractions": [
                1,
                2
            ],
            "externalCode": "grande_option_code"
        },
        {
            "id": "0d58a046-1871-433d-bd8d-2b33abfbfa70",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "d6ae0c15-4db9-454e-868b-a9ec7719da5e",
            "contextModifiers": [
                {
                    "parentOptionId": "945ef3bc-7741-4bec-a0ce-4660c09a564f",
                    "catalogContext": "WHITELABEL",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 26,
                        "originalValue": 30
                    },
                    "externalCode": "calabresa_medio_whitelabel_code"
                },
                {
                    "parentOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
                    "catalogContext": "WHITELABEL",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 25,
                        "originalValue": 29
                    },
                    "externalCode": "calabresa_grande_whitelabel_code"
                },
                {
                    "parentOptionId": "945ef3bc-7741-4bec-a0ce-4660c09a564f",
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 24,
                        "originalValue": 28
                    },
                    "externalCode": "calabresa_medio_default_code"
                },
                {
                    "parentOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 23,
                        "originalValue": 27
                    },
                    "externalCode": "calabresa_grande_default_code"
                }
            ],
            "externalCode": "calabresa_option_code"
        },
        {
            "id": "a4eb62d0-ca33-459e-82b1-4de25997ba9e",
            "status": "AVAILABLE",
            "index": 0,
            "productId": "b4a093cc-7e4a-49d2-909a-fed1cc58c572",
            "contextModifiers": [
                {
                    "parentOptionId": "945ef3bc-7741-4bec-a0ce-4660c09a564f",
                    "catalogContext": "WHITELABEL",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 23,
                        "originalValue": 28
                    },
                    "externalCode": "marguerita_medio_whitelabel_code"
                },
                {
                    "parentOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
                    "catalogContext": "WHITELABEL",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 20,
                        "originalValue": 25
                    },
                    "externalCode": "marguerita_grande_whitelabel_code"
                },
                {
                    "parentOptionId": "945ef3bc-7741-4bec-a0ce-4660c09a564f",
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 22,
                        "originalValue": 27
                    },
                    "externalCode": "marguerita_medio_default_code"
                },
                {
                    "parentOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
                    "catalogContext": "DEFAULT",
                    "status": "AVAILABLE",
                    "price": {
                        "value": 24,
                        "originalValue": 26
                    },
                    "externalCode": "marguerita_grande_default_code"
                }
            ],
            "externalCode": "marguerita_option_ec"
        },
        {
            "id": "cc71b438-523f-49ac-918a-82df71244f9b",
            "status": "AVAILABLE",
            "productId": "e4ac0247-33ed-476a-ae69-363f27fe0df7",
            "price": {
                "value": 0,
                "originalValue": 0
            },
            "externalCode": "borda_trad_option_code"
        },
        {
            "id": "df8728b2-7773-486b-aa93-47627bdd0c54",
            "status": "AVAILABLE",
            "productId": "eb021b00-0fef-434b-9da5-77e4dbca047e",
            "price": {
                "value": 4,
                "originalValue": 5
            },
            "externalCode": "borda_rec_option_code"
        },
        {
            "id": "7fb0eac3-43e5-41c6-860e-a38793db4988",
            "status": "AVAILABLE",
            "productId": "9f72cd07-4463-4bfc-8fc1-97129c775e21",
            "price": {
                "value": 2,
                "originalValue": 3
            },
            "externalCode": "massa_trad_option_code"
        },
        {
            "id": "d0d0df88-b276-4a21-ab14-063e8f0c3c5d",
            "status": "AVAILABLE",
            "productId": "c8eff6c6-f3c5-48ec-9a5b-aa5b3eeec582",
            "price": {
                "value": 2,
                "originalValue": 3
            },
            "externalCode": "massa_fin_option_code"
        }
    ]
}'
Con el PATCH Option Price es posible editar globalmente el precio de un complemento pasando el campo precio con el valor deseado, así como cambiarlo en un menú específico, se debe llenar el campo priceByCatalog respectivamente con sus valores y el contexto del menú cambiado. Para cambiar el precio de un sabor en un tamaño determinado, solo informe el parentCustomizationOptionId.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/price' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "a4eb62d0-ca33-459e-82b1-4de25997ba9e",
  "price": {
    "value": 5,
    "originalValue": 7
  },
  "parentCustomizationOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
  "priceByCatalog": [
    {
      "value": 5,
      "originalValue": 7,
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Con un comportamiento similar a cambiar el precio, en el endpoint PATCH Option Status es posible editar globalmente el estado de un complemento pasando el campo de status con la condición deseada, así como cambiarlo en un menú específico, el campo statusByCatalog debe ser completado respectivamente con el estado y el contexto del menú cambiados. Para cambiar el estado de un sabor en un tamaño determinado, solo informe el parentCustomizationOptionId.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/status' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "a4eb62d0-ca33-459e-82b1-4de25997ba9e",
  "status": "AVAILABLE",
  "parentCustomizationOptionId": "2587c76e-3aa3-45e6-95d9-35c21ac19f9d",
  "statusByCatalog": [
    {
      "status": "UNAVAILABLE",
      "catalogContext": "WHITELABEL"
    }
  ]
}'
Con el PATCH Option External Code es posible editar globalmente el código externo de una adición de pizza pasando el campo de externalCode con la condición deseada, así como cambiarlo en un menú específico, el campo externalCodeByCatalog debe ser completado respectivamente con el estado y el contexto del menú cambiados. Para cambiar el código externo de un sabor en un tamaño determinado, solo informe el parentCustomizationOptionId.
curl --location --request PATCH 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/21131c93-0398-4818-aad3-762cab309a26/options/externalCode' \
--header 'Authorization: Bearer TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
  "optionId": "d3e31829-a215-47e3-9576-3fddec9417ec",
  "externalCode": "tst-external-code",
  "parentCustomizationOptionId": null,
  "externalCodeByCatalog": [
    {
      "externalCode": "tst-external-code2",
      "catalogContext": "WHITELABEL"
    }
  ]
}'