Maersk Container Tracking API & MCP
Query live Maersk (maersk) shipping container moves in a single synchronous GET request or MCP tool call. Pass the container number; no booking, bill of lading or Maersk account is needed.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | maersk |
| Brand aliases | Maersk, Maersk Line, A.P. Moller-Maersk, Hamburg Süd, maersk.com/tracking |
| Category | Ocean container shipping line |
| Single-container REST endpoint | GET https://api.lastscanned.com/v1/track/{containerNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=MSKU7812341,MNBU0123457 |
MCP server (https://mcp.lastscanned.com/mcp) | track_package, track_packages, list_carriers |
| Authentication & pricing | Authorization: Bearer lsk_live_... · 1 free keyless lookup/day per IP |
Container Number Format & Auto-Detection
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | /^(MSKU|MRKU|MRSU|MNBU|SUDU)\d{7}$/ | ISO 6346 | MSKU7812341 · MNBU0123457 · MRSU1234566 |
Pass 2 (mayMatch) | none | none | none |
A container number is the owner's 4-letter code, 6 digits and an ISO 6346 check digit. Maersk's own owner codes detect to maersk automatically. A leased container (Textainer TGHU, Triton TCNU, CAI CAIU, SeaCo SEGU and others) can sail with any line, so pass ?carrier=maersk for one booked with Maersk.
Synchronous GET Request & Normalized JSON Response
curl -s "https://api.lastscanned.com/v1/track/MSKU7812341" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"The response below is a real lookup from November 2026, with its events cut to the newest four of 16.
{
"carrier": "maersk",
"trackingNumber": "MSKU7812341",
"status": "delivered",
"statusDescription": "Empty container returned",
"service": "20' Dry",
"deliveredAt": null,
"deliveredAtLocal": "2026-10-19T13:03:00",
"signedBy": null,
"destination": {
"city": "Genoa",
"state": null,
"country": "IT"
},
"estimatedDelivery": null,
"events": [
{
"timestamp": null,
"localTime": "2026-10-19T13:03:00",
"status": "delivered",
"description": "Empty container returned",
"location": "Genoa City Limits, IT",
"code": "CONTAINER RETURN"
},
{
"timestamp": null,
"localTime": "2026-10-16T14:37:00",
"status": "out_for_delivery",
"description": "Gate out (full)",
"location": "Genoa, IT",
"code": "GATE-OUT"
},
{
"timestamp": null,
"localTime": "2026-10-15T03:56:00",
"status": "in_transit",
"description": "Discharged from vessel, Estelle Maersk 634W",
"location": "Genoa, IT",
"code": "DISCHARG"
},
{
"timestamp": null,
"localTime": "2026-10-14T15:13:00",
"status": "in_transit",
"description": "Vessel arrived, Estelle Maersk 634W",
"location": "Genoa, IT",
"code": "CONTAINER ARRIVAL"
}
]
}Notes
- Source: the JSON maersk.com's own tracking page receives. Akamai refuses that call from servers, so it is read through a browser session; one session serves a whole batch, and a lookup takes several seconds.
- Events: actual moves only (gate out empty, gate in full, loaded, vessel departed and arrived, discharged, gate out full, empty returned), each with the vessel and voyage where there is one. Planned moves are left out; the final ETA is
estimatedDelivery. - Times: Maersk gives each move's local time without a zone, so
localTimeis set andtimestampis null. - Status: the empty box going to the shipper is
label_created, the full box leaving for the consignee isout_for_delivery, and the empty coming back isdelivered(the trip is over). Everything between isin_transit. - Hamburg Süd (
SUDU) containers are tracked on maersk.com and detect tomaersk.
Related Resources
- All container lines: Ocean container tracking
- Regex & check digits: Tracking number formats & auto-detection