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

Pedidos programados (Scheduled orders)

Permita que clientes elijan horario de entrega para optimizar operaciones durante horas pico y mejorar experiencia.
Pedido programado es cuando el cliente elige hora exacta para recibir o retirar su pedido, en lugar de entrega/retiro inmediato. Funciona con:
  • DELIVERY: Entrega en horario programado
  • TAKEOUT: Retiro en horario programado
  • DINE_IN: Consumo en sitio en hora reservada
Crítico: Respete horario del cliente. Nunca prepare ni entregue antes.
Verifique orderTiming y objeto scheduled:
{
  "orderTiming": "SCHEDULED",
  "scheduled": {
    "deliveryDateTimeStart": "2024-04-25T19:00:00Z",
    "deliveryDateTimeEnd": "2024-04-25T19:30:00Z",
    "preparationStartDateTime": "2024-04-25T18:45:00Z"
  },
  "orderType": "DELIVERY"
}
CampoSignificado
orderTiming = "SCHEDULED"Pedido es programado
deliveryDateTimeStartInicio ventana entrega/retiro
deliveryDateTimeEndFin ventana entrega/retiro
preparationStartDateTimeCuándo debe comenzar preparación
Confirme la recepción en 8 minutos desde preparationStartDateTime. Vea plazo de confirmación.
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/orders/{id}/confirm" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"
Respuesta: 202 Accepted
Si "Preparación Inteligente" habilitada, sistema calcula mejor momento:
{
  "RECOMMENDED_PREPARATION_START": "2024-04-25T18:45:00Z"
}
Use como referencia, pero respete preparationStartDateTime si más restrictivo.
Comience preparación a hora correcta:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/orders/{id}/startPreparation" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"
Timing:
  • Nunca antes de preparationStartDateTime
  • Comience cerca hora calculada
  • Termine cerca de deliveryDateTimeStart
Respuesta: 202 Accepted
Cuando termine:Para DELIVERY:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/orders/{id}/dispatch" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"
Para TAKEOUT/DINE_IN:
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/orders/{id}/readyToPickup" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"
Respuesta: 202 Accepted
La clave para pedidos programados es entender preparationStartDateTime:
preparationStartDateTime = deliveryDateTimeStart − deliveryTime
Donde deliveryTime es duración promedio preparación (en minutos).Escenario: Cliente programa entrega para 20:00, su tienda tarda 40 minutos
Entrega programada: 20:00
Tiempo preparación: 40 minutos
─────────────────────────
Comenzar prep en: 19:20
Plazo SLA: 19:28 (8 min después 19:20)
Timeline esperada:
16:00 → Cliente programa para 20:00 en app
16:01 → Usted recibe CONFIRMED
16:02 → Confirma pedido (dentro 8 min después 19:20)
19:00 → Sistema alerta: "comenzar prep en 20 min"
19:20 → Comprobante imprime — comience preparación
19:20 → Llame /startPreparation
19:28 → Plazo SLA pasó (no problema, ya confirmó 16:02)
20:00 → Llame /dispatch o /readyToPickup
20:00 → Conductor llega o cliente retira
Errado: Comience prep antes de preparationStartDateTime
  • Cliente puede no estar en casa (DELIVERY)
  • Comida se enfría/calienta
  • Cliente ve pedido saliendo antes de lo programado
Correcto: Comience exactamente en preparationStartDateTime o poco después
{
  "deliveryDateTimeStart": "2024-04-25T19:00:00Z",
  "deliveryDateTimeEnd": "2024-04-25T19:30:00Z"
}
Sistema permite entrega durante ventana completa, pero respete inicio.Aunque confirme inmediatamente, SLA técnico es:
8 minutos después preparationStartDateTime
Esto permite tiempo para:
  • Validar disponibilidad artículos
  • Alertar cliente si hay atraso
Ya confirmó temprano (16:02 en ejemplo), está cubierto.
16:00 → Cliente programa para 20:00
16:01 → Recibe CONFIRMED
16:02 → Confirma vía API
19:20 → Obtiene alerta "comenzar prep"
19:20 → Llama /startPreparation
19:50 → Prep lista
20:00 → Llama /dispatch exactamente
20:15 → Conductor llega y recoge
20:40 → Cliente recibe
17:00 → Cliente programa para 19:30
17:01 → Recibe CONFIRMED
17:02 → Confirma
19:00 → Obtiene alerta "comenzar prep en 30 min"
19:30 → Llama /startPreparation (15 min antes para estar listo)
19:45 → Prep lista
19:50 → Llama /readyToPickup
20:00 → Cliente llega, retira en mostrador
13:00 → Cliente programa 18:00-18:30
13:01 → Recibe CONFIRMED
13:02 → Confirma
17:20 → Comprobante imprime (40 min antes)
17:20 → Llama /startPreparation
18:00 → Prep lista
18:00 → Llama /dispatch
18:15 → Conductor recoge (dentro ventana)
18:40 → Cliente recibe (dentro ventana)
EstadoSu POSAcción
PLACEDProgramadoMostrar en calendario
CONFIRMEDConfirmadoMarcar confirmado
PREPARINGPreparandoEnviar cocina con hora
READY_TO_PICKUPListoAvisar "listo para X"
DISPATCHEDSalióMarcar despachado
CONCLUDEDEntregadoArchivar
Imprima en comprobante:
═════════════════════════
  PEDIDO PROGRAMADO
═════════════════════════

ID: #12345
Cliente: Juan Silva

Programado para: 20:00
Comience prep en: 19:20
Plazo máximo: 19:28

[ARTÍCULOS]
- Hamburguesa x1
- Bebida x1

═════════════════════════
  • Pruebe con orderTiming = "SCHEDULED"
  • Valide cálculo preparationStartDateTime
  • Pruebe IMMEDIATE también (para no romper)
  • Verifique /startPreparation respeta timing
  • Pruebe dispatch/readyToPickup hora correcta
  • Pruebe DELIVERY, TAKEOUT, DINE_IN programados
  • Valide SLA 8 minutos
Si pedido se cancela:
  1. Verifique si confirmó dentro 8 minutos preparationStartDateTime
  2. Verifique si preparationStartDateTime calculado correctamente
  3. Verifique timezone (siempre UTC en API)
  1. Retiro programadoPara retirar
  2. Flujo generalGuía implementación
  3. Detalles pedidoEstructura completa
  4. Referencia APIEndpoints
  5. Eventos cronogramaCatálogo eventos
¿Esta página fue útil?
Evalúa tu experiencia en el nuevo portal de desarrolladores: