Obtain an OAuth 2.0 client credentials token from Uber's token endpoint using your client_id and client_secret with the delivery scope
POST to /v1/customers/{customer_id}/deliveries with pickup and dropoff objects (each containing name, address, phone, and notes), plus manifest items describing the package
Capture the delivery_id and tracking_url from the response; surface the tracking_url to the end recipient
Listen for status changes via configured webhooks or poll GET /v1/customers/{customer_id}/deliveries/{delivery_id}; key statuses include pickup, pickup_complete, dropoff, delivered, and cancelled
To cancel before courier pickup, POST to /v1/customers/{customer_id}/deliveries/{delivery_id}/cancel
Known gotchas
The customer_id in Uber Direct refers to your merchant/organization account, not the end consumer — confusing these causes 404 errors on delivery creation
Uber Direct access tokens expire; cache the token and refresh proactively before expiry rather than waiting for a 401 response on a live delivery call
Delivery creation may succeed but a courier may not be assigned immediately in low-density areas; monitor for a long-pending status and communicate ETAs cautiously
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