Carrier’s official API

Estes Express Lines API: integration guide

Estes Express Lines publishes a family of REST/JSON APIs on its developer portal for rating, transit times, electronic bills of lading, pickup requests, shipment tracking and document images. There are also event subscriptions so you can receive pickup and shipment updates instead of polling. The APIs are aimed at shippers integrating their own systems and at TMS providers acting on behalf of Estes customers.

This guide covers Estes Express Lines’s own API (cloudapi.estes-express.com). Credentials come from Estes Express Lines, not from FreightAPIs, and we are not affiliated with them.

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

Interface REST/JSONEndpoints 23Reviewed 2026-10-09Open in ChatGPT↗Open in Claude↗

At a glance

CarrierEstes Express Lines
TypeLTL carrier
SCACEXLA
InterfaceREST/JSON
AuthenticationAPI key + short-lived bearer token (MyEstes credentials via Basic auth)
CapabilitiesAuthentication & API key, Rate quote, Transit time (RouteGuides), Electronic BOL, Pickup requests, Shipment tracking, Documents & images, Event subscriptions

Getting access

  • You need a MyEstes user profile. The username and password of that profile are sent when you request a bearer token. If you do not have one, sign up on the Estes website first.
  • TMS providers must collect and store the MyEstes credentials of each Estes customer they serve, because every token is tied to one set of customer credentials.
  • Email the Estes Web Support team (WebSupport@estes-express.com) with the developer name, email, title and company. Estes replies with a client ID and client secret for the test environment and a separate pair for production.
  • Use the client ID and secret once to create your API key (POST /v1/api-key) in each environment. The response returns the API key plus a new client secret that replaces the emailed one. One key covers all of the new REST APIs.
  • Some products are request-only: the Reserve PRO API and invoice event notifications are arranged through Web Support rather than self-service.
  • The portal does not publish pricing or rate limits for API use.

Authentication

API key + short-lived bearer token (MyEstes credentials via Basic auth).

  • Step 1 (one time per environment): call POST /v1/api-key with Basic authentication, using your client ID as the username and client secret as the password. GET /v1/api-key retrieves a lost key and DELETE /v1/api-key removes it; both use the new client secret.
  • Step 2: call POST /authenticate with an `apikey` header and the MyEstes username and password in a Basic `Authorization` header. The JSON response contains `access_token`, `token_type` (Bearer) and `expires_in`.
  • The sample token response shows `expires_in` of about 36,000 seconds (roughly 10 hours). Cache the token and refresh it before it expires.
  • Step 3: send both headers on every API call: `Authorization: Bearer <token>` and `apikey: <your key>`.
  • A bearer token is bound to one MyEstes login. TMS providers must not reuse a token across different customers.
  • Client IDs and secrets are not API keys. The API key is not used by the older Estes legacy web services.

Environments

Productionhttps://cloudapi.estes-express.com
Test (UAT)https://uat-cloudapi.estes-express.com

Endpoints

Authentication & API key

Create, retrieve or delete your API key with client credentials, then exchange MyEstes credentials for a bearer token.

POST/v1/api-keyGenerate an API key; also returns a replacement client secret.
GET/v1/api-keyRetrieve the API key already issued to your client.
DELETE/v1/api-keyDelete your API key.
POST/authenticateReturn a bearer token for a MyEstes user.
Key outputsapiKeyapiClientIdapiClientSecretaccess_tokenexpires_in

Rate quote

Returns quotes for one or more Estes service levels from a single request. Handling units and their commodity line items are nested the same way as in the eBOL. The response also flags direct vs indirect lanes and includes origin and destination terminal details.

POST/v1/rate-quotesRequest rate quotes for the requested service levels.
Key inputsquoteRequest.shipDate (YYYY-MM-DD)quoteRequest.serviceLevels (LTL, LTLTC, VTL, VTLTC, ERG, EU or ALL)payment.account, payment.payor, payment.termsorigin.address / destination.address (city, stateProvince, postalCode, country)commodity.handlingUnits[] with weight, weightUnit and lineItems[] (classification, weight)accessorials.codes (e.g. LGATE, APT, HD)
Key outputsquoteIdserviceLevelTextquoteRate.totalChargesquoteRate.ratedAccessorialstransitDetails.transitDays, laneType, originTerminalInfo, destinationTerminalInfodates.transitDeliveryDate, dates.quoteExpirationalerts / reasons

Transit time (RouteGuides)

Calculates service days from one origin to one or more destinations, and returns the origin and destination terminals that serve each point.

POST/v1/route-guidesCalculate transit days between an origin and a list of destinations.
Key inputsoriginPoint.zipdestinationPoints[].point.zipdestinationPoints[].shipmentDate (optional)
Key outputsoriginTerminal (id, name, address, phone)destinationTerminals[].destinationTerminalserviceDays

Electronic BOL

Submits an eBOL that follows version 2.0.1 of the NMFTA Digital LTL Council BOL standard. Freight bills are generated from the submitted data, and the request can ask for the BOL document and shipping labels back.

POST/v1/bolCreate an electronic bill of lading.
Key inputsbol.function (Create)bol.isTestbol.requestorRole (Shipper, Consignee, Third Party)bol.requestedPickupDate (ISO 8601)images.includeBol, images.includeShippingLabelspayment.termscommodities.handlingUnits[] with lineItems[]accessorials.codes
Key outputsPRO and reference numbersBOL / label images when requested

Pickup requests

Create, update, read and cancel pickup requests. The status response includes expanded statuses and exception codes, and when the driver is en route it can show an ETA, stops away and GPS coordinates.

POST/v1/pickup-requestsCreate a pickup request.
PUT/v1/pickup-requestsUpdate an existing pickup request.
GET/v1/pickup-requests/{requestNumber}Get the details and status of a pickup request.
DELETE/v1/pickup-requests/{requestNumber}Cancel a pickup request.
Key inputsshipperName, accountCode and address fieldsshipperContactpickupDate, pickupStartTime, pickupEndTimetotalPieces, totalWeight, totalHandlingUnits, hazmatFlagpaymentTerms, whoRequested
Key outputsrequestNumbervalidationFailures (on error)

Shipment tracking

Returns full movement history and current status for a shipment, looked up by PRO or by a reference number. The response can include a dynamic estimated delivery date, ETA and stops away when out for delivery, appointment history and GPS coordinates.

GET/v1/shipments/historyGet tracking history by PRO or reference number.
Key inputspro (10 digits)or one of: po, bol, pur, ldn, exl, interline-proparty-to (boolean)
Key outputsprodocumentReferencestatus and movement history

Documents & images

Fetches document images for a PRO, one document type per call. Results are URLs by default, with optional base64 data and an option to return only the latest version.

GET/v1/search/images/{document-type}Get images of one document type (BOL, delivery receipt, invoice, etc.) for a PRO.
Key inputsdocument-type (path), e.g. BOL, dr, invoice, wr, delimgpro (query, 10 characters)include-image (base64), all-versionsconsignee-zipCode (for non-party access to some types)
Key outputsimage URLsbase64 image data when include-image=true

Event subscriptions

Subscribe to pickup or shipment events so updates are pushed to you instead of polled. You can subscribe at the account level or for a specific pickup request or PRO.

POST/v1/events/pickup-requests/subscriptionsCreate a pickup event subscription.
GET/v1/events/pickup-requests/subscriptionsList pickup event subscriptions.
GET/v1/events/pickup-requests/subscriptions/{subscriptionId}Get one pickup event subscription.
GET/v1/events/pickup-requests/subscriptions/{subscriptionId}/accountsList accounts on a pickup subscription.
DELETE/v1/events/pickup-requests/subscriptions/{subscriptionId}/accountsRemove accounts from a pickup subscription.
POST/v1/events/shipments/subscriptionsCreate a shipment event subscription.
GET/v1/events/shipments/subscriptionsList shipment event subscriptions.
GET/v1/events/shipments/subscriptions/{subscriptionId}Get one shipment event subscription.
GET/v1/events/shipments/subscriptions/{subscriptionId}/accountsList accounts on a shipment subscription.
DELETE/v1/events/shipments/subscriptions/{subscriptionId}/accountsRemove accounts from a shipment subscription.

Example request

Request an LTL rate quotebash
# 1) Get a bearer token (MyEstes login in Basic auth, plus your API key) curl -X POST "https://cloudapi.estes-express.com/authenticate" \ -H "accept: application/json" \ -H "apikey: YOUR_API_KEY" \ -u "YOUR_MYESTES_USERNAME:YOUR_MYESTES_PASSWORD" # 2) Request a quote curl -X POST "https://cloudapi.estes-express.com/v1/rate-quotes" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "apikey: YOUR_API_KEY" \ -d '{ "quoteRequest": { "shipDate": "2026-10-12", "serviceLevels": ["LTL"] }, "payment": { "account": "YOUR_ACCOUNT_NUMBER", "payor": "Shipper", "terms": "Prepaid" }, "origin": { "address": { "city": "Richmond", "stateProvince": "VA", "postalCode": "23234", "country": "US" } }, "destination": { "address": { "city": "Atlanta", "stateProvince": "GA", "postalCode": "30303", "country": "US" } }, "commodity": { "handlingUnits": [{ "count": 1, "type": "PT", "weight": 500, "weightUnit": "Pounds", "length": 48, "width": 40, "height": 48, "dimensionsUnit": "Inches", "lineItems": [{ "description": "Boxes of parts", "weight": 500, "pieces": 10, "packagingType": "BX", "classification": "70" }] }] }, "accessorials": { "codes": ["LGATE"] } }'

Use https://uat-cloudapi.estes-express.com with your test API key while developing. The test and production keys are different.

Integration notes

  • You need two API keys, one for test and one for production, created separately with the matching client ID and secret. Creating a key returns a new client secret that replaces the emailed one, so store it immediately.
  • Every call needs both the `Authorization: Bearer` token and the `apikey` header. Sending only the token fails.
  • Rate quote dates use YYYY-MM-DD and ship time uses HH:MM (24-hour). The eBOL requestedPickupDate uses full ISO 8601, and setting it does not schedule a pickup; you still need the Pickup API.
  • Weights are integers in pounds and dimensions are integers in inches. Many handling-unit fields (dimensions, tareWeight, packagingType, isStackable) only become required for time-critical, volume or exclusive-use service levels. Send them when you request ALL to get the most options back.
  • Class is required per line item for LTL and LTLTC quotes and must be one of the standard values (50 through 500). NMFC item and sub are optional.
  • Tracking accepts a PRO or one reference type (po, bol, pur, ldn, exl, interline-pro). Reference lookups can match other people's shipments, so set party-to=true to see only shipments your account is a party to. Non-payers get no charge data, and unauthorized callers get a redacted payload.
  • The Images API takes one document type per call and needs the 10-character PRO. Some types (such as invoices) require payer authorization, others only party-to; consignee-zipCode enables non-party access for the party-to types.
  • The API key is only for the new REST APIs. Estes' older legacy web services use a different scheme and are documented separately.

FAQ

Does Estes Express have a public API?

Yes. Estes publishes REST/JSON APIs for rate quotes, transit times, eBOL, pickups, tracking, document images and event subscriptions on its developer portal. You need a MyEstes login and an API key to call them.

How do I get an Estes API key?

Email Estes Web Support with your developer details to receive a client ID and secret for test and production. Then call POST /v1/api-key with those credentials in Basic auth to generate the key.

Can I track an Estes shipment by BOL or PO number through the API?

Yes. GET /v1/shipments/history accepts a PRO or a reference number such as po, bol, pur, ldn, exl or interline-pro. Use party-to=true to limit reference lookups to shipments your account is on.

How long does an Estes API bearer token last?

The documented sample token response shows an expires_in of about 36,000 seconds, roughly 10 hours. Read expires_in from each response rather than hard-coding it.

Can I download a delivery receipt (POD) from the Estes API?

Yes. Call GET /v1/search/images/dr with the PRO. You get image URLs by default and base64 data if you set include-image=true.

On FreightAPIs

Official resources

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

Other carrier API guides