Carriers

CNE Express Tracking API & MCP

Query live CNE Express (cne, 递一国际物流) cross-border package status, scan history, and destination last-mile handoff numbers in a single synchronous GET request or MCP tool call. lastscanned auto-detects 13-character 3A5V… waybills in Pass 1 and returns a normalized TrackingResult JSON payload—without requiring a CNE merchant account or API signature secret.

Overview & Quick Facts

PropertyValue
Carrier slug (?carrier=)cne
Brand & service aliasesCNE Express (递一国际物流), CNE Global, cne.com, 3A5V…
CategoryChinese cross-border e-commerce logistics carrier (Detection precedence #27 of 31)
Single-package REST endpointGET https://api.lastscanned.com/v1/track/{trackingNumber}
Batch REST endpointGET https://api.lastscanned.com/v1/track?numbers=3A5V...,3A5V... (up to 10 CNE numbers per batch; up to 100 total numbers)
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 CNE Express instead of direct requests

  • Avoid CNE WebAssembly MD5 request signing & ReturnValue: -5555 IP blocks: Direct requests from serverless functions (Cloudflare Workers, Vercel, AWS Lambda) to wapi.cne.com require computing custom MD5 request signatures (signature header and md5 body digest) and get blocked for hours with ReturnValue: -5555 after just 15–20 lookups from a shared datacenter IP. Calling GET https://api.lastscanned.com/v1/track/:number returns clean JSON in one fetch().
  • Automatic last-mile carrier & exchange number extraction: Once a CNE parcel clears customs and is handed to a local carrier (such as USPS, Royal Mail, UniUni, Evri, or DHL), lastscanned extracts both lastMileSupplier.enName and Response_Info.transNbr into top-level message (e.g. "Handed to Royal Mail as WG123456789GB" or "Handed to USPS as 9261290312839104827163").

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

CNE Express is evaluated twenty-seventh (#27) in lastscanned's two-pass detector:

PassRule / RegexCheck DigitExamples
Pass 1 (matches)/^3A5V\d{9}$/i (3A5V + 9 digits = 13 chars)—3A5V700123456, 3A5V735000001
Pass 2 (mayMatch)None——

When is ?carrier=cne optional vs required?

  • Optional (auto-detected): All 13-character 3A5V + 9-digit CNE waybill numbers auto-detect in Pass 1.
  • Required (?carrier=cne): Destination carrier tracking numbers (transNbr) or merchant reference numbers that you want to query inside CNE's tracking system rather than the destination carrier.

Synchronous GET Request & Normalized JSON Response

curl

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

JavaScript / TypeScript (fetch)

const res = await fetch("https://api.lastscanned.com/v1/track/3A5V700123456", {
  headers: { Authorization: `Bearer ${process.env.LASTSCANNED_API_KEY}` },
});
const pkg = await res.json();
console.log(pkg.status, pkg.message, pkg.events[0]);

MCP track_package tool call

{
  "tool": "track_package",
  "arguments": {
    "tracking_number": "3A5V700123456"
  }
}

Normalized TrackingResult JSON response

{
  "carrier": "cne",
  "trackingNumber": "3A5V700123456",
  "status": "delivered",
  "statusDescription": "Delivered",
  "service": null,
  "deliveredAt": "2026-10-24T13:58:00Z",
  "deliveredAtLocal": "2026-10-24T14:58:00",
  "signedBy": null,
  "destination": {
    "city": null,
    "state": null,
    "country": "GB"
  },
  "message": "Handed to Royal Mail as WG849201736GB",
  "events": [
    {
      "timestamp": null,
      "localTime": "2026-10-24T14:58:00",
      "status": "delivered",
      "description": "Delivered",
      "location": "London",
      "code": "3"
    },
    {
      "timestamp": null,
      "localTime": "2026-10-22T09:30:00",
      "status": "in_transit",
      "description": "Custom clearance completed",
      "location": "London",
      "code": "1"
    },
    {
      "timestamp": "2026-10-19T14:29:14Z",
      "localTime": "2026-10-19T22:29:14",
      "status": "in_transit",
      "description": "Departed from sorting center",
      "location": "Shanghai",
      "code": "1"
    },
    {
      "timestamp": "2026-10-18T07:10:00Z",
      "localTime": "2026-10-18T15:10:00",
      "status": "label_created",
      "description": "Parcel Information Received",
      "location": null,
      "code": "0"
    }
  ]
}

Chaining Last-Mile Handoffs (message) & Status Notes

  • Handoff number in message: When CNE assigns a destination carrier number (transNbr), message formats it as "Handed to <Carrier> as <TrackingNumber>". If the destination carrier is one of the 31 supported carriers (such as USPS, Canada Post, UniUni, or DHL), you can pass that secondary number straight to GET /v1/track/:number.
  • Timestamps & status codes: Origin scans in China (CN.<city>) and top-level deliveryDate are converted from Asia/Shanghai (UTC+8) into UTC (timestamp / deliveredAt), while overseas scan rows retain their local facility wall clock in localTime. CNE numeric state codes (0 not delivered, 1/2 shipping, 3 delivered, 4 timeout, 5 customs inspection, 6 invalid address, 7 lost, 8 returned, 9 exception, 10 destroyed) are preserved in events[].code.

On this page