FIXED
, PERCENTAGE
e FIXED_PRICE
{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste",
"channels": [
"IFOOD-APP"
],
"items": [
{
"ean": "3213434343",
"discountValue": 22.99,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "FIXED",
}
]
}
]
}
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: ATACAREJO
{
"aggregationTag": "123456",
"promotions": [
{
"promotionName": "Promoção teste do tipo Atacarejo",
"channels": [
"IFOOD-APP"
],
"items": [
{
"ean": "3213434343",
"discountValue": 3,
"initialDate": "2024-10-23",
"finalDate": "2024-10-30",
"promotionType": "ATACAREJO",
"progressiveDiscount": {
"quantityToBuy": 6
}
}
]
}
]
}
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 | FIXED, PERCENTAGE, FIXED_PRICE, LXPY, ATACAREJO 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 |
FIXED
, PERCENTAGE
, FIXED_PRICE
deve ser enviado
promotionType
e o discountValue
.
EX:{
"promotionType": "tipo da promoção",
"discountValue": "valor do desconto ou valor do item"
}
LXPY
deve ser enviado o promotionType
e o progressiveDiscount
(objeto completo)
EX: {
"promotionType": "LXPY",
"progressiveDiscount":{
"quantityToBuy": 3,
"quantityToPay": 2
}
}
ATACAREJO
deve ser enviado o promotionType
, o progressiveDiscount
e o discountValue
EX: {
"promotionType": "ATACAREJO",
"discountValue": "valor final do item",
"progressiveDiscount":{
"quantityToBuy": 3,
}
}
PERCENTAGE_PER_X_UNITS
deve ser enviado o promotionType
, o progressiveDiscount.quantityToBuy
e o discountValue
EX: {
"promotionType": "PERCENTAGE_PER_X_UNITS",
"discountValue": "valor do desconto aplicado a cada x unidades do item",
"progressiveDiscount":{
"quantityToBuy": 3,
}
}
Entrada | Valor do item com desconto |
---|---|
{"promotionType": "FIXED", "discountValue": 2} | R$ 8,00 |
{"promotionType": "PERCENTAGE", "discountValue": 10} | R$ 9,00 |
{"promotionType": "FIXED_PRICE", "discountValue": 6} | R$ 6,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": "ATACAREJO", "discountValue": 6, "progressiveDiscount": {"quantityToBuy": 3}} | Os 3 itens sairão por R$ 18,00, cada um por R$ 6,00 |
{"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 |
{
"aggregationId": "String",
"message": "We have successfully received your request to create promotions"
}
{
"type": "Business Exception || Unprocessable Entity",
"title": "Business Exception || Unprocessable Entity",
"status": 400 || 422,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
{
"type": "Precondition Failed || Invalid Argument",
"title": "Invalid Request Body || Invalid Argument",
"status": 412,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
?reset=true
ao final da rota, que ficará da seguinte forma:POST /merchants/{merchantId}/promotions?reset=true
O payload enviado segue o mesmo formato citado aqui.O comportamento do “reset” de promoções é o mesmo do “reset” do módulo de Item. Quando o POST é chamado com o modo de “reset”, os itens promocionais enviados no payload substituirão tudo o que já foi enviado anteriormente para aquela loja. Após o processamento, passará a valer apenas o que foi enviado pela última vez.Mais especificamente, o que irá acontecer é o seguinte: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 |
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 |
{
"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
}
}
{
"type": "Business Exception || Unprocessable Entity",
"title": "Business Exception || Unprocessable Entity",
"status": 400 || 422,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
{
"type": "Precondition Failed || Invalid Argument",
"title": "Invalid Request Body || Invalid Argument",
"status": 412,
"detail": "Detail error",
"instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
Valor | Detalhamento |
---|---|
DATE_INVALID | Verifique se initialDate e finalDate estão no formato esperado (ex: 2024-10-23 ) e que finalDate seja maior que initialDate . |
PROMOTION_TYPE_INVALID | Revise os valores informados no campo promotionType na seção Tipos de promoções. |
DISCOUNT_INVALID | Dependendo do tipo de promoção, revise: - ATACAREJO e PERCENTAGE_PER_X_UNITS: discountValue e quantityToBuy devem ser informados e maiores que zero.- FIXED, PERCENTAGE e FIXED_PRICE: discountValue deve ser informado e maior que zero.- LXPY: quantityToBuy e quantityToPay devem 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 |
benefit.benefits
(para todas as mecânicas, inclusive as do tipo FIXED_PRICE
);target
seja ITEM
;sponsorships
, e que este possua liability
como PARTNER
.targetId
do benefício e use para correlacionar com o item (elemento em bag.items
que tenha uniqueId
de mesmo valor).sponsorships.amount.value
(do benefício) do valor do campo prices.grossValue.value
(do item).