Skip to content
GETAPI key

List tracked containers

GETapi.trackingmcp.com/v1/containers

Every container on your account, most recently updated first.

Query parameters

statusstring

Filter to one status, for example in_transit, discharged, customs_hold, delivered.

limitinteger

Page size. Default 50, capped at 500.

cursorstring

Pass the next_cursor from the previous page.

tagsstring

Comma-separated tags. A row must carry all of them.

archivedboolean

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.

api_versionstring

The response contract this build answers, as a date. Pin it in your client and nothing in the shape below moves under you.

okboolean

Whether the request succeeded.

dataobject

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

itemsobject[]

The list of results.

items[]object
idstring

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.

org_idstring

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.

identifierstring

The container number, bill of lading or booking this record tracks.

identifier_typestring

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_codestring

Carrier SCAC.

carrier_namestring

Carrier name.

tagsobject[]

Your own labels on this box. Filter the list endpoint with them.

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.

etastring

Arrival time (ISO 8601). Null when the carrier publishes none and we cannot predict one.

eta_is_estimatedboolean

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.

planned_departure_atstring

Departure the carrier planned or actually filed for the load port. Null when the carrier publishes none.

current_vessel_imostring

IMO of the hull carrying the box now. Null before loading and after discharge.

poll_prioritystring

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.

demurrage_at_riskboolean

True when the free-time clock on this box is a concern.

demurrage_accrued_usdnumber | null

Demurrage charged so far on this box, US dollars. Null when no rate applies, which is not the same as zero owed.

demurrage_last_free_daystring | null

The last day before demurrage accrues, or null when no terms are on file.

customs_hold_reasonstring | null

Why customs is holding the box, when the carrier names a reason. Null when there is no hold.

customs_hold_sincestring | null

When the hold started. Null when there is no hold.

origin_unlocodestring

Origin port UN/LOCODE, or null when the carrier named no origin we could resolve.

destination_unlocodestring

Destination port UN/LOCODE, or null when unresolved.

destination_namestring

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

container_sizestring | null

Equipment size, for example 40HC. Null when the carrier did not state it.

equipment_typestring | null

Equipment family as the carrier names it. Null when unstated.

iso_type_codestring | null

The type half of the ISO 6346 code (G1 for a general-purpose box, R1 for a reefer). Null when unstated.

equipment_ownerstring | null

Registered owner of the box, resolved from its BIC prefix. Null when the prefix is unregistered.

equipment_lessorstring | null

Leasing company, when the box is leased rather than carrier-owned. Null otherwise.

lessee_namestring | null

Who holds the box on lease. Null unless the lessor publishes it.

carrier_hint_codestring | null

An unconfirmed carrier candidate derived from lessor data. Never a confirmed carrier: read carrier_code for that.

lessor_statusstring | null

The box status as the lessor reports it, for example on-hire or off-hire. Null when we hold no lessor record.

lessor_checked_atstring | null

When we last asked the lessor. Null when we never have.

connector_statusany | null

Where a request to connect this carrier stands, when the line needs one. Null when the carrier is already connected.

connector_notify_requested_atstring | null

When you asked to be told the connector went live. Null when you did not ask.

redelivery_referencestring | null

Redelivery booking for the empty. Null until one exists.

redelivery_datestring | null

When the empty is due back. Null until scheduled.

redelivery_locationstring | null

Where the empty is due back. Null until scheduled.

redelivery_yardstring | null

The depot the empty is due back at. Null until scheduled.

lessor_contract_numberstring | null

Lease contract the box sits on. Null unless published.

lessor_contract_typestring | null

Lease type, for example long-term or one-way. Null unless published.

equipment_manufacturerstring | null

Who built the box. Null unless the lessor publishes it.

last_polled_atstring

When we last asked the carrier (ISO 8601).

added_atstring

When you started tracking this box (ISO 8601).

archived_atstring | null

When tracking stopped, or null while the box is still active.

archived_reasonstring | null

Why tracking stopped: your delete call, or an automatic close-out once the box finished its cycle. Null while active.

unresolvable_sincestring | null

When we gave up resolving this reference. Null while we are still trying, which is the normal state.

unresolved_reasonstring | null

Why a reference could not be resolved: invalid_number, not_found or bl_booking_unresolved. Null means resolved or still resolving.

route_alertobject | null

A route problem we detected, for example a destination change or a missed connection. Null when the route is behaving.

sourcestring

Where the answer on this call came from: direct_carrier or warm_db.

delay_barsany | null

Days late at each of the five voyage stages. Positive is late, negative is early, null means we cannot tell.

route_portsany | null

The ports on the route, in order.

is_demoboolean

True on a sample reference. Sample boxes return typical data and have no live carrier feed.

vessel_positionobject

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

imostring

IMO number of the vessel.

namestring

Human-readable name.

latnumber

Latitude.

lngnumber

Longitude.

speed_knotsnumber

Speed over ground, in knots.

heading_degnumber

Heading in degrees.

nav_statusstring

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.

position_updated_atstring

When we last wrote the position row.

position_fix_atstring

When the hull was actually observed. This, not position_updated_at, is the age that matters.

position_age_hoursnumber

How old the fix is, in hours.

position_freshnessstring

live, recent, stale, outdated, or unknown when we hold no usable fix.

has_moreboolean

True when another page is waiting behind next_cursor.

next_cursorstring

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.

UNAUTHORIZED401

The key is missing, malformed or revoked.

INTERNAL_ERROR500

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"
Response
{
  "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"
  }
}