Appearance
Uber Eats Integration — Platform Configuration
Internal.
shared/developer/is not ingested into Emily's knowledge base. The merchant-facing behaviour lives inshared/integrations/uber-eats.md, which deliberately names none of these variables.
Environment variables
The backend requires these environment-level secrets (configured by the Upvendo team, under config('services.uber_eats')):
UBER_EATS_CLIENT_ID-- OAuth application client IDUBER_EATS_CLIENT_SECRET-- OAuth application client secretUBER_EATS_REDIRECT_URI-- Redirect URI for the OAuth callbackUBER_EATS_WEBHOOK_SECRET-- Shared secret used for webhook signature verification and to HMAC-sign the OAuth state parameterUBER_EATS_SETUP_URL-- Where the OAuth callback redirects the merchant after successUBER_EATS_SANDBOX-- Defaults totrue. Read by the back-office controller on both connect and select-store and stored as the integration'sis_sandbox, which selects the sandbox or production API base URL for every subsequent call. It must be set tofalsefor real merchants.UBER_EATS_SCOPES-- Space-separated approved scopes; defaults toeats.store eats.store.orders.read eats.store.status.write eats.order. This list drives the capability map, so promotions (eats.store.promotions) and reports (eats.report) are unavailable unless added.UBER_EATS_AUTH_BASE_URL(defaulthttps://auth.uber.com/oauth/v2),UBER_EATS_API_BASE_URL(defaulthttps://api.uber.com),UBER_EATS_SANDBOX_API_BASE_URL(defaulthttps://sandbox-api.uber.com)UBER_EATS_CONNECT_TIMEOUT(default 10s),UBER_EATS_TIMEOUT(default 30s)UBER_EATS_OAUTH_STATE_TTL-- Lifetime of the signed OAuthstate, in seconds (default 600)UBER_EATS_REPORT_DOWNLOAD_HOSTS-- Comma-separated host allow-list for report downloads (defaultapi.uber.com,sandbox-api.uber.com)
(Verified: config/services.php lines 178-196.)
Where they surface in behaviour
- OAuth state is HMAC-SHA256 signed with
UBER_EATS_CLIENT_SECRETand expires afterUBER_EATS_OAUTH_STATE_TTL; the callback redirects toUBER_EATS_SETUP_URL. - Webhooks (
verify.uber-eats-webhook) verifyX-Uber-SignaturewithUBER_EATS_WEBHOOK_SECRET, falling back toUBER_EATS_CLIENT_SECRET; a bad signature returns 401, an unconfigured secret 503. - Sandbox:
is_sandboxin the request is ignored;UBER_EATS_SANDBOX(defaulttrue) is read on connect and select-store and stored on the record. - Scopes: promotions (
eats.store.promotions) and reports (eats.report) need adding toUBER_EATS_SCOPES; otherwise those calls return 409scope_not_approved. - Reports: a download URL whose host is not in
UBER_EATS_REPORT_DOWNLOAD_HOSTSreturns 502untrusted_report_host. - OAuth redirect:
UBER_EATS_REDIRECT_URImust match the Uber app settings.