Envio dos dados
Exemplo para promoções do tipo 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",
                }
            ]
        }
    ]
}
Exemplo para promoções do tipo: LXPY (leve X pague Y){
    "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
                    }
                }
            ]
        }
    ]
}
Exemplo para promoções do tipo:  PERCENTAGE_X_UNIT_DISCOUNT (X% off na Y unidade){
    "aggregationTag": "123456",
    "promotions": [
        {
            "promotionName": "Promoção teste - 50% de desconto 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
                    }
                }
            ]
        }
    ]
}
| Nome | Tipo | Opcional | Descrição | Exemplo | 
|---|
| aggregationTag | String | SIM | Identificador do pedido de integração | Número/código para identificação de solicitação de criação de promoção. | 
| promotion.promotionName | String | SIM | Nome da promoção | Promoção de verão | 
| channels | Array | NÃO | Canais onde as promoções serão vinculadas | IFOOD-APP | 
| promotions.items.ean | String | NÃO | EAN do item | 3213434343 | 
| promotions.items.discountValue | Double | SIM | Valor do desconto a ser concedido, pode ser passado valor em R$ ou % | 29.99 | 
| promotions.items.initialDate | Date | NÃO | Data em que a promoção deve começar | 2024-10-23 | 
| promotions.items.finalDate | Date | NÃO | Data em que a promoção deve finalizar | 2024-10-30 | 
| promotions.items.promotionType | String | NÃO | Tipo da promoção | PERCENTAGE, LXPY ou PERCENTAGE_PER_X_UNITS | 
| promotions.items.progressiveDiscount.quantityToBuy | Integer | SIM1 | Quantidade a comprar | 2 | 
| promotions.items.progressiveDiscount.quantityToPay | Integer | SIM2 | Quantidade a pagar | 2 | 
1 Obrigatório para promoções dos tipos LPXY e PERCENTAGE_PER_X_UNITS.2 Obrigatório para promoções do tipo LPXY.- Tipos de promoções (promotionType) suportados pela integração.- PERCENTAGE: determina o valor do desconto do item em porcentagem.
- LXPY: determina o valor de desconto dado um combo de itens.
- PERCENTAGE_PER_X_UNITS: aplica o desconto percentual a cada x quantidade do item.
 
- Campos usados em conjunto- Para promoções do tipo: PERCENTAGEdeve ser enviadopromotionTypee odiscountValue.
EX:{
        "promotionType": "tipo da promoção",
        "discountValue": "valor do desconto ou valor do item"
}
 
- Para promoções do tipo LXPYdeve ser enviado opromotionTypee oprogressiveDiscount(objeto completo)
EX:    {
        "promotionType": "LXPY", 
        "progressiveDiscount":{
            "quantityToBuy": 3, 
            "quantityToPay": 2
        }
    }
 
- Para promoções do tipo PERCENTAGE_PER_X_UNITSdeve ser enviado opromotionType, oprogressiveDiscount.quantityToBuye odiscountValueEX:    {
        "promotionType": "PERCENTAGE_PER_X_UNITS", 
        "discountValue": "valor do desconto aplicado a cada x unidades do item",
        "progressiveDiscount":{
            "quantityToBuy": 3, 
        }
    }
 
 
Exemplo de utilização:
- Em um exemplo que o item tem o valor R$ 10,00
| Entrada | Valor do item com desconto | 
|---|
| {"promotionType": "PERCENTAGE", "discountValue": 10} | R$ 9,00 | 
| {"promotionType": "LXPY", "progressiveDiscount": {"quantityToBuy": 3, "quantityToPay": 2}} | Os 3 itens sairão por R$ 20,00, cada um por aproximadamente R$ 6,66 | 
| {"promotionType": "PERCENTAGE_PER_X_UNITS", "discountValue": 50, "progressiveDiscount": {"quantityToBuy": 2}} | Ao adicionar 2 unidades do item no carrinho, a segunda receberá 50% de desconto. Ficando um valor total de R$ 15,00 | 
Importante
A fim de evitar qualquer tipo de erro ou fraude, permitimos descontos de no máximo 70% em relação ao preço de catálogo. Para mecânicas como "Leve X Pague Y" e "Percentual de desconto na Nª unidade" consideramos que o desconto dado no combo de itens comprados não deve passar dos mesmos 70% (ex. Leve 10 Pague 2 não é permitido, pois há um desconto de 80% nas 10 unidades compradas). Itens enviados com desconto maior que o permitido serão ignorados.
Retorno da requisição
aggregationId
O aggregationId retornado, será o identificador para acompanhamento do seu pedido de criação de promoção, portanto mantenha o registro dessa informação.
- Erro- Quando ocorrer algum erro ao realizar o processamento, será retornado o HTTP status code 400 ou 422{
"type": "Business Exception || Unprocessable Entity",
"title": "Business Exception || Unprocessable Entity",
"status": 400 || 422,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
 
- Quando ocorrer algum erro em algum parâmetro ou no body, será retornado o HTTP status code 412 HTTP status code 412{
"type": "Precondition Failed || Invalid Argument",
"title": "Invalid Request Body || Invalid Argument",
"status": 412,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
 
 
Detalhamento dos filtros possíveis
Alguns campos são diponibilizados, via queryString.| Campo | Especificação | Explicação | 
|---|
| ean | Texto | mesmo encaminhado no body do post | 
| promotionName | Texto | mesmo encaminhado no body do post | 
| promotionType | Texto | mesmo encaminhado no body do post | 
| status | Texto | ver detalhamento do campo nos exemplos de retorno | 
| offset | Inteiro | número da primeira da listagem desejada | 
| limit | Inteiro | número de itens a serem retornados1 | 
1 máximo de 1000 itensTabela de valores para o campo status
| Status | Detalhamento | 
|---|
| PROCESSING | Retornado logo após o dado ser recebido, via endpoint de post, e está sendo validada pelos sistemas iFood para poderem ser promocionadas | 
| SCHEDULED | Essa situação indica que o os itens da promoção foram validados, porem a data de inicio da promoção é futura e a mesma aguarda o dia agendado | 
| ACTIVE | Promoção validada e em operação | 
| DUPLICATE | Ocorre quando enviado um item promocional duplicado, ou seja, um item promocional que já foi enviado exatamente da mesma forma em chamadas anteriores (mesmo produto, mecânica, descontos e datas de vigência) | 
| FINISHING | Ocorre quando um pedido de remoção do item foi realizado (seja por solicitação especifica do item ou por ter chegado na data final da promoção) e aguarda sua efetivação em todos os sistemas iFood | 
| FINISHED | Recebido o OK da remoção do item em todos os sistemas iFood, o item não está mais promocionado | 
| ERROR | Ocorre quando algum problema foi detectado durante alguma etapa do processo de promocionamento e/ou despromocionamento, nesse caso o campo error1 é retornado no payload de retorno | 
1 para mais detalhes, verifique a Tabela de referência de retorno no campo errorImportante
A promoção estar no status "ACTIVE" significa que ela está devidamente cadastrada e ativa em nosso sistema, porém não significa que ela estará necessariamente aparecendo no App do iFood para todos os usuários.
Isso se deve ao fato de que, além das promoções inseridas pela integração, outras promoções podem estar ativas para o mesmo item (sejam promoções bancadas iFood, pela indústria ou até inseridas por você via Portal do Parceiro ou executivos comerciais). A fim de evitar duplo subsídio, o iFood apresenta para o usuário somente uma das promoções ativas para o item, usando uma regra de priorização. Essa priorização tem como base mostrar o melhor desconto para o usuário, porém outras regras adicionais podem ser aplicadas.
Retorno da requisição
- Sucesso- HTTP status code 200
- Response body{
  "promotions": [
    {
        "promotionItemId": "005f5ea0-1ff4-4c9b-9f48-76d94bfe4694",
        "ean": "3213434343",
        "status": "PROCESSING",
        "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
  }
}
 
 
- Erro- Quando ocorrer algum erro ao realizar o processamento, será retornado o HTTP status code 400 ou 422{
"type": "Business Exception || Unprocessable Entity",
"title": "Business Exception || Unprocessable Entity",
"status": 400 || 422,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
 
- Quando ocorrer algum erro em algum parâmetro ou no body, será retornado o HTTP status code 412 HTTP status code 412{
"type": "Precondition Failed || Invalid Argument",
"title": "Invalid Request Body || Invalid Argument",
"status": 412,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
 
 
Tabela de valores retornados no campo error
| Valor | Detalhamento | 
|---|
| DATE_INVALID | Verifique se initialDateefinalDateestão no formato esperado (ex:2024-10-23) e quefinalDateseja maior queinitialDate. | 
| PROMOTION_TYPE_INVALID | Revise os valores informados no campo promotionTypena seção Tipos de promoções. | 
| DISCOUNT_INVALID | Dependendo do tipo de promoção, revise: - PERCENTAGE_PER_X_UNITS:
 discountValueequantityToBuydevem ser informados e maiores que zero.- PERCENTAGE:
 discountValuedeve ser informado e maior que zero.- LXPY:
 quantityToBuyequantityToPaydevem ser informados e maiores que zero.
 Além dessas validações, os itens integrados serão recusados caso o desconto desejado seja superior a 70% do valor de venda original do item.
 | 
| ITEM_NOT_FOUND | Verifique se o ean enviado está correto, se o produto está ativo e com estoque na loja informada. | 
| INTERNAL_ERROR | Demais erros1 | 
1 Entre em contato com suporte iFood para maiores detalhesRetorno no módulo de Order
Caso alguma promoção enviada pelo módulo de Promotion seja aplicada a um pedido da sua loja, o benefício será apresentado no endpoint GET /orders/{id}/virtual-bag, da seguinte forma:- Os benefícios serão apresentados no campo benefit.benefitspara todas as mecânicas;
- Caso queira saber somente os benefícios em itens que são patrocinados pela sua loja (que é o caso das promoções enviadas pelo módulo de Promotion):- Filtre somente os benefícios em que targetsejaITEM;
- Destes, filtre somente os benefícios que possuem somente 1 elemento em sponsorships, e que este possualiabilitycomoPARTNERouCHAIN.
 
- Para saber o valor do item com desconto:- Obtenha o valor de targetIddo benefício e use para correlacionar com o item (elemento embag.itemsque tenhauniqueIdde mesmo valor).
- O valor no item é sempre sem qualquer desconto. Então, subtraia o valor de sponsorships.amount.value(do benefício) do valor do campoprices.grossValue.value(do item).