1179 lines
27 KiB
JSON

{
"openapi": "3.0.3",
"info": {
"title": "Uber Wrapper API",
"version": "1.0.0",
"description": "Generic multi-merchant Uber API wrapper for POS platforms"
},
"servers": [
{
"url": "http://localhost:8080"
}
],
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "x-api-key"
}
}
},
"security": [
{
"ApiKeyAuth": []
}
],
"paths": {
"/api/v1/auth/uber/authorize-url": {
"get": {
"summary": "Generate Uber OAuth authorize URL for merchant",
"tags": [
"Auth"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OAuth URL generated"
}
}
}
},
"/api/v1/auth/uber/callback": {
"get": {
"summary": "Uber OAuth callback endpoint",
"tags": [
"Auth"
],
"responses": {
"200": {
"description": "Uber account connected"
}
}
}
},
"/api/v1/auth/uber/client-credentials-token": {
"post": {
"summary": "Get cached or live Uber client credentials token",
"tags": [
"Auth"
],
"responses": {
"200": {
"description": "Token generated"
}
}
}
},
"/api/v1/auth/uber/capabilities": {
"get": {
"summary": "Get Uber auth grants, scopes, and token-rate-limit metadata",
"tags": [
"Auth"
],
"responses": {
"200": {
"description": "Auth capability details"
}
}
}
},
"/api/v1/auth/uber/{merchantId}/refresh-token": {
"post": {
"summary": "Refresh Uber token for merchant",
"tags": [
"Auth"
],
"parameters": [
{
"in": "path",
"name": "merchantId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Token refreshed"
}
}
}
},
"/api/v1/auth/uber/domain-pairing-status": {
"get": {
"summary": "Validate Uber auth and API domain pairing",
"tags": [
"Auth"
],
"responses": {
"200": {
"description": "Domain mapping status"
}
}
}
},
"/api/v1/merchants": {
"post": {
"summary": "Create or update merchant",
"tags": [
"Merchants"
],
"responses": {
"201": {
"description": "Merchant upserted"
}
}
},
"get": {
"summary": "List merchants",
"tags": [
"Merchants"
],
"responses": {
"200": {
"description": "Merchant list"
}
}
}
},
"/api/v1/connections/uber": {
"post": {
"summary": "Save manual Uber tokens for merchant",
"tags": [
"Connections"
],
"responses": {
"201": {
"description": "Connection stored"
}
}
},
"get": {
"summary": "List Uber connections",
"tags": [
"Connections"
],
"responses": {
"200": {
"description": "Connection list"
}
}
}
},
"/health": {
"get": {
"summary": "Health check",
"tags": [
"Health"
],
"responses": {
"200": {
"description": "Service is healthy"
}
}
}
},
"/api/v1/metrics/injection-success": {
"get": {
"summary": "Get order injection success metric",
"tags": [
"Metrics"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": false,
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "windowDays",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Injection metrics"
}
}
}
},
"/api/v1/metrics/order-response-sla": {
"get": {
"summary": "Get response SLA metric for order accept/deny timing",
"tags": [
"Metrics"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": false,
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "windowDays",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "SLA metrics"
}
}
}
},
"/api/v1/metrics/go-live-readiness": {
"get": {
"summary": "Check pilot go-live readiness based on 3-day injection success threshold",
"tags": [
"Metrics"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": false,
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "thresholdPercent",
"required": false,
"schema": {
"type": "number"
}
}
],
"responses": {
"200": {
"description": "Go-live readiness status"
}
}
}
},
"/api/v1/uber/request": {
"post": {
"summary": "Generic Uber passthrough for any Uber endpoint",
"tags": [
"Uber Generic"
],
"responses": {
"200": {
"description": "Uber response"
}
}
}
},
"/api/v1/uber/menu/upsert": {
"post": {
"summary": "Legacy upsert helper for store menu",
"tags": [
"Uber Menu"
],
"responses": {
"200": {
"description": "Menu upserted"
}
}
}
},
"/api/v1/uber/menu/replace": {
"put": {
"summary": "Upload/replace store menu (PUT /v2/eats/stores/{store_id}/menus)",
"tags": [
"Uber Menu"
],
"responses": {
"200": {
"description": "Menu replaced (Uber returns 204 No Content)"
}
}
}
},
"/api/v1/uber/menu/items": {
"post": {
"summary": "Update single menu item (POST /v2/eats/stores/{store_id}/menus/items/{item_id})",
"tags": [
"Uber Menu"
],
"responses": {
"200": {
"description": "Menu item sparsely updated (Uber returns 204 No Content)"
}
}
}
},
"/api/v1/uber/menu": {
"get": {
"summary": "Fetch store menu",
"tags": [
"Uber Menu"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "menu_type",
"required": false,
"schema": {
"type": "string",
"enum": [
"MENU_TYPE_FULFILLMENT_DELIVERY",
"MENU_TYPE_FULFILLMENT_PICK_UP",
"MENU_TYPE_FULFILLMENT_DINE_IN"
]
},
"description": "Defaults to MENU_TYPE_FULFILLMENT_DELIVERY."
}
],
"responses": {
"200": {
"description": "Menu fetched"
}
}
}
},
"/api/v1/uber/orders": {
"get": {
"summary": "List store orders",
"tags": [
"Uber Orders"
],
"responses": {
"200": {
"description": "Orders fetched"
}
}
}
},
"/api/v1/uber/orders/{orderId}": {
"get": {
"summary": "Retrieve full order details by order ID",
"tags": [
"Uber Orders"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Order details retrieved"
}
}
}
},
"/api/v1/uber/orders/{orderId}/fulfillment-issues": {
"post": {
"summary": "Resolve retail fulfillment issues (found/partial/out-of-stock substitutions)",
"tags": [
"Uber Orders"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Fulfillment issue update submitted"
}
}
}
},
"/api/v1/uber/orders/{orderId}/ready": {
"post": {
"summary": "Mark order ready for handoff/pickup",
"tags": [
"Uber Orders"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Order marked ready"
}
}
}
},
"/api/v1/uber/stores": {
"get": {
"summary": "Retrieve all stores provisioned to developer account",
"tags": [
"Uber Stores"
],
"responses": {
"200": {
"description": "Stores retrieved"
}
}
}
},
"/api/v1/uber/stores/provisionable": {
"get": {
"summary": "Retrieve stores associated with merchant OAuth token",
"tags": [
"Uber Provisioning"
],
"parameters": [
{
"in": "query",
"name": "merchantId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Stores retrieved"
}
}
}
},
"/api/v1/uber/stores/{storeId}": {
"get": {
"summary": "Retrieve store details by store ID",
"tags": [
"Uber Stores"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store retrieved"
}
}
}
},
"/api/v1/uber/stores/{storeId}/status": {
"get": {
"summary": "Retrieve store online/offline status",
"tags": [
"Uber Stores"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store status retrieved"
}
}
},
"post": {
"summary": "Set store online/offline status",
"tags": [
"Uber Stores"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store status updated"
}
}
}
},
"/api/v1/uber/stores/{storeId}/holiday-hours": {
"get": {
"summary": "Retrieve store holiday hours",
"tags": [
"Uber Stores"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Holiday hours retrieved"
}
}
},
"post": {
"summary": "Set store holiday hours",
"tags": [
"Uber Stores"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Holiday hours updated"
}
}
}
},
"/api/v1/uber/orders/{orderId}/action": {
"post": {
"summary": "Trigger order action (accept, deny, ready, cancel, resolve)",
"tags": [
"Uber Orders"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Order action sent"
}
}
}
},
"/api/v1/uber/stores/hours": {
"put": {
"summary": "Update store hours",
"tags": [
"Uber Stores"
],
"responses": {
"200": {
"description": "Store hours updated"
}
}
}
},
"/api/v1/uber/stores/{storeId}/pos-data": {
"post": {
"summary": "Activate integration for selected store (POST /pos_data)",
"tags": [
"Uber Provisioning"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store provisioned"
}
}
},
"get": {
"summary": "Retrieve integration configuration for selected store (GET /pos_data)",
"tags": [
"Uber Provisioning"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store integration configuration retrieved"
}
}
},
"patch": {
"summary": "Update integration settings for selected store (PATCH /pos_data)",
"tags": [
"Uber Provisioning"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store integration updated"
}
}
},
"delete": {
"summary": "De-provision integration for selected store (DELETE /pos_data)",
"tags": [
"Uber Provisioning"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store integration removed"
}
}
}
},
"/api/v1/uber/delivery-store/stores": {
"get": {
"summary": "Store API 1.0.0 - Get stores (/v1/delivery/stores)",
"tags": [
"Uber Delivery Store v1"
],
"responses": {
"200": {
"description": "Stores retrieved"
}
}
}
},
"/api/v1/uber/delivery-store/stores/{storeId}": {
"get": {
"summary": "Store API 1.0.0 - Get store details",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store details retrieved"
}
}
},
"post": {
"summary": "Store API 1.0.0 - Update store information",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store information updated"
}
}
}
},
"/api/v1/uber/delivery-store/stores/{storeId}/status": {
"get": {
"summary": "Store API 1.0.0 - Retrieve store status",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store status retrieved"
}
}
},
"post": {
"summary": "Store API 1.0.0 - Set store status",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Store status updated"
}
}
}
},
"/api/v1/uber/delivery-store/stores/{storeId}/prep-time": {
"post": {
"summary": "Store API 1.0.0 - Update prep time",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Prep time updated"
}
}
}
},
"/api/v1/uber/delivery-store/stores/{storeId}/fulfillment-configuration": {
"post": {
"summary": "Store API 1.0.0 - Update BYOC fulfillment configuration",
"tags": [
"Uber Delivery Store v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Fulfillment configuration updated"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}": {
"get": {
"summary": "Order API 1.0.0 - Get order details",
"tags": [
"Uber Delivery Order v1"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Order details retrieved"
}
}
}
},
"/api/v1/uber/delivery-order/stores/{storeId}/orders": {
"get": {
"summary": "Order API 1.0.0 - List store orders with details",
"tags": [
"Uber Delivery Order v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Orders listed"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/accept": {
"post": {
"summary": "Order API 1.0.0 - Accept order",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order accepted"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/deny": {
"post": {
"summary": "Order API 1.0.0 - Deny order",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order denied"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/cancel": {
"post": {
"summary": "Order API 1.0.0 - Cancel order",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order canceled"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/ready": {
"post": {
"summary": "Order API 1.0.0 - Mark order ready",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order ready"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/adjust-price": {
"post": {
"summary": "Order API 1.0.0 - Adjust order price",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order price adjusted"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/update-ready-time": {
"post": {
"summary": "Order API 1.0.0 - Update order ready time",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Order ready time updated"
}
}
}
},
"/api/v1/uber/delivery-order/orders/{orderId}/resolve-fulfillment-issues": {
"post": {
"summary": "Order API 1.0.0 - Resolve fulfillment issues",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Fulfillment issue resolution submitted"
}
}
}
},
"/api/v1/uber/delivery-order/replacement-recommendations": {
"post": {
"summary": "Order API 1.0.0 - Get replacement recommendations",
"tags": [
"Uber Delivery Order v1"
],
"responses": {
"200": {
"description": "Replacement recommendations returned"
}
}
}
},
"/api/v1/uber/delivery-partner/orders/{orderId}/partner-count": {
"post": {
"summary": "Delivery Partner API 1.0.0 - Dispatch multiple couriers",
"tags": [
"Uber Delivery Partner v1"
],
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Delivery partner count updated"
}
}
}
},
"/api/v1/uber/delivery-byoc/courier-location": {
"post": {
"summary": "Delivery BYOC API 1.0.0 - Ingest courier live location",
"tags": [
"Uber Delivery BYOC v1"
],
"responses": {
"200": {
"description": "Courier location ingested"
}
}
}
},
"/api/v1/uber/delivery-promotions/stores/{storeId}": {
"post": {
"summary": "Promotions API 1.0.0 - Create promotion",
"tags": [
"Uber Delivery Promotions v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Promotion created"
}
}
},
"get": {
"summary": "Promotions API 1.0.0 - Get promotions by store",
"tags": [
"Uber Delivery Promotions v1"
],
"parameters": [
{
"in": "path",
"name": "storeId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Promotions listed"
}
}
}
},
"/api/v1/uber/delivery-promotions/{promotionId}": {
"get": {
"summary": "Promotions API 1.0.0 - Get promotion by ID",
"tags": [
"Uber Delivery Promotions v1"
],
"parameters": [
{
"in": "path",
"name": "promotionId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Promotion retrieved"
}
}
}
},
"/api/v1/uber/delivery-promotions/{promotionId}/revoke": {
"post": {
"summary": "Promotions API 1.0.0 - Revoke promotion",
"tags": [
"Uber Delivery Promotions v1"
],
"parameters": [
{
"in": "path",
"name": "promotionId",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Promotion revoked"
}
}
}
},
"/api/v1/uber/reporting/fetch": {
"post": {
"summary": "Fetch Uber reporting CSV with retries and header-based parsing",
"tags": [
"Uber Reporting"
],
"responses": {
"200": {
"description": "Reporting CSV fetched"
}
}
}
},
"/api/v1/webhooks/uber": {
"post": {
"summary": "Ingest Uber webhook events",
"tags": [
"Webhooks"
],
"responses": {
"200": {
"description": "Webhook accepted (empty body)"
}
}
}
}
},
"tags": []
}