Buscar en la documentación
ctrl+4K
Módulos
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Soluciones

Como funciona

Entenda o processamento assíncrono, o parâmetro reset e as estratégias de integração da API de Promotion.
Todas as requisições retornam 202 Accepted, mas o processamento ocorre de forma assíncrona:
  1. Você envia requisição POST → API retorna 202 imediatamente
  2. Sistema enfileira sua requisição para validação
  3. Validações ocorrem nos próximos segundos
  4. Consulte com GET usando aggregationId para verificar status real
  • Não aguarde na requisição (pode timeout)
  • Não assuma sucesso apenas pelo status 202
  • Consulte o endpoint GET para verificar ACTIVE, ERROR ou outro status
POST (requisição enviada)

202 Accepted (recebido na fila)

PROCESSING (validando)

SCHEDULED ou ACTIVE (validação passou)

ERROR (validação falhou)
POST /merchants/{merchantId}/promotions
  • Novas requisições adicionam-se às promoções existentes
  • Promoções anteriores continuam ativas
  • Recomendado: Use em praticamente todos os casos
POST /merchants/{merchantId}/promotions?reset=true
  • Substitui completamente todas as promoções da loja
  • Desativa itens não presentes no novo payload
  • Ação permanente e não reversível
AçãoItemResultado
CriarNo payload, não existeNovo item promocional criado
ManterNo payload, já existeItem continua com novos parâmetros
DesativarNão no payloadItem marcado FINISHING e removido
Cuidado: reset=true desativa todos os itens não enviados. Use apenas quando tiver certeza absoluta de que deseja sincronizar o catálogo completo.
Use apenas quando:
  • Sincronizar completamente o estado com um sistema externo
  • Remover todas as promoções ativas de uma loja
  • Garantir que apenas o conjunto especificado esteja ativo
Evite reset=true quando:
  • Apenas quer adicionar novas promoções (use POST sem o parâmetro)
  • Durante horários de pico de vendas na loja
  • A loja tem mais de 10.000 itens promocionais
  • Sem ter validado o payload completo internamente
AspectoRecomendação
FrequênciaMáximo uma vez por dia
HorárioFora do pico de vendas (ex: 2h-6h)
LimiteMáximo 10.000 itens por requisição
ValidaçãoValidar localmente antes de enviar
RastreamentoUsar aggregationTag com timestamp
Dia 1: Enviar promoções iniciais via POST
curl -X POST "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "aggregationTag": "inicial-001",
    "promotions": [ ... ]
  }'
Resposta: 202 Accepted com aggregationIdDia 2+: Adicionar ou atualizar promoções
curl -X POST "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "aggregationTag": "atualizacao-001",
    "promotions": [ ... ]
  }'
Use reset=true quando precisar sincronizar completamente:
curl -X POST "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions?reset=true" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "aggregationTag": "sincronizacao-noturna-001",
    "promotions": [ ... ]
  }'
Recomendação: Agendar para 3h da madrugadaUse POST sem reset (padrão):
curl -X POST "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions" \
  -H "Authorization: Bearer {JWT_TOKEN}" \
  -d '{
    "aggregationTag": "novo-item-001",
    "promotions": [
      {
        "promotionName": "Nova promoção",
        "channels": ["IFOOD-APP"],
        "items": [ ... ]
      }
    ]
  }'
Apenas este novo item é criado. Promoções existentes permanecem ativas.
HoraAçãoMétodoEsperado
08:00Criar promoçãoPOST202 Accepted com aggregationId
08:05Consultar statusGETStatus PROCESSING
08:10Consultar statusGETStatus ACTIVE
09:00Cliente faz pedidoManualDesconto aparece no pedido
18:00Atualizar descontoPATCH202 Accepted (ou POST + reset)
23:59Promoção expiraAutomáticoStatus muda para FINISHED
Aguarde antes de consultar:
sleep 2

curl -X GET "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions/{aggregationId}/items" \
  -H "Authorization: Bearer {JWT_TOKEN}"
  1. Primeira tentativa (0-5s): Pode estar em PROCESSING
  2. Tentativas seguintes (5-30s): Ainda pode estar PROCESSING
  3. Após 30s: Se ainda PROCESSING, investigar ou esperar mais
  4. Status ERROR: Consulte campo error para código específico
Identificador customizado para rastreamento. Use para auditar requisições:
{
  "aggregationTag": "verão-2026-001",
  "promotions": [ ... ]
}
Requisitos:
  • Deve ser único por requisição
  • Use timestamp ou UUID para garantir unicidade
  • Máximo 255 caracteres
ID retornado na resposta 202. Use para consultar status:
curl -X GET "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{merchantId}/promotions/{aggregationId}/items" \
  -H "Authorization: Bearer {JWT_TOKEN}"
¿Esta página fue útil?
Evalúa tu experiencia en el nuevo portal de desarrolladores: