Better Trucks Tracking API & MCP
Query live Better Trucks (bettertrucks) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects BTS_… and BTP… tracking numbers and returns a normalized TrackingResult JSON payload—without requiring a Better Trucks merchant API key or webhook listener.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | bettertrucks |
| Brand & service aliases | Better Trucks, BTS_, BTP |
| Category | US Midwest, South & East regional last-mile parcel carrier (Detection precedence #12 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=BTS_...,BTP... (up to 35 numbers per carrier in a 100-number call) |
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 Better Trucks
- No shipper account or webhook pre-registration: Better Trucks' shipper API requires merchant onboarding and webhook configuration.
lastscannedlets you query anyBTS_…orBTP…parcel synchronously viaGET /v1/track/:number. - Filters out noisy internal dispatch rows: Better Trucks' raw
tracking_historyincludes internal dispatch events likeTRANSACTION_CREATEDandONFLEET_FAILED, and returns HTTP200withstatus: "UNKNOWN"on invalid tracking numbers.lastscannedfilters internal system rows and returns a clean404 not_foundwhen a tracking number does not exist.
Tracking Number Formats & Auto-Detection (matches vs mayMatch)
Better Trucks is evaluated twelfth (#12) in lastscanned's two-pass detector:
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) — BTS_ prefix | /^BTS_[0-9A-Z]{8,14}$/i (BTS_ + 8–14 alphanumeric characters) | — | BTS_0261SMTF8S, BTS_0018P2LD557 |
Pass 1 (matches) — BTP prefix | /^BTP[0-9A-Z]{12}$/i (BTP + 12 alphanumeric characters = 15 chars) | — | BTPA00190F5N15U |
Pass 2 (mayMatch) | None | — | — |
When is ?carrier=bettertrucks optional vs required?
- Optional (auto-detected): All
BTS_…andBTP…tracking numbers auto-detect in Pass 1 (ahead of AxleHire's 12/16-char alphanumeric rule in Pass 2). No other carrier uses either prefix. - Required (
?carrier=bettertrucks): Custom merchant reference numbers inducted into Better Trucks without aBTS_orBTPprefix.
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/BTS_0261SMTF8S" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"JavaScript / TypeScript (fetch)
const res = await fetch("https://api.lastscanned.com/v1/track/BTS_0261SMTF8S", {
headers: { Authorization: `Bearer ${process.env.LASTSCANNED_API_KEY}` },
});
const pkg = await res.json();
console.log(pkg.status, pkg.statusDescription, pkg.deliveredAt);MCP track_package tool call
{
"tool": "track_package",
"arguments": {
"tracking_number": "BTS_0261SMTF8S"
}
}Normalized TrackingResult JSON response
{
"carrier": "bettertrucks",
"trackingNumber": "BTS_0261SMTF8S",
"status": "delivered",
"statusDescription": "Package delivered",
"service": null,
"deliveredAt": "2026-10-24T17:11:13Z",
"deliveredAtLocal": "2026-10-24T12:11:13",
"signedBy": "Front Door",
"destination": {
"city": "DOWNERS GROVE",
"state": "IL",
"country": "US"
},
"estimatedDelivery": null,
"estimatedDeliveryAt": null,
"message": null,
"events": [
{
"timestamp": "2026-10-24T17:11:13Z",
"localTime": "2026-10-24T12:11:13",
"status": "delivered",
"description": "Package delivered",
"location": "Downers Grove, IL",
"code": "DELIVERED"
},
{
"timestamp": "2026-10-24T13:20:45Z",
"localTime": "2026-10-24T08:20:45",
"status": "out_for_delivery",
"description": "Package is out for delivery",
"location": "Woodridge, IL",
"code": "OUT_FOR_DELIVERY"
},
{
"timestamp": "2026-10-24T08:05:19Z",
"localTime": "2026-10-24T03:05:19",
"status": "in_transit",
"description": "Package scanned at hub",
"location": "Woodridge, IL",
"code": "SCANNED_AT_HUB"
},
{
"timestamp": "2026-10-23T19:44:02Z",
"localTime": "2026-10-23T19:44:02",
"status": "label_created",
"description": "Shipment created",
"location": null,
"code": "SHIPMENT_CREATED"
}
]
}Raw status & scan codes:
events[].codepreserves Better Trucks' status code (SHIPMENT_CREATED,INJECTED,SCANNED_AT_HUB,OUT_FOR_DELIVERY,LOADED_ON_DELIVERY_VEHICLE,DELIVERED,DELIVERY_FAILURE,AWAITING_ADDRESS_CONFIRMATION,RTS_RETURNED_TO_STATION,RETURNED). If a delivery attempt fails,event_details.FailureReasonis surfaced in top-levelmessage.
Carrier-Specific Status & Integration Notes
- Exact UTC (
timestamp) and scan-local (localTime) clocks: Each scan includesobject_createdin UTC alongside aLOCAL_TIMEentry inrelative_timewith aGMT±HH:MMoffset, so bothtimestampandlocalTimeare populated. - VGO pickup locker support: Better Trucks' VGO pickup events (
VGO_PARCEL_PICKED_UP_BY_RECIPIENT) normalize todelivered.
Related Resources
- Live browser lookup tool: Track a Better Trucks package live on lastscanned.com/lookup/bettertrucks
- Carrier hub: All 31 supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
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.
AxleHire (Jitsu) Tracking API & MCP
Track AxleHire / Jitsu (GoJitsu 12- and 16-character alphanumeric tokens and SCD barcodes) same-day and next-day packages via synchronous REST GET or MCP. Normalized JSON status, scan history, and tracking number format rules—no carrier credentials required.