# Veho Tracking API & MCP

URL: https://docs.lastscanned.com/carriers/veho

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`/`403` rejections**: If you try to call `graph.shipveho.com/graphql` (`getOrderByTrackingIdCWA`) from a Cloudflare Worker, Vercel function, or AWS Lambda, Veho rejects the call with `401 Unauthorized` / `403 Forbidden` unless it carries a live Firebase App Check token minted via reCAPTCHA Enterprise. Calling `GET https://api.lastscanned.com/v1/track/:number` from your backend returns normalized JSON in a single `fetch()`.
- **No enterprise shipper contract required**: Veho's merchant webhooks and APIs are available only to contracted enterprise shippers. `lastscanned` works 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 with `VH`.

## Synchronous `GET` Request & Normalized JSON Response

### `curl`

```bash
curl -s "https://api.lastscanned.com/v1/track/VH2PN7CHYPNMPR" \
  -H "Authorization: Bearer $LASTSCANNED_API_KEY"
```

### JavaScript / TypeScript (`fetch`)

```ts
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

```json
{
  "tool": "track_package",
  "arguments": {
    "tracking_number": "VH2PN7CHYPNMPR"
  }
}
```

### Normalized `TrackingResult` JSON response

```json
{
  "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[].code` preserves Veho's GraphQL `operation` identifier (`"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 IANA `timeZone` (e.g. `America/Chicago`), so both `timestamp` and `localTime` are populated on every event.
- **Delivery alerts in `message`**: If Veho posts an order-level delivery alert (`order.alert.body`), `lastscanned` surfaces it in the top-level `message` field.

## Related Resources

- **Live browser lookup tool**: [Track a Veho package live on lastscanned.com/lookup/veho](https://lastscanned.com/lookup/veho)
- **Carrier hub**: [All 31 supported carriers](/carriers)
- **Regex & check digits**: [Tracking number formats & auto-detection](/formats)
- **AI support workflows**: [WISMO AI agents & synchronous tracking](/wismo)
