Karl's shipping API for ERP and WMS
A REST API on the Enterprise plan: read orders, compare live rates and create labels programmatically, straight from your ERP or WMS. dry_run fully validates an order without buying real postage; the idempotency key prevents duplicate labels on retries.
What Karl's API handles for your system
-
Dry run before every label (dry_run)
With dry_run your system fully validates an order (address, package dimensions, customs data) without buying real postage and without creating a label. You catch errors before you commit, instead of voiding faulty labels afterwards.
-
Idempotency key against duplicate labels
Every label call carries an idempotency key. If a retry runs after a timeout, you get the same result back: no second label, no second charge. A new key deliberately creates a new label; one key is bound to exactly one order.
-
Read orders, compare rates, create labels
Fetch open orders, compare live rates across all connected carriers including the smart-routing recommendation, and create labels programmatically, over REST/JSON with a bearer token. The label is filed in Shopify fulfilment automatically, and tracking goes to the customer.
-
Shipment status by tracking, documented via openapi.json
A single call with the tracking number returns a normalised status and the estimated delivery date, ideal for marking orders as “in transit” or “delivered” in your WMS. The full interface is available machine-readable as openapi.json.
What Karl's API can do
| API capability | Karl |
|---|---|
| REST/JSON API with bearer-token authentication | Yes |
| dry_run: fully validate an order without buying real postage | Yes |
| Idempotency key: no duplicate label on retries | Yes |
| List orders and read them individually | Yes |
| Compare live rates across all connected carriers: incl. smart-routing recommendation | Yes |
| Volumetric weight shown per rate option | Yes |
| Create labels programmatically: filed in Shopify fulfilment automatically | Yes |
| Silent print via the Print Companion, or print the label PDF (base64) yourself | Yes |
| Shipment status + estimated delivery date by tracking number | Yes |
| Read and set the default package via the API | Yes |
| Machine-readable openapi.json for client generation | Yes |
The shipping API is an Enterprise feature and requires a Shopify store connected to Karl.
Common questions about Karl's API
What does Karl's API require?
The API is an Enterprise feature and requires a Shopify store connected to Karl. It reads your Shopify orders and writes fulfilment including tracking back. It extends your store, it doesn't replace it. You create the API key in Karl under Settings → API access.
How do I authenticate?
Every request carries the header “Authorization: Bearer <API key>”. The key (karl_live_…) is shown in plain text exactly once when you create it: Karl only stores a hash. The key belongs on your server only, never in the frontend or in public code.
What exactly does dry_run do?
dry_run fully validates an order, including address, package dimensions and required customs data, without buying real postage and without creating a label. That lets your system check the shipment up front and catch errors before any cost is incurred.
How does the idempotency key prevent duplicate labels?
The label endpoint requires an idempotency key per attempt. If you resend the same key after a timeout, you get the result of the first attempt back: no second label, no second charge. A new key deliberately creates a new label; one key is bound to exactly one order.
Can I print programmatically?
Yes. With print: companion Karl adds the label to the print queue and the Print Companion on the shipping PC prints it without a dialog. Without the companion you use print: none and receive the label as a PDF (base64) to print yourself.
Is there a machine-readable interface description?
Yes. The complete API is available as openapi.json, so you can generate clients and types straight from the specification instead of hand-writing them.
Discover more
Print shipping labels in Shopify
Scan-to-label in under 5 seconds, bulk label printing and auto-print.
View →All Karl features
Surcharge protection, smart routing across 7 carriers, pricing and more.
View →DHL Shopify integration
Connect DHL Paket, Warenpost and DHL Express to your store.
View →Karl compared
Six questions to ask before choosing an app, and Karl’s answers.
View →Shipping from Austria
Origin-country detection and Austrian Post.
View →Let's talk.
Start Karl with no monthly fee
Karl is available on the Shopify App Store: Start has no monthly fee, you only pay per label (domestic shipping). Every plan starts with a trial: 14 days free, including label creation. The carrier still bills you directly.
Install from the Shopify App Store →