EasyPost
Live shipping rates and automatic label purchase run through the tenant’s own EasyPost account. Standard parcel shipping is wired end to end; heavy/freight (LTL) shipping is a planned, not-yet-available module.
What the store owner configures
Reachable from the top-level Integrations area in the admin (per-provider credential forms, including this one, live at Settings → Integrations → EasyPost), plus two related setup screens:
- Integrations → EasyPost — a single field, the tenant’s EasyPost API key
(
EZAK...for live,EZTK...for test). EasyPost auto-detects which environment a key belongs to from its prefix; there’s no separate mode toggle in the form. - Settings → Fulfillment → Locations — the ship-from address(es) EasyPost rates and labels are calculated against.
- Settings → Fulfillment → Presets — package/box presets (dimensions, weight) used when quoting a rate or buying a label.
Only EasyPost is wired to real rate-shopping and label purchase today. Shippo is also installable from the marketplace, but only as credential storage plus a connectivity check — no rate or label calls go through it yet.
Live rates at checkout
Your storefront doesn’t need to know this is EasyPost under the hood — call the public rates endpoint and Orchard resolves it from the tenant’s configuration:
curl -X POST https://api-test.theorchard.dev/api/v1/shipping/rates \
-H "x-tenant-slug: your-store" \
-H "Content-Type: application/json" \
-d '{
"ship_to": { "zip": "97201", "country": "US" },
"parcel": { "weight_oz": 24 }
}'Rates are cached briefly per destination/parcel shape and re-quoted as the cart
changes. If EasyPost is unavailable or unconfigured, the endpoint returns a
502 easypost_unavailable so your storefront can fall back to flat shipping
rates instead of failing the whole cart.
Labels purchased automatically
Once an order is marked paid, Orchard automatically buys the cheapest eligible label from the tenant’s enabled carriers and attaches the tracking number to the order — you don’t call anything to trigger this. It’s US-only at this stage; international orders still support a manual label purchase from the order detail page in the admin. Auto-purchase never blocks or fails the order itself — if a label can’t be purchased (missing address, no matching rate, EasyPost error), the order stays paid and the gap is logged for the store owner to buy the label manually.
Tracking updates
EasyPost notifies Orchard of tracking events on its own webhook channel — this is
internal, the same way Stripe’s inbound webhook is. From your side, the signal to
watch is the order.shipped outbound webhook, fired the
first time an order’s fulfillment status flips to shipped.
Freight / LTL
Heavy or bulky items that need freight (LTL) shipping — beyond EasyPost’s parcel default — aren’t supported yet. If your catalog needs it, talk to your Orchard operator; there’s no self-serve toggle for it today.