Appearance
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
DeliverooWebhookServiceprocesses these events and creates third-party transactions matched by site ID and brand ID. - Menu Sync: The
syncMenumethod 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 theis_sandboxflag. - 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
| Property | Value |
|---|---|
| Field ID | enabled |
| Label | Enable Deliveroo |
| Type | Toggle |
| Default | false |
Description: Enable Deliveroo order receiving.
Restaurant ID
| Property | Value |
|---|---|
| Field ID | restaurant_id |
| Label | Restaurant ID |
| Type | Text |
| Required | Yes |
Description: Your Deliveroo restaurant ID.
API Key
| Property | Value |
|---|---|
| Field ID | api_key |
| Label | API Key |
| Type | Password |
| Required | Yes |
Description: Deliveroo API key.
Auto-Accept Orders
| Property | Value |
|---|---|
| Field ID | auto_accept |
| Label | Auto-Accept Orders |
| Type | Toggle |
| Default | true |
Description: Automatically accept incoming orders.
Menu Sync
| Property | Value |
|---|---|
| Field ID | menu_sync |
| Label | Sync Menu |
| Type | Toggle |
| Default | true |
Description: Sync menu items to Deliveroo.
Availability Sync
| Property | Value |
|---|---|
| Field ID | availability_sync |
| Label | Sync Availability |
| Type | Toggle |
| Default | true |
Description: Sync item availability in real-time.
Prep Time Buffer
| Property | Value |
|---|---|
| Field ID | prep_buffer |
| Label | Prep Time Buffer |
| Type | Number |
| Unit | Minutes |
| Default | 5 |
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 upMenu Sync
Menu updated in Upvendo
|
v
Convert to Deliveroo format
|
v
Send via API
|
v
Deliveroo menu updatedBusiness 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_idandbrand_idin 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 thecontains_alcoholflag.
Troubleshooting
Problem: Orders not coming through
Causes:
- Integration disabled
- Webhook URL incorrect
- API key invalid
Solutions:
- Enable integration
- Verify webhook configuration
- Check API credentials
Problem: Menu not syncing
Causes:
- Menu sync disabled
- API rate limit
- Data format issue
Solutions:
- Enable menu sync
- Wait and retry
- 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
}