Price, book and track Pakkepost shipments from your own system - a webshop, an ERP or a warehouse application.

How a shipment is made

  1. Price it. GET /v1/prices turns a parcel size, weight and route into the products that fit, with prices. Each product has the productId you book with.
  2. Book it. POST /v3/booking books one or more packages and answers with an orderId and a payment link.
  3. Pay it. The payment link is settled - by your system from your account balance, or by a person paying by card. Nothing reaches the carrier before this.
  4. Track it. GET /v3/tracking returns the consignment, the tracking link and the label (PDF) for each package.

Booked by mistake and not paid yet? POST /v3/booking/{orderId}/cancel withdraws it.

A booking

The body is an array, one entry per package, even for a single one. Send an Idempotency-Key: a retry with the same key returns the first answer instead of booking twice.

POST https://pakkepost.azure-api.net/v3/booking
Ocp-Apim-Subscription-Key: <your key>
Idempotency-Key: webshop-order-1234
Content-Type: application/json

[{
  "userId": 863,
  "senderName": "Kari Olsen AS",
  "senderAddressLine": "Testgata",
  "senderPostalCode": "3182",
  "senderCity": "Oslo",
  "senderEmail": "post@kariolsen.no",
  "senderPhoneNumber": "41210914",
  "recipientName": "Steinar Hansen",
  "recipientAddressLine": "Bytestveien",
  "recipientAddressLineNumber": "11",
  "recipientPostalCode": "3186",
  "recipientCity": "Stavanger",
  "recipientPhoneNumber": "41234334",
  "recipientEmail": "steinar@example.com",
  "recipientReference": "order-1234",
  "productId": 2027
}]
{
  "orderId": "863X20260801194134980655API",
  "payment_link": "https://...",
  "paymentMethod": "deposit",
  "items": [
    { "itemIndex": 0, "itemId": "863X20260801194134980655API-0",
      "reference": "order-1234", "recipientName": "Steinar Hansen" }
  ]
}

Match what comes back on itemIndex, itemId or your own recipientReference - never on the order of the consignments.

Test and production

Base URLWhat happens
Testhttps://pakkepost.azure-api.net/testThe same endpoints and answers as production - but no booking is completed: nothing is sent to a carrier and no label is made. Use it to build and check your integration.
Productionhttps://pakkepost.azure-api.netReal bookings, real labels, real charges.

Authentication

Every call needs your subscription key, in the Ocp-Apim-Subscription-Key header (or the subscription-key query parameter). Your keys are under Profile once you are signed in. A key belongs to a product - test or production - and only works there.

What else you can do

Returns

Set isReverse: 1 on a booking to send a parcel back to the store. PostNord only.

Automatic label printing

Store a PrintNode key and printer once with POST /v3/autoprint, and every label prints by itself after payment.

Service points

POST /locations finds the PostNord pickup points near a postal code.

Extras

Home delivery and other extra services, priced with the product: GET /v1/products/{id}/extras.

Receipts

Invoices for booked orders, one at a time or for a period: GET /receipt, GET /receipt/list.

Carriers and products

PostNord, Bring, Helthjem, NBT and FedEx, from small parcels to pallets - PostNord Groupage takes up to 1000 kg. GET /v1/products lists the whole catalogue. GET /v1/prices shows the products that fit your parcel; the pallet products appear from 35 kg.

Which version to use

v3 for anything new. POST /booking, /v1/booking and /v2/booking, and the older tracking endpoints, stay for integrations that already use them: they cannot tell you which consignment belongs to which package you sent, and returns and autoprint are v3 only. The older endpoints answer HTTP 200 with the real status in the body - read the body there.

No code needed?

Pakkepost has ready-made integrations: the Pakkepost app for Shopify and the Pakkepost plugin for WooCommerce.

Help

Customer service: 35 10 24 19, 09:00-15:30.