Carriers

CDL Last Mile Tracking API & MCP

Query live CDL Last Mile Solutions (cdl) package status and scan history across the US Northeast and Mid-Atlantic in a single synchronous GET request or MCP tool call. lastscanned auto-detects CDL… label numbers in Pass 1 and hyphenated 943506776-0 order numbers in Pass 2, returning a normalized TrackingResult JSON payload—without requiring a CDL shipper account.

Overview & Quick Facts

PropertyValue
Carrier slug (?carrier=)cdl
Brand & service aliasesCDL Last Mile Solutions, CDL Delivers
CategoryUS Northeast & Mid-Atlantic regional last-mile carrier (Detection precedence #11 of 31)
Single-package REST endpointGET https://api.lastscanned.com/v1/track/{trackingNumber}
Batch REST endpointGET https://api.lastscanned.com/v1/track?numbers=CDL...,CDL... (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 & pricingAuthorization: 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 CDL Last Mile

  • No shipper portal credentials: CDL's merchant tracking feeds require an active shipper relationship. lastscanned lets any application or WISMO agent query CDL shipments synchronously via GET /v1/track/:number.
  • Fixes out-of-order delivery scans & duplicate photo rows: CDL stamps "Delivery complete" truncated to the whole minute (which can sort chronologically before the "Package Scanned at Delivery" doorstep scan taken seconds later in the same minute) and emits duplicate event rows when a driver uploads two proof-of-delivery photos. lastscanned sorts "Delivery complete" to the top of its minute and deduplicates identical photo rows automatically.

Tracking Number Formats & Auto-Detection (matches vs mayMatch)

CDL Last Mile is evaluated eleventh (#11) in lastscanned's two-pass detector and supports both Pass 1 (matches) and Pass 2 (mayMatch):

PassRule / RegexCheck DigitExamples
Pass 1 (matches) — CDL label/^CDL\d{11}$/i (CDL + 11 digits = 14 chars)—CDL02855120513
Pass 2 (mayMatch) — CDL order number/^\d{9}-\d$/ (9 digits + hyphen + 1 digit = 11 chars)—943506776-0

When is ?carrier=cdl optional vs required?

  • Optional (auto-detected): All CDL + 11-digit labels (Pass 1) and 943506776-0-style hyphenated order numbers (Pass 2).
  • Required (?carrier=cdl): Custom shipper references (such as CDDL07909376, plain numeric order IDs, or internal 13509.031725 tracking IDs).

Synchronous GET Request & Normalized JSON Response

curl

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

JavaScript / TypeScript (fetch)

const res = await fetch("https://api.lastscanned.com/v1/track/CDL02855120513", {
  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": "CDL02855120513"
  }
}

Normalized TrackingResult JSON response

{
  "carrier": "cdl",
  "trackingNumber": "CDL02855120513",
  "status": "delivered",
  "statusDescription": "Delivery complete",
  "service": null,
  "deliveredAt": "2026-10-24T18:14:00Z",
  "deliveredAtLocal": "2026-10-24T14:14:00",
  "signedBy": null,
  "destination": {
    "city": "BROOKLYN",
    "state": "NY",
    "country": "US"
  },
  "estimatedDelivery": null,
  "events": [
    {
      "timestamp": "2026-10-24T18:14:00Z",
      "localTime": "2026-10-24T14:14:00",
      "status": "delivered",
      "description": "Delivery complete",
      "location": "BROOKLYN, NY",
      "code": null
    },
    {
      "timestamp": "2026-10-24T18:14:27Z",
      "localTime": "2026-10-24T14:14:27",
      "status": "out_for_delivery",
      "description": "Package Scanned at Delivery",
      "location": "BROOKLYN, NY",
      "code": null
    },
    {
      "timestamp": "2026-10-24T12:05:11Z",
      "localTime": "2026-10-24T08:05:11",
      "status": "out_for_delivery",
      "description": "Package Out For Delivery",
      "location": "CARLSTADT, NJ",
      "code": null
    },
    {
      "timestamp": "2026-10-24T08:32:44Z",
      "localTime": "2026-10-24T04:32:44",
      "status": "in_transit",
      "description": "Package Scanned at Local Delivery Center",
      "location": "CARLSTADT, NJ",
      "code": null
    },
    {
      "timestamp": "2026-10-23T19:20:00Z",
      "localTime": "2026-10-23T15:20:00",
      "status": "label_created",
      "description": "Label has been created",
      "location": "CARLSTADT, NJ",
      "code": null
    }
  ]
}

Raw status & exception flags: CDL scans do not use separate event codes (events[].code is null), but include an isException boolean flag (e.g. on "DELAYED- Wrong Address" or "Awaiting Package From Shipper"). lastscanned maps "Awaiting Package" and "Label has been created" to label_created, "Package Out For Delivery" and "Package Scanned at Delivery" to out_for_delivery, "Delivery complete" to delivered, and flagged delay scans to exception.

Carrier-Specific Status & Integration Notes

  • Eastern Time UTC conversion: CDL operates across Eastern Time states (CT, DC, DE, GA, MA, MD, ME, NC, NH, NJ, NY, OH, PA, RI, SC, VA, VT, WV), so scans in those states convert to exact UTC in timestamp using America/New_York.
  • No estimatedDelivery field: CDL does not publish an estimated delivery timestamp on public tracking records, so estimatedDelivery is always null.

On this page