Carrier’s official API

XPO (LTL) API: integration guide

XPO publishes REST APIs for its North American LTL network covering rate quotes, bills of lading and labels, pickup requests, shipment tracking, document imaging and shipping tools such as transit time and service center lookup. Each API has a PDF implementation guide and a Java SDK on the XPO LTL Help Center. They are aimed at direct shippers, 3PLs, brokers and TMS providers.

This guide covers XPO (LTL)’s own API (api.ltl.xpo.com). Credentials come from XPO (LTL), 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/XMLEndpoints 33Reviewed 2026-10-09Open in ChatGPT↗Open in Claude↗

At a glance

CarrierXPO (LTL) (XPO, Inc.)
TypeLTL carrier
InterfaceREST/JSON, REST/XML
AuthenticationOAuth 2.0 (password grant) with consumer key/secret
CapabilitiesRate quote, Transit time & shipping tools, Bill of lading & labels, Pickup requests, Shipment tracking, Documents & images

Getting access

  • Register a web user ID on the XPO LTL customer site if you do not have one.
  • Email LTLWebAPISupport@xpo.com with your web user ID, the APIs you want, your consumer type (direct customer, 3PL, broker, TMS provider, etc.), the TMS or software you connect through if any, and how you integrate with XPO today (XML, EDI…). The XPO API support team then contacts you to subscribe you to the APIs.
  • After subscription you receive an access token (a consumer key and secret, base64-encoded together) that you use to request bearer tokens.
  • The Help Center does not publish pricing for API access.

Authentication

OAuth 2.0 (password grant) with consumer key/secret.

  • POST to https://api.ltl.xpo.com/token with the header `Authorization: Basic <access token>`, where the access token is your base64-encoded consumer key and secret.
  • Send a form-urlencoded body with `grant_type=password`, `username` (your XPO LTL web user ID) and `password`.
  • The response returns `access_token`, `refresh_token`, `token_type` (Bearer) and `expires_in`. The access token is valid for 12 hours and the refresh token for 24 hours. Use the refresh token to get a new pair.
  • Call the business APIs with `Authorization: Bearer <access_token>`. All requests must use SSL.
  • Each token has a scope. Most users get basic access, and calls outside that scope return an error.

Environments

Productionhttps://api.ltl.xpo.com

Endpoints

Rate quote

Creates a rate quote using your account's pricing agreement or a discount level, and includes estimated transit time. You can retrieve a saved quote by confirmation number, request a spot quote for larger shipments, and list the accessorials valid between two countries.

POST/rating/1.0/ratequotesCreate a rate quote (getXpoLtlRateQuote).
GET/rating/1.0/ratequotes/{confirmationNbr}Get the details of an existing rate quote.
POST/rating/1.0/spotquotesRequest a spot quote (getXpoLtlSpotQuote).
GET/rating/1.0/accessorials/ratequoteList valid accessorial codes for an origin and destination country.
Key inputsshipmentInfo.paymentTermCdshipmentInfo.shipper / consignee address.postalCd (city name for Mexico)shipmentInfo.shipper.acctInstId or bill2Party (account) or a discount levelshipmentInfo.commodity[] (grossWeight.weight, weightUom, nmfcClass, pieceCnt, dimensions)shipmentInfo.accessorialsshipmentInfo.shipmentDateorigCountry, destCountry (accessorial list)
Key outputsrateQuote.confirmationNbrrateQuote.totCharge.amtdeficitRatingInfotransitTime.transitDays, estDlvrDate, garntInd

Transit time & shipping tools

The LTL Shipping Tools API calculates transit days and guaranteed-service availability for one or more lanes, looks up service center details by SIC code, and calculates lineal feet for rating.

POST/shippingtools/1.0/transit-time-calculatorCalculate transit time for one or more origin/destination postal code pairs.
GET/shippingtools/1.0/service-centerGet service center details for a SIC code (sicCd parameter).
POST/shippingtools/1.0/lineal-feet-calculatorCalculate lineal feet for a shipment.
Key inputstransitTime[].origPostalCd, destPostalCdrequestedPkupDate or requestedDlvrDate (optional)sicCd
Key outputstransitDaysestDlvrDatelatestPkupDategarntIndorigSicCd / destSicCd

Bill of lading & labels

Creates a BOL, with or without a pickup request, and lets you update, cancel, retrieve and list BOLs. You can also get the BOL, PAPS labels and shipping labels as PDFs or have them emailed.

POST/billoflading/1.0/billsofladingCreate a BOL (optionally with pickup info).
PUT/billoflading/1.0/billsoflading/{bolInstId}Update a BOL.
PUT/billoflading/1.0/billsoflading/{bolInstId}/cancelCancel a BOL.
GET/billoflading/1.0/billsoflading/{bolInstId}/requesterGet one submitted BOL.
GET/billoflading/1.0/billsoflading/requesterList submitted BOLs.
GET/billoflading/1.0/billsoflading/{bolInstId}/pdfGet the BOL as a PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/papslabels/pdfCreate a PAPS label PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/shippinglabels/pdfCreate a shipping label PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/plt/shippinglabels/pdfCreate a shipping label PDF for a label printer (printOneLabelPerPage parameter).
POST/billoflading/1.0/billsoflading/{bolInstId}/emailEmail the BOL PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/papslabels/emailEmail the PAPS label PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/shippinglabels/emailEmail the shipping label PDF.
POST/billoflading/1.0/billsoflading/{bolInstId}/plt/shippinglabels/emailEmail the label-printer shipping label PDF.
Key inputstestMode (query, Y or N; mandatory)bol.requester.rolebol.shipper / bol.consignee (address, contactInfo)bol.commodityLine[]bol.chargeToCdbol.additionalService[] (accsrlCode, prepaidOrCollect)bol.pickupInfo (pkupDate, pkupTime, dockCloseTime) to also create a pickupautoAssignPro
Key outputsbolInstIdPRO numberpickup request information (if requested)link to the BOL

Pickup requests

Creates, reads, updates, lists and cancels pickup requests, and manages the individual line items on a pickup. Each pickup is identified by a confirmation number.

POST/pickuprequest/1.0/cust-pickup-requestsCreate a pickup request.
GET/pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}Get a pickup request.
PUT/pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}Update a pickup request.
PUT/pickuprequest/1.0/pickuprequests/{confirmationNbr}/cancelCancel a pickup request.
GET/pickuprequest/1.0/cust-pickup-requestsList your pickup requests.
POST/pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}/lineitemsAdd line items to a pickup.
GET/pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}/lineitems/{pkupItemSeq}Get one pickup line item.
PUT/pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}/lineitems/{pkupItemSeq}Update one pickup line item.
DELETE/pickuprequest/1.0/pickuprequests/{confirmationNbr}/lineitems/{pkupItemSeq}Delete one pickup line item.
Key inputstestMode (query, Y or N; mandatory)pickupRqstInfo.pkupDate, readyTime, closeTimepickupRqstInfo.shipper (name, address, postalCd)pickupRqstInfo.requestor (contact, roleCd)pickupRqstInfo.pkupItem[] (destZip6, totWeight.weight, palletCnt, loosePiecesCnt, garntInd, hazmatInd)
Key outputsconfirmationNbr (e.g. a SIC-based value like UPO-8-35)

Shipment tracking

Returns current status and shipment details for one or more PROs or customer reference numbers, plus lists of matched and unmatched numbers. Separate calls return a shipment's reference numbers and its full tracking event history.

GET/tracking/1.0/shipments/shipment-status-detailsGet status for one or more PROs or reference numbers.
GET/tracking/1.0/shipments/{proNbr}/reference-numbersList reference numbers on a shipment.
GET/tracking/1.0/shipments/{proNbr}/tracking-eventsList tracking events for a shipment.
Key inputsreferenceNumbers (PRO or customer reference; repeatable)
Key outputsshipmentStatusDtls.proNbr, pkupDateshipmentStatusDtls.shipmentStatus.statusCdshipmentStatusDtls.lastShipmentEvent (eventTypeCd, eventDesc, eventTmst)unmatchedSearchReferences

Documents & images

Retrieves imaged documents for a single PRO. You can filter by one or more image types and choose a format; without a type you get every image on file.

GET/imaging/1.0/shipments/{proNbr}/imaged-docsGet imaged documents for a PRO.
Key inputsproNbr (path)imageType (BL, DR, DRR, CUST, IR, LOA, NCIC, WI, WRFO)imageFormat (e.g. PDF)multiPartResp
Key outputsdocument images in the requested format

Example request

Get a bearer token and track a PRObash
# 1) Bearer token (OAuth 2.0 password grant) curl -X POST "https://api.ltl.xpo.com/token" \ -H "Authorization: Basic YOUR_BASE64_CONSUMER_KEY_AND_SECRET" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=password&username=YOUR_XPO_USER_ID&password=YOUR_PASSWORD" # 2) Shipment status by PRO curl -X GET "https://api.ltl.xpo.com/tracking/1.0/shipments/shipment-status-details?referenceNumbers=YOUR_PRO_NUMBER" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/json"

Store the refresh_token and use it to get a new token pair before the 12-hour access token expires.

Integration notes

  • There is one public host, api.ltl.xpo.com. The tracking, imaging and shipping tools guides say to test against production. The Pickup Request and BOL APIs instead require a testMode query parameter: Y routes the request to a test system and N sends it to production.
  • Every response uses the same envelope: code, transactionTimestamp, data, error and link. Check code and error, not just the HTTP status. JSON and XML are both supported. XML requests use an operation root element with an API-specific namespace such as http://www.ltl.xpo.com/API/LTLShippingToolsAPI.
  • Each API has a GET {api}/1.0/health-check and a GET {api}/1.0/options call that lists its supported resources. Use them for monitoring and discovery.
  • Rating rules: rate quotes over 25,000 lb gross are rejected (contact a service center). If you enter any dimension for a commodity, enter all three in inches. US-Mexico lanes need the DRA border-crossing accessorial if XPO handles the crossing. Mexico locations are matched by city name, not postal code.
  • If an account is used for the shipper or consignee, the rating engine uses that account's postal code and ignores the ZIP you entered. A discount level can only be sent when no account is given.
  • For lineal-foot, excessive-length or cubic-capacity charges, run the lineal feet calculator first and pass totalLinealFt, excessiveLength and cubicCapacity into the rate quote. The guide's operation table lists the path as /lineal-ft-calculator, while its sample request uses /lineal-feet-calculator; check with XPO API support which one is live.
  • Tracking response timestamps are UTC. Imaging returns TIFF unless you ask for another imageFormat.
  • Most implementation guides were last updated between 2017 and 2021 (the BOL guide in 2026). Confirm current field lists with XPO API support before going live.

FAQ

Does XPO have a public LTL API?

Yes. XPO offers REST APIs for rating, BOL and labels, pickup requests, tracking, imaging and shipping tools. Implementation guides and Java SDKs are on the XPO LTL Help Center, but you must be subscribed by XPO API support before you can call them.

How do I get an XPO API key?

Register a web user ID, then email LTLWebAPISupport@xpo.com with your user ID, the APIs you need and how you will connect. Once subscribed, you get a consumer key and secret to exchange for OAuth 2.0 bearer tokens.

How long is an XPO API access token valid?

Access tokens from https://api.ltl.xpo.com/token last 12 hours and refresh tokens last 24 hours. Use the refresh token to get a new pair.

Can I track XPO shipments by reference number instead of PRO?

Yes. The shipment-status-details call accepts PROs or customer reference numbers in referenceNumbers. It also returns any numbers that did not match.

Does the XPO API have a sandbox?

There is no separate sandbox host. The BOL and Pickup Request APIs take a mandatory testMode=Y parameter that routes requests to a test system. The other APIs are tested against production.

On FreightAPIs

Official resources

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

Other carrier API guides