Get a live quote
Live and indicative prices for one origin and destination, across the transport hierarchy transport_mode, shipping_type, transport_unit: Sea-FCL, Sea-LCL, Sea-Bulk, Sea-RoRo, Air-Aircargo, Road-FTL, Road-LTL, Road-FCL and Rail. One call asks every rate source that serves the shipping type, in parallel, and returns one ranked list. Each quote names the carrier when the rate is carrier-specific, gives the price, currency, validity, transit time and what the price covers.
Request body
UN/LOCODE (CNSHA), IATA code for air (PVG), or a city name.
Same forms as origin.
Sea (default), Air, Road or Rail. First level of the transport hierarchy.
Second level. Sea: FCL (default), LCL, Bulk, RoRo. Air: Aircargo (default), ULD (not priced yet). Road: FTL, LTL, FCL (default FTL above 12 t, LTL below). Rail: FCL, LWL, FWL, FTL. Old values AIR, ROAD, RAIL, RORO, BULK still work and set transport_mode for you.
Third level. FCL: a container, 20'st (default), 40'st, 40'hc, 45'hc, 20'rf, 40'rf (20ST, 40HC and so on also work). RoRo: Truck (default), Trailer, Lorry, Van, Car, Plant. ULD: AKE, PMC, PAG. Not sent for LCL, LTL, LWL, Bulk or Aircargo.
Old field, alias of transport_unit for containers: 20ST, 40ST, 40HC, 45HC, 20RF, 40RF.
Old field, with shipping_type ROAD: FTL, LTL or FCL. Maps to transport_mode Road and that shipping_type.
Old field, with shipping_type RAIL: FCL, LWL, FWL, FTL. Maps to transport_mode Rail and that shipping_type.
Old field, alias of transport_unit for RoRo: TRUCK, TRAILER, LORRY, VAN, CAR, PLANT.
Sea-RoRo only. Default 16.5 for Truck, 13.6 for Trailer.
Gross weight in kg. Required for Sea-LCL, Air-Aircargo, Road-FTL, Road-LTL and rail part loads. For Sea-Bulk it is accepted and converted to weight_mt (divided by 1000).
Sea-Bulk only: cargo weight in metric tonnes (1 mt = 1000 kg). Wins over weight_kg when both are sent.
Total volume in m³. Required for Sea-LCL and Air-Aircargo.
Pallets or packages for LCL, AIR and ROAD. Default 1.
Cargo ready date, YYYY-MM-DD. Default today.
all (default): live and indicative quotes. live: bookable quotes only. freight_index: indicative only (indices, published tariffs, market estimates).
true skips the 12 h cache and asks every source again. Do not send it on a repeat for pending quotes.
Set true for sweeps and any automated run over many lanes. See Sweeps below.
Response schema
30 fields
Nested exactly as the JSON is. Open a branch to read its fields; hover a name for the full dot-path.
false only together with error.
Quote this id when you write to support.
Your request as we resolved it: origin and destination as codes, transport_mode, shipping_type, transport_unit, hierarchy, weight (weight_mt for Sea-Bulk), date. The old field names (container_type, road_type, rail_type, vehicle_type) are echoed too.
Only on Air-ULD requests: not_priced_yet, with message, quotes_count 0 and an empty quotes list.
false while some sources are still searching. Repeat the identical request after retry_after_s.
Present while complete is false.
Seconds to wait before the repeat. Present while complete is false.
Number of quotes.
quotes[]
Shipping line, airline, ferry line, rail or road operator. null when the seller does not name one (a forwarder rate, a market index).
Old mode code, kept for existing integrations: OCEAN_FCL, OCEAN_LCL, AIR, ROAD, RAIL, RORO or OCEAN_BULK.
Sea, Air, Road or Rail. For a courier quote this follows the product, not the request.
FCL, LCL, Bulk, RoRo, Aircargo, FTL, LTL, LWL, FWL.
Container (40'hc), RoRo vehicle (Truck) or null for LCL, LTL, LWL, Bulk and Aircargo.
The three levels joined with hyphens: Sea-FCL-40'hc, Road-LTL, Air-Aircargo.
request: the quote is in the hierarchy you asked for. product: a courier quote placed by its product. default: the provider does not say how the product moves, so we place it in Road (mode_assumed: true).
Present and true only when mode_source is default.
Divisor for volumetric weight (L x W x H in cm, divided by it, gives kg): 5000 for courier products, 6000 for air cargo, null where volumetric weight does not apply.
Price for the whole request: per container for FCL, for the whole cargo for LCL, air and road.
ISO currency as quoted (USD, EUR, GBP). POINTS for a market index.
Transit time as quoted.
Sailing, flight or pickup date when the price is tied to one.
Validity of the price.
What the price covers and excludes (local charges, THC, customs, door delivery). Compare offers only on the same basis.
Old field. FCL: the container the price is for, as 20ST, 40HC and so on.
true for indices, published tariffs and estimates. Never bookable.
live or indicative. Indicative quotes add badge_label and basis (index, tariff, estimate, statistics, fare), and price_low / price_high for a range.
Pass to POST /v1/rates/book to get the booking contacts for this quote.
FCL: the market index level for the trade (value, previous, change_pct, date). A benchmark, not a price.
One status line per rate source asked, anonymised: status, quotes, took_ms, cached, cached_at, stale. See Source statuses below.
Server time for the request.
Errors
A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.
The body is not valid JSON.
No API key on the request.
The key is not recognised.
MCP calls on Navo Tokens only: your balance cannot pay for this port pair (100 tokens, or 10 to repeat it within 24 hours). Nothing is charged and no quote is returned. Besides code and message, the error carries credits_required, credits_balance, top_up_url and packages (see Navo Tokens on the FreightRatesMCP reference page). A REST call on your API key never meets this.
origin or destination is missing, weight_kg is missing for Sea-LCL, Air-Aircargo, Road or Rail part loads, or weight_mt (or weight_kg) is missing for Sea-Bulk.
transport_mode is not one of Sea, Air, Road, Rail.
shipping_type is not valid for the transport_mode (see Transport hierarchy), or an old value outside FCL, LCL, BULK, RORO, ROAD, AIR, RAIL.
transport_unit is not valid for the shipping_type, or is sent for a type without units (LCL, LTL, LWL, Bulk, Aircargo).
container_type is not one of 20ST, 40ST, 40HC, 45HC, 20RF, 40RF.
road_type is not one of FTL, LTL, FCL.
rail_type is not one of FCL, LWL, FWL, FTL.
vehicle_type is not one of TRUCK, TRAILER, LORRY, VAN, CAR, PLANT.
rate_mode is not one of all, live, freight_index.
We cannot place the origin. Send a UN/LOCODE or IATA code.
We cannot place the destination. Send a UN/LOCODE or IATA code.
Transport hierarchy
Every quote request and every quote sits in one hierarchy: transport_mode (Sea, Air, Road, Rail), then shipping_type, then transport_unit (a container, a RoRo vehicle or an air ULD). LCL, LTL, LWL, Bulk and Aircargo have no transport_unit. The docs write a level path with hyphens: Sea-FCL-20'st, Sea-FCL, Road-FCL, Road-LTL, Air-Aircargo, Air-ULD-AKE, Sea-RoRo-Truck. Air-ULD (AKE, PMC, PAG) is not priced yet. Dry bulk weight is weight_mt, in metric tonnes. Old requests keep working: shipping_type AIR, ROAD, RAIL, RORO and BULK, road_type, rail_type, container_type and vehicle_type are mapped to the new fields. See the Transport hierarchy table below.
Couriers
Couriers are not a separate transport_mode or shipping_type. Each courier quote is placed by its product, not by the courier name: express and air products (DHL Express, UPS, FedEx, Aramex, air parcel services) are Air-Aircargo, economy road products and road parcels (for example DHL Freight) are Road-LTL. So an Air request can return a Road-LTL courier quote and the other way round; check transport_mode on each quote. When the provider does not say how a product moves (Nova Poshta), we place it in Road and mark it mode_source: default, mode_assumed: true.
Volumetric weight
Each quote carries volumetric_divisor: 5000 for courier products, 6000 for air cargo, null where it does not apply. Volumetric weight in kg is length x width x height in cm divided by it. The price is charged on the greater of actual and volumetric weight.
Dry bulk weight
Sea-Bulk takes weight_mt, the cargo weight in metric tonnes. weight_kg is still accepted and converted to weight_mt (divided by 1000). The query echo shows weight_mt.
Air-ULD: not priced yet
Air-ULD-AKE, Air-ULD-PMC and Air-ULD-PAG are part of the hierarchy but not priced yet. Such a request is accepted and answered with status: not_priced_yet, a message and an empty quotes list, not an error. Send Air-Aircargo with weight_kg and volume_cbm for a price now.
Response time and pending quotes
Road, rail, RoRo and bulk usually answer in 1 to 6 s, complete. Ocean and air answer in about 12 s with every source that finished by then; slower marketplaces come back as pending with retry_after_s. Repeat the identical body after retry_after_s: the repeat is served from cache in about 1 s and holds the earlier quotes plus the late ones. Stop when complete is true, two repeats are enough in practice.
Cache
Answers are cached for 12 hours per exact request (lane, mode, container or weight and volume, date). Cached lines carry cached: true and cached_at. Send no_cache: true for a fresh search.
Stale results
When a source fails, we return its last good answer for the same request if it is under 72 hours old, marked stale: true with cached_at. Show that date next to the price.
Sweeps
Send bulk: true for automated runs over many lanes. A key that sends more than 30 requests in 10 minutes without it is treated as a sweep. In a sweep, sources with a daily quota answer from cache only (skipped_bulk), the rest run as usual.
Live and indicative
Live quotes are prices you can book with the seller. Indicative quotes (indices, published tariffs, market estimates) show the market level and are never bookable. Filter with rate_mode.
Transport hierarchy
transport_mode, then shipping_type, then transport_unit. Air-ULD is not priced yet. The last column is the old request that maps to the same place.
| transport_mode | shipping_type | transport_unit | Notation | Old request fields |
|---|---|---|---|---|
| Sea | FCL | 20'st, 40'st, 40'hc, 45'hc, 20'rf, 40'rf | Sea-FCL-20'st | shipping_type FCL + container_type 20ST |
| Sea | LCL | None | Sea-LCL | shipping_type LCL |
| Sea | Bulk | None (weight in weight_mt) | Sea-Bulk | shipping_type BULK |
| Sea | RoRo | Truck, Trailer, Lorry, Van, Car, Plant | Sea-RoRo-Truck | shipping_type RORO + vehicle_type TRUCK |
| Air | Aircargo | None | Air-Aircargo | shipping_type AIR |
| Air | ULD | AKE, PMC, PAG | Air-ULD-AKE | None. Not priced yet. |
| Road | FTL | None | Road-FTL | shipping_type ROAD + road_type FTL |
| Road | LTL | None | Road-LTL | shipping_type ROAD + road_type LTL |
| Road | FCL | 20'st, 40'st, 40'hc | Road-FCL-40'hc | shipping_type ROAD + road_type FCL + container_type 40HC |
| Rail | FCL | 20'st, 40'st, 40'hc, 45'hc, 20'rf, 40'rf | Rail-FCL-40'hc | shipping_type RAIL + rail_type FCL |
| Rail | LWL | None | Rail-LWL | shipping_type RAIL + rail_type LWL |
| Rail | FWL / FTL | 20'st, 40'st, 40'hc | Rail-FWL, Rail-FTL | shipping_type RAIL + rail_type FWL or FTL |
Shipping types
Every place in the hierarchy we price, the fields it needs and what comes back.
| Hierarchy | What it is | Cargo fields | What you get |
|---|---|---|---|
| Sea-FCL-20'st, Sea-FCL-40'hc | Ocean, full container | transport_unit: 20'st, 40'st, 40'hc, 45'hc, 20'rf, 40'rf (default 20'st). | Live spot rates from shipping lines and forwarders, plus published line tariffs. Port to port, worldwide. |
| Sea-LCL | Ocean, part load (consolidated) | weight_kg and volume_cbm, optional pieces. No transport_unit. | Live consolidation rates, port to port, priced on your weight and volume. |
| Sea-Bulk | Dry bulk | weight_mt (cargo weight in metric tonnes). weight_kg is still accepted and divided by 1000. No transport_unit. | Indicative only: dry-bulk market indices by ship size (Capesize, Panamax, Supramax, Handysize). Use it as a market level, not a charter quote. |
| Sea-RoRo-Truck, Sea-RoRo-Trailer | Roll-on/roll-off ferry freight | transport_unit: Truck (accompanied, default 16.5 m), Trailer (unaccompanied, default 13.6 m), Lorry, Van, Car, Plant. Optional vehicle_length_m. | Ferry freight on North Sea, Baltic, Irish Sea and Channel routes, plus vehicle shipping on deep-sea RoRo lanes. |
| Air-Aircargo | Air freight and express | weight_kg and volume_cbm. Origin and destination as IATA codes (PVG, FRA) or cities. No transport_unit. | Airport to airport general cargo, plus express courier products for small shipments. |
| Air-ULD-AKE, Air-ULD-PMC, Air-ULD-PAG | Air, unit load device | transport_unit: AKE, PMC or PAG. | Not priced yet. Accepted and answered with status: not_priced_yet and no quotes. |
| Road-FTL | Road, full truck load | weight_kg, optional pieces (euro pallets). UN/LOCODE cities (DEBER, PLWAW). | Live prices from European road hauliers, the haulier named on each quote. FTL is the default above 12 t. |
| Road-LTL | Road, groupage, pallets and road parcels | weight_kg, optional pieces. No transport_unit. | Pallet, groupage and road parcel prices across Europe, Ukraine included. |
| Road-FCL-20'st, Road-FCL-40'hc | Container trucking (drayage) | transport_unit 20'st, 40'st or 40'hc. | Price to truck a full container between a port or terminal and a city. |
| Rail-FCL-40'hc | Rail, full container | transport_unit: a container. | China to the Caucasus, Turkey and Central Asia over the Middle Corridor (Khorgos to Poti, Batumi, Baku, Tashkent). Routes through Russia or Belarus are never returned. |
| Rail-LWL | Rail, part load (less than wagon) | weight_kg and volume_cbm. No transport_unit. | China to Europe rail groupage, door delivery and customs clearance where the quote says so. |
| Rail-FWL, Rail-FTL | Rail, full wagon or block train | As Rail-FCL. | Accepted. No live rates yet: the answer carries unsupported_mode instead of quotes. |
Container units
| transport_unit | container_type (old) | Container |
|---|---|---|
| 20'st | 20ST | 20 ft standard dry (20GP) |
| 40'st | 40ST | 40 ft standard dry (40GP) |
| 40'hc | 40HC | 40 ft high cube (40HQ) |
| 45'hc | 45HC | 45 ft high cube |
| 20'rf | 20RF | 20 ft reefer |
| 40'rf | 40RF | 40 ft reefer |
Carriers in our quotes
Carriers named in the carrier field of our quotes and sailing cards. This is not a closed list: these are the carriers we name directly, and every other carrier is covered through forwarders. Forwarder rates that do not name the line come back with carrier: null.
| Mode | Carriers |
|---|---|
| Ocean FCL | Maersk, MSC, CMA CGM, COSCO, OOCL, Hapag-Lloyd, ONE, Evergreen, HMM, Yang Ming, ZIM, Wan Hai, PIL, SM Line, TS Lines, SITC, RCL, Gold Star Line, Interasia Lines, MCC Transport, CNC Line, China United Lines, Emirates Shipping Line, Shipping Corporation of India, Sinotrans, Zhonggu Logistics, Unifeeder, Matson |
| Air and express | DHL Express, FedEx, UPS, Aramex. General air cargo quotes name the airline when the rate is airline-specific. |
| RoRo and ferry | Stena Line, DFDS Seaways, Irish Ferries |
| Rail | KTZ Express (Middle Corridor and China to Central Asia) |
| Road | European road hauliers and parcel networks, named on each quote (for example LOGMACO, FME Frachtmanagement Europa, Courierheld), and Nova Poshta for Ukraine. |
Source statuses
The status of each line in providers[].
| status | Meaning |
|---|---|
| ok | Answered with prices. With cached: true and cached_at when served from the 12 h cache. |
| no_rates | Answered, but has nothing on this lane or cargo. |
| pending | Still searching. Repeat the identical request after retry_after_s. |
| error | Failed and we hold no earlier answer for this request. |
| unsupported_mode | Does not price this transport_mode, shipping_type or transport_unit. |
| unsupported_container | Does not price this container type. |
| skipped_bulk | Not asked because the request is a sweep (bulk: true or auto-detected). A cached answer is used when one exists. |
| skipped_quota | Not asked to protect a daily request quota. A cached answer is used when one exists. |
| paused | Temporarily switched off on our side. No quotes, no error. |
curl -X POST 'https://api.freightratesmcp.com/v1/rates/quote' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"origin":"CNSHA","destination":"NLRTM","transport_mode":"Sea","shipping_type":"FCL","transport_unit":"40'hc"}'const res = await fetch("https://api.freightratesmcp.com/v1/rates/quote", {
method: "POST",
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
"origin": "CNSHA",
"destination": "NLRTM",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc"
})
});
const data = await res.json();import requests
res = requests.post(
"https://api.freightratesmcp.com/v1/rates/quote",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
json={
"origin": "CNSHA",
"destination": "NLRTM",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc"
},
)
data = res.json(){
"success": true,
"request_id": "req_7d2e41c0b9",
"query": {
"origin": "CNSHA",
"destination": "NLRTM",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc",
"hierarchy": "Sea-FCL-40'hc",
"container_type": "40HC",
"shipment_date": null
},
"rate_mode": "all",
"complete": true,
"quotes_count": 32,
"quotes": [
{
"provider": "navo24",
"provider_id": "navo24",
"carrier": "Hapag-Lloyd",
"mode": "OCEAN_FCL",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc",
"hierarchy": "Sea-FCL-40'hc",
"mode_source": "request",
"volumetric_divisor": null,
"total_amount": 3535,
"currency": "USD",
"transit_days": 41,
"valid_from": "2026-10-08",
"valid_until": "2026-11-01",
"departure": "2026-11-01",
"is_indicative": false,
"includes": "Ocean freight (spot) direct, vessel SINGAPORE EXPRESS 644W, origin terminal fees extra (USD 250)",
"booking_ref": "nr_5d4f00fa07c41e2",
"container_type": "40HC",
"badge": "live"
},
{
"provider": "navo24",
"provider_id": "navo24",
"carrier": "CMA CGM",
"mode": "OCEAN_FCL",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc",
"hierarchy": "Sea-FCL-40'hc",
"mode_source": "request",
"volumetric_divisor": null,
"total_amount": 3550,
"currency": "USD",
"transit_days": 49,
"departure": "2026-10-30 06:00:00",
"valid_from": "2026-10-15",
"valid_until": "2026-10-29",
"is_indicative": false,
"includes": "1x 40HC, port-to-port CNSHA -> NLRTM, ocean freight service FAL8, direct; local charges (THC, DOC etc.) not included",
"booking_ref": "nr_95af9bb4b7c41e2",
"container_type": "40HC",
"badge": "live"
},
{
"provider": "navo24",
"provider_id": "navo24",
"carrier": null,
"mode": "OCEAN_FCL",
"transport_mode": "Sea",
"shipping_type": "FCL",
"transport_unit": "40'hc",
"hierarchy": "Sea-FCL-40'hc",
"mode_source": "request",
"volumetric_divisor": null,
"total_amount": 3300,
"currency": "USD",
"transit_days": 35,
"departure": null,
"valid_from": null,
"valid_until": null,
"is_indicative": true,
"includes": "1x 40HC, port-to-port Shanghai -> Rotterdam; ocean 3200 + origin handling/doc 100 USD; excl. customs, origin/destination THC, insurance",
"booking_ref": "nr_d8eb0d4067c41e2",
"badge": "indicative",
"basis": "tariff",
"container_type": "40HC",
"badge_label": "Indicative / approximation"
}
],
"market_indices": [
{
"provider": "navo24",
"provider_id": "navo24",
"is_indicative": true,
"applies_to": "China export market (composite)",
"date": "2026-10-16",
"unit": "points",
"value": 3679.58,
"previous": 3664.11,
"change_pct": 0.42,
"note": "Market index, not a bookable price. Public feed gives the composite only."
}
],
"providers": [
{
"provider": "navo24",
"provider_id": "navo24",
"status": "ok",
"quotes": 10,
"cached": true,
"cached_at": "2026-10-20T20:53:35.597Z"
},
{
"provider": "navo24",
"provider_id": "navo24",
"status": "no_rates",
"quotes": 0
},
{
"provider": "navo24",
"provider_id": "navo24",
"status": "pending",
"retry_after_s": 25
}
],
"took_ms": 3927
}