Obtain an OAuth 2.0 token with the eats.store scope via the client credentials flow at https://auth.uber.com/oauth/v2/token
Construct the menu payload as a JSON object containing a menus array, a categories array, an items array, and a modifier_groups array — all cross-referenced by UUID
PUT to https://api.uber.com/v2/eats/stores/{store_id}/menus with the full menu body; this replaces the entire menu for that store
Use GZIP or deflate compression on the request body for large menus; set Content-Encoding accordingly
Poll GET /v2/eats/stores/{store_id}/menus to confirm the menu was accepted and inspect any validation errors returned
Use the item-level suspended_until field to mark items as temporarily unavailable without a full re-upload
Known gotchas
Once an item is marked alcoholic (alcoholic_items > 0), it cannot be reverted via API; contact Uber Eats Support to correct it manually
The PUT endpoint is a full replacement — sending a partial payload silently removes any items not included; always send the complete menu
Image processing after a menu upload can take up to a few hours; do not interpret a delay in image display as a failed upload
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp