Skip to content

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.

Every request
curl https://api.shipstack.example/v1/couriers \
  -H "Authorization: Bearer $SHIPSTACK_API_KEY"

Endpoints

Method Path Purpose
GET/health, /readyOperational probes. Unauthenticated.
GET/v1/couriersSupported couriers and their capabilities.
GET/v1/couriers/:code/schemaThe credential fields a courier requires.
POST/v1/quotesRate shop across every enabled courier.
POST/v1/shipmentsBuy a label.
GET/v1/shipmentsList shipments, newest first.
GET/v1/shipments/:idRetrieve one shipment.
GET/v1/shipments/:id/labelDownload the label document.
POST/v1/shipments/:id/voidCancel a label.
GET/v1/tracking/:trackingScan 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