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

ListPublisher · licenceRepublishingSnapshotRevision
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.