Carriers
Correos (Spain) Tracking API & MCP
Query live Correos (correos, Spain's national post) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects UPU S10 numbers ending ES; Correos' own PQ parcel codes are tried when nothing else claims them.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | correos |
| Brand & service aliases | Correos, Correos España, Paq Premium, Paq Estándar |
| Single-package REST endpoint | GET https://api.lastscanned.com/v1/track/{trackingNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=NUMBER1,NUMBER2 |
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) |
Tracking Number Formats & Auto-Detection
| Pass | Rule | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) — UPU S10 | 2 letters, 9 digits, ES | UPU S10 mod-11 | RR123456785ES |
Pass 2 (mayMatch) | PQ + 20 to 22 letters and digits | — | PQ1234567890123456789012 |
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/RR123456785ES" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"JavaScript / TypeScript (fetch)
const res = await fetch("https://api.lastscanned.com/v1/track/RR123456785ES", {
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": "RR123456785ES"
}
}Normalized TrackingResult JSON response
{
"carrier": "correos",
"trackingNumber": "RR123456785ES",
"status": "delivered",
"statusDescription": "Envío entregado",
"service": null,
"deliveredAt": null,
"deliveredAtLocal": "2026-10-20T11:42:10",
"signedBy": null,
"destination": null,
"message": "El envío ha sido entregado.",
"events": [
{
"timestamp": null,
"localTime": "2026-10-20T11:42:10",
"status": "delivered",
"description": "Envío entregado",
"location": null,
"code": null
}
]
}Notes
- Scan wording is Spanish, as Correos prints it. Times are Spanish local time, shown as
localTimeonly because Spain spans two time zones. - A number Correos has no record of comes back as
not_found.
Related Resources
- Carrier hub: All supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
PostNL Tracking API & MCP
Track PostNL parcels (3S barcodes and S10 numbers ending NL) via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.
Poste Italiane Tracking API & MCP
Track Poste Italiane parcels and mail (S10 numbers ending IT) via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.