Carrier’s official API

Echo Global Logistics API: integration guide

Echo Global Logistics is a freight broker and 3PL, so its API rates and books freight across many carriers rather than one fleet. Echo publishes two JSON APIs: the REST API V2 (LTL rating, LTL/TL/PL shipment creation, status, tracking, documents and costs) and a separate Customer API used for truckload (TL) quotes. It is aimed at shippers and TMS vendors that already have an Echo customer account.

This guide covers Echo Global Logistics’s own API (restapi.echo.com). Credentials come from Echo Global Logistics, 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/JSONEndpoints 17Reviewed 2026-10-09Open in ChatGPT↗Open in Claude↗

At a glance

CarrierEcho Global Logistics
TypeTruckload & LTL broker
InterfaceREST/JSON
AuthenticationHTTP Basic (REST API V2) and OAuth 2.0 Bearer token (Customer API for TL quotes)
CapabilitiesLTL rate quote and transit time, Truckload (TL) quote, Shipment booking (LTL, TL, PL), Status and tracking, Documents (BOL, POD, invoice), Shipment costs, Health check

Getting access

  • You need an active Echo customer account with established credit. The rating and booking rules in the docs reject requests from accounts that are inactive or lack credit.
  • REST API V2 credentials (a UserName, which Echo calls your ENumber, plus a REST APIKey) are issued by Echo. There is no self-service signup in the documentation; ask your Echo account representative.
  • The TL quote Customer API uses a separate pair of credentials (client_id and client_secret), also issued by Echo.
  • Carrier pricing must be set up on your account before LTL shipments can be booked.
  • The documentation does not mention fees, a sandbox, or a formal approval process. Only production servers are listed.

Authentication

HTTP Basic (REST API V2) and OAuth 2.0 Bearer token (Customer API for TL quotes).

  • REST API V2: build the string UserName:APIKey, Base64-encode it, and send it as Authorization: Basic <encoded>. Every call needs this header.
  • Customer API (TL quotes): exchange your client_id and client_secret for an OAuth 2.0 Bearer token, then send Authorization: Bearer <token> on each request. The spec also lists Basic auth with client_id/client_secret as a supported strategy.
  • Echo's spec says an access token stays valid for 10 hours; reuse it until it expires. An expired or invalid token returns HTTP 401. Read expires_in from the token response rather than hard-coding the lifetime.
  • Requesting new tokens several times an hour may be rate limited. The Customer API also asks callers to stay under 3 requests per second.
  • Optional Customer API headers: X-Echo-Channel-Id (defaults to API if missing or invalid) and X-Echo-System-Id (Echo's product team supplies acceptable values).

Environments

REST API V2 (production)https://restapi.echo.com
Customer API for TL quotes (production)https://customerapi.echo.com

Endpoints

LTL rate quote and transit time

Send origin and destination postal codes, a pickup date and weight/class lines to get carrier rates with transit days, guarantee options and terminal details. A summary variant returns only carrier, transit, guarantee and total charge.

POST/v2/ratesReturn full LTL carrier rates with charge breakdown, transit days and origin/destination terminal details.
POST/v2/rates/summaryReturn a condensed list of LTL rates (carrier, transit days, guarantee, total charge, expiration).
Key inputsOriginPostalCode, OriginCountryCode (US | CA)DestinationPostalCode, DestinationCountryCode (US | CA)PickUpDate (MM/dd/yyyy)UnitOfWeight (LB | KG)Items[] (NmfcClass, Weight), 1 to 200 itemsOriginAccessorials / DestinationAccessorials (e.g. LIFTGATEREQUIRED, INSIDEDELIVERY, RESIDENTIALDELIVERY, APPOINTMENTFEE)OriginType / DestinationType (BUSINESS, RESIDENTIAL, CONSTRUCTIONSITE, TRADESHOW)Filters: Take, SCAC (up to 10, comma-delimited), TransitDays, Guarantee, CarrierName
Key outputsRates[] CarrierName, CarrierSCAC, CarrierTransitDays, CarrierGuaranteeTotalCharge, BaseCharge, MinimumCharge, FuelSurcharge, AccessorialCharge, DiscountAccessorials[] (Type, Rate, Charge), GuaranteedDeliverySurchargeOriginTerminal* and DestinationTerminal* address, contact and phoneExpirationDate

Truckload (TL) quote

The Customer API creates truckload quotes from a list of pick and drop stops and an equipment type, and returns priced service options with transit days and mileage. A quote can be read back later by id.

POST/v2/quotesCreate a TL quote and return its service options (Customer API).
GET/v2/quotes/{id}Retrieve an existing TL quote (Customer API).
Key inputsmodes (tl)stops[] (stopNumber, stopType pick | drop, addressLines, city, stateOrProvince, postalCode, country, serviceWindow.startDate yyyy-MM-dd)equipment (van_dry_53, reefer_53, flatbed_48)isHazmatreferenceNumbers[] (purchase_order, bill_of_lading, order)
Key outputsquote.quoteId, quoteKey, quoteNumber, status (pending | open)quote.expirationDate (RFC 3339)serviceOptions[] (serviceOptionId, totalCost, transitTimeInDays, totalMileage, pickupDate)charges[] (rateCode line_haul | fuel, rate, amount)

Shipment booking (LTL, TL, PL)

Create a shipment in Echo's system and get back an Echo ShipmentId (the "Echo Load ID"). LTL uses an Origin and Destination object; TL and PL use a Stops array, with each item tied to a pick and drop stop.

POST/v2/shipments/LTLCreate an LTL shipment, optionally from a QuoteId or a preferred CarrierSCAC.
POST/v2/shipments/TLCreate a truckload shipment with stops, equipment type and equipment accessorials.
POST/v2/shipments/PLCreate a PL-mode shipment (same stop-based structure as TL).
Key inputsOrigin / Destination (LTL) or Stops[] with StopType PICK | DROP and StopNumber (TL/PL)LocationType, LocationName, AddressLine1, City, StateProvince, PostalCode, CountryCodeAppointmentDate, AppointmentStart / AppointmentEnd (hh:mm)Items[] (Description, NmfcClass, Weight, PackageType, HandlingUnitType, HandlingUnitQuantity, HazardousMaterial)BolNumber (2 to 40 characters), PoNumber, ProNumber, References[]CarrierSCAC, CarrierGuarantee, QuoteId (LTL)EquipmentTypes, EquipmentAccessorials, EquipmentTarps, EquipmentMinTemp / EquipmentMaxTemp (TL)
Key outputsShipmentIdShipmentModeResponseStatus (null on success)

Status and tracking

Look up current status by Echo ShipmentId, up to 25 shipments at once, or pull the full list of tracking activities. Two query endpoints let you find shipments by BOL, PO, PRO, order number or custom references.

GET/v2/shipments/{Id}/statusReturn the current status, carrier and key dates for one shipment.
GET/v2/shipments/statusesReturn statuses for a comma-separated list of up to 25 shipment ids (?id=1,2,3).
GET/v2/shipments/{Id}/trackingReturn the tracking activities (city, state, type, note, timestamp) for a shipment.
GET/v2/shipments/{Id}Return a shipment record.
POST/v2/query/shipmentsSearch shipments by EchoShipmentId, BolNumber, PoNumber, ProNumber, OrderNumber or References and return summaries.
POST/v2/query/shipmentdetailReturn full shipment detail, optionally with activities (IncludeActivities) and documents (IncludeDocuments).
Key inputsId (8-digit Echo ShipmentId)id (comma-separated list, max 25)BolNumber, PoNumber, ProNumber, References[] for queries
Key outputsShipmentStatus, CarrierName, BolNumberRequestedPickUpDate, RequestedDeliveryDate, EstimatedDeliveryDate, PickUpDate, DeliveryDateActivities[] (City, StateProvince, Type, Note, TimeStamp)

Documents (BOL, POD, invoice)

List the documents Echo holds for a shipment, then download one as a raw byte stream. Each list entry includes an Href you can call directly.

GET/v2/shipments/{Id}/documentsList available documents for a shipment with Type, Description and Href.
GET/v2/shipments/{Id}/documentDownload one document as raw bytes, selected by the type and format query parameters.
Key inputsIdtype (document type, e.g. BOL or POD)format (file format, e.g. pdf)LabelName (optional template name)
Key outputsDocuments[] (Id, Type, Description, Href)Raw document bytes

Shipment costs

Fetch the total cost and line-item charges billed on a shipment. The docs note that costs may only be available once the shipment is in BOOKED status or later.

GET/v2/shipments/{Id}/costsReturn TotalCost and a list of cost lines for a shipment.
Key outputsTotalCostCosts[] (Description, Amount, Rate, Units)

Health check

A ping call confirms the service is up and that your Basic credentials are accepted.

GET/v2/pingReturn the UTC time the request was received if the service and auth are working.

Example request

LTL rate request (REST API V2)bash
curl -X POST "https://restapi.echo.com/v2/rates" \ -H "Authorization: Basic $(printf 'YOUR_USERNAME:YOUR_API_KEY' | base64)" \ -H "Content-Type: application/json" \ -d '{ "OriginPostalCode": "60601", "OriginCountryCode": "US", "OriginType": "BUSINESS", "DestinationPostalCode": "30303", "DestinationCountryCode": "US", "DestinationType": "RESIDENTIAL", "DestinationAccessorials": "LIFTGATEREQUIRED", "PickUpDate": "10/15/2026", "UnitOfWeight": "LB", "Items": [ { "NmfcClass": "70", "Weight": 1200 } ], "Take": 5 }'

On success ResponseStatus is null and Rates[] holds one entry per carrier. On failure ResponseStatus carries ErrorCode, Message and an Errors[] array with the failing FieldName.

Integration notes

  • Dates use different formats per API: the REST API wants MM/dd/yyyy for PickUpDate, while the TL Customer API uses yyyy-MM-dd for service windows and RFC 3339 for quote timestamps.
  • Every follow-up call (status, tracking, documents, costs) is keyed on the Echo ShipmentId returned by shipment creation, an 8-digit number. Store it. To find a shipment by BOL, PO or PRO instead, use POST /v2/query/shipments.
  • If you send an accessorial that is not allowed for the chosen location type, Echo silently drops it. No error is returned, so compare the accessorials in the response with what you sent.
  • Addresses are validated by a third-party service and P.O. boxes are rejected for both pickup and delivery. State or province must be a valid two-letter code that matches the postal code.
  • TL bookings have equipment rules: flatbed-type equipment (FLATBED48, STEPDECK53, LOWBOY and others) needs TARPS in EquipmentAccessorials, and reefer equipment needs TEMPERATUREREQUIREMENTS plus EquipmentMinTemp and EquipmentMaxTemp in Fahrenheit.
  • Limits: 1 to 200 items per request, special instructions up to 140 characters, BolNumber 2 to 40 characters, and at most 25 ids on /v2/shipments/statuses (extra ids are listed in Message and not evaluated).
  • Documents only come back once they are loaded in Echo's system, so a POD will not exist until after delivery. Call the documents list first, then download.
  • Update and cancel are not part of the V2 REST paths. The docs describe separate update/cancel services on a different Echo host that match your request to the load by the original BolNumber and expect the same body as the create call. Confirm the endpoint with Echo before relying on it.

FAQ

Does Echo Global Logistics have an API?

Yes. Echo publishes a JSON REST API V2 for LTL rating, shipment booking, status, tracking, documents and costs, plus a separate Customer API for truckload quotes.

How do I get Echo API credentials?

Echo issues them to customers with an active account and established credit. Ask your Echo representative for a REST UserName and APIKey, and for client_id/client_secret if you need TL quotes.

How does Echo API authentication work?

The REST API V2 uses HTTP Basic auth with Base64 of UserName:APIKey. The TL quote Customer API uses an OAuth 2.0 Bearer token obtained with your client_id and client_secret.

Can I get a POD or BOL from the Echo API?

Yes. List documents with GET /v2/shipments/{Id}/documents, then download one with GET /v2/shipments/{Id}/document using the type and format parameters. A POD is available only after it has been loaded into Echo's system.

Can I track an Echo shipment by PRO or BOL number?

Tracking calls take the Echo ShipmentId. If you only have a BOL, PO or PRO number, look the shipment up first with POST /v2/query/shipments.

On FreightAPIs

Official resources

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

Other carrier API guides