Shipping API

Ship your first label in one request

Parcelway turns an address and a weight into a paid label, a PDF, and a tracking link. No carrier accounts to set up.

Read the API docs
create-label.ts
const res = await fetch("https://api.parcelway.dev/v1/labels", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PARCELWAY_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "wh_berlin_01",
    to: { name: "Ines Moreau", postcode: "75011", country: "FR" },
    parcel: { weight_g: 1200 },
    service: "cheapest",
  }),
});

const label = await res.json();
console.log(label.pdf_url, label.tracking_url);

Rates from 30 carriers

Ask for the cheapest or fastest service and we pick the carrier at label time.

Addresses checked first

We flag a bad postcode before you pay for the label, not after the parcel bounces.

A webhook for every scan

Get picked up, in transit, and delivered events signed and retried for 72 hours.

Test keys print real PDFs

Sandbox labels look exactly like live ones, so you can check your printer setup free.