Look up by identifier
Resolve a container number, bill of lading or booking straight to its record, without holding the UUID. Handy when your own system keys on the carrier reference. One thing to know before you loop over it: an identifier you are not tracking yet is registered on the spot, which consumes a shipment slot exactly as an add would, and the call answers 202 with TRACKING_IN_PROGRESS while the carrier is asked.
Path parameters
The container number, bill of lading or booking you tracked.
Response fields
Derived from the example response.
Whether the request succeeded.
The payload. Everything an endpoint returns sits under this key.
Stable identifier for the record. On the tracking endpoints this is the container UUID, except on a portfolio summary row, where it is the container number.
The container number, bill of lading or booking this record tracks.
What the identifier is. The keyed surface uses container_id, bill_of_lading or booking; the public tracker returns booking_number for the third.
The container number, or null when the record was tracked by a bill of lading or booking that has not yet resolved to a box.
The bill of lading, or null when the record was not tracked by one.
The booking reference, or null when the record was not tracked by one.
The boxes a bill of lading or booking resolves to, each with its own timeline. Null on a plain container lookup.
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.
Carrier name, falling back to the SCAC when we hold no name.
Name of the carrying vessel, or null when the carrier named none.
IMO number of the carrying vessel, or null when unknown.
Live AIS position of the carrying vessel. Null when we hold no IMO or no fix yet.
Latitude.
Longitude.
Origin port name, falling back to its UN/LOCODE.
Destination port name, falling back to its UN/LOCODE.
Arrival time (ISO 8601). Null when the carrier publishes none and we cannot predict one.
How often this lane arrives on time, as a percentage. Null on a lane too thin to score.
The more recent of the carrier check and the AIS fix: when we last learned anything about this shipment.
Which of the two produced last_updated_at: carrier_poll or ais_vessel_position. Null when neither has happened yet.
Days of free time left, or null when no terms are on file.
Reserved for a written summary of the shipment. Currently always null.
Milestone timeline, oldest to newest.
Event code, for example DEPA or LOAD.
DCSA classifier: ACT for actual, EST for estimated, PLN for planned.
True when the event happened. False means planned or estimated.
The event in plain words. A non-actual event is tagged "(planned)".
Event timestamp (ISO 8601).
UN/LOCODE for the event, or null when the carrier gave no place.
Errors
A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.
Not a failure and not a not-found. The identifier is registered and the carrier has not answered yet. The body carries retry_after_seconds. Poll again rather than adding the box a second time. Note that ok is false on a 202 here, so branch on the status, not on ok alone.
The key is missing, malformed or revoked.
No line recognises this reference. Check the check digit before retrying: a wrong one keeps failing.
We could not read the record. Retry.
curl 'https://api.trackingmcp.com/v1/containers/lookup/MEDU1234562' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://api.trackingmcp.com/v1/containers/lookup/MEDU1234562", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://api.trackingmcp.com/v1/containers/lookup/MEDU1234562",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
)
data = res.json() {
"ok": true,
"data": {
"id": "8f1c2d4e-6a3b-4f52-9c70-11ab22cd33ef",
"identifier": "MEDU1234562",
"identifier_type": "container_id",
"container_number": "MEDU1234562",
"bl_number": null,
"booking_number": null,
"child_containers": null,
"status": "in_transit",
"carrier": "MSC",
"vessel_name": "MSC TERESA",
"vessel_imo": "9754105",
"vessel_position": { "lat": 36.12, "lng": 14.55 },
"origin_name": "Ningbo",
"destination_name": "Rotterdam",
"eta": "2026-07-03T06:00:00Z",
"eta_confidence_pct": 78,
"last_updated_at": "2026-08-07T08:40:00Z",
"last_updated_source": "carrier_poll",
"demurrage_free_days_left": null,
"ai_narrative": null,
"events": [
{
"type": "DEPA",
"classifier": "ACT",
"is_actual": true,
"label": "Departed",
"timestamp": "2026-06-18T22:10:00Z",
"location": "CNNGB"
}
]
}
}