Carriers

Swiss Post Tracking API & MCP

Query live Swiss Post (swisspost, Die Post / La Poste Suisse) package status and scan history in a single synchronous GET request or MCP tool call. lastscanned auto-detects S10 numbers ending CH (with a valid check digit) and the 18-digit domestic parcel numbers that start with 99.

Overview & Quick Facts

PropertyValue
Carrier slug (?carrier=)swisspost
Brand & service aliasesSwiss Post, Die Schweizerische Post, La Poste Suisse, PostPac, Meine Sendungen
CategoryNational post (Switzerland)
Single-package REST endpointGET https://api.lastscanned.com/v1/track/{trackingNumber}
Batch REST endpointGET https://api.lastscanned.com/v1/track?numbers=990012345678901234,RR123456785CH
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)

Tracking Number Formats & Auto-Detection

PassRuleCheck DigitExamples
Pass 1 (matches)UPU S10 ending CH, or 99 + 16 digits (printed 99.00.123456.12345678)S10 mod 11 for the S10 formRR123456785CH, 990012345678901234
Pass 2 (mayMatch)None——

Dots and spaces in the domestic form are ignored.

Synchronous GET Request & Normalized JSON Response

curl

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

MCP track_package tool call

{
  "tool": "track_package",
  "arguments": { "tracking_number": "990012345678901234" }
}

Normalized TrackingResult JSON response

{
  "carrier": "swisspost",
  "trackingNumber": "990012345678901234",
  "status": "in_transit",
  "statusDescription": "Arrival at the delivery point",
  "service": null,
  "deliveredAt": null,
  "deliveredAtLocal": null,
  "signedBy": null,
  "destination": null,
  "events": [
    {
      "timestamp": "2026-10-26T06:41:00Z",
      "localTime": "2026-10-26T07:41:00",
      "status": "in_transit",
      "description": "Arrival at the delivery point",
      "location": "8010 Zürich",
      "code": "1100"
    }
  ]
}

Status Notes

  • Swiss Post's scans are codes, not text. The adapter turns them into wording with the same public text bundle the tracking page uses, and falls back to the partner carrier's own description or the bare code.
  • Scan times are Swiss local time (Europe/Zurich).
  • The shipment-level state (delivered, missed delivery, returned) overrides the newest scan's status when Swiss Post reports one.

On this page