Buscar na documentação
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluções

Item

Módulo exclusivo Esse módulo é de uso exclusivo de parceiros que operam com canais de mercado e não está disponível para todos os desenvolvedores. Caso tenha interesse em utilizar funções dessa API, entre em contato com time de atendimento.
Use a API de Item para enviar e gerenciar produtos. O iFood processa os dados com base em regras de disponibilidade antes de exibi-los no aplicativo.

Estratégia de integração (POST vs PATCH)

ATENÇÃO: Use POST apenas para criar itens. O uso incorreto para atualizações degrada a performance da integração.
Para otimizar a performance, utilize os métodos HTTP conforme descrito abaixo:Método POST (Criação):
  • Use APENAS para cadastrar novos itens ou reativar itens inativos.
  • Não reenvie o catálogo completo se não houver novos produtos.
Método PATCH (Atualização):
  • Use para qualquer atualização de itens existentes (preço, estoque, detalhes).
  • Envie apenas os dados que sofreram alteração.
Para assegurar a ingestão rápida de dados e evitar filas de processamento, siga rigorosamente a regra abaixo:Regra de ouro: Planeje a orquestração dos envios para não exceder 25% do total de itens do catálogo em uma janela de 35 minutos.Impacto: O cumprimento desta métrica é essencial para garantir a estabilidade da performance e a agilidade na atualização dos dados.Exemplo: Se o catálogo possui 10.000 itens, envie no máximo 2.500 itens a cada 35 minutos.Bloqueio: A API retorna o status 429 Too Many Requests caso o limite seja excedido. Se receber esse erro, aguarde o início da próxima janela de tempo.

1. Envio Completo (POST)

Use estritamente para novos produtos.POST ingestion/{merchantId}?reset=falseCampos obrigatórios:
  • barcode: EAN (Código de Barras Europeu) ou código interno de balança
  • name: Nome do produto
Comportamento:
  • Valores null sobrescrevem dados existentes.
  • O parâmetro reset=true desativa produtos ausentes no payload (ação destrutiva).
  • Campos não enviados receberão valores padrão (null, string vazia, 0, etc.).
OBSERVAÇÃO: Se os campos active e prices.price não forem enviados, receberão os valores padrão false e 0, respectivamente. Isso fará com que o item não seja disponibilizado no catálogo.

1.1. Parâmetro reset

Quando você envia reset=true, o iFood desativa automaticamente todos os produtos ausentes no payload.
ATENÇÃO: Esta ação é destrutiva.
Quando usar:
  • Limpar produtos de teste da base
  • Remover itens integrados indevidamente
Comportamento: Se nenhum produto for identificado para desativação, o processo não será executado.Exemplo de Payload:
[
    {
        "barcode": "123",
        "name": "Produto de exemplo",
        "plu": null,
        "active": true,
        "inventory": {
            "stock": 1.5
        },
        "details": {
            "categorization": {
                "department": null,
                "category": null,
                "subCategory": null
            },
            "brand": null,
            "unit": null,
            "volume": null,
            "imageUrl": null,
            "description": null,
            "nearExpiration": true,
            "family": null
        },
        "prices": {
            "price": 0,
            "promotionPrice": null
        },
        "scalePrices": null,
        "multiple": null,
        "channels": null
    }
]
Importante: Para produtos vendidos por peso, o campo inventory.stock deve ser informado em quilogramas (KG). Exemplo: 1 = 1 KG, 1.5 = 1,5 KG.
Recomendado para atualização de catálogo (preço, estoque).PATCH ingestion/{merchantId}Como funciona:
  • Envie apenas os campos modificados
Exemplo de Payload:O payload é o mesmo do POST, a diferença é que irá enviar somente os campos que deseja alterar.
[
    {
        "barcode": "123",
        "name": "Alterando nome do produto de exemplo"
    }
]

2.1. Considerações importantes

Não utilizar o PATCH para ativar um produto.Para reativar produtos, use a rota POST. O sistema exige o payload completo para validar as informações.

POST Item Integration

Descrição: Envia novas integrações de produtos, atualiza todos os dados dos produtos ou reativa os mesmos.cURL de exemplo:
curl -X POST "https://merchant-api.ifood.com.br/item/v1.0/ingestion/{merchantId}?reset=false" \
  -H "Authorization: Bearer SEU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "barcode": "7891234567890",
      "name": "Leite Integral 1L",
      "active": true,
      "inventory": {
        "stock": 100
      },
      "prices": {
        "price": 5.99
      }
    }
  ]'
Campos retornados:
  • 202 Success: Requisição processada com sucesso
  • 400 Bad Request: Erro na requisição (validação de dados)
  • 429 Too Many Requests: Limite de requisições excedido
  • 500 Server Error: Erro no servidor
Campos da requisição:
CampoTipoObrigatórioDescrição
barcodestringSimEAN ou código interno de balança
namestringSimNome do produto
plustringNãoCódigo interno PLU
activebooleanNãoDefine se o item está ativo para venda
detailsobjectNãoDetalhes do produto (categorização, marca, volume, unidade, imagem, descrição)
pricesobjectNãoObjeto contendo price (preço) e promotionPrice (preço promocional)
scalePricesarrayNãoArray com regras de preço escalonado por quantidade
inventoryobjectNãoObjeto contendo stock (quantidade em estoque)
multipleobjectNãoObjeto para configuração de múltiplos (exclusivo iFood Shop) com originalEan e quantity
channelsarrayNãoCanais de venda: ifood-app, ifood-shop

Descrição: Atualização parcial recomendada se o produto já foi enviado anteriormente e nem todos os campos exigem alterações. Permite enviar apenas os campos que deseja atualizar.cURL de exemplo:
curl -X PATCH "https://merchant-api.ifood.com.br/item/v1.0/ingestion/{merchantId}" \
  -H "Authorization: Bearer SEU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "barcode": "7891234567890",
      "prices": {
        "price": 6.50
      }
    }
  ]'
Campos retornados:
  • 202 Success: Requisição processada com sucesso
  • 400 Bad Request: Erro na requisição (validação de dados)
  • 429 Too Many Requests: Limite de requisições excedido
  • 500 Server Error: Erro no servidor
Campos da requisição:
CampoTipoObrigatórioDescrição
barcodestringSimEAN ou código interno de balança (identificador)
namestringNãoNome do produto
plustringNãoCódigo interno PLU
activebooleanNãoDefine se o item está ativo para venda
detailsobjectNãoDetalhes do produto (categorização, marca, volume, unidade, imagem, descrição)
pricesobjectNãoObjeto contendo price e promotionPrice
scalePricesarrayNãoArray com regras de preço escalonado por quantidade
inventoryobjectNãoObjeto contendo stock (quantidade em estoque)
multipleobjectNãoObjeto para configuração de múltiplos com originalEan e quantity
channelsarrayNãoCanais de venda: ifood-app, ifood-shop
O sistema remove definitivamente do catálogo itens sem atualização há 15 dias e que atendam a uma das seguintes condições:
  • Status inativo (active: false)
  • Preço zerado ou negativo (prices.price ≤ 0)
ATENÇÃO: Itens expurgados exigem recadastramento completo via método POST.
Envie uma atualização antes do prazo de 15 dias para:
  • Alterar o status para ativo (active: true)
  • Atualizar o preço para um valor válido (maior que zero)
  • Modificar qualquer outro campo do item
Acompanhe itens inativos ou com preço zerado no Portal do Parceiro para prevenir exclusões não planejadas.
A tabela abaixo lista os principais campos para a integração de itens:
NomeDescrição
barcodeEAN ou código interno de balança
nameNome do produto
pluCódigo interno PLU
activeStatus de venda (true/false)
inventory.stockQuantidade em estoque
prices.pricePreço base
prices.promotionPricePreço promocional
scalePricesRegras de atacado
channelsCanais de venda (ifood-app, ifood-shop).
Exemplo de payload mínimo:
[
  {
    "barcode": "7891234567890",
    "name": "Leite Integral 1L",
    "active": true,
    "inventory": {
      "stock": 100
    },
    "prices": {
      "price": 5.99
    }
  }
]
Aplicação imediata: Promoções neste módulo não utilizam agendamento (datas de início/fim). O desconto entra em vigor imediatamente após o envio.Atualização: Para alterar um valor promocional, reenvie o item via PATCH com o novo preço.Remoção: Para encerrar uma promoção, envie os campos de valor promocional como null.Verificação: Confirme a aplicação do desconto na seção de Catálogo do Portal do Parceiro.Módulo Order: Os pedidos recebidos conterão automaticamente o preço final com desconto aplicado (preço "por" ou atacado).Configure preços promocionais enviando o valor original e o valor com desconto.Como configurar:
  • prices.price: Valor original (preço "DE")
  • prices.promotionPrice: Valor promocional (preço "POR")
Regras:
  • O desconto deve ser superior a 5%
  • Para remover a promoção, envie prices.promotionPrice: null
Exemplo:
[
  {
    "barcode": "7891234567890",
    "prices": {
      "price": 10.00,
      "promotionPrice": 8.50
    }
  }
]
Esta funcionalidade permite aplicar descontos no valor unitário do produto a partir da compra de uma quantidade mínima.Como configurar:
  • scalePrices[0].quantity: Quantidade mínima para ativar o desconto
  • scalePrices[0].price: Valor unitário com desconto aplicado
Exemplo:
[
  {
    "barcode": "7891234567890",
    "prices": {
      "price": 10.00
    },
    "scalePrices": [
      {
        "quantity": 6,
        "price": 9.00
      }
    ]
  }
]
Neste exemplo, o cliente paga R$ 10,00 por unidade em compras de até 5 itens, e R$ 9,00 por unidade a partir de 6 itens.
Utilize esta mecânica para vender embalagens com múltiplas unidades (ex: fardos) no canal iFood Shop.
Estes campos são exclusivos para o iFood Shop.
Campos obrigatórios:
  • multiple.originalEan: EAN do produto unitário contido no pacote
  • multiple.quantity: Quantidade de unidades no pacote (valores ≤ 1 invalidam a integração)
  • barcode: EAN do pacote ou código interno da loja
  • plu: Utilize o formato código_quantidade para controle interno
    • Exemplo: Para um pacote de 12 unidades, use 7896045506217_12 ou 1234_12.
Exemplo de payload:
[
  {
    "barcode": "7891234567890",
    "plu": "7891234567890_12",
    "name": "Leite Integral 1L - Fardo com 12 unidades",
    "multiple": {
      "originalEan": "7891234567891",
      "quantity": 12
    }
  }
]
Use o campo channels para restringir a integração do item a canais específicos contratados.Valores aceitos:
  • ifood-app
  • ifood-shop
Se o campo channels for omitido ou enviado como null, as alterações serão aplicadas automaticamente a todos os canais configurados para o parceiro.
Exemplo - Restringir item ao iFood Shop:
[
  {
    "barcode": "7891234567890",
    "name": "Produto exclusivo Shop",
    "channels": ["ifood-shop"]
  }
]
Exemplo - Disponibilizar em múltiplos canais:
[
  {
    "barcode": "7891234567890",
    "name": "Produto multi-canal",
    "channels": ["ifood-app", "ifood-shop"]
  }
]
Para parceiros que já integram seus itens pela SiteMercado Service API a migração para a Merchant API traz muitas similaridades que facilitam a mudança de integração.

De-Para Payloads

Campo Service APICampo Merchant API
idLojaNa URL: ingestion/{merchantId}
codigoBarrabarcode
nomename
pluplu
ativoactive
quantidadeEstoqueAtualinventory.stock
departamentodetails.categorization.department
categoriadetails.categorization.category
subcategoriadetails.categorization.subCategory
marcadetails.brand
unidadedetails.unit
volumedetails.volume
imageURLdetails.imageUrl
descricaodetails.description
validadeProximadetails.nearExpiration
valorprices.price
valorPromocaoprices.promotionPrice
listaEscalaPreco.quantidadescalePrices[0].quantity
quantidadeAtacadoscalePrices[0].quantity
listaEscalaPreco.precoscalePrices[0].price
valorAtacadoscalePrices[0].price
multiploEanOriginalmultiple.originalEan
multiploQtdmultiple.quantity
ADICIONADOchannels[*]
familiaREMOVIDO
caracteristicasREMOVIDO
quantidadeEstoqueMinimoREMOVIDO
Verifique os critérios para realizar sua homologação.
Esta página foi útil?
Avalie sua experiência no novo Developer portal: