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

PropertyValue
Carrier slug (?carrier=)maersk
Brand aliasesMaersk, Maersk Line, A.P. Moller-Maersk, Hamburg Süd, maersk.com/tracking
CategoryOcean container shipping line
Single-container REST endpointGET https://api.lastscanned.com/v1/track/{containerNumber}
Batch REST endpointGET https://api.lastscanned.com/v1/track?numbers=MSKU7812341,MNBU0123457
MCP server (https://mcp.lastscanned.com/mcp)track_package, track_packages, list_carriers
Authentication & pricingAuthorization: Bearer lsk_live_... · 1 free keyless lookup/day per IP

Container Number Format & Auto-Detection

PassRule / RegexCheck DigitExamples
Pass 1 (matches)/^(MSKU|MRKU|MRSU|MNBU|SUDU)\d{7}$/ISO 6346MSKU7812341 · MNBU0123457 · MRSU1234566
Pass 2 (mayMatch)nonenonenone

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 localTime is set and timestamp is null.
  • Status: the empty box going to the shipper is label_created, the full box leaving for the consignee is out_for_delivery, and the empty coming back is delivered (the trip is over). Everything between is in_transit.
  • Hamburg Süd (SUDU) containers are tracked on maersk.com and detect to maersk.

On this page