Compare every line at a port
Free days and tiers of every line that published a tariff for the port and container type, longest free time first, plus the average of the market.
Query parameters
Port UN/LOCODE, like NLRTM. Find it with /ports.
Container type: 20GP, 40GP, 40HC, 20RF, 40RF, 40RH, 20OT, 40OT, 20FR, 40FR, 20TK, 45HC. Default 40GP.
import (default) or export.
Response schema
50 fields
Derived from the example response, nested as the JSON is.
data
The payload. Everything an endpoint returns sits under this key.
port
Port UN/LOCODE.
Event or status code.
Human-readable name.
Latitude.
Longitude.
Container ISO size-type, for example 40HC.
import or export.
rows[]
carrier
Carrier name, falling back to the SCAC when we hold no name.
Human-readable name.
combined_dd
exact when the line published a tariff for this port or country; none when it did not; estimate on a market average.
Days free of charge before the first tier starts.
Daily charge after free time: from and to are day numbers, rate is per container per day. to null means every day after.
tiers[]
ISO currency code.
port when the tariff names this port, country when it applies country-wide.
average
demurrage
exact when the line published a tariff for this port or country; none when it did not; estimate on a market average.
Days free of charge before the first tier starts.
Carriers, ranked.
One sentence of provenance in plain language.
detention
exact when the line published a tariff for this port or country; none when it did not; estimate on a market average.
Days free of charge before the first tier starts.
Carriers, ranked.
One sentence of provenance in plain language.
Date the tariff data was read, YYYY-MM-DD.
Errors
A failure carries { "error": { "code", "message" } } with the HTTP status. Branch on the code, and log the message.
The key is unknown or revoked.
port is not a UN/LOCODE.
More than 8 comparisons in one minute.
curl 'https://api.navo24.com/v1/dd/compare?port=NLRTM&type=40HC&dir=import' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://api.navo24.com/v1/dd/compare?port=NLRTM&type=40HC&dir=import", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://api.navo24.com/v1/dd/compare?port=NLRTM&type=40HC&dir=import",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
)
data = res.json(){
"data": {
"port": {
"code": "NLRTM",
"name": "Rotterdam",
"cc": "NL",
"lat": 51.9225,
"lng": 4.47917,
"tz": "Europe/Amsterdam"
},
"type": "40HC",
"direction": "import",
"rows": [
{
"carrier": {
"scac": "COSU",
"name": "COSCO",
"slug": "cosco",
"logo": "/carriers/logos/cosco.png"
},
"demurrage": null,
"detention": null,
"combined_dd": {
"source": "exact",
"free_days": 8,
"tiers": [
{
"from": 1,
"to": 8,
"rate": 0.0
},
{
"from": 9,
"to": 13,
"rate": 55.0
},
{
"from": 14,
"to": null,
"rate": 86.0
}
],
"currency": "EUR",
"matched_on": "country"
}
}
],
"average": {
"demurrage": {
"source": "estimate",
"free_days": 3.75,
"avg": 3.88,
"min": 3,
"max": 5,
"carriers": [
"HLXU",
"MAEU",
"ONEY",
"YMLU"
],
"carrier_count": 4,
"grain": "country",
"note": "Indicative average of other lines, not this line's published tariff."
},
"detention": {
"source": "estimate",
"free_days": 4,
"avg": 4,
"min": 3,
"max": 5,
"carriers": [
"HLXU",
"MAEU",
"ONEY",
"YMLU"
],
"carrier_count": 4,
"grain": "country",
"note": "Indicative average of other lines, not this line's published tariff."
}
},
"asked": 26,
"as_of": "2026-11-01"
}
}