Packy Tracking API (1.0.0)

Packy is a high-performance RESTful shipment tracking API and multicarrier tracking API designed to normalize delivery data across 1385+ carriers globally. Built for developers, e-commerce platforms, and logistics providers, it functions as a comprehensive package tracking API and parcel tracking API in a single integration. Packy Tracking API offers a generous free tier (free package) for developers to start testing and tracking immediately with no credit card required. Key features include carrier auto-detection, realtime updates via high-frequency webhooks, and unified delivery tracking API endpoints. Automate your post-purchase experience, reduce WISMO (Where Is My Order) tickets, and get normalized JSON status updates for any courier worldwide using our free plan or scalable commercial tiers.

Trackings

Create, list, retrieve, and delete shipment trackings.

List the account's trackings

Returns a paginated list of the account's trackings.

Authorizations:
BearerAuthApiKeyHeader
query Parameters
page
integer >= 1
Default: 1

Page number.

limit
integer >= 1
Default: 20

Page size.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "meta": {
    }
}

Create tracking(s)

Creates one or more trackings. The body is either a single object or an array of objects. Up to 40 trackings can be created per request.

Specifying the courier is optional: if courier_code is omitted, the courier is detected automatically from the tracking number.

This operation consumes account credits.

Behavior depends on ?async:

  • async=true (default) — trackings are created and refreshed in the background; the response contains the created trackings without events yet.
  • async=false — the response is enriched with the latest events for each tracking (events array).

The response is a {data, errors} envelope:

  • 201 Created — all items were created;
  • 207 Multi-Status — partial success (both data and errors present);
  • 422 Unprocessable Entity — nothing was created, only errors.
Authorizations:
BearerAuthApiKeyHeader
query Parameters
async
boolean
Default: true

Return immediately (true) or wait for enriched events (false).

Request Body schema: application/json
required
One of
tracking_number
required
string
courier_code
string

Courier code; if omitted, it is detected automatically.

Responses

Request samples

Content type
application/json
Example
{
  • "tracking_number": "9400111899562537683144",
  • "courier_code": "usps"
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "errors": [
    ]
}

Get a tracking with events

Returns a single tracking with its events.

Authorizations:
BearerAuthApiKeyHeader
path Parameters
id
required
string

Tracking identifier.

Responses

Response samples

Content type
application/json
{
  • "id": "2f8b1c4d5e6f7a8b9c0d1e2f3a4b5c6d",
  • "tracking_number": "9400111899562537683144",
  • "courier_code": "usps",
  • "delivery_status": "in_transit",
  • "updated_at": "2026-05-26T14:30:00Z",
  • "events": [
    ]
}

Delete a tracking

Deletes a tracking.

Authorizations:
BearerAuthApiKeyHeader
path Parameters
id
required
string

Tracking identifier.

Responses

Response samples

Content type
application/json
{
  • "code": "unauthorized",
  • "message": "Invalid or missing API key"
}

Couriers

List supported couriers and detect a courier by tracking number.

List supported couriers

Returns the list of supported couriers.

Authorizations:
BearerAuthApiKeyHeader

Responses

Response samples

Content type
application/json
[]

Detect courier by tracking number

Returns the list of possible couriers for the given tracking number.

Authorizations:
BearerAuthApiKeyHeader
Request Body schema: application/json
required
tracking_number
required
string

Responses

Request samples

Content type
application/json
{
  • "tracking_number": "MGRAE0003506539YQ"
}

Response samples

Content type
application/json
[]

Webhooks

Manage webhook subscriptions for delivery updates.

List webhook subscriptions

Returns the account's webhook subscriptions.

Authorizations:
BearerAuthApiKeyHeader

Responses

Response samples

Content type
application/json
[
  • {}
]

Create a subscription

Creates a webhook subscription. url must be https. secret is never returned — its presence is surfaced via the has_secret field.

Authorizations:
BearerAuthApiKeyHeader
Request Body schema: application/json
required
url
required
string <uri>

Must use https.

secret
string

Secret used to sign deliveries (never returned in responses).

enabled
boolean
Default: true

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{}

Update a subscription

Partial update. Only the fields to be changed are sent. An empty secret clears the secret (has_secret=false).

Authorizations:
BearerAuthApiKeyHeader
path Parameters
id
required
integer <int64>

Subscription identifier.

Request Body schema: application/json
required
url
string <uri>
secret
string

An empty string clears the secret.

enabled
boolean

Responses

Request samples

Content type
application/json
{
  • "enabled": false
}

Response samples

Content type
application/json
{}

Delete a subscription

Authorizations:
BearerAuthApiKeyHeader
path Parameters
id
required
integer <int64>

Subscription identifier.

Responses

Response samples

Content type
application/json
{
  • "code": "unauthorized",
  • "message": "Invalid or missing API key"
}