Appearance
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_managerto true. - Webhook Event Types: Uber Eats sends three event types:
orders.notification(new order),orders.scheduled.notification(scheduled order), andorders.cancel(cancellation), each dispatched to a dedicated background job. - Menu Sync Format: The
syncMenumethod 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.
Link a Store to a Location
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
| Property | Value |
|---|---|
| Field ID | enabled |
| Label | Enable Uber Eats |
| Type | Toggle |
| Default | false |
Description: Enable Uber Eats order receiving.
Store ID
| Property | Value |
|---|---|
| Field ID | store_id |
| Label | Store ID |
| Type | Text |
| Required | Yes |
Description: Your Uber Eats store ID.
Client ID
| Property | Value |
|---|---|
| Field ID | client_id |
| Label | Client ID |
| Type | Text |
| Required | Yes |
Description: OAuth client ID.
Client Secret
| Property | Value |
|---|---|
| Field ID | client_secret |
| Label | Client Secret |
| Type | Password |
| Required | Yes |
Description: OAuth client secret.
Auto-Accept Orders
| Property | Value |
|---|---|
| Field ID | auto_accept |
| Label | Auto-Accept Orders |
| Type | Toggle |
| Default | false |
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 Uber Eats.
Availability Sync
| Property | Value |
|---|---|
| Field ID | availability_sync |
| Label | Sync Availability |
| Type | Toggle |
| Default | true |
Description: Sync item availability in real-time.
Prep Time
| Property | Value |
|---|---|
| Field ID | prep_time |
| Label | Preparation Time |
| Type | Number |
| Unit | Minutes |
| Default | 15 |
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 upStatus Updates
| Upvendo Status | Uber Eats Status |
|---|---|
| Confirmed | Accepted |
| Preparing | In Progress |
| Ready | Ready for Pickup |
| Completed | Picked Up |
| Cancelled | Cancelled |
Business Rules
- Store linking calls Uber Eats' POS provisioning endpoint with
is_order_manager: trueand 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_idfrom the webhook'smeta.user_idfield 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.cancelwebhook 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_infoformat withmin_permittedandmax_permittedvalues 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:
- Integration disabled
- OAuth expired
- Store not active
Solutions:
- Enable integration
- Refresh OAuth token
- Check Uber Eats dashboard
Problem: Status not updating
Causes:
- API connection issue
- Token expired
- Rate limit
Solutions:
- Check connection
- Refresh token
- 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
}