Reference API
The same public code lists this site shows, as JSON. No key, no sign-up, read-only. Every answer names the list it came from and the exact snapshot, so you can tell when it changed.
Endpoints
All are GET. Paths are case-insensitive where a code is the key.
/api/v1/cargo/container-types
ISO 6346 size-type codes, decoded · 139 in the current snapshot
- q — code or description
- group — family letter: G, R, T …
- length — 20, 40 or 45 (feet)
- limit (1–200, default 50), cursor (from meta.page.nextCursor)
/api/v1/cargo/container-types/{code}
One code, e.g. 45G1 (any case) · 139 in the current snapshot
/api/v1/cargo/lines
SMDG liner codes · 372 in the current snapshot
- q — code, name or parent company
- status — active | expired | marked_for_deletion
- type — vocc | nvocc | unknown
- country — ISO 3166 alpha-2 of the recorded address
- limit (1–200, default 50), cursor (from meta.page.nextCursor)
/api/v1/cargo/lines/{code}
One code with its SMDG change log, e.g. MSK · 372 in the current snapshot
/api/v1/cargo/terminals
Container terminals from the SMDG Terminal Code List · 1,259 in the current snapshot
- q — terminal code, UN/LOCODE, facility or operator
- country — ISO 3166 alpha-2
- unlocode — e.g. NLRTM (alternative codes match too)
- near — "lat,lon"; results nearest first, each with distanceKm
- radiusKm — with near, up to 500, default 50
- limit (1–200, default 50), cursor (from meta.page.nextCursor)
/api/v1/cargo/terminals/{UNLOCODE-CODE}
One terminal, e.g. AEJEA-DPWJA · 1,259 in the current snapshot
/api/v1/cargo/ports
UN/LOCODEs with at least one terminal, and how many · 735 in the current snapshot
- q — UN/LOCODE or its prefix
- country — ISO 3166 alpha-2
- limit (1–200, default 50), cursor (from meta.page.nextCursor)
/api/v1/cargo/ports/{UNLOCODE}
One location and its terminals, e.g. NLRTM · 735 in the current snapshot
The envelope
Shared by every scanner's v1 API. Payload is under data; nothing spills into
the top level. A single record also carries a source object.
{
"status": "ok",
"data": [
{ "code": "MSK", "name": "…", "status": "active", "url": "/lines/msk", … }
],
"meta": {
"requestId": "…",
"page": { "limit": 1, "count": 1, "nextCursor": "1" }
}
} {
"status": "error",
"code": "invalid_request",
"message": "limit must be an integer from 1 to 200.",
"details": { "field": "limit" }
}
Error codes include invalid_request (400), not_found (404)
and rate_limited (429). An unknown /api/v1 path answers
not_found in the envelope, not an HTML page.
Headers
- X-Data-Source
- Who published the list the answer came from.
- X-Data-Revision
- The first 12 hex characters of the raw snapshot's sha256. Same revision, byte-identical source.
- X-Data-Snapshot
- The date the snapshot was taken.
- X-Total-Count
- Matching records across all pages, on list endpoints.
- X-RateLimit-Limit / -Remaining / -Reset / -Scope
- Where you stand against the limit below, on every answer, errors included.
Rate limit
120 requests per minute per client per endpoint. The counter lives in each server process
(X-RateLimit-Scope: instance), so it is an abuse ceiling, not a global quota —
and it is not a promise of more. The whole terminal list is about 7 calls
at limit=200. Over the limit you get 429 with
Retry-After.
Current snapshots
| List | Publisher · licence | Republishing | Snapshot | Revision |
|---|---|---|---|---|
| ISO equipment code list | Digital Container Shipping Association (DCSA) · Apache-2.0 | Permitted by licence Apache-2.0: republish with attribution to DCSA and the licence notice. The ISO 6346 code system itself is ISO's; the list of codes is DCSA's publication. | 2026-11-06 | sha256:c6fa72ad448f |
| SMDG liner code list | SMDG (Ship Message Design Group) · Apache-2.0 | Permitted by licence Apache-2.0: republish with attribution to SMDG and the licence notice. | 2026-11-06 | sha256:a8898bb6f6a1 |
| SMDG Terminal Code List | SMDG (Ship Message Design Group) · Published code list; no license file in the repository | Not established SMDG publishes the list openly but its repository carries no licence file, so the right to republish it — and to serve it to third parties through an API — has not been granted. Permission from SMDG is an open item. | 2026-11-06 | sha256:e2828ab6fb06 |
On the site only, not in the API
- Typical container inside dimensions — Navo24 LoadingMCP (list_equipment, category container), 2026-11-05. Our own data: Navo24 LoadingMCP, our own service. Shown on container-type pages as typical figures; not served through the v1 API.
- U.S. Hazardous Materials Table (49 CFR 172.101), at /data — Office of the Federal Register / NARA, 2026-10-07. Public domain: U.S. federal regulatory text (49 CFR), a government work; GPO's public-domain policy applies. Third-party material inside it would be checked separately.
Credit the publisher when you reuse a list; the licence is theirs, not ours. Every answer carries
X-Data-Redistribution; where it says not_established,
you have no licence from us to pass on, because we have none to give.
What it does not have
- Rates, schedules, tracking, gate hours or equipment availability — none of these lists carry them.
- SCAC or BIC codes, alliances, or which terminals a line calls at — the SMDG lists do not record them.
- UN/LOCODE place names — the terminal list gives the code only.
- The typical inside dimensions on the container-type pages — they come from a different source, and the API credits one source per answer.
- API keys. Everything here is public; a key would only matter for higher limits, which do not exist yet.