Zippendo

Developers

A shipping API your team will actually enjoy

A REST API for labels, tracking and service points across your carriers. Use it next to the Zippendo app, or on its own when your system only needs the carrier connections. SDKs in seven languages, a signed webhook for every event, and an MCP server so an AI agent can book a parcel too.

From token to label in four steps.

Create a token, install an SDK or use cURL, and post a shipment. The shipping rule you name picks the carrier and service. Send the shipment, and the label comes back as a document you can print or send to Zippendo Printer.

  1. Create an API token

    Open API settings in the dashboard. Tokens start with zipp_, are shown once, and can be restricted to a single brand.

    API settings
  2. Install an SDK, or don't

    npm, pip, Composer, go get, gem, Maven or NuGet. Every SDK is generated from the public OpenAPI spec and covers every endpoint. cURL works just as well.

    SDK overview
  3. Create a shipment

    Post the receiver, the parcels and a shipping rule id. The rule supplies carrier, service and sender address. Then send the shipment, and the carrier returns the label and tracking number.

    Shipments in the reference
  4. Listen for events

    Point a webhook at your server. Every delivery is a POST signed with HMAC-SHA256 of the raw body, tried up to 5 times, with every attempt in the delivery log.

    Webhooks quickstart
curl https://api.zippendo.com/orgs/org_8f3kd92ld0/shipments \  -H "Authorization: Bearer $ZIPPENDO_API_TOKEN" \  -H "Content-Type: application/json" \  -d '{    "reference": "ORDER-1042",    "type": "outbound",    "shippingRuleId": "rule_3c4d5e6f",    "parties": [{      "type": "receiver",      "name": "Anna Jensen",      "address1": "Vesterbrogade 12",      "postalCode": "1620",      "city": "København V",      "countryCode": "DK",      "email": "[email protected]"    }],    "parcels": [{      "weight": 2.5,      "weightUnit": "kg",      "dimensions": { "length": 30, "width": 20, "height": 10 },      "orderLines": []    }]  }'

Every error carries a machine-readable code next to the message. A retried webhook keeps the same X-Webhook-Id, so skipping duplicates is one lookup.

Labels, tracking and service points, from your own code.

MCP, webhooks and integrations from one catalog

Connect Claude, Cursor or ChatGPT over OAuth, or send shipment events to Klaviyo, Slack, Zapier and Make without writing the glue.

SDKs

7

languages, generated from the spec

Events you can listen for

  • order.created
  • shipment.created
  • shipment.dispatched
  • tracking.updated
  • shipment.error

One request in, every event out

Create a shipment with a shipping rule id and the carrier, service and sender address are decided for you. Then every change lands on your endpoint as a signed webhook.

An MCP server for agents

Point Claude, Cursor or ChatGPT at api.zippendo.com/mcp, and it creates shipments, tracks parcels and reads your orders with the permissions you approve.

Only need the carriers?

  • Labels
  • Tracking
  • Service points
  • Shipping quotes

API access

100%

of plans, Free included

New carriers

1 week

is how long we usually take to connect one you need

Where to go next

  • API reference

    Every endpoint, request body and response, with a playground.

    Open the reference
  • SDKs

    TypeScript, Python, PHP, Go, Ruby, Java and C#, generated from the same spec.

    Pick a language
  • Custom order channels

    Your own shop or ERP as an order source, pushed in or pulled by the API.

    Build a channel
  • MCP server

    Connect Claude, Cursor or ChatGPT to your account over OAuth.

    Connect an agent

Guides

  • Carrier API integration

    What connecting carriers yourself takes, and when one shipping API is the simpler route.

    Read the guide
  • HS codes

    Find the right tariff number for each product and where it goes on customs documents.

    Read the guide