Documentation
Overview
Shipstack is one HTTP API for forty couriers. Ask every carrier you hold an account with for a rate at once, buy the label, and track the parcel, all in one format.
Base URL
Every endpoint lives under a single versioned base URL.
https://api.shipstack.example/v1
Authentication
All /v1 routes require a bearer API key, which you create in
Shipstack Manager. A key is scoped to exactly one account: it can only see
that account's shipments and can only quote against the carriers that
account has enabled.
curl https://api.shipstack.example/v1/couriers \
-H "Authorization: Bearer $SHIPSTACK_API_KEY"
Endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /health, /ready | Operational probes. Unauthenticated. |
GET | /v1/couriers | Supported couriers and their capabilities. |
GET | /v1/couriers/:code/schema | The credential fields a courier requires. |
POST | /v1/quotes | Rate shop across every enabled courier. |
POST | /v1/shipments | Buy a label. |
GET | /v1/shipments | List shipments, newest first. |
GET | /v1/shipments/:id | Retrieve one shipment. |
GET | /v1/shipments/:id/label | Download the label document. |
POST | /v1/shipments/:id/void | Cancel a label. |
GET | /v1/tracking/:tracking | Scan history for a parcel. |
Conventions
Money is always integer minor units
Every amount is an object with an integer amount in the minor
unit of its currency. 749 with "GBP"
is £7.49. Amounts never pass through a floating point number in your
integration, and they never should in ours.
Measurements are integers too
Weights are grams (weight_g) and dimensions are millimetres
(length_mm, width_mm, height_mm).
Countries, postcodes and dates
Countries are ISO 3166-1 alpha-2 ("GB"). Timestamps and dates
are RFC 3339. Postcodes are normalised for you before they reach a carrier.
Where to next
- Quickstart: from an API key to a printed label.
- Quotes: the full request and response shape.
- Errors and rate limits: including how partial failures are reported.