Overview
Deliveroo has developed a suite of APIs to make it easier than ever to increase your conversion, streamline your operations and get updated data on your business. Let machines do the work and focus on delighting your customers.
Partner Platform Suite
Use our Order API to manage orders arriving from Deliveroo. These include two separate webhooks; one for accepting or rejecting incoming orders and receiving updates such as cancellations and the rider status and the other for receiving orders after they’ve been accepted by the site, as well as cancellations.
The Menu API allows sites to push a menu from their own system and manage inventory in real-time. Update your menus seamlessly, including pictures, prices, pos IDs and allergen information.
Our Site API can be used to open and close the site, control opening hours, input days off and set a workload mode when the site is running overcapacity.
Retail Platform Suite
This suite has access to everything our partner platform suite offers as well as the Picking API. Sites can receive incoming orders from Deliveroo and remove or substitute items from the basket before accepting or rejecting the order.
Signature Suite
Our Signature suite lets you build your apps on top of Deliveroo's delivery service.
The Deliveroo fulfillment API allows partners to request delivery via Deliveroo couriers for an order processed and managed by their own internal systems.
Our Site API can be used to open and close the site, control opening hours, input days off and set a workload mode when the site is running overcapacity.
Authorization
Authentication is performed via HTTP Basic Auth. Use your api-key
as the Basic
Auth username and the api-secret
as the password.
All API requests must be made over HTTPS. Calls made over plain HTTP will fail, as will API requests made without any authentication headers.
The content-type
header for all requests must be set to application/json
.
Our APIs are served over HTTPS with JSON payloads.
Verify API credentials
Once you've been issued an api-key
and api-secret
, you can verify your
credentials using this endpoint.
Example request with cURL:
curl --user <api-key>:<api-secret> https://partners.deliveroo.com/api/v1/auth/verify
HTTP Request
GET /api/v1/auth/verify
Successful response:
{
"api_access": {
"fulfillment": true,
"menu": true,
"pos": false
},
"api_key": "<api-key>",
"test_mode": false
}
An HTTP 401 unauthorized error:
{
"error": {
"code": "unauthorized",
"message": "api key or secret is invalid"
}
}
Fulfillment API
Data API
Introduction
Gain round-the-clock access to your Deliveroo order data and actionable insights to iterate and consistently improve your Deliveroo operations.
Our Data API allows you to:
- Get_report: Returns comprehensive order data including order level commission rates, fulfillment type and order pickup and transit timestamps.
- Get_items: Returns order item data from the previous day, a given date range and for specific branches.
- Get_summary: Returns a summary of the top 3 items sold, revenue and active hours in each respective branch.
Endpoints
Following are the list of endpoints currently available on API
Authentication to below endpoints is done by Basic Auth using the service key
shared to the user. This needs to be submitted via Authentication
header with
value as base64 encoded username:password
username: user access key provided
password: empty
Orders report
Provided the user access key, as basic auth in authentication header, has access to configured branches, below endpoint generates orders report for either previous day or a given specific date.
Request
GET /report
Returns orders report for previous day
GET /report?date={iso-8601-date-format}
Returns orders report for given date.
Date validation is done to make sure given date is in expected iso-8601 format
(yyyy-MM-dd)
curl -X GET -u username:password -H "Content-Type: application/json" https://restaurant-data-api.deliveroo-data.net/report```
Reports can be fetched for specific branches by providing a
branch_ids
query parameter.branch_ids
parameter is a comma separated list of branch ids
GET /report?branch_ids=111,222
Response Format
Below is the response format returned by the API.
{
"data": {
"report": [
{
"id": 1,
"restaurant_id": "1",
"restaurant_name": "restaurant name",
...
},
{
"id": 2,
"restaurant_id": "1",
"restaurant_name": "restaurant name",
...
}
]
}
}
Full list of fields returned by the API:
id
restaurant_id
restaurant_name
restaurant_city
restaurant_fulfillment_type
status
customer_reference
rejection_reason
contains_alcohol
order_type
scheduled_orders
rating_stars
rating_comment
total_price {
fractional
currencyCode
}
subtotal_price {
fractional
currencyCode
}
tip {
fractional
currencyCode
}
surcharge {
fractional
currencyCode
}
fee {
fractional
currencyCode
}
commission {
fractional
currencyCode
}
vat_on_commission {
fractional
currencyCode
}
created_at
placed_at
accepted_by_restaurant_at
confirmed_by_restaurant_at
completion_target
in_transit_at
delivered_at
rejected_at
ready_for_pickup_at
payment_status
order_items
restaurant_address
cutlery_requested
rider_wait_time
branch_code
uuid
Order items report
GET /report/items
Returns order items report for previous day
GET /report/items?date={iso-8601-date-format}
Returns order items report for
given date. Date validation is done to make sure given date is in expected
iso-8601 format (yyyy-MM-dd)
Reports can be fetched for specific branches by providing a branch_ids
query
parameter. branch_ids
parameter is a comma separated list of branch ids
GET /report/items?branch_ids=111,222
** Response Format **
Below is the response format returned by the API.
{
"data": {
"orderItems": [
{
"restaurant_name": "Benugo - Suren/Rider test",
"top_items": "Prawn & Vegetable Tempura on Rice, Avocado Maki, Salmon Maki",
"item": "Chilli Squid",
"category": "Sides",
...
}
]
}
}
Full list of order item fields returned by the API:
item
category
unit_price {
fractional
currencyCode
}
total_price {
fractional
currencyCode
}
quantity
Branch summary report
GET /report/summary
Returns branch summary report for previous day
GET /report/summary?date={iso-8601-date-format}
Returns branch summary report
for given date. Date validation is done to make sure given date is in expected
iso-8601 format (yyyy-MM-dd)
Reports can be fetched for specific branches by providing a branch_ids
query
parameter. branch_ids
parameter is a comma separated list of branch ids
GET /report/summary?branch_ids=111,222
Response Format
Below is the response format returned by the API.
{
"data": {
"branchSummary": {
"top_items": "Hash Brown, Twister Meal",
"restaurant_name": "Test Breakfast - Test Mall",
"net_revenue_local": 935,
"scheduled_active_hours": 5.69,
"total_active_hours": 7.84,
...
}
}
}
Full list of branch summary fields returned by the API
top_items
restaurant_name
total_accepted_orders
total_cancelled_orders
commission_without_vat
commission_tax
rejected_order_gmv
net_revenue_local
total_value_of_orders
total_number_of_orders
average_order_value
average_user_experience_time
average_time_to_accept
scheduled_hours
open_hours
scheduled_active_hours
open_active_hours
total_active_hours
Response codes
200 - Successful report generation\ 400 - Validation failures, date parameter validation\ 420 - Rate limiting, tokens expiry / frequent report fetches 5xx - Service issues around unavailability or timeouts
Rate limiting
Access to API is throttled and rate limiting is done using token bucket approach. Where each user access key is allocated predefined set of tokens. A token is spent for every successfully downloaded report. If there are any errors in generating the report, token is unspent.
A scheduler is configured to top-up tokens into each user's bucket
Once the available tokens are spent, user's access to API is throttled. Access
is also throttled by not allowing users to run frequent or parallel requests to
pull reports when date
parameter is specified. Users are forced to wait
certain interval between subsequent requests.
Menu API
Orders API
Site API
Picking API
Frequently Asked Questions
Q: Can I turn off the 'Scheduled for later' option for all my integrations
A: Yes, you can choose to disable scheduled orders. The restaurant will need to contact their Deliveroo account manager or reach out to email our Restaurants team.
Q: Can I disable the 'notes' field on my integrations?
A: Yes, you can choose to disable 'notes'. The restaurant will need to contact their Deliveroo account manager or reach out to our Restaurants team.
Q: Can I set operating hours of the restaurant from the API?
A: Yes, you can control opening and closing hours via the Site API.
Q: Can I open or close a restaurant using the API?
A: Yes, you can control your restaurant opening and closing via the Site API..
Q: Can I push a discount on a menu via the API?
A: No, you cannot configure discounts via the API. Restaurants can run offers and promotions from Marketer in their Restaurant Hub Portal.
NOTE that item-specific discounts, free item, and PLUS offers do not work with all POS integrations and need to be tested separately in advance.
Q: Can I push a site to be integrated via the API?
A: No, you cannot push sites to integrate directly to the API. You will need to submit an integration request on the form you’ve been previously provided.
Q: How long does it take to complete an integration?
A: POS integrations take approximately 4-6 weeks to complete.
Menu integrations take approximately 1-2 weeks to complete.
A simultaneous POS and Menu integration takes approximately 4-6 weeks to complete.
Q: If I change the menu, does that deactivate the integration?
A: No, the integration stays enabled until you ask someone from the Integrations Team to disable it.
Q: Do I need a tablet if I have an integration?
A: Yes - every restaurant on Deliveroo is required to have a tablet even if integrated. We do not currently offer a tabletless integration.