Skip to main content
When you call calculateRates, TLDP fans out the request to every courier enabled on your account and returns a ranked list of quotes for the given route, weight, and service level. Each quote is a binding price that you can use directly to fulfil an order — no renegotiation happens at fulfilment time. This design lets you present accurate cost options to your customers or run automated courier selection logic without worrying about price drift.

Service Levels

Service levels control the speed tier of the delivery. Pass a service_level value when requesting quotes to filter results to a specific tier, or omit it to receive quotes across all available tiers at once.

Courier Tiers

Courier tier reflects the quality and reliability band of the assigned carrier. Use tiers to match your service promise to your customers’ expectations.

The Quote Object

Every item in the quotes array returned by calculateRates contains the following key fields:

Price Breakdown

The breakdown object on each quote gives you full transparency into how the total_price was calculated:
The quote_id returned in the rates response maps directly to the rate_quote_id field you supply when calling fulfilOrder or createShipment. Always use the exact quote_id string — do not reconstruct or modify it.

Fetching Quotes: TypeScript Example

Selecting and Using a Quote

Once you have the quote_id, pass it as rate_quote_id to lock in the price at fulfilment time:
Quotes expire at valid_until2 minutes after creation. If you attempt to fulfil with an expired quote_id, the API returns a 422 Unprocessable Entity error with code quote_expired. Call calculateRates again to obtain a fresh quote.

Discovering Delivery Zones

TLDP’s pricing uses a zone system to account for inter-regional routing costs. Use listZones to discover all available origin and destination zones before building your rate-fetching logic:
Pass zone_id values in your rates request instead of free-text city names when you need deterministic routing. Zone IDs are stable identifiers, whereas city-name matching uses fuzzy search that may resolve differently as coverage expands.

Comparing Quotes Across Tiers

Use the following pattern to group quotes by tier and surface the cheapest option in each: