Three lines

Uber

Developers

Get Started

This guide will walk you through the step-by-step process of creating an Uber Direct Account. Upon creating your account, you will gain access to developer credentials to interact with Uber Direct APIs.

If you encounter any issues while going through these steps, please reach out to your Uber Point of Contact or Account Manager.

Create Account

(Note: The Create Account process is currently available only in select regions. Please contact your Uber Point of Contact or Account Manager to verify its availability in your region.)

Start by visiting: https://direct.uber.com

  1. Please log in using your existing Uber account, or create a new one if you don’t have an account yet. Uber login

  2. Please accept Uber’s terms and review privacy notice.
    Uber terms
    Note: If you receive the prompt “We’re unable to set up your account.” it indicates that the email you are using is already associated with an existing Uber Direct organization.

  3. After successfully logging in to an Uber account you will be taken to the Uber Direct Account Creation flow. Please review and accept the Uber Direct Terms and Conditions and API Terms of Use once you fill all the fields. Uber account create

  4. Upon acceptance, you will be directed to the Uber Direct dashboard, where you can provide your payment details. If you skip this step, you can add it later; please refer to the Add Billing Information section for more details. Payment with skip

  5. After successfully completing all the steps and inputting a valid credit card, you can begin placing delivery requests. Uber direct dashboard

Add Billing Information

If you bypass step 4 during account creation, you can add billing information by following the steps in this section.

  1. To add payment information, click “Billing” on the left sidebar. Add payment
  2. Save the entered information when finished. Save payment
  3. Returning to the Billing page, you’ll notice a new payment method listed in the Payment Method section. Payment Result
    Note: You have to provide billing information before you grant the access for production credentials.

API Credentials

After you have created your account, you can access your API credentials by navigating to the Developer tab in the Management section of your dashboard. You will need to obtain your “Customer ID”, “Client ID”, and “Client secret” to use the API.

For the difference between “Client ID”, “Customer ID” and “Client Secret” please refer to our FAQ.

Uber direct apiKeys

Please note the top blue area, which indicates that you are in Test mode. These credentials are intended for your test sandbox environment, and they won’t generate real-world deliveries when you use the APIs. Once you provide the billing information and your account is approved for Production deliveries, you can click the button to switch to the production environment, as shown in the image below.

Developer Dashboard Production

High-level Integration Flow

This guide is intended as a reference for the high-level sample flow. Please feel free to create bespoke workflows that align with the available Uber Direct APIs.

High-level Integration Flow

Testing with Postman

Postman is an API development environment that simplifies running and testing API requests. With Postman, you won’t have to copy and paste data from one endpoint to another.

Run In Postman

To set up Postman:

  1. Download and install Postman.

  2. Uber’s Direct APIs are available at https://www.postman.com/uber/workspace/uber-direct/overview.

  3. Select the Uber Direct APIs environment, and configure the following environment variables:

    • uber_api_client_id and uber_api_client_secret from your test application
    • customer_id from the Developer tab of the Dashboard

Get an OAuth Token Using curl

By now, you should have completed the Direct Account creation process through the Direct Dashboard and gained access to your developer application details, including your Client ID, Client Secret, and Customer ID.

Here is an example of how to obtain an OAuth access token using the curl command:

curl --request POST 'https://auth.uber.com/oauth/v2/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=<your_client_id>' \
--data-urlencode 'client_secret=<your_client_secret>' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=eats.deliveries'

Replace <your_client_id> and <your_client_secret> with your actual client ID and client secret. This command sends a POST request to the Uber OAuth server, requesting an access token using the client credentials grant type. The response will contain an access token that you can use to authenticate your API requests:

{
  "access_token": "<TOKEN>",
  "expires_in": 2592000,
  "token_type": "Bearer",
  "scope": "eats.deliveries"
}

For more examples, see the Authentication guide.

Create a Quote Using the Uber Direct API Call

The primary objective of the create quote API is to assess the deliverability, validity, and cost associated with delivery between two addresses. We highly recommend conducting this step as a prerequisite before proceeding with an actual delivery.

curl -X POST 'https://api.uber.com/v1/customers/<your_customer_id>/delivery_quotes' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
  "pickup_address": "{\"street_address\": [\"20 W 34th St\", \"Floor 2\"],\"state\":\"NY\",\"city\":\"New York\",\"zip_code\":\"10001\",\"country\":\"US\"}",
  "dropoff_address": "{\"street_address\": [\"285 Fulton St\", \"\"],\"state\":\"NY\",\"city\":\"New York\",\"zip_code\":\"10006\",\"country\":\"US\"}"
}'

Please replace with the actual access token obtained in the previous step. Also, make sure to replace the sample pickup and dropoff addresses with actual values.

Please be aware that in certain regions, it is important to include latitude and longitude coordinates during the Create Quote process. We kindly request that you consult your designated Uber technical point of contact to verify this specific requirement for your region.

Upon successful execution of the request, the API will return a time estimate and fee quote for the delivery. You can use this information to display the quote to the user and obtain their confirmation to proceed with the delivery.

As an example, the response below provides details on the delivery fee of $5.58, an estimated pickup time of 18 minutes, and the total end-to-end dropoff duration of 44 minutes.

{
    "kind": "delivery_quote",
    "id": "dqt_AI6aDfhsSNqsVNTG03QKxg",
    "created": "2023-07-07T02:36:57.776Z",
    "expires": "2023-07-07T02:51:57.776Z",
    "fee": 558,
    "currency": "usd",
    "currency_type": "USD",
    "dropoff_eta": "2023-07-07T03:21:29Z",
    "duration": 44,
    "pickup_duration": 18,
    "dropoff_deadline": "2023-07-07T03:57:42Z"
}

Please note that the “id” above must be saved, as it will be used in the next step.

Create Test Deliveries Using Uber Direct API Call

To create a delivery using the Uber Direct API via curl, it is essential to include the quote_id obtained from the previous step:

curl -X POST 'https://api.uber.com/v1/customers/<your_customer_id>/deliveries' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
   "quote_id": "dqt_AI6aDfhsSNqsVNTG03QKxg",
    "pickup_address": "{\"street_address\": [\"20 W 34th St\", \"Floor 2\"],\"state\":\"NY\",\"city\":\"New York\",\"zip_code\":\"10001\",\"country\":\"US\"}",
    "pickup_name": "My Store",
    "pickup_phone_number": "4444444444",
    "pickup_latitude": 40.74868,
    "pickup_longitude": -73.98561,
    "dropoff_address": "{\"street_address\": [\"285 Fulton St\", \"\"],\"state\":\"NY\",\"city\":\"New York\",\"zip_code\":\"10006\",\"country\":\"US\"}",
    "dropoff_name": "Reese Ippient",
    "dropoff_phone_number": "5555555555",
    "dropoff_latitude": 40.71301,
    "dropoff_longitude": -74.01317,
    "manifest_items": [
        {
            "name": "Cell phone box",
            "quantity": 1,
            "weight": 30,
            "dimensions": {
                "length": 40,
                "height": 40,
                "depth": 40
            }
        }
    ]
}'

You will get a response like below:

{
  "id": "del_Pw2e2GpnS0Gf0XUjb2xi3R",
  "quote_id": "dqt_Pw3f2GpnS0Gf0WUjb2yj3Q",
  "status": "pending",
  "complete": false,
  "kind": "delivery",
  "pickup": {
    "name": "My Store",
    "phone_number": "4444444444",
    "address": "20 W 34th St, New York, NY 10001",
    "detailed_address": {
      "street_address_1": "20 W 34th St",
      "street_address_2": "",
      "city": "New York",
      "state": "NY",
      "zip_code": "10118",
      "country": "US"
    },
    "notes": "",
    "location": {
      "lat": 40.74838,
      "lng": -73.98477
    }
  },
  "dropoff": {
    "name": "Reese Ippient",
    "phone_number": "+15555555555",
    "address": "285 Fulton St, New York, NY 10007",
    "detailed_address": {
      "street_address_1": "One World Trade Center",
      "street_address_2": "",
      "city": "New York",
      "state": "NY",
      "zip_code": "10006",
      "country": "US"
    },
    "notes": "",
    "location": {
      "lat": 40.71301,
      "lng": -74.01317
    }
  },
  "manifest": {
    "description": "1 X Cell phone box\n",
    "total_value": 0
  },
  "manifest_items": [
    {
      "name": "Cell phone box",
      "quantity": 1,
      "size": "small",
      "must_be_upright": false
    }
  ],
  "created": "2023-07-06T06:31:28.314Z",
  "updated": "1970-01-01T00:00:00Z",
  "pickup_ready": "2023-07-06T06:31:28Z",
  "pickup_deadline": "2023-07-06T06:51:28Z",
  "dropoff_ready": "2023-07-06T06:31:28Z",
  "dropoff_deadline": "2023-07-06T07:23:01Z",
  "pickup_eta": "2023-07-06T06:45:57Z",
  "dropoff_eta": "2023-07-06T06:56:41Z",
  "related_deliveries": null,
  "fee": 532,
  "currency": "usd",
  "tracking_url": "https://www.ubereats.com/orders/xxxxxxxx-6a67-4b41-9fd1-65236f6c62dd",
  "undeliverable_action": "",
  "courier_imminent": false,
  "courier": null,
  "live_mode": false,
  "undeliverable_reason": "",
  "uuid": "3AFXXXXXXXX4B419FD165236F6C62DD",
  "fences": null,
  "external_id": "",
  "items_acquired": null,
  "state_changes": null
}

With this, you have successfully created a test delivery.

Descriptions for all of the fields in the request and response can be found in the Create Delivery documentation.

Track Delivery Using tracking_url

Once you send the Create Delivery request, you can easily track the progress of the delivery through each stage using the provided tracking_url in the response. Here’s an example of what you’ll see when you open the tracking URL:

Tracking

Uber

Developers
© 2023 Uber Technologies Inc.