Three lines

Uber

Developers

Create Employee Trip

POSThttps://api.uber.com/v2/employees/trips

Privileged and Confidential This endpoint design has been confidentially shared with you. It is still under development and is subject to change without notice. Please do not share this document or API endpoint details with anyone who is not authorized to have access. For more information read about scopes.

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

Uber

Developers
© 2025 Uber Technologies Inc.