Skip to content

Uber Eats Integration

Overview

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

Key Purpose: Receive and manage Uber Eats orders.

Purpose

This page lets you connect your Uber Eats store to Upvendo so that marketplace orders are received automatically and your menu is synchronized to Uber Eats.

Key Concepts

  • OAuth Authorization Flow: Uber Eats uses a two-step OAuth process -- first a user authorization code grant (to link the store) and then client credentials (for ongoing API calls), with refresh tokens for long-lived access.
  • Store Linking: After OAuth, Upvendo calls Uber Eats' POS provisioning endpoint to link a specific store to the Upvendo location, registering webhook configurations and setting is_order_manager to true.
  • Webhook Event Types: Uber Eats sends three event types: orders.notification (new order), orders.scheduled.notification (scheduled order), and orders.cancel (cancellation), each dispatched to a dedicated background job.
  • Menu Sync Format: The syncMenu method transforms Upvendo menus into Uber Eats' format with categories, items, modifier groups, quantity constraints, service availability schedules, and tax rates.
  • Sync Status Tracking: Each integration record maintains a sync status (standby, in_progress, success, error) with timestamps and messages, updated after every operation.

Actions

Connect Uber Eats Account

Initiate the OAuth authorization flow by redirecting to Uber Eats' auth URL. After the user grants access, the authorization code is exchanged for access and refresh tokens.

Select an Uber Eats store from the fetched store list and link it to the current Upvendo location. This registers Upvendo as the order manager and configures webhooks.

Sync Menu to Uber Eats

Push the current Upvendo menu (items, categories, modifier groups with quantity constraints, prices, tax rates, and availability schedules) to the linked Uber Eats store.

Disconnect Uber Eats

Disable the integration by unlinking the store via the Uber Eats API and removing the stored credentials from Upvendo.

Location

  • Backoffice Route: /integrations/uber-eats
  • Backend Controller: app/Http/Controllers/Api/UberEatsController.php
  • Vue Component: src/views/integrations/UberEatsComponent.vue

Fields

Uber Eats Enabled

PropertyValue
Field IDenabled
LabelEnable Uber Eats
TypeToggle
Defaultfalse

Description: Enable Uber Eats order receiving.


Store ID

PropertyValue
Field IDstore_id
LabelStore ID
TypeText
RequiredYes

Description: Your Uber Eats store ID.


Client ID

PropertyValue
Field IDclient_id
LabelClient ID
TypeText
RequiredYes

Description: OAuth client ID.


Client Secret

PropertyValue
Field IDclient_secret
LabelClient Secret
TypePassword
RequiredYes

Description: OAuth client secret.


Auto-Accept Orders

PropertyValue
Field IDauto_accept
LabelAuto-Accept Orders
TypeToggle
Defaultfalse

Description: Automatically accept incoming orders.


PropertyValue
Field IDmenu_sync
LabelSync Menu
TypeToggle
Defaulttrue

Description: Sync menu items to Uber Eats.


Availability Sync

PropertyValue
Field IDavailability_sync
LabelSync Availability
TypeToggle
Defaulttrue

Description: Sync item availability in real-time.


Prep Time

PropertyValue
Field IDprep_time
LabelPreparation Time
TypeNumber
UnitMinutes
Default15

Description: Default preparation time for orders.


Business Logic

Order Flow

Customer orders on Uber Eats
        |
        v
Order received via API
        |
        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 Uber Eats
        |
        v
Driver picks up

Status Updates

Upvendo StatusUber Eats Status
ConfirmedAccepted
PreparingIn Progress
ReadyReady for Pickup
CompletedPicked Up
CancelledCancelled

Business Rules

  • Store linking calls Uber Eats' POS provisioning endpoint with is_order_manager: true and webhook configs; if this call fails, the integration record is deleted and the error is surfaced to the user.
  • Disconnecting a store calls the Uber Eats DELETE endpoint to unlink the store before removing the local credentials, ensuring the marketplace stops sending orders.
  • Menu sync converts all prices to the smallest currency unit (cents) by multiplying by 100, and applies the delivery tax rate from the item's tax rate code.
  • Webhook events are matched to locations by looking up the store_id from the webhook's meta.user_id field against the integration credentials; unmatched events are logged and silently dropped.
  • Each webhook event type is dispatched to a separate background job (ProcessUberEatsOrderNotificationJob, ProcessUberEatsScheduledNotificationJob, ProcessUberEatsCancelNotificationJob) for asynchronous processing.

FAQs

  • Do I need separate Uber Eats API credentials? Upvendo uses platform-level OAuth credentials configured server-side. You authenticate via the OAuth flow, and Upvendo stores your user access and refresh tokens.
  • Can I set different prices for Uber Eats? Not directly through this integration; the sync pushes item prices as-is from Upvendo. To use different prices, create a dedicated menu for Uber Eats.
  • What happens when an order is cancelled on Uber Eats? Uber Eats sends an orders.cancel webhook event, which triggers a background job that updates the order status in Upvendo accordingly.
  • How are modifier quantity limits handled? Modifier group settings (mandatory, max selection, allow duplicates) are translated into Uber Eats' quantity_info format with min_permitted and max_permitted values and context-based overrides.
  • Can I connect multiple stores to one Uber Eats account? Yes, the store list is fetched with pagination support. Each Upvendo location can be linked to a different Uber Eats store within the same authorized account.

Troubleshooting

Problem: Orders not coming through

Causes:

  1. Integration disabled
  2. OAuth expired
  3. Store not active

Solutions:

  1. Enable integration
  2. Refresh OAuth token
  3. Check Uber Eats dashboard

Problem: Status not updating

Causes:

  1. API connection issue
  2. Token expired
  3. Rate limit

Solutions:

  1. Check connection
  2. Refresh token
  3. Wait and retry

Examples

Basic Setup

json
{
  "enabled": true,
  "store_id": "uber-store-id",
  "client_id": "your-client-id",
  "client_secret": "your-client-secret",
  "auto_accept": false,
  "menu_sync": true,
  "availability_sync": true,
  "prep_time": 15
}