Rate-shop UPS, FedEx, DHL, USPS, Royal Mail and EasyPost in parallel. Sync orders from your store, automate labels, tracking and returns — without touching a spreadsheet.
Every screen is keyboard-first, every table remembers your columns, every mutation is audited. We sweated the boring details so you ship the fun ones.
Quote every enabled carrier at once and pick the cheapest, fastest or best-margin service per order. Markup policies you control.
OAuth install for Shopify, Amazon, eBay, WooCommerce and UPS. Connect in two clicks, no dev portals required.
A real rule engine — nested AND/OR trees, 11 action types, dry-run testing. Set it once, never touch a drop-down again.
Paste your own UPS / FedEx / DHL / Royal Mail account for pass-through rates, or use our negotiated platform accounts with a markup you control. Mix and match per shipment.
Connect your storefront and orders flow in automatically. We handle the refresh tokens, you handle the orders.
Paid orders land automatically. Ship a label and the fulfillment is posted back to the channel with the tracking number — all from one screen.
Every label buy decrements local stock and broadcasts the new on-hand level back to Shopify, Woo, BigCommerce, Etsy, eBay and Amazon.
Import your products once, keep prices and images in sync. Shopnest → Shopify / Woo push is supported too — one source of truth.
A real rule engine: nested AND/OR conditions against any order field, and eleven distinct action types. Dry-run against live orders before switching on.
Every screen in Shipnest is backed by a documented REST endpoint. Point your ERP or headless-commerce stack at an API key and let it drive the whole lifecycle — push orders, rate-shop, buy labels, void, track — without ever opening the dashboard.
/api/ordersCreate (headless)/api/ordersList + filter/api/orders/:idDetail/api/carrier-accountsDiscover accounts/api/ratesRate-shop all carriers/api/insurance/quoteThird-party insurance/api/labelsBuy label/api/labels/:id/voidRefund / void/api/address/validateLive DPV verify/api/shipmentsList + filter/api/shipments/:idDetail/api/tracking/:nLive eventssk_live_… + per-org rate limitsFull reference # 1. Push an order from your headless storefront
curl -X POST https://my.shipnest.app/api/orders \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"orderNumber": "HL-1042",
"shipTo": { "name": "Jane Doe", "line1": "1 Main",
"city": "Austin", "postalCode": "78701",
"country": "US" },
"items": [{ "sku": "BAG-1", "name": "Tote",
"quantity": 1, "priceCents": 4500,
"weightG": 500 }]
}'
# 2. Rate-shop across every enabled carrier
curl -X POST https://my.shipnest.app/api/rates \
-H "Authorization: Bearer sk_live_..." \
-d '{ "orderId": "ord_...", "parcels": [...] }'
# 3. Buy the cheapest (or fastest) — same idempotency key retried
curl -X POST https://my.shipnest.app/api/labels \
-H "Authorization: Bearer sk_live_..." \
-d '{ "orderId": "ord_...", "serviceCode": "03",
"idempotencyKey": "HL-1042-attempt-1" }'
# You now have a tracking number + signed webhook eventsShipnest isn't a rate-shop wrapper. It's the full floor-to-dashboard workflow — with the polish of a modern B2B SaaS.
Barcode-first floor workflow. Tap the scanner, the label drops straight out of your Zebra — no clicks, no print dialog.
Skip the browser print dialog: route every label to your warehouse Zebra or Dymo by default, split routing per warehouse, and retry failed jobs with one click. Packing slips too, rendered server-side.
Queue every awaiting-ship order in one workspace. Pre-flight blocker panel catches missing weight, ship-to gaps, customs or DDP-on-platform issues BEFORE you click Quote. Inline-edit weight, warehouse, parcel dims, signature, insurance, incoterms, hazmat, per-line customs, address and contents from the row — bulk-edit the same fields plus tag, priority, assignee, hold, append note across N selected orders. Quote all → pick override per row with the carrier comparison popover → Buy all → schedule pickups + close manifests + print packing slips, all from the toolbar.
Packing slips, pick lists, commercial invoices, manifests — every PDF is a styled HTML page, printable from any browser.
After bulk-editing 12 orders the same way from /batch, a banner offers to save the patch as an auto-rule. Pick a lane (domestic / international / EU export), name the rule, hit Save — the system translates each field into a SET_* action and creates the rule disabled for your review. Next time orders matching that lane arrive, the rule fires automatically. Closes the loop between manual work and automation without a separate trip to /rules.
Branded self-serve returns: customer enters order number, picks items, prints a return label. You set the policy.
A public /track URL on your domain. Your brand, your colors, no carrier noise.
Connect EasyPost or FedEx and we auto-subscribe to their tracking webhook so status updates land in seconds, not on a cron tick. UPS / DHL / USPS / Royal Mail still ride the 30-min polling cron (their APIs are file-based or non-existent for push) — exact same experience downstream, just a slower path. Subscription auto-unregisters on disconnect.
Built-in templates for shipped, delivered, return-approved. Resend-powered. Custom sender, custom copy.
Real KPIs on the dashboard: ship volume, carrier split, cost per parcel. Scheduled CSV exports by email.
Schedule a UPS / FedEx / DHL / EasyPost pickup straight from the label-buy screen — date, ready-by + close-by window, driver notes. The adapter calls the real carrier API and stores the PRN / confirmation number. Click Cancel and we DELETE on the carrier API too, so the truck doesn't show up at a closed warehouse. /pickups is the dispatch view.
Close the day's shipments through the real carrier API: USPS PS Form 5630 SCAN form via EasyPost (required ≥25 USPS parcels/day) + FedEx Ground Close Manifest. The driver scans ONE barcode covering every parcel instead of every label individually — faster pickup + earlier first-scan in tracking. Carriers without a manifest API still get a local ledger entry.
Five-role RBAC (Owner / Admin / Manager / Member / Viewer). Every mutation logged with who + when.
International labels clear automatically. IOSS, EORI and VAT numbers stamp on every commercial invoice. Paperless trade where the carrier supports it. Per-line HS code / origin / declared value editable from the /batch products dialog — catalog fallback handles the 95% case, manual override covers the rest.
Ship from the warehouse closest to the customer. Same-country match + postal-prefix scoring wired into your automation rules — no manual assignment.
Compose multi-SKU kits (gift sets, starter packs, multi-pack promos) as a single sellable SKU. Stock is computed from the components: sellable = min(part stock ÷ qty), so you can never oversell a kit whose hoodie just ran out. The editor surfaces the bottleneck part in rose, shows parts-sum vs bundle-price discount %, and lets you duplicate a kit as a starting point for the next one. KPI strip flags out-of-stock kits before they hit the dashboard. Bulk-delete failed kit experiments via the per-row checkbox — component products stay untouched, only the bundle wrappers go.
Five-tile KPI strip (Total SKUs · Out of stock · Below reorder · Stock value · Stale 60d+) so a warehouse op sees the state of the catalog at a glance. Per-row status differentiates out-of-stock (red), low (orange), stale (yellow), unconfigured (grey) and ok (green) — chips above the table filter to one or many in a click. Restock report CSV exports every below-reorder SKU with a suggested order qty so procurement places the PO without re-typing. Bulk receive dialog handles a multi-SKU supplier shipment under one PO reference. Concurrency-safe by design — two operators counting from different devices, or a label-buy decrementing while a manual adjustment lands, never lose a unit through a stale-read race.
Products page tells you which SKUs are international-ready and which will block a label buy. Per-row status pill names the specific gap (weight → HS → origin → dims → image, in priority order). KPI strip shows total SKUs, complete count, missing-weight count (red) and missing-HS/origin count (orange) so you fix the highest-impact gaps first. Bulk Set weight + Set dimensions apply one value to N rows — the canonical fix for 'carrier rejected the label, weight=0' across a freshly-imported channel catalog. Two listings of the same physical product? Link them so they share a single stock pool, and a per-row Make master button lets you swap which SKU holds the inventory in one click — pooled stock moves with the role. Bulk delete N SKUs at once when an import turns out wrong — rows still referenced by bundles or historical orders skip automatically so you can't accidentally orphan an order's product link.
Public API keys (sk_live_…) drive the whole lifecycle from your ERP — create orders, rate-shop, buy labels, void, list and track. Headless-commerce ready. HMAC-signed webhooks with timestamp anti-replay for shipment.*, return.*, claim.*. Full reference at /docs.
Run a US Shopify + UK Shopify + EU Etsy on one account — every order keeps its native currency (USD, GBP, EUR). KPIs and reports show real numbers per currency, never a fake FX rollup that drifts with the market. Dashboards stack `$4,200 · £1,800 · €900` side by side.
Every order gets a derived ship-by deadline based on its channel — Amazon 1-day handling, Shopify 2-day promise, Etsy 3-day processing. Orders list sorts by urgency; the dashboard flashes red when anything's overdue so nothing slips through end-of-day.
Before the carrier bounces a label back, we check. Format checks (country-specific postal patterns) run every time. Smarty or USPS WebTools wire street-level DPV lookups; without them, we fall back to the tenant's UPS / FedEx / USPS account's own validator at zero marginal cost. Apply the normalised version with one click.
Customer says 'I never got it' or a card disputes the charge? Click Fetch POD on the shipment row and the signed PDF arrives from UPS, FedEx or DHL straight onto the audit log. No more screenshotting carrier portals — chargeback ammo one click deep.
Buyer never home? Flip one toggle in rate-shop and the parcel routes to the nearest UPS Access Point / FedEx Office / DHL ServicePoint (and downstream carriers via EasyPost) instead of the doorstep. Surcharge surfaces on the quote so price is honest before you buy.
Stop asking customers to print. Flip a checkbox on the return-label dialog and UPS / FedEx email the buyer a link with a QR they show at any drop-off counter. Email lands directly from the carrier, persists on the RMA for re-sharing if it never arrives.
Mark a product hazmat once (UN number + hazard class + packing group) and every label that includes it ships with the carrier-specific DG block — UPS HazMatPackageInformation, FedEx dangerousGoodsDetail, DHL Express dangerousGoods. Pre-flight catches missing UN / class before sortation rejects the parcel.
Show the buyer the five nearest UPS Access Points / FedEx Office counters / DHL ServicePoints to their postcode. Lives on the public tracking page + QR-return email so they pick a counter before walking out the door, not after.
Every tracking refresh pulls the carrier's latest estimated-delivery date (UPS Scheduled Delivery Date, FedEx ESTIMATED_DELIVERY, DHL estimatedDeliveryDate). Shipment detail shows 'Carrier ETA refined to Tue Apr 14 · updated 12m ago' so the buyer sees movement as the window narrows.
Every shipment gets a carbon estimate — road (~100 g/kg) or air (~600 g/kg) depending on the service mode. Aggregate on the analytics dashboard. DEFRA-calibrated; shows up in /reports for sustainability filings. Zero external dependency.
Mid-market sellers with UPS/FedEx contracts at 35–45% off public rates upload a simple CSV (to_country, weight_to_g, price_cents) and see their real costs in rate-shop alongside live quotes. No more rate-table spreadsheets outside the platform.
Before the label prints, scan each SKU off the shelf — the system checks every line against the order. Wrong item in the box stops becoming a refund + chargeback. Audits who packed what at which minute for cross-checking customer complaints.
Shipnest can register as a Shopify Carrier Service so your rates appear inside the customer's checkout — not post-facto imports in /orders. Opt-in toggle per store so merchants with existing Shopify Shipping profiles stay in control. Works on any Shopify plan.
Need to ship a one-off package that didn't come from a channel? /labels/new builds a label in 30 seconds: pick a warehouse or paste an address, drop in a parcel and ship-to (with optional Save to address book), pick a carrier from your connected accounts, buy. Lands in /shipments tagged 'Quick label' so it's never confused with a channel order.
We mine your last 30 days of activity and surface 'you keep doing X manually, want a rule?' prompts at the top of /rules. One click to create the rule (paused so you review before it fires). Today: carrier-by-destination-country and tag-by-channel patterns at 5+ events with 80% consistency. Adding more detectors over time.
Backorder one item, ship the rest now: each label carries a per-line quantity picker, the order stays on /orders until every unit is covered. Different addresses for parts of an order? Split into siblings (#1042-1, #1042-2) — the channel still sees one order; we re-fan partial fulfillments back into Shopify / BigCommerce / eBay / Amazon / Magento.
Damaged parcel? File from /claims and we call the real API — UPS Claims, FedEx Customer Support, Shipsurance, XCover — then upload supporting documents (damage photos, invoice, packing slip) straight through to the same provider. The browser reads files as base64 and we pipe them through; we never store the bytes. Insurance-policy vs carrier-liability split picked automatically. USPS / DHL / Royal Mail fall through to a local record you finish on portal.
End-of-day: did the parcel actually leave with the driver? Scan station → Handover mode → barcode each tracking number as the carrier picks it up. The dashboard shows a 'Pending handover' count so a label printed but not handed over doesn't quietly miss the truck. Audit log carries every scan + the operator who did it.
/reports/voids-and-refunds aggregates every refund in the period: voided labels (per-carrier breakdown), past-window void rejections (so you can spot lanes where you keep trying too late), customer refunds on returned orders. CSV export for finance + a scheduled email digest if your CFO wants it weekly.
Topbar bell pulls real activity: shipment exceptions, recent deliveries, returns opened, sync failures, channel disconnections, 'N new orders in 24h · Shopify 17 · Amazon 6'. Per-item read state syncs across devices. Polls every 60s with auto-focus refresh — no setup, no separate inbox.
Sign in with Touch ID, Face ID or a hardware key — passkeys (WebAuthn) layer on top of password + TOTP, you keep all three as fallbacks. Email also fails over: configure both Resend and Postmark, primary outage automatically routes through secondary so dunning, password resets and shipping confirmations keep flowing.
Every merchant-visible release lands at /changelog — generated from git history, indexable, no marketing-prep step. Customers (and search engines) see the cadence: real product, real updates, no 'last updated 2 years ago' staleness.
Decided not to come back to a channel? Disconnect the integration in /integrations, then bulk-delete the orphan orders + voided shipments from /orders and /shipments. Live integrations always block delete so a stale tab can't nuke an in-flight order. Audit row records who deleted what.
Hate UI builders? Type what you want — "add insurance for orders over $200 going outside the US" — and the rule engine fills in conditions and actions. Validates every field against the registry, drops anything the model invents, surfaces warnings. You review and click Save. Backed by GPT-4o.
Floating chat widget on the marketing site + inside the app. Trained on the full product knowledge base (this very guide), answers pricing, integrations, billing and how-to questions in plain English. When it can't help — or when a customer asks for a person — it escalates straight to /admin/inbox. Operator takes over with one click, AI hands back when done.
We shipped the boring parts so the interesting parts work. Encryption, RBAC, multi-tenancy and audit logs are the foundation — not the roadmap.
Every carrier + channel credential is encrypted with AES-256-GCM keyed by the operator's AUTH_SECRET. Never logged, never leaves Postgres in cleartext.
The operator console requires RFC-6238 TOTP on every sign-in. No backdoor flag, no exception — 2FA is the gate.
Every row is scoped by organizationId at the query boundary. Demo data is org-gated (isDemo flag) so no tenant ever sees another's.
Carrier connects, label buys, rule edits, webhook rotations — each one logs who, what, when. Exportable CSV.
Layer Touch ID / Face ID / hardware keys (WebAuthn) on top of password + RFC-6238 TOTP — keep them all as fallbacks. Password reset rotates every other session globally so a stolen cookie dies the moment a credential is reset. Per-IP rate limits on every login surface.
Outbound webhooks carry HMAC-SHA256 over a timestamp-prefixed body so replay isn't an option. Inbound URLs go through a strict allow-list — loopback, RFC 1918, cloud metadata (169.254.169.254), CGN, link-local IPv6 and internal TLDs all refused at register and at delivery time.
/status surfaces DB latency, error floor, cron freshness with auto-recorded incident history (open + 90 days resolved). Every /api/cron/* run writes a heartbeat so a missed sync becomes visible within one cycle in /admin and on the public page.
Free tier for shops getting started. Paid tiers scale with your label volume and unlock team size, multi-warehouse, API access and priority support. Save 2 months by paying annually. Upgrade, downgrade or cancel any time from the Stripe portal.
Everything you need to start shipping. Bring your own carrier accounts, we don't charge per label.
For shops hitting stride. Automations, batch workflows, and more headroom.
Multi-warehouse ops with API access and PrintNode per-warehouse routing.
For high-volume dispatch. Unlimited users and warehouses, priority support.
Custom volume, SAML SSO, dedicated onboarding, SLA. For ops teams that need more than the shelf.
Per-label overage replaces hard caps so a burst week never blocks shipping — you only pay for what you actually ship. Per-seat ($5/mo) and per-warehouse ($10/mo, Pro) addons let you scale without forcing a tier upgrade. Annual saves you 2 months. Stripe handles billing, we handle shipping.
Connect a store, paste a carrier account, print a label. No seat fees, no setup calls, no fake "book a demo" dance.