Developers

Tracking API

Every parcel we handle is exported from India, and the destination carrier cannot report anything until it takes possession in-country. Across 501 measured parcels that left the buyer's tracking number showing nothing for a median of 6.3 days after dispatch — 80% stayed silent past day five.

This API is that missing window: pickup, hub, export, flight and customs, in a form another system can read.

No authentication. No API key, no OAuth. Cross-origin requests are allowed from any host.

No personal data. Shipment facts only — never a buyer name, address, email, or the contents or value of an order.

Rate limit. 120 requests per minute per IP. Responses may be cached for 60 seconds.

Track one shipment

GET https://www.paamship.com/api/v1/track/PM32608216793759

The reference is a Paamship reference (PM…) or the destination carrier's tracking number. Order numbers are not accepted — this is a shipment API.

{
  "reference": "PM32608216793759",
  "status": "delivered",
  "status_message": "Shipment Delivered",
  "origin_country": "IN",
  "destination_country": "US",
  "shipped_at": "2026-08-21T09:46:18.000Z",
  "delivered_at": "2026-08-30T17:42:54.000Z",
  "last_mile": {
    "carrier": "UNI UNI",
    "tracking_number": "UUS68M4980235458380",
    "tracking_url": "https://www.uniuni.com/tracking/?no=UUS68M4980235458380"
  },
  "checkpoints": [
    {
      "time": "2026-08-30T17:42:54.000Z",
      "status": "delivered",
      "stage": "destination",
      "message": "Shipment Delivered",
      "location": "Santa Clara CA"
    },
    {
      "time": "2026-08-22T06:45:00.000Z",
      "status": "in_transit",
      "stage": "origin",
      "message": "Received at Delhi Hub",
      "location": "Delhi, India"
    }
  ],
  "updated_at": "2026-09-03T00:31:12.000Z"
}

Track up to 25

GET https://www.paamship.com/api/v1/track?references=PM32608216793759,PM32609016915804

Results come back in the order requested. A reference that isn't found is reported on its own rather than failing the whole call.

Fields

statusenumpending, info_received, in_transit, out_for_delivery, delivered, exception
checkpoints[].stageenumorigin, international, destination. The first two are the legs a destination carrier does not report.
checkpoints[].timestring | nullUTC instant (ISO-8601). Render in whichever timezone suits the reader.
last_mileobject | nullNull until the parcel is handed to the destination carrier — which is exactly the window this API covers.
checkpointsarrayMost recent first.

Errors

{ "error": { "code": "not_found", "message": "No shipment found for that reference." } }

400 invalid_reference · 404 not_found · 429 rate_limited

OpenAPI

A machine-readable description is served alongside the routes it documents, so it cannot drift out of date.

GET https://www.paamship.com/api/v1/openapi.json

Postman

In Postman choose Import → Link and paste the URL below. It is generated from the same source as the routes, so it cannot go stale.

https://www.paamship.com/api/v1/postman.json

Questions or integration requests: support@paamship.com