chevrons-vertical
go ruby

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.

Overview of Deliveroo APIs

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:

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.