Skip to content
Navo24Navo24
GETAPI key

Container status with rail moves

GETrail.navo24.com/v1/rail/container

Carrier events of a container (the same data as Navo container tracking), with rail:true on events at rail terminals or by train, and rail_events as a count. Events trimmed in the example.

Query parameters

refstringrequired

Container number.

Response schema

52 fields

Derived from the example response, nested as the JSON is.

dataobject

The payload. Everything an endpoint returns sits under this key.

referencestring
containerstring

Container type, for example 40HC.

blstring
bookingany | null
sizestring
typestring

Event code, for example DEPA or LOAD.

statusstring

Current normalised status of the shipment. Ocean lifecycle order: discharged, available, delivered, returned_empty. Two values end a shipment, delivered and returned_empty, and returned_empty outranks delivered.

carrierstring

Carrier name, falling back to the SCAC when we hold no name.

vesselstring

Vessel currently carrying the container, or null when we hold neither a name nor an IMO. Its lat and lng are always null here; the keyed endpoints carry the live position under vessel_position.

imostring

IMO number of the vessel.

origin_namestring

Origin port name, falling back to its UN/LOCODE.

destination_namestring

Destination port name, falling back to its UN/LOCODE.

etastring

Arrival time (ISO 8601) of the vessel (the ARRI event) at the port in destination_unlocode: planned until it arrives, actual after (see eta_is_estimated). It is not the discharge (DISC) and not the moment the cargo is ready for pickup. When a line files no arrival event, its discharge at that port stands in. Null when the carrier publishes none and we cannot predict one.

updatedstring
polobject

Port of loading UN/LOCODE.

namestring

Human-readable name.

countrystring

Country name.

latnumber

Latitude.

lngnumber

Longitude.

podobject

Port of discharge UN/LOCODE.

namestring

Human-readable name.

countrystring

Country name.

latnumber

Latitude.

lngnumber

Longitude.

vessel_positionobject

Live AIS position of the carrying vessel. Null when we hold no IMO or no fix yet.

latnumber

Latitude.

lngnumber

Longitude.

atany | null
routeobject

The legs in order. Each carries its two endpoints, its geometry and its vessel.

pathnumber[][]

The drawn geometry of the leg as lat and lng pairs. Empty on an inland leg, where we do not draw a line we cannot verify.

eventsobject[]

Milestone timeline, oldest to newest.

events[]object
typestring

Event code, for example DEPA or LOAD.

labelstring

The event in plain words. A non-actual event is tagged "(planned)".

actualboolean

True when the event happened. False means it is planned or estimated, so never read it as a fact.

passedboolean
ais_atstring | null
atstring
localstring
date_onlyboolean
locationstring

UN/LOCODE for the event, or null when the carrier gave no place.

placeobject
codestring

Event or status code.

namestring

Human-readable name.

countrystring

Country name.

ccstring
latnumber

Latitude.

lngnumber

Longitude.

vesselobject | null

Vessel currently carrying the container, or null when we hold neither a name nor an IMO. Its lat and lng are always null here; the keyed endpoints carry the live position under vessel_position.

voyagestring | null

Carrier voyage number, when published. Null otherwise.

railboolean
rail_eventsnumber

Errors

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

missing_key401

No key in Authorization or x-api-key.

invalid_key401

The key is unknown or revoked.

invalid_ref400

Not a container number.

not_found404

No carrier has events for this container yet.

rate_limited429

More than 40 requests in one minute from one client.

upstream_error502

A source did not answer. Retry in a minute.

curl 'https://rail.navo24.com/v1/rail/container?ref=MEDU3392382' \
  -H "Authorization: Bearer tmcp_YOUR_API_KEY"
Response
{
  "data": {
    "reference": "MEDU3392382",
    "container": "MEDU3392382",
    "bl": "MEDUADN51159",
    "booking": null,
    "size": "20GP",
    "type": "Dry",
    "status": "in_transit",
    "carrier": "MSC",
    "vessel": "MSC IRIS",
    "imo": "9987378",
    "origin_name": "QINGDAO, CN",
    "destination_name": "HAMBURG, DE",
    "eta": "2026-11-05T00:00:00+00:00",
    "updated": "2026-10-29T21:13:46+00:00",
    "pol": {
      "name": "Qingdao",
      "country": "China",
      "lat": 36.05229,
      "lng": 120.29819
    },
    "pod": {
      "name": "Hamburg",
      "country": "Germany",
      "lat": 53.55073,
      "lng": 9.99302
    },
    "vessel_position": {
      "lat": 49.53715,
      "lng": -0.165616666666667,
      "at": null
    },
    "route": {
      "path": [
        [
          120.2982,
          36.0523
        ],
        [
          120.3411,
          36.043
        ]
      ]
    },
    "events": [
      {
        "type": "GTOT",
        "label": "Gate out",
        "actual": true,
        "passed": false,
        "ais_at": null,
        "at": "2026-08-21T00:00:00+00:00",
        "local": "2026-08-21T00:00:00",
        "date_only": true,
        "location": "CNTAO",
        "place": {
          "code": "CNTAO",
          "name": "Qingdao",
          "country": "China",
          "cc": "CN",
          "lat": 36.05229,
          "lng": 120.29819
        },
        "vessel": null,
        "voyage": null,
        "rail": false
      },
      {
        "type": "GTIN",
        "label": "Gate in",
        "actual": true,
        "passed": false,
        "ais_at": null,
        "at": "2026-09-03T00:00:00+00:00",
        "local": "2026-09-03T00:00:00",
        "date_only": true,
        "location": "CNTAO",
        "place": {
          "code": "CNTAO",
          "name": "Qingdao",
          "country": "China",
          "cc": "CN",
          "lat": 36.05229,
          "lng": 120.29819
        },
        "vessel": null,
        "voyage": null,
        "rail": false
      }
    ],
    "rail_events": 0
  }
}