Skip to content
Navo24 Navo24
POSTAPI key

Get a live quote

POSTapi.freightratesmcp.com/v1/rates/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

originstringrequired

UN/LOCODE (CNSHA), IATA code for air (PVG), or a city name.

destinationstringrequired

Same forms as origin.

transport_modestring

Sea (default), Air, Road or Rail. First level of the transport hierarchy.

shipping_typestring

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.

transport_unitstring

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.

container_typestring

Old field, alias of transport_unit for containers: 20ST, 40ST, 40HC, 45HC, 20RF, 40RF.

road_typestring

Old field, with shipping_type ROAD: FTL, LTL or FCL. Maps to transport_mode Road and that shipping_type.

rail_typestring

Old field, with shipping_type RAIL: FCL, LWL, FWL, FTL. Maps to transport_mode Rail and that shipping_type.

vehicle_typestring

Old field, alias of transport_unit for RoRo: TRUCK, TRAILER, LORRY, VAN, CAR, PLANT.

vehicle_length_mnumber

Sea-RoRo only. Default 16.5 for Truck, 13.6 for Trailer.

weight_kgnumber

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).

weight_mtnumber

Sea-Bulk only: cargo weight in metric tonnes (1 mt = 1000 kg). Wins over weight_kg when both are sent.

volume_cbmnumber

Total volume in m³. Required for Sea-LCL and Air-Aircargo.

piecesinteger

Pallets or packages for LCL, AIR and ROAD. Default 1.

shipment_datestring

Cargo ready date, YYYY-MM-DD. Default today.

rate_modestring

all (default): live and indicative quotes. live: bookable quotes only. freight_index: indicative only (indices, published tariffs, market estimates).

no_cacheboolean

true skips the 12 h cache and asks every source again. Do not send it on a repeat for pending quotes.

bulkboolean

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.

successboolean

false only together with error.

request_idstring

Quote this id when you write to support.

queryobject

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.

statusstring

Only on Air-ULD requests: not_priced_yet, with message, quotes_count 0 and an empty quotes list.

completeboolean

false while some sources are still searching. Repeat the identical request after retry_after_s.

pending_providers[]array

Present while complete is false.

retry_after_sinteger

Seconds to wait before the repeat. Present while complete is false.

quotes_countinteger

Number of quotes.

quotes[]object
carrierstring | null

Shipping line, airline, ferry line, rail or road operator. null when the seller does not name one (a forwarder rate, a market index).

modestring

Old mode code, kept for existing integrations: OCEAN_FCL, OCEAN_LCL, AIR, ROAD, RAIL, RORO or OCEAN_BULK.

transport_modestring

Sea, Air, Road or Rail. For a courier quote this follows the product, not the request.

shipping_typestring

FCL, LCL, Bulk, RoRo, Aircargo, FTL, LTL, LWL, FWL.

transport_unitstring | null

Container (40'hc), RoRo vehicle (Truck) or null for LCL, LTL, LWL, Bulk and Aircargo.

hierarchystring

The three levels joined with hyphens: Sea-FCL-40'hc, Road-LTL, Air-Aircargo.

mode_sourcestring

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).

mode_assumedboolean

Present and true only when mode_source is default.

volumetric_divisorinteger | null

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.

total_amountnumber

Price for the whole request: per container for FCL, for the whole cargo for LCL, air and road.

currencystring

ISO currency as quoted (USD, EUR, GBP). POINTS for a market index.

transit_daysnumber | null

Transit time as quoted.

departurestring | null

Sailing, flight or pickup date when the price is tied to one.

valid_from / valid_untilstring | null

Validity of the price.

includesstring

What the price covers and excludes (local charges, THC, customs, door delivery). Compare offers only on the same basis.

container_typestring

Old field. FCL: the container the price is for, as 20ST, 40HC and so on.

is_indicativeboolean

true for indices, published tariffs and estimates. Never bookable.

badgestring

live or indicative. Indicative quotes add badge_label and basis (index, tariff, estimate, statistics, fare), and price_low / price_high for a range.

booking_refstring

Pass to POST /v1/rates/book to get the booking contacts for this quote.

market_indices[]array

FCL: the market index level for the trade (value, previous, change_pct, date). A benchmark, not a price.

providers[]array

One status line per rate source asked, anonymised: status, quotes, took_ms, cached, cached_at, stale. See Source statuses below.

took_msinteger

Server time for the request.

Errors

A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.

invalid_request400

The body is not valid JSON.

missing_key401

No API key on the request.

invalid_key401

The key is not recognised.

insufficient_credits402

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.

missing_field422

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.

invalid_transport_mode422

transport_mode is not one of Sea, Air, Road, Rail.

invalid_shipping_type422

shipping_type is not valid for the transport_mode (see Transport hierarchy), or an old value outside FCL, LCL, BULK, RORO, ROAD, AIR, RAIL.

invalid_transport_unit422

transport_unit is not valid for the shipping_type, or is sent for a type without units (LCL, LTL, LWL, Bulk, Aircargo).

invalid_container_type422

container_type is not one of 20ST, 40ST, 40HC, 45HC, 20RF, 40RF.

invalid_road_type422

road_type is not one of FTL, LTL, FCL.

invalid_rail_type422

rail_type is not one of FCL, LWL, FWL, FTL.

invalid_vehicle_type422

vehicle_type is not one of TRUCK, TRAILER, LORRY, VAN, CAR, PLANT.

invalid_rate_mode422

rate_mode is not one of all, live, freight_index.

unknown_origin422

We cannot place the origin. Send a UN/LOCODE or IATA code.

unknown_destination422

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_modeshipping_typetransport_unitNotationOld request fields
SeaFCL20'st, 40'st, 40'hc, 45'hc, 20'rf, 40'rfSea-FCL-20'stshipping_type FCL + container_type 20ST
SeaLCLNoneSea-LCLshipping_type LCL
SeaBulkNone (weight in weight_mt)Sea-Bulkshipping_type BULK
SeaRoRoTruck, Trailer, Lorry, Van, Car, PlantSea-RoRo-Truckshipping_type RORO + vehicle_type TRUCK
AirAircargoNoneAir-Aircargoshipping_type AIR
AirULDAKE, PMC, PAGAir-ULD-AKENone. Not priced yet.
RoadFTLNoneRoad-FTLshipping_type ROAD + road_type FTL
RoadLTLNoneRoad-LTLshipping_type ROAD + road_type LTL
RoadFCL20'st, 40'st, 40'hcRoad-FCL-40'hcshipping_type ROAD + road_type FCL + container_type 40HC
RailFCL20'st, 40'st, 40'hc, 45'hc, 20'rf, 40'rfRail-FCL-40'hcshipping_type RAIL + rail_type FCL
RailLWLNoneRail-LWLshipping_type RAIL + rail_type LWL
RailFWL / FTL20'st, 40'st, 40'hcRail-FWL, Rail-FTLshipping_type RAIL + rail_type FWL or FTL

Shipping types

Every place in the hierarchy we price, the fields it needs and what comes back.

HierarchyWhat it isCargo fieldsWhat you get
Sea-FCL-20'st, Sea-FCL-40'hcOcean, full containertransport_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-LCLOcean, 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-BulkDry bulkweight_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-TrailerRoll-on/roll-off ferry freighttransport_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-AircargoAir freight and expressweight_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-PAGAir, unit load devicetransport_unit: AKE, PMC or PAG.Not priced yet. Accepted and answered with status: not_priced_yet and no quotes.
Road-FTLRoad, full truck loadweight_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-LTLRoad, groupage, pallets and road parcelsweight_kg, optional pieces. No transport_unit.Pallet, groupage and road parcel prices across Europe, Ukraine included.
Road-FCL-20'st, Road-FCL-40'hcContainer 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'hcRail, full containertransport_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-LWLRail, 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-FTLRail, full wagon or block trainAs Rail-FCL.Accepted. No live rates yet: the answer carries unsupported_mode instead of quotes.

Container units

transport_unitcontainer_type (old)Container
20'st20ST20 ft standard dry (20GP)
40'st40ST40 ft standard dry (40GP)
40'hc40HC40 ft high cube (40HQ)
45'hc45HC45 ft high cube
20'rf20RF20 ft reefer
40'rf40RF40 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.

ModeCarriers
Ocean FCLMaersk, 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 expressDHL Express, FedEx, UPS, Aramex. General air cargo quotes name the airline when the rate is airline-specific.
RoRo and ferryStena Line, DFDS Seaways, Irish Ferries
RailKTZ Express (Middle Corridor and China to Central Asia)
RoadEuropean 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[].

statusMeaning
okAnswered with prices. With cached: true and cached_at when served from the 12 h cache.
no_ratesAnswered, but has nothing on this lane or cargo.
pendingStill searching. Repeat the identical request after retry_after_s.
errorFailed and we hold no earlier answer for this request.
unsupported_modeDoes not price this transport_mode, shipping_type or transport_unit.
unsupported_containerDoes not price this container type.
skipped_bulkNot asked because the request is a sweep (bulk: true or auto-detected). A cached answer is used when one exists.
skipped_quotaNot asked to protect a daily request quota. A cached answer is used when one exists.
pausedTemporarily 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"}'
Response
{
  "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
}