ICS Courier Tracking API & MCP
Query live ICS Courier (icscourier) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects ICS numbers (14 characters followed by the recipient's postal code).
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | icscourier |
| Brand aliases | ICS Courier, ICS, Intelcom-style regional courier, icscourier.ca |
| Category | Canadian regional courier |
| Single-package REST endpoint | GET https://api.lastscanned.com/v1/track/{trackingNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=AB1...,AB1... |
MCP server (https://mcp.lastscanned.com) | track_package, track_packages, list_carriers |
| Authentication & pricing | Authorization: Bearer lsk_live_... · 1 free keyless lookup/day per IP |
Tracking Number Formats & Auto-Detection
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | /^[A-Z]{2}\d[A-Z0-9]{11}[A-Z]\d[A-Z]\d[A-Z]\d$/ | none | AB1C2DE3FGH4JKM5N6P7 |
Pass 2 (mayMatch) | none | none | none |
The last six characters are the recipient's Canadian postal code, which is what keeps the shape specific to ICS. Pass ?carrier=icscourier for any number that does not fit.
Synchronous GET Request & Normalized JSON Response
curl -s "https://api.lastscanned.com/v1/track/AB1C2DE3FGH4JKM5N6P7" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"{
"carrier": "icscourier",
"trackingNumber": "AB1C2DE3FGH4JKM5N6P7",
"status": "delivered",
"statusDescription": "Delivered at: JANE DOE 1 MAIN ST TORONTO ON M5V 2T6",
"service": null,
"deliveredAt": "2026-03-10T18:12:43Z",
"deliveredAtLocal": "2026-03-10T13:12:43",
"signedBy": null,
"destination": null,
"events": [
{
"timestamp": "2026-03-10T18:12:43Z",
"localTime": "2026-03-10T13:12:43",
"status": "delivered",
"description": "Delivered at: JANE DOE 1 MAIN ST TORONTO ON M5V 2T6",
"location": null,
"code": null
},
{
"timestamp": null,
"localTime": "2026-03-10T07:22:23",
"status": "out_for_delivery",
"description": "Out for Delivery",
"location": null,
"code": null
},
{
"timestamp": "2026-03-10T05:48:00Z",
"localTime": "2026-03-10T00:48:00",
"status": "in_transit",
"description": "At ICS Branch SCARBOROUGH, ON for processing",
"location": "SCARBOROUGH, ON",
"code": null
}
]
}Notes
- Time zone: scan times are local to the branch. When the scan names a province (
At ICS Branch CITY, ON ..., or a trailing province and postal code),timestampis converted from that province's zone; otherwise onlylocalTimeis returned andtimestampisnull. - Signature: the name in the page's signature column becomes
signedBy; the placeholderNSR(no signature required) is ignored. - One number per request: the tracking page lists several numbers but only fills the scan history of the first, so batches make one request per number.
Related Resources
- Regex & check digits: Tracking number formats & auto-detection
Flash Express (Thailand) Tracking API & MCP
Track Flash Express Thailand parcels via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.
Chit Chats Tracking API & MCP
Track Chit Chats (Canadian cross-border shipper) parcels and the carrier handoff number via synchronous REST GET or MCP. Normalized JSON status and scan history, no carrier credentials required.