Carrier’s official API
Amazon Freight API: integration guide
Amazon Freight sells truckload and LTL capacity to outside shippers, and offers a JSON API (version 2020-11-04) for quoting, booking and following those loads. The API is built for shippers and TMS vendors that want to quote and tender Amazon Freight loads from their own systems. Access goes through the Amazon developer platform and a shipper-by-shipper OAuth authorization.
This guide covers Amazon Freight’s own API. Credentials come from Amazon 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 →
At a glance
| Carrier | Amazon Freight (Amazon.com, Inc.) |
|---|---|
| Type | Truckload & LTL freight provider |
| Interface | REST/JSON |
| Authentication | OAuth 2.0 via Login with Amazon (LWA) — bearer access token |
| Capabilities | Rate quote, Order booking (tender), Order status & tracking, Order cancellation |
Getting access
- The Amazon Freight integration documentation is not published on a public developer page. It is provided to shippers and integration partners by their Amazon Freight contact, so start by asking your Amazon Freight representative for API access.
- Register a developer profile on Amazon Developer Central, choose the Private Developer data-access option and the Amazon Logistics role, describe your use case and answer the security questionnaire. Any "No" answer on the security questions gets the application rejected.
- Profile review can take up to 7 days. Wait for approval before creating the app, because production access is not available until the profile is approved.
- Create an app client with API type SP API, environment Production, business entity Freight and role Amazon Logistics, and enter your OAuth login URL and redirect URL. The app should stay in Draft (not publicly listed).
- You also need an Amazon Freight shipper account. Your Amazon Freight contact approves it, and you use it to run the authorization flow and test calls.
- The documentation does not state any API fees.
Authentication
OAuth 2.0 via Login with Amazon (LWA) — bearer access token.
- Each shipper authorizes your app on the Amazon Freight site. You send the shipper to the integration authorize page for your app ID with a state value; after login and consent, Amazon redirects to your redirect URI with state and code.
- The authorization code expires after 5 minutes. Exchange it at the LWA token endpoint (POST, application/x-www-form-urlencoded) with grant_type=authorization_code, code, client_id and client_secret.
- The token response contains access_token, token_type (bearer), expires_in (3600) and refresh_token. The refresh token does not expire; store it against the shipper that authorized it.
- If you serve several shippers, each shipper has its own refresh token. Pick the right one before every call.
- Access tokens last 1 hour. Get a new one with grant_type=refresh_token plus client_id, client_secret and the stored refresh_token.
- Send the token on every API call as Authorization: Bearer YOUR_ACCESS_TOKEN with Content-Type: application/json.
Endpoints
Rate quote
Send at least two stops (a pickup and a drop-off) with time windows to get a priced quote. ZIP code and country are enough for a quote. The response has a quote status, a pricing breakdown and a validUntil time.
| POST | /freight/2020-11-04/quotes | Create or update a quote for a set of stops and time windows. |
Order booking (tender)
Book a load with PUT to an order ID that you generate. Booking against a quote needs the quoteId; contract-lane orders can be placed without one. The call is asynchronous and returns HTTP 202 with ACCEPTED or UNDER_REVIEW. The same call updates stop details later.
| PUT | /freight/2020-11-04/orders/{orderId} | Create a new order, or update an existing one, under your own orderId. |
Order status & tracking
There is no separate tracking call in the quote-and-order API. You read progress by polling Retrieve Order with your orderId. It returns the order status, the stops with Amazon-generated stop IDs, pricing and attached documents.
| GET | /freight/2020-11-04/orders/{orderId} | Retrieve the current state of an order you created. |
Order cancellation
Cancel an order before execution starts. Cancelling fails with EXECUTION_STARTED once the load is underway, or UNPROCESSED_ORDER_UPDATES if an earlier update is still being processed.
| PUT | /freight/2020-11-04/orders/{orderId}/cancel | Request cancellation of an order. |
Example request
The API host is given in the integration documentation Amazon Freight provides, so it is a placeholder here. Book the quote by sending its quoteId in a PUT to /freight/2020-11-04/orders/{orderId} with full stop addresses and commodities.
Integration notes
- Order creation is asynchronous. HTTP 202 only means Amazon received the request. UNDER_REVIEW means the load could not be confirmed on the spot, so poll Retrieve Order until the status settles.
- You choose the orderId and PUT to it. Re-sending the same orderId updates that order instead of creating a duplicate, which makes retries safe.
- Quotes need only postalCode and countryCode, but orders need the full address (addressLine1, city, stateOrRegion, postalCode, countryCode). Each commodity's originStopName and destinationStopName must match a stopName in stops, or you get INVALID_STOP_NAME.
- All times are ISO 8601 with a timezone offset. windowStart must be before windowEnd and not in the past (INVALID_STOP). Using the same address for two stops returns DUPLICATE_STOPS.
- Quotes expire at validUntil. Booking with an expired or reused quote returns QUOTE_EXPIRATION or QUOTE_STATUS, so re-quote instead of caching quotes for long.
- Amazon may move your windows or loading type to fit capacity and facility hours. Watch for STOP_WINDOW_ADJUSTED, LOADING_TYPE_ADJUSTED and the recommendation.window block in errors[]. SPENDING_LIMIT_EXCEEDED means the order cost is above the shipper's available spend limit.
- Stop details (references, instructions, contacts, appointments, windows) are subject to a 24-hour limit relative to pickup, and EXECUTION_STATUS blocks appointment changes once the load is in execution; confirm the exact cutoff with Amazon Freight. SCHEDULING_IN_PROGRESS means retry in about 30 minutes.
- Every response carries x-amzn-RequestId (quote it when you contact support) and x-amzn-RateLimit-Limit (requests per second for that operation). Back off on HTTP 429.
FAQ
Does Amazon Freight have a public API?
Amazon Freight has an API for quoting, booking and following loads, but its documentation is not on a public page. Shippers and TMS partners get the integration guide and API access through their Amazon Freight contact.
How does Amazon Freight API authentication work?
It uses OAuth 2.0 through Login with Amazon. Each shipper authorizes your Developer Central app once, you exchange the code for a non-expiring refresh token, and then you use it to get 1-hour bearer access tokens.
Can I book LTL as well as truckload through the Amazon Freight API?
Yes. The order call takes freightType TRUCKLOAD or LTL, and commodities can carry freightClass and NMFC codes.
How do I track an Amazon Freight shipment through the API?
Poll GET /freight/2020-11-04/orders/{orderId} with the order ID you assigned when booking. There is no separate tracking endpoint in the quote-and-order API.
On FreightAPIs
Official resources
Written from Amazon Freight’s published API documentation and last checked 2026-10-09. FreightAPIs is not affiliated with Amazon Freight; 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 · XPO (LTL) · AAA Cooper Transportation · AIT Worldwide Logistics