Skip to content

Deliveroo Integration

Overview

Deliveroo integration allows you to receive orders from the Deliveroo marketplace directly into Upvendo.

Key Purpose: Receive and manage Deliveroo orders.

Purpose

This page lets you connect your Deliveroo restaurant to Upvendo so that Deliveroo orders are received automatically and your menu is synchronized to the Deliveroo marketplace.

Key Concepts

  • Site ID and Brand ID: Deliveroo identifies your restaurant by a site ID (location) and brand ID (fetched automatically from the Deliveroo API after entering the site ID), used to route menu syncs and webhook events.
  • Webhook-Driven Orders: Deliveroo sends order events via webhooks to Upvendo; the DeliverooWebhookService processes these events and creates third-party transactions matched by site ID and brand ID.
  • Menu Sync: The syncMenu method transforms Upvendo menus into Deliveroo's format (categories, items, modifiers, mealtimes with schedules) and pushes them via a PUT request to Deliveroo's Menu API.
  • Sandbox vs Production: The integration supports both sandbox (api-sandbox.developers.deliveroo.com) and production (api.developers.deliveroo.com) endpoints, toggled by the is_sandbox flag.
  • Sync Status: Each integration record tracks a sync status (standby, in_progress, success, error) with a timestamp and message, updated after every sync or credential change.

Actions

Enable Deliveroo Integration

Enter the Deliveroo site ID and choose sandbox or production mode. The system validates credentials by fetching an access token, retrieves the brand ID automatically, and stores the integration record.

Disable Deliveroo Integration

Remove the Deliveroo integration for a location, deleting the stored credentials and stopping all webhook processing and menu syncs.

Sync Menu to Deliveroo

Push the current Upvendo menu (items, categories, modifiers, prices, allergens, dietary tags, and availability schedules) to Deliveroo's Menu API for the linked site.

Update Integration Settings

Change the site ID or toggle between sandbox and production mode. Credentials are revalidated and the brand ID is re-fetched on update.

Location

  • Backoffice Route: /integrations/deliveroo
  • Backend Controller: app/Http/Controllers/Api/DeliverooController.php
  • Vue Component: src/views/integrations/DeliverooComponent.vue

Fields

Deliveroo Enabled

PropertyValue
Field IDenabled
LabelEnable Deliveroo
TypeToggle
Defaultfalse

Description: Enable Deliveroo order receiving.


Restaurant ID

PropertyValue
Field IDrestaurant_id
LabelRestaurant ID
TypeText
RequiredYes

Description: Your Deliveroo restaurant ID.


API Key

PropertyValue
Field IDapi_key
LabelAPI Key
TypePassword
RequiredYes

Description: Deliveroo API key.


Auto-Accept Orders

PropertyValue
Field IDauto_accept
LabelAuto-Accept Orders
TypeToggle
Defaulttrue

Description: Automatically accept incoming orders.


PropertyValue
Field IDmenu_sync
LabelSync Menu
TypeToggle
Defaulttrue

Description: Sync menu items to Deliveroo.


Availability Sync

PropertyValue
Field IDavailability_sync
LabelSync Availability
TypeToggle
Defaulttrue

Description: Sync item availability in real-time.


Prep Time Buffer

PropertyValue
Field IDprep_buffer
LabelPrep Time Buffer
TypeNumber
UnitMinutes
Default5

Description: Extra time added to preparation estimates.


Business Logic

Order Flow

Customer orders on Deliveroo
        |
        v
Webhook received
        |
        v
Auto-accept enabled?
|-- Yes --> Accept order
|-- No --> Wait for staff
        |
        v
Order created in Upvendo
        |
        v
Sent to KDS
        |
        v
Status updates sent to Deliveroo
        |
        v
Rider picks up
Menu updated in Upvendo
        |
        v
Convert to Deliveroo format
        |
        v
Send via API
        |
        v
Deliveroo menu updated

Business Rules

  • Enabling a Deliveroo integration for a location that already has one throws an error ("Deliveroo integration already enabled for this location"), preventing duplicate integrations.
  • Credentials are validated immediately on enable and update by requesting an OAuth access token from Deliveroo's auth endpoint; if validation fails, the integration record is deleted (on enable) or reverted (on update).
  • Menu sync converts item prices to the smallest currency unit (cents) by multiplying by 100, and uses the vendor's default language mapped to Deliveroo's supported language codes (en, fr, it, ar, zh, nl).
  • Menu availability schedules are only included when the menu's availability type is "SpecificDayTime"; otherwise no schedule constraint is sent, making the menu available at all times on Deliveroo.
  • Webhook events must include both a site_id and brand_id in the order payload; if either is missing, the webhook is rejected with a 404 error.

FAQs

  • Do I need a separate Deliveroo API key? No, Upvendo uses platform-level Deliveroo OAuth credentials (client_id/client_secret) configured server-side. You only need to provide your Deliveroo site ID.
  • Can I set different prices for Deliveroo than in my Upvendo menu? Not directly through this integration; the sync pushes item prices as-is from Upvendo. Price overrides must be managed by creating a separate menu for Deliveroo.
  • How quickly do menu changes appear on Deliveroo? Menu syncs are sent immediately via the API. Deliveroo's own processing time may add a short delay before changes are visible to customers.
  • What happens if I update my credentials and they are invalid? The system reverts to the previous credentials, sets the sync status to "error" with a message "Invalid Deliveroo credentials", and throws an exception.
  • Are allergen and dietary labels synced? Yes, the menu sync includes allergen data (allergies) and dietary preferences (diets) for each item, as well as the contains_alcohol flag.

Troubleshooting

Problem: Orders not coming through

Causes:

  1. Integration disabled
  2. Webhook URL incorrect
  3. API key invalid

Solutions:

  1. Enable integration
  2. Verify webhook configuration
  3. Check API credentials

Problem: Menu not syncing

Causes:

  1. Menu sync disabled
  2. API rate limit
  3. Data format issue

Solutions:

  1. Enable menu sync
  2. Wait and retry
  3. Check item data

Examples

Basic Setup

json
{
  "enabled": true,
  "restaurant_id": "deliveroo-restaurant-id",
  "api_key": "your-api-key",
  "auto_accept": true,
  "menu_sync": true,
  "availability_sync": true,
  "prep_buffer": 5
}