MSC Container Tracking API & MCP
Query live MSC (msc) shipping container moves in a single synchronous GET request or MCP tool call. Pass the container number; no booking, bill of lading or MSC account is needed.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | msc |
| Brand aliases | MSC, Mediterranean Shipping Company, MSC Cargo, msc.com/track-a-shipment |
| 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=MEDU1234562,MSCU6789016 |
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) | /^(MSCU|MEDU|MSDU|MSMU|MSNU|MSBU)\d{7}$/ | ISO 6346 | MEDU1234562 · MSCU6789016 · MSNU1234560 |
Pass 2 (mayMatch) | none | none | none |
A container number is the owner's 4-letter code, 6 digits and an ISO 6346 check digit. MSC's own owner codes detect to msc automatically. A leased container (Textainer TGHU, Triton TCNU, CAI CAIU, SeaCo SEGU and others) can sail with any line, so pass ?carrier=msc for one booked with MSC.
Synchronous GET Request & Normalized JSON Response
curl -s "https://api.lastscanned.com/v1/track/MEDU1234562" \
-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 11.
{
"carrier": "msc",
"trackingNumber": "MEDU1234562",
"status": "in_transit",
"statusDescription": "Full Transshipment Loaded, Msc Desiree UK642A",
"service": "20' DRY VAN",
"deliveredAt": null,
"deliveredAtLocal": null,
"signedBy": null,
"destination": {
"city": "Montreal",
"state": null,
"country": "CA"
},
"estimatedDelivery": "2026-11-21",
"message": "Bill of lading MEDUKU746112",
"events": [
{
"timestamp": null,
"localTime": "2026-11-06",
"status": "in_transit",
"description": "Full Transshipment Loaded, Msc Desiree UK642A",
"location": "Busan, KR",
"code": "Full Transshipment Loaded"
},
{
"timestamp": null,
"localTime": "2026-11-05",
"status": "in_transit",
"description": "Full Transshipment Positioned In",
"location": "Busan, KR",
"code": "Full Transshipment Positioned In"
},
{
"timestamp": null,
"localTime": "2026-11-05",
"status": "in_transit",
"description": "Full Transshipment Positioned Out",
"location": "Busan, KR",
"code": "Full Transshipment Positioned Out"
},
{
"timestamp": null,
"localTime": "2026-11-04",
"status": "in_transit",
"description": "Full Transshipment Discharged, Msc Lorena HI639R",
"location": "Busan, KR",
"code": "Full Transshipment Discharged"
}
]
}Notes
- Source: the tracking JSON msc.com's own page requests. Akamai refuses it from servers, so it is fetched from inside a browser session on msc.com; one session serves a whole batch.
- Events: every move on the container's bill of lading, transshipments included, with the vessel and voyage. MSC's estimated arrival is left out of the events and returned as
estimatedDelivery. - Times: MSC gives dates without a time of day, so
localTimeis a date (2026-11-06) andtimestampis null. - Bill of lading:
messagenames the bill the container sails under. - Status:
Empty to Shipperislabel_created,Import to consigneeisout_for_delivery, andEmpty received at CYisdelivered. A container MSC lists asOff Serviceisnot_found.
Related Resources
- All container lines: Ocean container tracking
- Regex & check digits: Tracking number formats & auto-detection