# Maersk Container Tracking API & MCP

URL: https://docs.lastscanned.com/carriers/maersk

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

```bash
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.

```json
{
  "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`.

## Related Resources

- **All container lines**: [Ocean container tracking](/container-tracking-api)
- **Regex & check digits**: [Tracking number formats & auto-detection](/formats)