Carrier’s official API

Uber Freight API: integration guide

Uber Freight publishes two separate API families on developer.uberfreight.com. The brokerage APIs give TMS platforms and shippers instant quotes and load tendering for FTL, LTL and intermodal. The TMS Shipper APIs, inherited from Transplace (now part of Uber Freight), serve managed-transportation customers with quick-quote rate searches, shipment add/update/cancel and latest shipment status.

This guide covers Uber Freight’s own API (sandbox-api.uber.com). Credentials come from Uber Freight, not from FreightAPIs, and we are not affiliated with them.

Want one API key for carrier terminals, NMFC and ports instead? FreightAPIs API docs →

Interface REST/JSON · REST/XML (TMS Shipper APIs accept JSON or XML)Endpoints 14Reviewed 2026-10-09Open in ChatGPT↗Open in Claude↗

At a glance

CarrierUber Freight (Uber Technologies, Inc.)
TypeTruckload & LTL broker
InterfaceREST/JSON, REST/XML (TMS Shipper APIs accept JSON or XML)
AuthenticationOAuth 2.0 client credentials — bearer token
CapabilitiesInstant quote (brokerage), Load tender (brokerage), Rate search (TMS Shipper APIs), Shipment add / update / cancel (TMS Shipper APIs), Shipment status, Master data & health (TMS Shipper APIs)

Getting access

  • Brokerage APIs (instant quote and tender): create a developer account on developer.uber.com and create an app of the "Other Applications" (hybrid) type, not the default app type offered on the dashboard home screen.
  • Then email Uber Freight API support (ufapisupport@uberfreight.com) with your app's client ID and company name and ask for the freight.loads scope. The docs say they reply within 2 business days and then give you a test customer_id.
  • TMS Shipper APIs: these are for existing Uber Freight managed-transportation (TMS) customers. Your requests carry a customer domainId and accountId that Uber Freight assigns, and OAuth client credentials are issued by Uber Freight. Ask your Uber Freight contact to set this up.
  • The documentation does not mention API fees.

Authentication

OAuth 2.0 client credentials — bearer token.

  • Brokerage APIs: POST to the Uber token endpoint (login.uber.com /oauth/v2/token) with client_id, client_secret, grant_type=client_credentials and scope freight.loads. Send the result as Authorization: Bearer YOUR_ACCESS_TOKEN.
  • You always request brokerage tokens from the production token endpoint. The same token works against both sandbox and production quote and tender calls.
  • TMS Shipper APIs use a different OAuth 2.0 client-credentials server: the /oauth2/accesstoken path on the Uber Freight API host (the spec lists the UAT token URL). Tokens from the two systems are not interchangeable.
  • The "Try this API" and "Authorize" buttons on developer.uberfreight.com do not work for the brokerage endpoints, because they are hosted on api.uber.com. Test them with Postman or curl.

Environments

Brokerage APIs — sandboxhttps://sandbox-api.uber.com
Brokerage APIs — productionhttps://api.uber.com
TMS Shipper APIs — UAThttps://uatapi.uberfreight.com/tp-api/customer
TMS Shipper APIs — productionhttps://api.uberfreight.com/tp-api/customer

Endpoints

Instant quote (brokerage)

Get a spot price for a load from its stops, items and equipment. v2 handles FTL, LTL and intermodal (IMDL) and returns an array of options with transit estimates and rate line items. v1 is FTL only and is marked for deprecation.

POST/v2/freight/loads/quotesInstant quote for FTL, LTL or IMDL; returns one or more priced options.
POST/v1/freight/loads/quotesLegacy FTL instant quote (to be deprecated); returns uber_quote_uuid and a price.
Key inputsquote_id (your own unique ID), customer_id, shipping_modes (LTL | FTL | IMDL)requirements.vehicle_type (DRY | REFRIGERATED | FLATBED), weight, temperature_limitstops[] — sequence_number, type (PICKUP | DROPOFF), mode (LIVE | DROP), facility.address, appointmentstops[].appointment.start_time_utc / end_time_utc (Unix seconds)stops[].items[] — package_count, weight, freight_class, dimensions (LTL)quote_type (LHR_ONLY for linehaul only; default is all-in)
Key outputsuber_quote_id, carrier_name, shipping_mode, service_levelexpiration_time_utctransit_estimate (estimated_pickup_time_utc, estimated_dropoff_time_utc, duration)rate_details.all_in_rate and line_items

Load tender (brokerage)

Tender a load to Uber Freight, then update or cancel it using the Uber Freight load ID. Passing a quote ID guarantees the quoted price if the load has not materially changed and the quote has not expired.

POST/v1/freight/loads/tendersTender an FTL or LTL load; returns uber_load_id (also the PRO number) and uber_load_uuid.
PUT/v1/freight/loads/tenders/{uf_load_id}Update a load while it is still updatable; returns 204 on success.
DELETE/v1/freight/loads/tenders/{uf_load_id}Cancel a load while it is still cancellable; returns 204.
Key inputsload_id (your ID), customer_id, requirements, stopsuber_quote_uuid (from v1) or uber_quote_id (from v2) — required for LTLshipping_mode (LTL | FTL), tender_expiration_utcreference_numbers[], accessorial_charges[], billing_party, payment_method (PP | CC | TP | PB)
Key outputsuber_load_id (PRO number)uber_load_uuid

Rate search (TMS Shipper APIs)

Managed-transportation customers can get quick quotes from their contract or benchmark rates. Results are informational; the actual carrier and cost are set during execution. v3 improves error messages over v2, and v4 restructures the request and adds parcel hazmat fields.

POST/v4/quickQuotes/searchQuick quote rate search, latest request format.
POST/v3/quickQuotes/searchQuick quote rate search with coded validation errors (QQ-xxxx).
POST/v2/quickQuotes/searchOriginal quick quote rate search.
Key inputsquoteRequests[] — date, serviceLevel, locations[], lineItems[] (all required)locations[] — city, state, postalCode, countrylineItems[] — weight, weightUOM (required), ltlClass, quantity, quantityUOMequipment, mode, carrierScacs[], charges[] (accessorials)options — topCarrierOnly, getLCP, getBenchmark, useSRG, returnRateDetail
Key outputsdata[].carrier (scac, name, mode, serviceLevel)data[].quoteCost (amount, currency, quoteType, detail)data[].transitsuccess, traceId, errors[]

Shipment add / update / cancel (TMS Shipper APIs)

One endpoint handles new shipments, updates and cancellations. The action field picks the operation, and customerTransactionId ties an update or cancel to the original shipment.

POST/v2/shipmentSubmit a shipment with action ADD, UPDATE or CANCEL.
POST/v2/post-goods-issuedSubmit a post goods issued (PGI) document for an existing load.
Key inputsdomainId, accountId, action (ADD | UPDATE | CANCEL), stops[], freights[] (required)customerTransactionId, modeType (LTL, TRUCK, PARCEL, INTERMODAL…), transitSpeed, paymentMethodTypescac, equipmentTypeCode, references[], contacts[], comments[]cancelLoadId or cancelReferences[] when cancelling
Key outputssuccess, traceId, data.message (acknowledgement)

Shipment status

Returns the latest status for one load, looked up by load ID or by a reference name and value. It is a snapshot of the most recent event, not a full event history.

GET/v2/shipment-statusLatest status event for a load, by loadId or referenceName + referenceValue.
Key inputsloadId, or referenceName + referenceValue (e.g. PRIMARY REFERENCE)
Key outputstype (ARRIVAL, LOADED, UNLOADED, DEPARTURE, ETA, CHECK_CALL, GOODS_ISSUED…)statusCode, statusDescription, reasonCode, reasonDescription, statusTimeestimatedDeliveryTime, reportedLocation, latitude, longitude, stopSequence, stopLocationscac, driverFirstName, driverLastName, driverPhone, powerId, containerId, temperature

Master data & health (TMS Shipper APIs)

Load location and product master data into the TMS, and check connectivity before sending traffic.

POST/v2/location/importImport customer locations.
POST/v2/products/add-updateAdd or update product records.
GET/v2/healthCheckConfirm connectivity to the TMS Shipper APIs.

Example request

Brokerage v2 instant quote for an LTL shipment (sandbox)bash
# 1) Get a token (always from the production token endpoint) curl -X POST "https://login.uber.com/oauth/v2/token" \ -F "client_id=YOUR_CLIENT_ID" \ -F "client_secret=YOUR_CLIENT_SECRET" \ -F "grant_type=client_credentials" \ -F "scope=freight.loads" # 2) Request a quote curl -X POST "https://sandbox-api.uber.com/v2/freight/loads/quotes" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "1767225600_PO12345", "customer_id": "YOUR_CUSTOMER_ID", "shipping_modes": ["LTL"], "requirements": { "vehicle_type": "DRY" }, "stops": [ { "sequence_number": 1, "type": "PICKUP", "mode": "LIVE", "facility": { "name": "Origin DC", "address": { "line1": "100 Main St", "city": "Chino", "principal_subdivision": "CA", "postal_code": "91708", "country": "USA" } }, "appointment": { "status": "NEEDED", "start_time_utc": 1767258000, "end_time_utc": 1767272400 }, "items": [ { "name": "Pallets", "package_count": { "type": "PALLET", "count": 2 }, "freight_class": "70", "weight": { "amount": 1200, "unit": "LB" }, "dimensions": { "length": 48, "width": 40, "height": 48, "unit": "IN" } } ] }, { "sequence_number": 2, "type": "DROPOFF", "mode": "LIVE", "facility": { "name": "Customer", "address": { "line1": "200 Market St", "city": "Phoenix", "principal_subdivision": "AZ", "postal_code": "85004", "country": "USA" } }, "appointment": { "status": "NEEDED", "start_time_utc": 1767430800, "end_time_utc": 1767445200 }, "items": [ { "name": "Pallets", "package_count": { "type": "PALLET", "count": 2 }, "freight_class": "70", "weight": { "amount": 1200, "unit": "LB" }, "dimensions": { "length": 48, "width": 40, "height": 48, "unit": "IN" } } ] } ] }'

Pass the returned uber_quote_id into POST /v1/freight/loads/tenders before expiration_time_utc to lock the price. Money amounts in the brokerage APIs are in cents.

Integration notes

  • The two API families are separate systems: different hosts, different OAuth servers and different IDs. Brokerage loads are keyed by uber_load_id; TMS Shipper API loads by loadId and your references. The brokerage spec has no status endpoint; the documented status lookup is /v2/shipment-status in the TMS Shipper APIs.
  • Brokerage APIs use Unix epoch seconds (UTC) for appointments, quote expiry and tender expiry, and money in the currency's smallest unit (cents for USD). The TMS Shipper APIs use plain decimal amounts, and shipment-status times are ISO local date-times in the carrier-reported or location time zone.
  • v2 quotes cannot mix LTL with FTL/IMDL in one request. Send separate requests. v1 returns uber_quote_uuid, while v2 returns uber_quote_id; use the matching field when you tender.
  • Rate limits: 10 requests per second for quotes and tenders, 5 per second for LTL v2 quotes. Above that you get HTTP 429.
  • Tendering the same load twice returns 400 (load_id_already_exists) after the first one got 201. PUT updates and DELETE cancels are safe to repeat and return 204. The docs say 500s can be retried; a common cause on tenders is an item without both a pickup and a drop-off stop.
  • Every brokerage stop needs an appointment with start_time_utc and end_time_utc. DROP stop mode is disabled by default and has to be enabled with your account manager.
  • The brokerage address format uses principal_subdivision for the state and a 5-digit postal_code. The TMS rate search uses city/state/postalCode/country in locations[].
  • Shipment status returns only the newest event. If you need a history, poll and store each event yourself. Invoice, POD and freight-bill endpoints are not part of either published spec.

FAQ

Does Uber Freight have a public API?

Yes. Uber Freight documents its brokerage instant quote and tender APIs, and the TMS Shipper APIs for managed-transportation customers, on developer.uberfreight.com. You still need credentials and scopes approved by Uber Freight before calls succeed.

How do I get an Uber Freight API key?

For the brokerage APIs, create an "Other Applications" app on developer.uber.com, then email ufapisupport@uberfreight.com with the client ID and company name to request the freight.loads scope. You then use OAuth client credentials to get bearer tokens.

Can I get LTL quotes from the Uber Freight API?

Yes. The brokerage v2 quote endpoint accepts shipping_modes LTL, FTL or IMDL, but LTL must be quoted in its own request. TMS customers can also use the quickQuotes search endpoints against their contract rates.

Does the Uber Freight API support shipment tracking?

The TMS Shipper APIs have GET /v2/shipment-status, which returns the latest status event for a load by loadId or by reference. It does not return a full history, and the brokerage spec has no tracking endpoint.

Is the Uber Freight PRO number returned by the API?

Yes. A successful tender returns uber_load_id, which the docs say is also the PRO number, plus an uber_load_uuid. Use uber_load_id in the update and cancel paths.

On FreightAPIs

Official resources

Written from Uber Freight’s published API documentation and last checked 2026-10-09. FreightAPIs is not affiliated with Uber Freight; endpoints and access rules can change, so confirm details in the carrier’s own documentation before going live.

Other carrier API guides