Veho Tracking API & MCP
Query live Veho (veho) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects 14-character VH… tracking numbers and returns a normalized TrackingResult JSON payload—without requiring a Veho enterprise client integration, webhook receiver, or Firebase App Check token flow.
Overview & Quick Facts
| Property | Value |
|---|---|
Carrier slug (?carrier=) | veho |
| Brand & service aliases | Veho, ShipVeho, Veho Next-Day Delivery, Veho Doorstep |
| Category | US regional e-commerce & subscription last-mile carrier (Detection precedence #9 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=VH...,VH... (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 Veho instead of direct requests
- Bypass Firebase App Check & reCAPTCHA Enterprise
401/403rejections: If you try to callgraph.shipveho.com/graphql(getOrderByTrackingIdCWA) from a Cloudflare Worker, Vercel function, or AWS Lambda, Veho rejects the call with401 Unauthorized/403 Forbiddenunless it carries a live Firebase App Check token minted via reCAPTCHA Enterprise. CallingGET https://api.lastscanned.com/v1/track/:numberfrom your backend returns normalized JSON in a singlefetch(). - No enterprise shipper contract required: Veho's merchant webhooks and APIs are available only to contracted enterprise shippers.
lastscannedworks immediately for any developer, post-purchase portal, or WISMO AI agent.
Tracking Number Formats & Auto-Detection (matches vs mayMatch)
Veho is evaluated ninth (#9) in lastscanned's two-pass detector:
| Pass | Rule / Regex | Check Digit | Examples |
|---|---|---|---|
Pass 1 (matches) | /^VH[0-9A-Z]{12}$/i (VH + 12 alphanumeric characters = 14 chars) | — | VH2PN7CHYPNMPR, VH8K4M2P9X1Q7Z |
Pass 2 (mayMatch) | None | — | — |
When is ?carrier=veho optional vs required?
- Optional (auto-detected): All 14-character
VH+ 12 alphanumeric tracking numbers auto-detect in Pass 1 (before AxleHire's 12/16-char alphanumeric rule in Pass 2). - Required (
?carrier=veho): Shipper-assigned tracking numbers or merchant order barcodes inducted into Veho that do not start withVH.
Synchronous GET Request & Normalized JSON Response
curl
curl -s "https://api.lastscanned.com/v1/track/VH2PN7CHYPNMPR" \
-H "Authorization: Bearer $LASTSCANNED_API_KEY"JavaScript / TypeScript (fetch)
const res = await fetch("https://api.lastscanned.com/v1/track/VH2PN7CHYPNMPR", {
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": "VH2PN7CHYPNMPR"
}
}Normalized TrackingResult JSON response
{
"carrier": "veho",
"trackingNumber": "VH2PN7CHYPNMPR",
"status": "delivered",
"statusDescription": "Delivered",
"service": null,
"deliveredAt": "2026-10-22T20:46:52Z",
"deliveredAtLocal": "2026-10-22T15:46:52",
"signedBy": null,
"destination": {
"city": "DALLAS",
"state": "TX",
"country": "US"
},
"estimatedDelivery": null,
"message": null,
"events": [
{
"timestamp": "2026-10-22T20:46:52Z",
"localTime": "2026-10-22T15:46:52",
"status": "delivered",
"description": "Delivered",
"location": "Dallas, TX",
"code": "delivered"
},
{
"timestamp": "2026-10-22T14:12:30Z",
"localTime": "2026-10-22T09:12:30",
"status": "out_for_delivery",
"description": "Out for delivery",
"location": "Dallas, TX",
"code": "pickedUpFromVeho"
},
{
"timestamp": "2026-10-22T08:05:19Z",
"localTime": "2026-10-22T03:05:19",
"status": "in_transit",
"description": "Arrived at Veho facility",
"location": "Dallas, TX",
"code": "PackageArrivedAtFacility"
},
{
"timestamp": "2026-10-21T16:40:00Z",
"localTime": "2026-10-21T11:40:00",
"status": "label_created",
"description": "Order info received",
"location": null,
"code": "created"
}
]
}Raw status & operation codes:
events[].codepreserves Veho's GraphQLoperationidentifier ("created"→label_created;"pickedUpFromClient","PackageLoadedOntoFirstMileTransit","droppedOffAtVeho","PackageArrivedAtFacility","PackageDepartedFromFacility"→in_transit;"pickedUpFromVeho"→out_for_delivery;"delivered"→delivered;"returned","returnedToClient","returnedToVeho"→returned;"misdelivered","PackageHadDeliveryIssue","PackageDelayed","cancelled"→exception).
Carrier-Specific Status & Integration Notes
- Exact UTC (
timestamp) and local (localTime) clocks: Veho provides millisecond-precision UTC timestamps alongside the package's IANAtimeZone(e.g.America/Chicago), so bothtimestampandlocalTimeare populated on every event. - Delivery alerts in
message: If Veho posts an order-level delivery alert (order.alert.body),lastscannedsurfaces it in the top-levelmessagefield.
Related Resources
- Live browser lookup tool: Track a Veho package live on lastscanned.com/lookup/veho
- Carrier hub: All 31 supported carriers
- Regex & check digits: Tracking number formats & auto-detection
- AI support workflows: WISMO AI agents & synchronous tracking
GOFO Express Tracking API & MCP
Track GOFO Express (GFUS and GF tracking numbers) US last-mile packages via synchronous REST GET or MCP. Normalized JSON status, scan history, and tracking number format rules—no carrier credentials required.
Spee-Dee Delivery Tracking API & MCP
Track Spee-Dee Delivery Service (SP 18- and 20-character Midwest regional packages) via synchronous REST GET or MCP. Normalized JSON status, scan history, and tracking number format rules—no carrier credentials required.