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

Promotion

El módulo de Promociones está restringido a las integraciones existentes. Los nuevos socios deben usar el módulo de Artículos para mecánicas promocionales sencillas. Más información aquí.
El módulo Promotion permite crear y gestionar promociones de productos en su tienda, ofreciendo diferentes mecánicas de descuento para atraer y comprometer clientes.Principales funcionalidades:
  • Crear promociones con descuento porcentual
  • Configurar combos "Lleve X Pague Y"
  • Aplicar descuento progresivo por unidad
  • Agendar período de vigencia de las promociones
  • Consultar estado y detalles de las promociones activas
Módulo exclusivoEste módulo es de uso exclusivo de partners que operan con mercado y no está disponible para todos los desarrolladores. Si tiene interés en utilizar funciones de esta API, entre en contacto con el equipo de atención.
Otros tipos de promociónLas promociones del tipo DE-POR y ATACAREJO deben ser configuradas por el módulo Item.

Creación de promociones

Use POST /merchants/{merchantId}/promotions para crear promociones.Descripción: Este endpoint crea nuevas promociones para una tienda.
Comportamiento del endpointEste endpoint adiciona promociones a la tienda. Las promociones permanecen activas hasta la fecha final. Nuevas solicitudes se suman a las promociones existentes. Para sustituir la lista actual, use ?reset=true. Vea Actualización de promociones.
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": "Promoción prueba",
        "channels": ["IFOOD-APP"],
        "items": [
          {
            "ean": "3213434343",
            "discountValue": 20.0,
            "initialDate": "2024-10-23",
            "finalDate": "2024-10-30",
            "promotionType": "PERCENTAGE"
          }
        ]
      }
    ]
  }'
Aplica descuento porcentual en el precio del ítem.Ejemplo: Ítem de R$ 10,00 con 10% de descuento = R$ 9,00
{
  "aggregationTag": "123456",
  "promotions": [
    {
      "promotionName": "Promoción prueba",
      "channels": ["IFOOD-APP"],
      "items": [
        {
          "ean": "3213434343",
          "discountValue": 20.0,
          "initialDate": "2024-10-23",
          "finalDate": "2024-10-30",
          "promotionType": "PERCENTAGE"
        }
      ]
    }
  ]
}
Aplica descuento en combo de ítems.Ejemplo: Ítem de R$ 10,00 en combo "Lleve 3 Pague 2" = R$ 20,00 total (R$ 6,66 cada uno)
{
  "aggregationTag": "123456",
  "promotions": [
    {
      "promotionName": "Promoción prueba del 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
          }
        }
      ]
    }
  ]
}
Aplica descuento porcentual a cada X unidades.Ejemplo: Ítem de R$ 10,00 con 50% en la 2ª unidad = R$ 15,00 total (2 unidades)
{
  "aggregationTag": "123456",
  "promotions": [
    {
      "promotionName": "Promoción prueba - 50% en la 3ª unidad",
      "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
          }
        }
      ]
    }
  ]
}
CampoTipoObligatorioDescripción
aggregationTagStringNoIdentificador personalizado de la solicitud
promotions[].promotionNameStringNoNombre de la promoción
promotions[].channelsArrayCanales de venta (ej: IFOOD-APP)
promotions[].items[].eanStringCódigo EAN del producto
promotions[].items[].discountValueDoubleCondicionalValor del descuento en %
promotions[].items[].initialDateDateFecha de inicio (formato: YYYY-MM-DD)
promotions[].items[].finalDateDateFecha de término (formato: YYYY-MM-DD)
promotions[].items[].promotionTypeStringTipo: PERCENTAGE, LXPY o PERCENTAGE_PER_X_UNITS
progressiveDiscount.quantityToBuyIntegerCondicionalCantidad a comprar (LXPY y PERCENTAGE_PER_X_UNITS)
progressiveDiscount.quantityToPayIntegerCondicionalCantidad a pagar (solo LXPY)
TipoCampos obligatorios
PERCENTAGEdiscountValue
LXPYquantityToBuy, quantityToPay
PERCENTAGE_PER_X_UNITSdiscountValue, quantityToBuy
Límite de descuentoDescuentos máximos permitidos: 70% del precio de catálogo. Ítems con descuento superior serán rechazados.Ejemplo no permitido: "Lleve 10 Pague 2" = 80% de descuento
Campos retornados:
  • aggregationId (string): ID único para rastreo de la solicitud de creación de promociones
  • message (string): Mensaje de confirmación
{
  "aggregationId": "abc123",
  "message": "We have successfully received your request to create promotions"
}
Procesamiento asíncronoEl estado 202 indica que la solicitud fue recibida, pero no que las promociones fueron creadas. Use el aggregationId para consultar el estado real vía GET.Recomendación: Valide el estado en el endpoint GET y verifique en la App de iFood antes de considerar la promoción activa.
HTTP 400/422 - Error de procesamiento
{
  "type": "Business Exception",
  "title": "Business Exception",
  "status": 400,
  "detail": "Detail error",
  "instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}
HTTP 412 - Error de validación
{
  "type": "Invalid Argument",
  "title": "Invalid Request Body",
  "status": 412,
  "detail": "Detail error",
  "instance": "07228dab-644c-4bec-b8a3-073397a839a0"
}

Actualización de promociones

Para sustituir todas las promociones activas de la tienda, use el parámetro ?reset=true:
POST /merchants/{merchantId}/promotions?reset=true
Comportamiento del reset:
  • Crea nuevos ítems promocionales
  • Mantiene ítems idénticos a los ya existentes
  • Desactiva ítems no incluidos en el nuevo payload
Recomendaciones:
  • Use con moderación (diariamente fuera del horario comercial)
  • Ejecute solo cuando haya alteraciones
  • Límite: máximo 10.000 ítems promocionales por payload

Consulta de promociones

Use GET /merchants/{merchantId}/promotions/{aggregationId}/items para consultar estado de las promociones.Descripción: Retorna detalles de ítems de promoción con soporte a filtros y paginación.Importante: El procesamiento es asíncrono. Consultas inmediatas después del POST pueden retornar lista vacía.
curl -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ámetroTipoDescripción
eanStringCódigo EAN del producto
promotionNameStringNombre de la promoción
promotionTypeStringTipo de la promoción
statusStringEstado actual (vea tabla abajo)
offsetIntegerPosición inicial del listado
limitIntegerÍtems por página (máximo: 1000)
EstadoDescripción
PROCESSINGRecibido y en validación
SCHEDULEDValidado, aguardando fecha de inicio
ACTIVEValidado y en operación
DUPLICATEÍtem promocional duplicado (ya enviado anteriormente)
FINISHINGRemoción solicitada, aguardando efectivización
FINISHEDRemovido con éxito
ERRORError detectado (vea campo error para detalles)
Estado ACTIVE no garantiza visibilidadUna promoción ACTIVE está registrada en el sistema, pero puede no aparecer en la App para todos los usuarios debido a:
  • Otras promociones activas para el mismo ítem
  • Reglas de priorización (muestra el mejor descuento)
  • Promociones de iFood, industria o insertadas vía Portal del Partner
Campos retornados:
  • promotions (array): Lista de ítems de promoción
    • promotionItemId (string, UUID): Identificador único del ítem de promoción
    • ean (string): Código EAN del producto
    • status (string): Estado actual (PROCESSING, ACTIVE, FINISHED, SCHEDULED, FINISHING, ERROR)
    • initialDate (string, date): Fecha de inicio de la promoción
    • finalDate (string, date): Fecha de término de la promoción
    • promotionType (string): Tipo de promoción (PERCENTAGE, LXPY, PERCENTAGE_PER_X_UNITS)
    • discountValue (string): Valor del descuento (en %)
    • promotionName (string): Nombre de la promoción
    • progressiveDiscount (object, opcional): Descuento progresivo
      • quantityToBuy (number): Cantidad a comprar
      • quantityToPay (number): Cantidad a pagar
    • error (string, opcional): Detalle del error (retornado solo cuando status = ERROR)
  • pagination (object): Información de paginación
    • nextOffset (integer): Valor del próximo offset
    • currentOffset (integer): Valor del offset actual
{
  "promotions": [
    {
      "promotionItemId": "005f5ea0-1ff4-4c9b-9f48-76d94bfe4694",
      "ean": "3213434343",
      "status": "ACTIVE",
      "initialDate": "2024-10-10",
      "finalDate": "2024-10-11",
      "promotionType": "LXPY",
      "promotionName": "Promoción prueba del tipo LXPY",
      "progressiveDiscount": {
        "quantityToBuy": 3,
        "quantityToPay": 2
      }
    }
  ],
  "pagination": {
    "nextOffset": 99,
    "currentOffset": 0
  }
}
CódigoDetalle
DATE_INVALIDVerifique formato de las fechas (YYYY-MM-DD) y si finalDate > initialDate
PROMOTION_TYPE_INVALIDValores válidos: PERCENTAGE, LXPY, PERCENTAGE_PER_X_UNITS
DISCOUNT_INVALIDVerifique campos obligatorios para cada tipo y límite de 70% de descuento
ITEM_NOT_FOUNDEAN incorrecto o producto inactivo/sin stock
INTERNAL_ERROREntre en contacto con el soporte iFood

Promociones en pedidos

Promociones aplicadas aparecen en GET /orders/{id}/virtual-bag:Cómo identificar promociones de su tienda:
  1. Beneficios en benefit.benefits
  2. Filtre por target = ITEM
  3. Filtre por sponsorships con 1 elemento donde liability = PARTNER o CHAIN
Calcular valor con descuento:
  1. Obtenga targetId del beneficio
  2. Correlacione con bag.items[].uniqueId
  3. Reste sponsorships.amount.value de prices.grossValue.value

Próximos pasos

Verifique los criterios para realizar su homologación
¿Esta página fue útil?
Evalúa tu experiencia en el nuevo portal de desarrolladores: