Place order for Takeout
This guide shows you how to let a customer place a Takeout order — they order ahead, then collect from the store at a time that suits them. See Order Types for the full list, and Takeout Order Workflow for how it works operationally.
Before proceeding, you should have implemented:
How the flow works
Takeout uses order type 6 and is built through the cart like every other order type: create a cart, set the store and order type, add items, check out, pay, place the order. Server Side Cart covers those calls in full.
Takeout and Dine-in (QS) behave identically apart from the order type id, so if you are implementing both, Place order for Dine-in (QS) or Takeout covers them together.
Tell the cart this is a Takeout order
Set metadata.order_type.id to 6 and say when the customer wants to collect — either pickup_asap: true, or pickup_at with a specific time formatted Y-m-d H:i:s in the venue's timezone.
Request
{
"method": "put",
"url": "https://api-public-demo.menu.app/api/cart/{cart_id}",
"headers": {
"X-Request-ID": "69da3547-204b-4093-a225-54e084c24215",
"Application": "f3a90488ffee32c3acb6fcd0ca417cf6",
"Api-Version": "4.78.0",
"Content-Type": "application/json"
},
"body": {
"metadata": {
"venue_id": "a9d6d0c8-1689-4114-b1ec-6da9c33f0384",
"order_type": {
"id": 6,
"pickup_asap": true
}
},
"cart": {
"products": [
{
"price_id": "9a4e25be-9c32-4b69-81b7-19a4f3595406",
"quantity": 1,
"comment": "",
"product_groups": []
}
],
"discounts": [],
"tip": {
"amount": 0,
"type": 1
}
}
}
}
Offer the customer a pickup time
Present the slots the store can actually honor rather than a free-text time picker. Orders Filtered Pickup Times returns them, taking opening hours, preparation time, the cart and order throttling into account. It takes a nested order_type.id and a singular_point_id rather than a venue_id — see Choosing a pickup or delivery time.
These endpoints identify the store with a singular_point_id rather than a venue_id — see Choosing a pickup or delivery time for how to find it.
Fetch them at the point the customer chooses. Slots fill up between opening the menu and checking out, and pickup_asap is rejected outside serving hours, so handle that case too.
Check out, pay and place the order
The rest of the flow is common to all order types and is documented in Server Side Cart: check out, initialize payment, then create the order with the returned payment_init_hash.
What can go wrong
The pickup time is no longer available — HTTP 400, code 2001, with the rejected time in info_message.title. Re-fetch the times, let the customer pick again, update the cart and retry checkout.
Ordering is paused for the store — code 2003.
Takeout is not enabled for the store — code 2025. Check the store's order_types before offering it.
After the order is placed, subscribe to order status webhooks to follow it. A Takeout order that reaches Ready and is not collected moves to Final automatically after 15 minutes — see Order Statuses.