Search in documentation
ctrl+4K
Modules
Authentication
Merchant
Catalog
Order
Events
Logistics
Shipping
Review
Financial
Solutions

For pickup (Takeout)

Let customers pick up orders at counter, drive-thru, or special spot instead of delivery to optimize logistics and improve customer experience.
Takeout is when a customer picks up their order at your establishment instead of delivery. It works with:
  • Counter: Customer picks up at front counter (mode = "DEFAULT")
  • Drive-thru: Customer picks up without leaving car
  • Parking spot: Customer parks in designated area (mode = "PICKUP_AREA")
Critical difference: Don't use /dispatch for takeout. Use /readyToPickup when ready.
Check orderType in order structure:
{
  "orderType": "TAKEOUT",
  "takeout": {
    "mode": "DEFAULT",
    "takeoutDateTime": "2024-04-25T18:30:00Z"
  }
}
FieldMeaning
orderType = "TAKEOUT"Customer picks up (no delivery)
mode = "DEFAULT"Counter pickup
mode = "PICKUP_AREA"Reserved spot or drive-thru
takeoutDateTimeEstimated pickup time
Confirm within 8 minutes. See confirmation deadline.
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"
Response: 202 Accepted
Check orderTiming to know when to prepare:
{
  "orderTiming": "IMMEDIATE"  // or "SCHEDULED"
}
IMMEDIATE: Prepare immediately after confirming (for soon pickup)SCHEDULED: Respect takeoutDateTime — don't start early. Learn more about scheduled orders
When preparation is done:
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"
Response: 202 AcceptedSystem notifies customer order is ready via push/SMS.
If mode = "PICKUP_AREA", you'll receive event:
{
  "code": "PICKUP_AREA_ASSIGNED",
  "metadata": {
    "pickupAreaCode": "A5",
    "pickupAreaDescription": "Reserved spot near entrance"
  }
}
Actions:
  • Print/display spot number on receipt
  • Tell customer which spot to use
  • Place clear signage at spot
ActionDeadline
Receive CONFIRMEDImmediately
Confirm8 minutes max
PrepareAfter confirming
Notify readyWhen done
Customer picks upNo limit (after notified)
If you don't confirm in 8 minutes, iFood cancels automatically even for takeout.
For scheduled orders, respect customer's time:
{
  "orderTiming": "SCHEDULED",
  "takeout": {
    "takeoutDateTime": "2024-04-25T19:30:00Z"
  },
  "scheduled": {
    "preparationStartDateTime": "2024-04-25T19:15:00Z"
  }
}
Rule: Call /readyToPickup near takeoutDateTime, not before.
Include on receipt:
═════════════════════════
    ORDER FOR PICKUP
═════════════════════════

ID: #12345
Customer: John Silva

[ITEMS]
- Burger x1
- Soft Drink x1
- Fries x1

Pickup time: 18:30
Spot: A5 (if applicable)

═════════════════════════
Printed at: HH:MM
Ready at: HH:MM
═════════════════════════
iFood StateYour POSAction
PLACEDAwaiting confirmationShow on screen
CONFIRMEDPreparingSend to kitchen
READY_TO_PICKUPReadyNotify counter
DISPATCHEDPicked upMark done
CONCLUDEDFinishedArchive
For category = "FOOD_SELF_SERVICE" (kiosks, totems):TAKEOUT: Customer takes order
{
  "category": "FOOD_SELF_SERVICE",
  "orderType": "TAKEOUT"
}
→ Pack for takeawayDINE_IN: Customer eats on-site
{
  "category": "FOOD_SELF_SERVICE",
  "orderType": "DINE_IN"
}
→ Prepare for on-site consumptionBoth follow same confirm and readyToPickup flow.
Customer wants to cancel pickup?
curl -X POST "https://merchant-api.ifood.com.br/order/v1.0/orders/{id}/requestCancellation" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "504"
  }'
You'll receive CANCELLED event confirming:
{
  "code": "CANCELLED",
  "metadata": {
    "reason": "504",
    "cancelReason": "Cancelled by customer"
  }
}
18:00 → Customer orders via app
18:01 → You receive CONFIRMED
18:02 → Confirm order
18:03 → Receipt prints to kitchen
18:10 → Preparation done
18:11 → Notify /readyToPickup
18:12 → Customer gets push "your order is ready"
18:15 → Customer picks up at counter
16:00 → Customer schedules for 19:00
16:01 → You receive CONFIRMED + PICKUP_AREA_ASSIGNED (spot D2)
16:02 → Confirm order
18:55 → System alerts: start prep for 19:00
18:55 → Receipt prints
19:10 → Preparation done
19:15 → Notify /readyToPickup (15 min early to be ready)
19:00 → Customer arrives at spot D2 and picks up
17:30 → Customer buys at totem for pickup
17:31 → CONFIRMED arrives automatically
17:32 → Confirm
17:33 → System sends to assembly area
17:40 → Customer picks up directly from totem tray
  • Test orderType = "TAKEOUT" vs "DELIVERY"
  • Verify you're calling /readyToPickup not /dispatch
  • Test pickup spots (PICKUP_AREA_ASSIGNED)
  • Test IMMEDIATE vs SCHEDULED
  • Verify cancellation flow
  • Test with FOOD_SELF_SERVICE if applicable
  • Verify customer gets push notifications
Access your store dashboard and enable "For Pickup"
  1. Scheduled ordersTiming details
  2. Other modesDelivery | Dine-in
  3. API referenceAvailable endpoints
  4. Full structureOrder fields
Was this page helpful?
Rate your experience in the new Developer portal: