Singapore Post (SingPost, Speedpost) Tracking API & MCP
Query live SingPost (singpost) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects S10 numbers ending SG (with a valid check digit) in Pass 1 and returns a normalized TrackingResult JSON payload, with no SingPost account or API key.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | singpost |
| Brand & service aliases | SingPost, Singapore Post, Speedpost, singpost.com, S10 …SG |
| Category | National postal operator (Singapore), international mail |
| Single-package REST endpoint | GET https://api.lastscanned.com/v1/track/{trackingNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=EE123456785SG,... |
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 SingPost
- No captcha in the way: the SingPost tracking page loads reCAPTCHA but its
track-eventscall does not use the token, so one JSON request returns the whole history. - Delivered detection from SingPost codes: delivery is read from SingPost's own status codes (
D?C,R?C,IDBC,FD), with the wording as the fallback.
Tracking Number Formats & Auto-Detection (matches)
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | /^[A-Z]{2}\d{9}SG$/ (UPU S10) | S10 mod-11 | EE123456785SG |
Pass 2 (mayMatch) | None | n/a | n/a |
Only S10 numbers whose check digit is valid are claimed. Anything else needs ?carrier=singpost.
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/EE123456785SG" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"MCP track_package tool call
{
"tool": "track_package",
"arguments": {
"tracking_number": "EE123456785SG"
}
}Normalized TrackingResult JSON response
{
"carrier": "singpost",
"trackingNumber": "EE123456785SG",
"status": "delivered",
"statusDescription": "Delivered",
"service": "Speedpost",
"deliveredAt": "2026-10-25T02:12:00Z",
"deliveredAtLocal": "2026-10-25T10:12:00",
"signedBy": null,
"destination": null,
"events": [
{
"timestamp": "2026-10-25T02:12:00Z",
"localTime": "2026-10-25T10:12:00",
"status": "delivered",
"description": "Delivered",
"location": "Singapore",
"code": null
},
{
"timestamp": "2026-10-25T00:30:00Z",
"localTime": "2026-10-25T08:30:00",
"status": "out_for_delivery",
"description": "Out for delivery",
"location": "Singapore",
"code": null
},
{
"timestamp": "2026-10-24T13:05:00Z",
"localTime": "2026-10-24T21:05:00",
"status": "in_transit",
"description": "Item processed at mail centre",
"location": "Singapore",
"code": null
}
]
}Notes
- Time zone: scan times are treated as Singapore time (
Asia/Singapore) unless the string carries its own offset. - Reasons: SingPost's reason text, when present, is appended to the description as
Reason: …. - An unknown number returns
404 not_found(cached for 5 minutes).
Related Resources
- Live browser lookup tool: Track a SingPost package live on lastscanned.com/lookup/singpost
- Carrier hub: All supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
Japan Post (EMS, International Mail) Tracking API & MCP
Track Japan Post EMS, registered and parcel numbers (S10 numbers ending JP) via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.
Korea Post (EMS, International Mail) Tracking API & MCP
Track Korea Post (ePOST) EMS, registered and parcel numbers (S10 numbers ending KR) via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.