Skip to content

Developer API

Ship straight from your own systems

A plain REST API over JSON. Quote a parcel across four carriers, buy the service you want, pull the label in the format your printer expects and follow the consignment to the door — from your WMS, your storefront or whatever you built in-house.

  • JSON over HTTPS
  • Free sandbox
  • Signed webhooks

How it works

Four calls from a parcel to a doorstep

The whole integration is a quote, a purchase, a label download and a tracking feed. Everything else is convenience.

  1. 01

    Quote

    Post the parcel and the two addresses. You get back every eligible service with the exact price you would pay for each. Quotes are free and cost nothing to run.

  2. 02

    Buy

    Post the service you chose with an idempotency key. The shipment is created, funds are taken from your wallet, card or credit line, and a tracking number is returned.

  3. 03

    Label

    Fetch the label in the format your hardware wants — 6x4 PDF for a thermal printer, A4 for the office, or raw ZPL to stream at a Zebra.

  4. 04

    Track

    Poll the tracking endpoint, or let signed webhooks push each carrier scan to you as it happens. Both return the same event history.

Endpoints

Six endpoints cover the whole lifecycle. Full reference documentation, including every request field and error code, is issued with your API access.

ParcelPointPro REST API endpoints, with method, path and purpose.
Method Path Purpose
POST /api/v1/quotes Price one parcel across every carrier service it is eligible for.
POST /api/v1/shipments Buy a label for the service you picked. Accepts an idempotency key.
GET /api/v1/shipments/{id}/label Download the label as a 6x4 PDF, an A4 PDF or raw ZPL.
GET /api/v1/tracking/{tracking} Current status and full event history for a consignment.
GET /api/v1/addresses Read and search the saved sender and recipient address book.
GET /api/v1/account/balance Wallet balance, pending charges and any remaining credit limit.

In practice

Buying a label is one request

Send the service you chose from the quote, the two addresses and the parcel. You get back a shipment you can print and track.

POST /api/v1/shipments
curl https://parcelpointpro.com/api/v1/shipments \
  -X POST \
  -H "Authorization: Bearer ppp_live_7f4c…" \
  -H "Idempotency-Key: order-10482" \
  -H "Content-Type: application/json" \
  -d '{
    "service": "example-tracked-service",
    "to": {
      "name": "A Buchanan",
      "line1": "18 Wellington Street",
      "city": "Leeds",
      "postcode": "LS1 4AP",
      "country": "GB"
    },
    "parcel": { "weight_g": 2000, "length_mm": 350, "width_mm": 250, "height_mm": 80 },
    "reference": "order-10482"
  }'

The idempotency key is your order reference. Send the request twice and you still buy one label.

201 Created · application/json
{
  "id": "shp_9f2c41ba7d",
  "status": "purchased",
  "reference": "order-10482",
  "service": {
    "code": "example-tracked-service",
    "carrier": "Example Carrier",
    "name": "Tracked service"
  },
  "price": {
    "net": "0.00",
    "vat": "0.00",
    "gross": "0.00",
    "currency": "GBP"
  },
  "charged_to": "wallet",
  "tracking": {
    "number": "TRACK000000000",
    "status": "label_created"
  },
  "label": {
    "formats": ["pdf_6x4", "pdf_a4", "zpl"],
    "url": "/api/v1/shipments/shp_9f2c41ba7d/label"
  },
  "created_at": "2026-07-30T09:14:22Z"
}

Example response — figures are illustrative, not quoted rates. The price you were quoted is the price you are charged, and it is the only figure the API returns.

Authentication

Keys you can hand out narrowly and pull back fast

An API key can spend your money, so it is treated as a credential rather than a setting.

Bearer tokens

Send the key as an Authorization: Bearer header on every request. Keys are shown once at creation and stored hashed, so a leaked database does not leak credentials.

Granted by an administrator

API access is not self-service. You request it from the portal and an administrator enables it for your account, which is also how we keep an eye on what the platform is being used for.

Scoped per key

Each key carries only the scopes it needs. A key that fetches tracking for your customer-facing site has no business buying labels, so do not give it that scope.

Per-key rate limits

Limits are set on the key, not the account, so a noisy batch job cannot starve your checkout of quotes. Every response carries the remaining allowance in its headers.

Optional IP allowlist

Pin a key to the addresses your servers actually call from. Requests arriving from anywhere else are rejected before they reach your account.

Expiry and instant revoke

Give a key an expiry date when you create it, and revoke any key immediately from the portal. Revocation takes effect on the next request, not the next cache cycle.

Safety

Three things that stop an integration costing you money

Most of the damage an API integration can do is a duplicate purchase, a test that hit production, or a webhook nobody checked. All three are handled.

Sandbox keys

A sandbox key returns realistic quotes, shipments, labels and tracking events without touching a carrier or a penny of your balance. Build and test the whole flow before you go live, and point your CI at it permanently.

Sandbox keys cannot spend money. There is no configuration to get wrong.

Idempotency keys

Send an Idempotency-Key header on a purchase and we store the result against it. If your request times out and your retry logic fires again, the second call returns the first response instead of buying a second label.

Use your own order reference. One retried purchase cannot double-charge.

Signed webhooks

Tracking events are delivered to your endpoint with an HMAC signature over the raw body and a timestamp, so you can verify the payload came from us and is not a replay. Failed deliveries are retried with a backoff.

Verify the signature before you trust the body. Always.

Getting access

Three steps to a live key

API access is enabled per account by an administrator. It is not a paid add-on and there is no charge for it.

  1. Step 1

    Create an account

    Sign up with your business details. You can use the portal straight away — quote, buy and print by hand while your integration is still being written.

  2. Step 2

    Request API access

    Ask from inside the portal and tell us briefly what you are building and roughly what volume to expect. It takes a minute.

  3. Step 3

    An administrator enables it

    We review the request — we aim to do that within one working day — and turn on API access for the account. You issue your own keys from there, starting with a sandbox key.

Next step

Build against the sandbox before you spend anything

Open an account, request access and integrate against sandbox keys for as long as you need. Nothing is charged until you swap in a live key and buy a real label. If you want to talk the integration through first, we are happy to.