For Uber's review

How we use Uber Direct

Restaurants on Clover get their own ordering site, embeddable on any website. Every delivery is an Uber Direct courier, booked the moment the order is paid and timed to the kitchen.

Run a live test deliverySee it embedded on a restaurant site

Every call, in order

  1. 01

    POST /delivery_quotes

    As the customer types their address

    Pickup and dropoff addresses, phone numbers, manifest_total_value, external_store_id and a pickup window timed to the kitchen's prep time. The fee is shown to the customer before they pay. Out-of-range addresses get “Delivery isn't available, try pickup”.

  2. 02

    Clover: create order, pay, print

    When the customer taps Place order

    We re-quote on the server so the fee charged matches Uber's, take payment through Clover, and print the ticket in the kitchen. A declined card never books a courier.

  3. 03

    POST /deliveries

    Right after payment

    quote_id, idempotency_key = our order number, external_id, external_store_id, itemized manifest_items (name with options, quantity, size, price), E.164 phones, pickup and dropoff notes (≤ 280 chars), tip passed 100% to the courier, dropoff_verification.picture, the customer's deliverable_action, and undeliverable_action: leave_at_door.

  4. 04

    Webhooks: delivery_status, courier_update, refund_request

    Throughout the delivery

    Verified with HMAC-SHA256 (x-uber-signature). Statuses only move an order forward, events from a replaced courier are logged but never applied, unknown deliveries get 200, and storage failures get 500 so Uber retries.

  5. 05

    GET /deliveries/{id}

    Customer tracking page and kitchen screen

    Courier name, photo, vehicle and live location on a map, ETAs, the courier_imminent flag (“arriving now”), the proof-of-delivery photo, and Uber's tracking_url.

  6. 06

    POST /deliveries/{id}/cancel

    Kitchen taps Cancel courier (e.g. food is running late)

    Because pickup times can't be changed after booking, the kitchen cancels and then taps Book courier now, which creates a new delivery with a new idempotency key.

  7. 07

    POST /v1/direct/organizations

    When a restaurant connects its Clover account

    Each restaurant gets its own sub-organization under our root account, and its organization_id is the customer_id for that restaurant's quotes and deliveries. There's no onboarding email; the restaurant never needs Uber's dashboard.

Every status, handled

Uber statusOrder stateCustomer seesKitchen sees
pendingCourier bookedFinding you a courierCourier booked, ready-by time
pickupCourier booked{Courier} is heading to the restaurantCourier name and pickup ETA; “arriving now” when imminent
pickup_completePicked up{Courier} has your orderOut the door
dropoffPicked upArriving around {time}; “arriving now” when imminentOut the door
deliveredDeliveredDelivered, with the courier's photo, or “Left at your door”Delivered or left at door, photo link
canceled + undeliverable_action left_at_doorDeliveredLeft at your doorLeft at the door (no answer)
canceled (before pickup)Back in the kitchenWe're sorting out your courierBook courier now button
canceled (after pickup)Needs attentionThe restaurant will call youCall the customer
returnedNeeds attentionWe couldn't reach youReturned to the restaurant, call the customer

Test scenarios

The demo checkout has a scenario picker. Each one runs a real test-mode delivery with Uber's robot courier.

  • Delivered normally

    Robot courier walks every status; photo proof is requested at dropoff.

  • Customer doesn't answer

    cancel_reason customer_unavailable. Uber reports canceled with undeliverable_action left_at_door, which we show as delivered and left at the door.

  • Can't find the address

    undeliverable_action return, then the returned status and a kitchen alert.

Money and branding

  • The customer sees the Uber fee as its own line, “Delivery by Uber”, before paying.
  • Tips: “100% of your tip goes to your Uber courier.” The tip is sent in the delivery's tip field.
  • The restaurant pays no commission, only the Uber fee per delivery, which the customer covers at checkout.
  • Proof of delivery is a photo, so orders can be left at the door; no signature or PIN is needed for food.
  • Undeliverable orders are left at the door rather than returned, so restaurants don't pay a return trip for a meal.

Live: the demo restaurant's Uber traffic

Every quote and delivery request we send, and every webhook Uber sends back, as it happens.

Uber Direct API, live

→ our request · ← Uber webhook

Connecting…