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 →
At a glance
| Carrier | XPO (LTL) (XPO, Inc.) |
|---|---|
| Type | LTL carrier |
| Interface | REST/JSON, REST/XML |
| Authentication | OAuth 2.0 (password grant) with consumer key/secret |
| Capabilities | Rate 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
| Production | https://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/ratequotes | Create a rate quote (getXpoLtlRateQuote). |
| GET | /rating/1.0/ratequotes/{confirmationNbr} | Get the details of an existing rate quote. |
| POST | /rating/1.0/spotquotes | Request a spot quote (getXpoLtlSpotQuote). |
| GET | /rating/1.0/accessorials/ratequote | List valid accessorial codes for an origin and destination country. |
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-calculator | Calculate transit time for one or more origin/destination postal code pairs. |
| GET | /shippingtools/1.0/service-center | Get service center details for a SIC code (sicCd parameter). |
| POST | /shippingtools/1.0/lineal-feet-calculator | Calculate lineal feet for a shipment. |
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/billsoflading | Create a BOL (optionally with pickup info). |
| PUT | /billoflading/1.0/billsoflading/{bolInstId} | Update a BOL. |
| PUT | /billoflading/1.0/billsoflading/{bolInstId}/cancel | Cancel a BOL. |
| GET | /billoflading/1.0/billsoflading/{bolInstId}/requester | Get one submitted BOL. |
| GET | /billoflading/1.0/billsoflading/requester | List submitted BOLs. |
| GET | /billoflading/1.0/billsoflading/{bolInstId}/pdf | Get the BOL as a PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/papslabels/pdf | Create a PAPS label PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/shippinglabels/pdf | Create a shipping label PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/plt/shippinglabels/pdf | Create a shipping label PDF for a label printer (printOneLabelPerPage parameter). |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/email | Email the BOL PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/papslabels/email | Email the PAPS label PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/shippinglabels/email | Email the shipping label PDF. |
| POST | /billoflading/1.0/billsoflading/{bolInstId}/plt/shippinglabels/email | Email the label-printer shipping label PDF. |
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-requests | Create 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}/cancel | Cancel a pickup request. |
| GET | /pickuprequest/1.0/cust-pickup-requests | List your pickup requests. |
| POST | /pickuprequest/1.0/cust-pickup-requests/{confirmationNbr}/lineitems | Add 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. |
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-details | Get status for one or more PROs or reference numbers. |
| GET | /tracking/1.0/shipments/{proNbr}/reference-numbers | List reference numbers on a shipment. |
| GET | /tracking/1.0/shipments/{proNbr}/tracking-events | List tracking events for a shipment. |
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-docs | Get imaged documents for a PRO. |
Example request
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
- XPO LTL Help Center: API: www.xpo.com/help-center/integration-with-customer-systems/api/
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
ABF Freight · Estes Express Lines · Saia LTL Freight · TForce Freight · Old Dominion Freight Line · AAA Cooper Transportation · AIT Worldwide Logistics · Amazon Freight