Prep Stages Endpoint

POST /v1/orders/:order_id/prep_stage

You can use this endpoint if you have a kitchen management system, KDS or POS and want to update Deliveroo on how the preparation of the order is going. Used correctly these updates can help us to better assign a rider, as well as further improve your preparation time predictions and restaurant operations.

Understanding the ready_for_collection signal

To ensure smooth operations and more accurate prep times, Deliveroo recommends all partners to provide a ready_for_collection signal as soon as an order is ready.

The signal is used to give us a better understanding of when an order is actually ready, and we use it to try and assign a rider quicker if there is not already one assigned. Additionally we will notify riders that they should come forward to collect the order from the counter and use the signal to improve Deliveroo’s prep time predictions.

The signal should be triggered when a staff member “bumps” a completed order or presses a button labelled “Order ready” using a KDS or POS screen.

For best results, all staff should be trained to use the signal consistently on every order as soon as the order is packaged and ready to be collected. However the signal remains optional; if we don’t receive a ready_for_collection signal we will send a rider for the original Prep For time as usual.

🚧

Warnings

  • Using this signal inconsistently will confuse the Deliveroo prep time algorithm and cause prep time estimates that are either too high, inaccurate or erratic

  • Riders must never be kept waiting after ready_for_collection is sent. Making riders wait beyond this point constitutes misuse of the signal and could result in penalties or the feature being disabled for you

  • The signal should never be triggered automatically (for example by a timer or algorithm) as this will cause prep time estimates that are too high, inaccurate or erratic. It should only be triggered when an order is actually ready or ready very soon

Displaying the ready_for_collection button

For designers of KDS systems, Deliveroo recommends displaying the button as shown:

Understanding the ready_for_collection_soon signal

Depending on how your kitchen is set up, you may not have a true “ready for collection” signal in your process. In this case, you should send us a “ready_for_collection_soon” signal instead, as long as the order will be ready within the next 60 seconds.

It is important that you do not use this signal if the order will not be ready within the next 60 seconds as improper use of this signal would result in riders waiting unnecessarily and inaccurate prep time predictions for your site.

(Optional) If you use ready_for_collection_soon, you can also send a follow up ready_for_collection signal, if available. By providing both, you obtain the maximum benefits of faster dispatching, while still ensuring accurate data for prep time estimates.

Diagram showing the sequence of possible signals

Diagram showing the sequence of possible signals

Understanding the in_kitchen signal

We recommend you send us a signal for when you start preparing each order.

For example, at a busy pizza restaurant you should send the in_kitchen signal when the order reaches the front of the queue, and a chef starts working on it.

Need More Time? additional option

If you realise you will need longer to prepare the order, you should let us know by requesting a delay of up to 10 minutes.

Deliveroo will attempt to delay the rider’s arrival and the quicker you use this feature the more chance we have of being able to do this. Using the signal also provides feedback on your prep times.

Be aware that delays have an impact on the end customer and so should only be used infrequently and where strictly necessary. It can be used at most once per order.

Understanding the collected signal

You can tell us when an order has been collected by a rider.

Payload

occurred_at String

The date/time (ISO-8601) the event occurred in UTC

stage String

Possible options are:

in_kitchen (Cooking has started)
ready_for_collection_soon (Food is cooked but not packaged)
ready_for_collection (Food is cooked and packaged)
collected (The order has been collected)

{
  "occurred_at": "2017-03-23T17:30:00Z",
  "stage": "ready_for_collection"
}
{
  "occurred_at": "2017-03-23T17:30:00Z",
  "stage": "ready_for_collection_soon"
}
{
  "occurred_at": "2017-03-23T17:30:00Z",
  "stage": "in_kitchen",
  "delay": 10
}
{
  "occurred_at": "2017-03-23T17:30:00Z",
  "stage": "collected"
}

Note: If the rider has already picked up the order, any additional requests to this endpoint will be ignored. The response will still be 200, accompanied by the message: $stage signal is later than expected because a rider has already collected the order. This signal will be ignored