Spee-Dee Delivery Tracking API & MCP
Query live Spee-Dee Delivery Service (speedee) package status and scan history across the Upper Midwest in a single synchronous GET request or MCP tool call. lastscanned auto-detects 18- and 20-character SP… barcodes, filters out recycled barcode history from older shipments, and returns a normalized TrackingResult JSON payload.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | speedee |
| Brand & service aliases | Spee-Dee Delivery Service, Spee-Dee Ground |
| Category | US Upper Midwest regional parcel carrier (Detection precedence #10 of 31) |
| Single-package REST endpoint | GET https://api.lastscanned.com/v1/track/{trackingNumber} |
| Batch REST endpoint | GET https://api.lastscanned.com/v1/track?numbers=SP...,SP... (note: upstream rate limit of 10 lookups/minute) |
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 Spee-Dee Delivery
- Clean JSON from a legacy HTML-only carrier: Spee-Dee's public package progress system returns legacy HTML tables with embedded debug comments and no JSON API.
lastscannedparses the summary and scan rows into the standardTrackingResultJSON schema. - Automatic recycled-barcode deduplication: Spee-Dee shippers sometimes reuse barcode ranges across separate shipments months apart, causing a single tracking page to list scans from multiple historical deliveries.
lastscanneddetects when an olderdeliveredevent sits a day or more below a newer shipment's scans and automatically trims the stale shipment history.
Tracking Number Formats & Auto-Detection (matches vs mayMatch)
Spee-Dee is evaluated tenth (#10) in lastscanned's two-pass detector:
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | /^SP(\d{16}|\d{18})$/i (SP + 16 or 18 digits = 18 or 20 chars) | — | SP029692450001607639, SP0000000000000001 |
Pass 2 (mayMatch) | None | — | — |
When is ?carrier=speedee optional vs required?
- Optional (auto-detected): All
SP+ 16-digit andSP+ 18-digit Spee-Dee tracking numbers auto-detect in Pass 1 (no collision with USPS S10 numbers, which are 2 letters + 9 digits +US). - Required (
?carrier=speedee): Custom shipper barcodes or non-SPreference numbers inducted into Spee-Dee.
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/SP029692450001607639" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"JavaScript / TypeScript (fetch)
const res = await fetch("https://api.lastscanned.com/v1/track/SP029692450001607639", {
headers: { Authorization: `Bearer ${process.env.LASTSCANNED_API_KEY}` },
});
const pkg = await res.json();
console.log(pkg.status, pkg.signedBy, pkg.deliveredAt);MCP track_package tool call
{
"tool": "track_package",
"arguments": {
"tracking_number": "SP029692450001607639"
}
}Normalized TrackingResult JSON response
{
"carrier": "speedee",
"trackingNumber": "SP029692450001607639",
"status": "delivered",
"statusDescription": "Delivered",
"service": null,
"deliveredAt": "2026-10-23T16:53:00Z",
"deliveredAtLocal": "2026-10-23T11:53:00",
"signedBy": "J. ANDERSON",
"destination": {
"city": "ST CLOUD",
"state": "MN",
"country": "US"
},
"estimatedDelivery": null,
"events": [
{
"timestamp": "2026-10-23T16:53:00Z",
"localTime": "2026-10-23T11:53:00",
"status": "delivered",
"description": "Delivered",
"location": "ST CLOUD, MN",
"code": null
},
{
"timestamp": "2026-10-23T12:18:00Z",
"localTime": "2026-10-23T07:18:00",
"status": "out_for_delivery",
"description": "OUT FOR DELIVERY (31092)",
"location": "ST CLOUD, MN",
"code": null
},
{
"timestamp": "2026-10-23T09:04:00Z",
"localTime": "2026-10-23T04:04:00",
"status": "in_transit",
"description": "ARRIVAL SCAN",
"location": "ST CLOUD, MN",
"code": null
}
]
}Raw status & scan fields: Spee-Dee scans do not carry separate status codes (
events[].codeisnull);events[].descriptionpreserves the exact scan text (including route numbers like"OUT FOR DELIVERY (31092)").
Carrier-Specific Status & Integration Notes
- Upstream rate limit (10 lookups / minute): Spee-Dee enforces a strict limit of 10 tracking searches per minute. If you send a large batch of Spee-Dee numbers at once, excess numbers return HTTP
429withcode: "rate_limited"("Spee-Dee allows 10 searches a minute; try again in a minute"). Space Spee-Dee batch lookups to ≤10 numbers per minute. - No
estimatedDeliveryfield: Spee-Dee does not publish estimated delivery dates prior to delivery, soestimatedDeliveryis alwaysnull. - Central Time UTC conversion: For scans located in states wholly within the Central timezone (
AL,AR,IA,IL,LA,MN,MO,MS,OK,WI),timestampis converted to UTC usingAmerica/Chicago. Scans in split-timezone states populatelocalTimewithtimestamp: null.
Related Resources
- Live browser lookup tool: Track a Spee-Dee package live on lastscanned.com/lookup/speedee
- Carrier hub: All 31 supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
Veho Tracking API & MCP
Track Veho (VH 14-character tracking numbers) regional next-day and e-commerce packages via synchronous REST GET or MCP. Normalized JSON status, scan history, and tracking number format rules—no carrier credentials required.
CDL Last Mile Tracking API & MCP
Track CDL Last Mile Solutions (CDL 14-character labels and hyphenated order numbers) Northeast & Mid-Atlantic packages via synchronous REST GET or MCP. Normalized JSON status, scan history, and tracking number format rules—no carrier credentials required.