List tracked containers
Every container on your account, most recently updated first.
Query parameters
Filter to one status, for example in_transit, discharged, customs_hold, delivered.
Page size. Default 50, capped at 500.
Pass the next_cursor from the previous page.
Comma-separated tags. A row must carry all of them.
Set true to list archived boxes instead of the active fleet. Default false.
Response schema
68 fields
Derived from the example response, nested as the JSON is.
The response contract this build answers, as a date. Pin it in your client and nothing in the shape below moves under you.
Whether the request succeeded.
data
The payload. Everything an endpoint returns sits under this key.
The list of results.
items[]
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.
Your organisation. Every keyed read is scoped to it, so this is always your own id: it exists so a record stays self-describing once exported.
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.
Carrier SCAC.
Carrier name.
Your own labels on this box. Filter the list endpoint with them.
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.
Arrival time (ISO 8601). Null when the carrier publishes none and we cannot predict one.
True when the ETA is still a forecast, false when it is the actual arrival, null when there is no ETA at all. Never read a date alone as a promise.
Departure the carrier planned or actually filed for the load port. Null when the carrier publishes none.
IMO of the hull carrying the box now. Null before loading and after discharge.
Which polling cadence this box sits in (pre_departure, transit, arrival, dwell). It decides how often we ask the carrier, and moves on its own as the shipment progresses.
True when the free-time clock on this box is a concern.
Demurrage charged so far on this box, US dollars. Null when no rate applies, which is not the same as zero owed.
The last day before demurrage accrues, or null when no terms are on file.
Why customs is holding the box, when the carrier names a reason. Null when there is no hold.
When the hold started. Null when there is no hold.
Origin port UN/LOCODE, or null when the carrier named no origin we could resolve.
Destination port UN/LOCODE, or null when unresolved.
Destination port name, falling back to its UN/LOCODE.
Equipment size, for example 40HC. Null when the carrier did not state it.
Equipment family as the carrier names it. Null when unstated.
The type half of the ISO 6346 code (G1 for a general-purpose box, R1 for a reefer). Null when unstated.
Registered owner of the box, resolved from its BIC prefix. Null when the prefix is unregistered.
Leasing company, when the box is leased rather than carrier-owned. Null otherwise.
Who holds the box on lease. Null unless the lessor publishes it.
An unconfirmed carrier candidate derived from lessor data. Never a confirmed carrier: read carrier_code for that.
The box status as the lessor reports it, for example on-hire or off-hire. Null when we hold no lessor record.
When we last asked the lessor. Null when we never have.
Where a request to connect this carrier stands, when the line needs one. Null when the carrier is already connected.
When you asked to be told the connector went live. Null when you did not ask.
Redelivery booking for the empty. Null until one exists.
When the empty is due back. Null until scheduled.
Where the empty is due back. Null until scheduled.
The depot the empty is due back at. Null until scheduled.
Lease contract the box sits on. Null unless published.
Lease type, for example long-term or one-way. Null unless published.
Who built the box. Null unless the lessor publishes it.
When we last asked the carrier (ISO 8601).
When you started tracking this box (ISO 8601).
When tracking stopped, or null while the box is still active.
Why tracking stopped: your delete call, or an automatic close-out once the box finished its cycle. Null while active.
When we gave up resolving this reference. Null while we are still trying, which is the normal state.
Why a reference could not be resolved: invalid_number, not_found or bl_booking_unresolved. Null means resolved or still resolving.
A route problem we detected, for example a destination change or a missed connection. Null when the route is behaving.
Where the answer on this call came from: direct_carrier or warm_db.
Days late at each of the five voyage stages. Positive is late, negative is early, null means we cannot tell.
The ports on the route, in order.
True on a sample reference. Sample boxes return typical data and have no live carrier feed.
vessel_position
Live AIS position of the carrying vessel. Null when we hold no IMO or no fix yet.
IMO number of the vessel.
Human-readable name.
Latitude.
Longitude.
Speed over ground, in knots.
Heading in degrees.
Navigational status as reported by AIS, for example "Under way using engine" or "Moored". We drop a moored or anchored claim that the position contradicts.
When we last wrote the position row.
When the hull was actually observed. This, not position_updated_at, is the age that matters.
How old the fix is, in hours.
live, recent, stale, outdated, or unknown when we hold no usable fix.
True when another page is waiting behind next_cursor.
Cursor for the next page, or null when there are no more.
Errors
A failure carries { "ok": false, "error": { "code", "message", "severity" } }. Branch on the code, and log the message.
The key is missing, malformed or revoked.
The query failed or timed out. Retry with a smaller limit.
curl 'https://api.trackingmcp.com/v1/containers' \
-H "Authorization: Bearer tmcp_YOUR_API_KEY"const res = await fetch("https://api.trackingmcp.com/v1/containers", {
headers: {
"Authorization": "Bearer tmcp_YOUR_API_KEY"
}
});
const data = await res.json();import requests
res = requests.get(
"https://api.trackingmcp.com/v1/containers",
headers={"Authorization": "Bearer tmcp_YOUR_API_KEY"},
)
data = res.json() {
"api_version": "2026-08-04",
"ok": true,
"data": {
"items": [
{
"id": "6b2f4c81-9d35-4e70-a18c-5f7e2a9b4d63",
"org_id": "e04a7c19-8b62-4d35-9017-3a5c8e2b6f94",
"identifier": "HLXU8765432",
"identifier_type": "container_id",
"carrier_code": "ONEY",
"carrier_name": "ONE",
"tags": [],
"status": "delivered",
"eta": "2026-10-17T22:00:00+00:00",
"eta_is_estimated": true,
"planned_departure_at": "2026-08-12T09:57:00+00:00",
"current_vessel_imo": "9637260",
"poll_priority": "transit",
"demurrage_at_risk": false,
"demurrage_accrued_usd": null,
"demurrage_last_free_day": null,
"customs_hold_reason": null,
"customs_hold_since": null,
"origin_unlocode": "CNCKG",
"destination_unlocode": "GBSOU",
"destination_name": "SOUTHAMPTON, HAMPSHIRE",
"container_size": null,
"equipment_type": null,
"iso_type_code": null,
"equipment_owner": null,
"equipment_lessor": null,
"lessee_name": null,
"carrier_hint_code": null,
"lessor_status": null,
"lessor_checked_at": null,
"connector_status": null,
"connector_notify_requested_at": null,
"redelivery_reference": null,
"redelivery_date": null,
"redelivery_location": null,
"redelivery_yard": null,
"lessor_contract_number": null,
"lessor_contract_type": null,
"equipment_manufacturer": null,
"last_polled_at": "2026-08-19T13:08:08.636+00:00",
"added_at": "2026-08-19T13:07:40.567796+00:00",
"archived_at": null,
"archived_reason": null,
"unresolvable_since": null,
"unresolved_reason": null,
"route_alert": null,
"source": "api",
"delay_bars": [
null
],
"route_ports": null,
"is_demo": false,
"vessel_position": {
"imo": "9637260",
"name": "HMM PRIDE",
"lat": 49.022617,
"lng": -123.148083,
"speed_knots": 0,
"heading_deg": 133,
"nav_status": "Status unverified",
"position_updated_at": "2026-08-19T13:08:17.763+00:00",
"position_fix_at": "2026-08-19T13:04:58+00:00",
"position_age_hours": 1.9,
"position_freshness": "live"
}
}
],
"has_more": true,
"next_cursor": "2026-08-18T17:36:06.900415+00:00"
}
}