Chronopost Tracking API & MCP
Query live Chronopost (chronopost) parcel status and scan history in a single synchronous GET request or MCP tool call. lastscanned reads Chronopost's own tracking web service and returns a normalized TrackingResult JSON payload, with every scan's UTC time worked out from the offset Chronopost prints. Chronopost S10 numbers ending FR also auto-detect to La Poste; pass ?carrier=chronopost to read Chronopost's own record.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | chronopost |
| Brand & service aliases | Chronopost, Chronopost Express, Chrono 13, Chrono Relais, Chronopost France |
| Category | French express parcel carrier (La Poste group) |
| Single-package REST endpoint | GET https://api.lastscanned.com/v1/track/{trackingNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=XX123456789FR,... |
MCP server (https://mcp.lastscanned.com) | track_package, track_packages, list_carriers (claude mcp add --transport http lastscanned https://mcp.lastscanned.com) |
| Authentication & pricing | Authorization: Bearer lsk_live_... · 1 free keyless lookup/day per IP · Free tier (5 unique numbers/day, $0) · Pro ($4.99/mo for 1,000 unique numbers, unlimited re-polls, $0.015/extra) · HTTP 402 Stripe MPP ($0.50 for 25-number lsk_pack_ key or $0.02/number in USDC on Tempo) |
Why developers use lastscanned for Chronopost
- No tracking-page bot wall:
chronopost.frserves its tracking page behind a Cloudflare challenge.lastscannedcalls the web service the page itself relies on, so a singlefetch()returns JSON-shaped results instead. - Exact UTC times: Chronopost prints each scan with its offset (
+02:00in summer,+01:00in winter).lastscannedkeeps that offset, sotimestampis correct in both seasons. - Scan codes kept:
events[].codeholds Chronopost's own code (Ddelivered,TAin delivery,BLpremises closed,SKwaiting for information,PEcollected by the carrier).
Tracking Number Formats & Auto-Detection (matches vs ?carrier=chronopost)
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | None | — | — |
Pass 2 (mayMatch) | None | — | — |
Explicit (?carrier=chronopost) | Chronopost parcel numbers (for example 2 letters + 9 digits + FR) | — | XX123456789FR |
When is ?carrier=chronopost required?
- Always for Chronopost-only lookups: no number shape belongs to Chronopost alone. UPU S10 numbers ending
FR(check digit valid) route to La Poste in Pass 1, which also answers for Chronopost parcels. Add?carrier=chronopostto ask Chronopost's own service instead.
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/XX123456789FR?carrier=chronopost" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"JavaScript / TypeScript (fetch)
const res = await fetch("https://api.lastscanned.com/v1/track/XX123456789FR?carrier=chronopost", {
headers: { Authorization: `Bearer ${process.env.LASTSCANNED_API_KEY}` },
});
const pkg = await res.json();
console.log(pkg.status, pkg.events[0]);MCP track_package tool call
{
"tool": "track_package",
"arguments": {
"tracking_number": "XX123456789FR",
"carrier": "chronopost"
}
}Normalized TrackingResult JSON response
{
"carrier": "chronopost",
"trackingNumber": "XX123456789FR",
"status": "out_for_delivery",
"statusDescription": "Shipment in delivery to the consignee",
"service": null,
"deliveredAt": null,
"deliveredAtLocal": null,
"signedBy": null,
"destination": null,
"events": [
{
"timestamp": "2026-10-26T09:15:37Z",
"localTime": "2026-10-26T10:15:37",
"status": "out_for_delivery",
"description": "Shipment in delivery to the consignee",
"location": "TOURS CHRONOPOST 37000",
"code": "TA"
},
{
"timestamp": "2026-10-25T17:02:11Z",
"localTime": "2026-10-25T18:02:11",
"status": "in_transit",
"description": "Sorted at delivery location",
"location": "TOURS CHRONOPOST 37000",
"code": "SD"
},
{
"timestamp": "2026-10-24T14:40:03Z",
"localTime": "2026-10-24T16:40:03",
"status": "in_transit",
"description": "Parcel collected by Carrier",
"location": "AVIGNON CHRONOPOST 84000",
"code": "PE"
}
]
}No record: a number Chronopost has no scans for returns
not_found. Scan locations are the Chronopost agency name and its postcode; Chronopost's service gives no package-level status, sostatuscomes from the newest scan.
Related Resources
- Live browser lookup tool: Track a Chronopost package live on lastscanned.com/lookup/chronopost
- Carrier hub: All supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
GDWSE Tracking API & MCP
Track GDWSE (威速易供应链, Guangdong, China, Hualei tracker) with scan history via synchronous REST GET or MCP. Normalized JSON status and scans, no carrier credentials required.
Bring / Posten Norge Tracking API & MCP
Track Bring and Posten Norge parcels and mail (S10 numbers ending NO, 18-digit parcel numbers) via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.