Get Started
This guide will walk you through the step-by-step process of creating an Uber Direct Self-Serve 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
- Please log in using your existing Uber account, or create a new one if you don’t have an account yet.
Please note: If you are a managed account, do not create an account unless instructed by your Account Manager (AM). If you have a direct contact with Uber, please confirm with them before activating a self-serve account.
2. Please accept Uber’s terms and review privacy notice. 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.
- 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.
- 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.
- After successfully completing all the steps and inputting a valid credit card, you can begin placing delivery requests.
¶ Add Billing Information
If you bypass step 4 during account creation, you can add billing information by following the steps in this section.
- To add payment information, click “Billing” on the left sidebar.
- Save the entered information when finished.
- Returning to the Billing page, you’ll notice a new payment method listed in the Payment Method section. 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.
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.
¶ 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.
¶ 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.
To set up Postman:
-
Download and install Postman.
-
Uber’s Direct APIs are available at https://www.postman.com/uber/workspace/uber-direct/overview.
-
Select the Uber Direct APIs environment, and configure the following environment variables:
uber_api_client_id
anduber_api_client_secret
from your test applicationcustomer_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
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 throughout each stage of the delivery using the provided tracking_url in the response.
We strongly encourage you to use the tracking_url value returned in the response of the Create Delivery request. Please do not manipulate or change this URL, as this URL may be subject to changes.
Here’s an example of what you’ll see when you open the tracking URL: