DE-POR e ATACAREJO devem ser configuradas pelo módulo Item.?reset=true. Veja Atualização de promoções.curl -X POST "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{{merchantId}}/promotions" \
-H "Authorization: Bearer {{token}}" \
-H "Content-Type: application/json" \
-d '{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste",
"channels": ["IFOOD-APP"],
"items": [
{
"ean": "3213434343",
"discountValue": 20.0,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "PERCENTAGE"
}
]
}
]
}'{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste",
"channels": ["IFOOD-APP"],
"items": [
{
"ean": "3213434343",
"discountValue": 20.0,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "PERCENTAGE"
}
]
}
]
}{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste do tipo LXPY",
"channels": ["IFOOD-APP"],
"items": [
{
"ean": "3213434343",
"discountValue": null,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "LXPY",
"progressiveDiscount": {
"quantityToBuy": 3,
"quantityToPay": 2
}
}
]
}
]
}{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste - 50% na 3ª unidade",
"channels": ["IFOOD-APP"],
"items": [
{
"ean": "3213434343",
"discountValue": 50.0,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "PERCENTAGE_PER_X_UNITS",
"progressiveDiscount": {
"quantityToBuy": 3
}
}
]
}
]
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| aggregationTag | String | Não | Identificador customizado da requisição |
| promotions[].promotionName | String | Não | Nome da promoção |
| promotions[].channels | Array | Sim | Canais de venda (ex: IFOOD-APP) |
| promotions[].items[].ean | String | Sim | Código EAN do produto |
| promotions[].items[].discountValue | Double | Condicional | Valor do desconto em % |
| promotions[].items[].initialDate | Date | Sim | Data de início (formato: YYYY-MM-DD) |
| promotions[].items[].finalDate | Date | Sim | Data de término (formato: YYYY-MM-DD) |
| promotions[].items[].promotionType | String | Sim | Tipo: PERCENTAGE, LXPY ou PERCENTAGE_PER_X_UNITS |
| progressiveDiscount.quantityToBuy | Integer | Condicional | Quantidade a comprar (LXPY e PERCENTAGE_PER_X_UNITS) |
| progressiveDiscount.quantityToPay | Integer | Condicional | Quantidade a pagar (apenas LXPY) |
| Tipo | Campos obrigatórios |
|---|---|
| PERCENTAGE | discountValue |
| LXPY | quantityToBuy, quantityToPay |
| PERCENTAGE_PER_X_UNITS | discountValue, quantityToBuy |
aggregationId (string): ID único para rastreamento da requisição de criação de promoçõesmessage (string): Mensagem de confirmação{
"aggregationId": "abc123",
"message": "We have successfully received your request to create promotions"
}aggregationId para consultar o status real via GET.Recomendação: Valide o status no endpoint GET e confira no App do iFood antes de considerar a promoção ativa.{
"type": "Business Exception",
"title": "Business Exception",
"status": 400,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}{
"type": "Invalid Argument",
"title": "Invalid Request Body",
"status": 412,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}?reset=true:POST /merchants/{merchantId}/promotions?reset=truecurl -X GET "https://merchant-api.ifood.com.br/promotion/v1.0/merchants/{{merchantId}}/promotions/{{aggregationId}}/items?offset=0&limit=10&status=ACTIVE" \
-H "Authorization: Bearer {{token}}" \
-H "Content-Type: application/json"| Parâmetro | Tipo | Descrição |
|---|---|---|
| ean | String | Código EAN do produto |
| promotionName | String | Nome da promoção |
| promotionType | String | Tipo da promoção |
| status | String | Status atual (veja tabela abaixo) |
| offset | Integer | Posição inicial da listagem |
| limit | Integer | Itens por página (máximo: 1000) |
| Status | Descrição |
|---|---|
| PROCESSING | Recebido e em validação |
| SCHEDULED | Validado, aguardando data de início |
| ACTIVE | Validado e em operação |
| DUPLICATE | Item promocional duplicado (já enviado anteriormente) |
| FINISHING | Remoção solicitada, aguardando efetivação |
| FINISHED | Removido com sucesso |
| ERROR | Erro detectado (veja campo error para detalhes) |
promotions (array): Lista de itens de promoçãopromotionItemId (string, UUID): Identificador único do item de promoçãoean (string): Código EAN do produtostatus (string): Status atual (PROCESSING, ACTIVE, FINISHED, SCHEDULED, FINISHING, ERROR)initialDate (string, date): Data de início da promoçãofinalDate (string, date): Data de término da promoçãopromotionType (string): Tipo da promoção (PERCENTAGE, LXPY, PERCENTAGE_PER_X_UNITS)discountValue (string): Valor do desconto (em %)promotionName (string): Nome da promoçãoprogressiveDiscount (object, opcional): Desconto progressivoquantityToBuy (number): Quantidade a comprarquantityToPay (number): Quantidade a pagarerror (string, opcional): Detalhamento do erro (retornado apenas quando status = ERROR)pagination (object): Informações de paginaçãonextOffset (integer): Valor do próximo offsetcurrentOffset (integer): Valor do offset atual{
"promotions": [
{
"promotionItemId": "005f5ea0-1ff4-4c9b-9f48-76d94bfe4694",
"ean": "3213434343",
"status": "ACTIVE",
"initialDate": "2024-10-10",
"finalDate": "2024-10-11",
"promotionType": "LXPY",
"promotionName": "Promoção teste do tipo LXPY",
"progressiveDiscount": {
"quantityToBuy": 3,
"quantityToPay": 2
}
}
],
"pagination": {
"nextOffset": 99,
"currentOffset": 0
}
}| Código | Detalhamento |
|---|---|
| DATE_INVALID | Verifique formato das datas (YYYY-MM-DD) e se finalDate > initialDate |
| PROMOTION_TYPE_INVALID | Valores válidos: PERCENTAGE, LXPY, PERCENTAGE_PER_X_UNITS |
| DISCOUNT_INVALID | Verifique campos obrigatórios para cada tipo e limite de 70% de desconto |
| ITEM_NOT_FOUND | EAN incorreto ou produto inativo/sem estoque |
| INTERNAL_ERROR | Entre em contato com o suporte iFood |
benefit.benefitstarget = ITEMsponsorships com 1 elemento onde liability = PARTNER ou CHAINtargetId do benefíciobag.items[].uniqueIdsponsorships.amount.value de prices.grossValue.value