Create Employee Trip
POSThttps://api.uber.com/v2/employees/trips
¶ Use case
Use this endpoint to create a new trip request.
Scheduled Rides are dispatched before the scheduled pickup_time
such that the driver is expected to arrive at the pickup location at the pickup_time
.
In order to request a ride for a third party client (3PC), please add x-uber-organizationuuid header and the Organization UUID as the value.
¶ Authorization
OAuth 2.0 Bearer token with the business.trips
scope.
¶ Ride Types
Ride | Description |
---|---|
Ride on Demand | Request a driver for immediate pickup. |
Scheduled Ride | Automatically send a driver at a specific time in advance. Riders cannot change the pickup time for a scheduled ride without contacting the driver. Only available in certain areas. |
Scheduled Ride - Uber Reserve | Reserve a driver at a specific time in advance. Uber Reserve differs from normal scheduled rides in that a driver will be pre-assigned prior to the trip pickup time. More details can be found in the reserve_info descriptions in the /v2/employees/trips/estimates call. Only available in certain areas. |
Hourly Ride | Reserve a driver at a specific time in advance, for predetermined duration and distance. Hourly Rides are also Reserve Rides, so the rules for “Scheduled Ride - Uber Reserve” also apply. Only available in certain areas. |
¶ Request
¶ Example request for a Ride on Demand
Try It
curl -X POST \
-H "authorization: Bearer <access_token>" \
-H 'content-type: application/json' \
-d '{
"customer": {
"email": "jane@example.com",
"phone_number": "+14155550000"
},
"pickup": {
"latitude": 40.752558,
"longitude": -74.006469,
"address": "636 W 28th St New York, NY"
},
"dropoff": {
"latitude": 40.750568,
"longitude": -73.993519,
"address": "Penn Station, New York, NY"
}
}' \
'https://api.uber.com/v2/employees/trips/'
¶ Example request for an Hourly Ride
Try It
curl -X POST \
-H "authorization: Bearer <access_token>" \
-H 'content-type: application/json' \
-d '{
"customer": {
"email": "jane@example.com",
"phone_number": "+14155550000"
},
"product_id": "ff4fe398-6cc6-4931-9076-d5bfdde928b6",
"pickup": {
"latitude": 40.752558,
"longitude": -74.006469,
"address": "636 W 28th St New York, NY"
},
"dropoff": {
"latitude": 40.750568,
"longitude": -73.993519,
"address": "Penn Station, New York, NY"
},
"hourly": {
"tier": {
"time_in_mins": 120,
"distance": 30,
"distance_unit": "MILE"
}
},
"scheduling": {
"pickup_time": 1698439444000
}
}' \
'https://api.uber.com/v2/employees/trips/'
When using the sandbox environment, the request requires the x-uber-sandbox-runuuid
header with the run_id
as the value (e.g, -H "x-uber-sandbox-runuuid:<run_id>"
).
In order to specify an org for which the ride needs to be billed to, the request requires the x-uber-organizationuuid
header with the Org UUID
as the value (e.g, -H "x-uber-organizationuuid:<org_UUID>"
).
¶ Request body parameters
Name | V2 Type | Required? | Description |
---|---|---|---|
x-uber-organizationuuid | header | Yes | Organization unique identifier |
x-uber-sandbox-runuuid | header | No | uuid of sandbox run |
customer.email | string | Yes | Registered email address of the employee with uber |
product_id | string | No | The unique ID of the product being requested. If none is provided, it will default to the UberX product for the given location. |
fare_id | string | No | The unique ID for a fare estimate from the ride request estimate endpoint (optional) |
pickup.latitude | float | Yes** | Latitude of the starting location of the trip (required*) |
pickup.longitude | float | Yes** | Longitude of the starting location of the trip (required*) |
pickup.address | string | Yes** | Address of the starting location of the trip. |
pickup.place.place_id | string | Yes** | Place ID for ePUDO |
pickup.place.provider | string | Yes** | Place provider for ePUDO, e.g., “uber_places” or “google_places”. |
pickup.place.zone_id | string | No** | (deprecated) Zone ID for ePUDO (optional) |
dropoff.latitude | float | Yes** | Latitude of the end location of the trip (required*) |
dropoff.longitude | float | Yes** | Longitude of the end location of the trip (required*) |
dropoff.address | string | Yes** | Address of the end location of the trip. |
dropoff.place.place_id | string | Yes** | Place ID for ePUDO |
dropoff.place.provider | string | Yes** | Place provider for ePUDO, e.g., “uber_places” or “google_places”. |
dropoff.place.zone_id | string | No** | (deprecated) Zone ID for ePUDO (optional) |
start_location.latitude | float | Yes** | (deprecated) Latitude of the starting location of the trip. |
start_location.longitude | float | Yes** | (deprecated) Longitude of the starting location of the trip. |
start_location.address | string | Yes** | (deprecated) Address of the starting location of the trip. |
start_location.place.place_id | string | Yes** | (deprecated) Place ID for ePUDO. |
start_location.place.provider | string | Yes** | (deprecated) Place provider for ePUDO, e.g., “uber_places” or “google_places”. |
start_location.place.zone_id | string | No** | (deprecated) Zone ID for ePUDO. (optional) |
end_location.latitude | float | Yes** | (deprecated) Latitude of the end location of the trip. |
end_location.longitude | float | Yes** | (deprecated) Longitude of the end location of the trip. |
end_location.address | string | Yes** | (deprecated) Address of the end location of the trip. |
end_location.place.place_id | string | Yes** | (deprecated) Place ID for ePUDO. |
end_location.place.provider | string | Yes** | (deprecated) Place provider for ePUDO, e.g., “uber_places” or “google_places”. |
end_location.place.zone_id | string | No** | (deprecated) Zone ID for ePUDO. (optional) |
scheduling.pickup_time | int | No**** | The timestamp (in milliseconds) the request is scheduled for. Required for Scheduled, Reserve and Hourly Rides. When requesting a Reserve Airport Pickup ride, this value may be overriden by the flight’s actual landing time. |
scheduling.dropoff_time | int | No**** | The timestamp (in milliseconds) for predicted pickup time based on the dropoff time provided for Uber ReserveSpecific the Estimated Time of Arrival |
flight.designator | string | No*** | Combination of Airline code and flight number to be associated with a Reserve Airport ride. Allowed format examples: UA131, UA-131, United 131, UA 131 . In case of a codeshare flight, provide the details of the operating airline. (This field is required when requesting a Reserve Airport Pickup) |
flight.arrival_airport_code | string | No*** | IATA code for the airport where the flight is scheduled to land. (Required when requesting a Reserve Airport Pickup) |
flight.arrival_date | string | No*** | Flight arrival Date in yyyy-mm-dd format. (Required when requesting a Reserve Airport Pickup) |
expense_code | string | No | Depending on the program, a code chosen from predefined list of expense codes or a custom expense code string |
expense_memo | string | No | A free text field to describe the purpose of the trip for expense reporting. This value will appear in the trip receipt and any configured expense-reporting integrations like Uber For Business or Business Profiles. |
program_uuid | string | No | Program uuid chosen from get employees programs API. Warning: currently named as policy_uuid. It is intended to be renamed to program_uuid. |
capacity | int | No | The number of seats required for uberPOOL. Default and maximum value is 2. |
hourly | object | No | Object containing booking parameters for Hourly Rides. |
hourly.tier | object | No | Object containing the selected hourly tier. |
hourly.tier.time_in_mins | int | No | Time to be booked, in minutes. Time and distance must match one of the hourly tier objects, as returned by the /v2/employees/trips/estimates API. |
hourly.tier.distance | int | No | Distance to be booked. Time and distance must match one of the hourly tier objects, as returned by the /v2/employees/trips/estimates API. |
hourly.tier.distance_unit | string | No | Unit for distance to be booked. Possible values are MILE and KM . Time and distance must match one of the hourly tier objects, as returned by the /v2/employees/trips/estimates) API. |
**For pickup/dropoff objects, one of coordinates (latitude and longitude), address, or ePUDO place is required.
***For Reserve Airport Pickup reqeusts (indicated by reserve_info.add_ons = [AIRPORT_PICKUP_WITH_FLIGHT_TRACKING]
returned in the estimates response), flight information is required. Unable to find a a single matching flight would result in creation failure.
**** For scheduling objects, either of pickup or dropoff time is required.
¶ Response
¶ Example response
{
"customer": {
"email": "jane@example.com",
"phone_number": "+14155550000"
},
"product_id": "a1111c8c-c720-46c3-8534-2fcdd730040d",
"request_id": "e249c871-7711-4c26-b06c-679cbad6a7c2",
"status": "processing"
}
¶ Response body parameters
Name | Type | Description |
---|---|---|
request_id | string | The unique ID of the trip request. |
product_id | string | Unique identifier representing a specific product for a given latitude & longitude. |
status | string | The status of the trip request indicating state |
eta | int | (deprecated)The estimated time of vehicle arrival in minutes. |
estimate_info.pickup_time | int | The estimated time of pickup in milliseconds. |
estimate_info.eta | int | The estimated time of vehicle arrival in minutes. Null if no drivers available at time of request. |
pickup | object | Pickup details are snapped to an Access Point when a trip is created. If the pickup location isn’t snapped, the details will be omitted. |
¶ Pickup object response
The following table provides a detailed breakdown of the pickup
location.
Field | Type | Description |
---|---|---|
pickup.address |
string | The address of the pickup location. |
pickup.is_refined |
boolean | Indicates whether the pickup location is snapped. |
pickup.latitude |
float | The latitude coordinate of the pickup location. |
longitude |
float | The longitude coordinate of the pickup location. |
pickup.timezone |
string | The timezone of the pickup location. |
pickup.title |
string | A brief title or name for the pickup location. |
pickup.subtitle |
string | A subtitle or additional information about the pickup location. |
pickup.status |
string | The current status of the pickup. |
pickup.update_details |
string | Additional details or updates about the pickup. |
pickup.rider_wayfinding_note |
string | Notes to assist the rider in finding the pickup location. |
pickup.place |
object | Contains details about the place. |
pickup.place.place_id |
string | Unique identifier for the place. |
pickup.place.provider |
string | The provider of the place information, e.g., “uber_places”. |
pickup.place.zone_id |
string | An identifier for the zone, if applicable. |
¶ Endpoint errors
A trip request can fail due to higher than normal fares which will require the request to be retried to acknowledge the new fare.
A fare_id
can also expire if the time between the estimate and trip request is too long.
fare_display
could be null if fares are unavailable.
Error metadata fields | Type | Description |
---|---|---|
fare_id |
string | A new unique fare ID that should be used to re-request the ride. |
fare_display |
string | The price estimate range. Could be null if fare estimates are unavailable. |
multiplier |
float | The surge pricing multiplier used to calculate the increased price of a ride request. A multiplier of 1.0 means surge pricing is not in effect. |
expires_at |
int | Timestamp in seconds. Only non-null if there is a surge multiplier greater than 1. |
Example error 1:
Status-code: 409 Conflict
{
"code": "surge",
"message": "Fare is higher than normal, request again to confirm",
"metadata": {
"fare_id": "dcf8a733-7f11-4544-a9c7-ddea71e46146",
"fare_display": "$12-15",
"multiplier": 1.4,
"expires_at": 1501684062
}
}
Example error 2:
Status-code: 409 Conflict
{
"code": "fare_expired",
"message": "The fare estimate has expired, request again to confirm",
"metadata": {
"fare_id": "dcf8a733-7f11-4544-a9c7-ddea71e46146",
"fare_display": "$9-11",
"multiplier": 1,
"expires_at": 1501684062
}
}
¶ Error Responses
Http Status Code | Code | Message |
---|---|---|
403 | unconfirmed_email | The user hasn’t confirmed their email address. |
422 | invalid_payment | There was an error in the payment |
422 | insufficient_balance | There is insufficient balance on the credit card associated with the user. The user must update the billing info. |
422 | payment_method_not_allowed | The payment method is not allowed. It could be due to invalid/inactive payment profile, unsupported payment method for the trip |
422 | card_assoc_outstanding_balance | The user’s associated card has an outstanding balance. The user must update the billing info. |
403 | invalid_mobile_phone_number | The user’s mobile phone number is not supported. We do not allow phone numbers from some providers that allow the creation of temporary phone numbers. |
403 | product_not_allowed | The product being requested is not available to the user. Have them select a different product to successfully make a request. |
403 | user_not_allowed | The user is banned and is not permitted to request a ride. |
403 | too_many_cancellations | The rider is temporarily blocked due to canceling too many times. |
403 | missing_national_id | Certain jurisdictions require Uber users to register their national ID number or passport number before taking a ride. If a user receives this error when booking a trip through the Developer API, they must enter their national ID number or passport number through the Uber iOS or Android app. |
400 | out_of_policy | |
409 | fare_expired | The fare has expired for the requested product. Please get estimates again, confirm the new fare, and then re-request. |
422 | invalid_fare_id | This fare id is invalid or expired. |
422 | same_pickup_dropoff | Pickup and Dropoff can’t be the same. |
422 | outside_service_area | The destination is not supported by the requested product. |
409 | payment_rate_limit_exceeded | The rate of payment had been exceeded. Try from another account |
422 | destination_not_allowed | The destination is not allowed |
422 | pickup_not_allowed | The pickup is not allowed |
422 | invalid_pickup_time | Please enter a valid pickup day to send a flexible ride. |
422 | overlapping_schedule | The schedule of this trip overlaps with another trip |
403 | blocked_by_bgc | Blocked by background check of client |
403 | blocked_by_safety_model | Blocked by safety model |
400 | bad_request | Bad request |
500 | internal_server_error | An unknown error has occurred. |
404 | not_found | Entity not found (Organization/employee) |
400 | flight_not_found | Unable to find a matching flight trip |
400 | validation_failed | Scheduling requires one of the two fields: ‘pickup_time’ or ‘dropoff_time’ trip |
400 | validation_failed | The rider is not eligible to ride with Uber. If you proceed to request a ride for this person, your company agrees to take full responsibility for any claims or injuries related to their use of the Uber service. The rider may contact Uber support at the bottom of this page: https://t.uber.com/cant-request-ride |
400 | invalid_predicted_dropoff_time | Predicted dropoff time is longer than expected. trip |