39 lines
1.2 KiB
Markdown

# 05 Menus
Menu sync between POS and Uber Eats:
- Full menu replacement via PUT
- Fetch menu from Uber
- Item-level updates (out-of-stock/price updates)
- Item and modifier mapping strategy
- Validation and publish error handling
Current wrapper route for full replacement:
- `PUT /api/v1/uber/menu/replace`
- upstream mapped to `PUT /v2/eats/stores/{store_id}/menus`
- request body is gzip-compressed for upload (`Content-Encoding: gzip`, `Content-Type: application/json`)
- optional `menu.menu_type` supported:
- `MENU_TYPE_FULFILLMENT_DELIVERY` (default)
- `MENU_TYPE_FULFILLMENT_PICK_UP`
- `MENU_TYPE_FULFILLMENT_DINE_IN`
Item update route:
- `POST /api/v1/uber/menu/items`
Menu fetch route:
- `GET /api/v1/uber/menu`
- upstream mapped to `GET /v2/eats/stores/{store_id}/menus`
- supports query `menu_type`:
- `MENU_TYPE_FULFILLMENT_DELIVERY` (default)
- `MENU_TYPE_FULFILLMENT_PICK_UP`
- `MENU_TYPE_FULFILLMENT_DINE_IN`
- sends `Accept-Encoding: gzip` upstream for large menu payloads
Best-practice note:
- Use API-managed menus only for integrated stores (avoid manual Menu Maker edits to prevent drift).
- Alcoholic item flag is effectively sticky in Uber (`alcoholic_items > 0` cannot be reverted by API update).