Logistics
Shipping that works the way deep-tech moves
One calculator, 50+ carriers, 11 Incoterms. Get a real quote on a listing page before you ever send an RFQ — and a single tracking link the moment the supplier hands the parcel over.
Carriers we route through
| Carrier | Service tier shown in quotes | Coverage |
|---|---|---|
| DHL | Express Worldwide | Global · 220+ countries · door-to-door |
| FedEx | International Priority | Global · strong on US ↔ APAC corridors |
| UPS | Worldwide Saver | Global · best EU intra-EU rates |
| USPS / EMS | Priority Mail International | Smaller parcels · Pacific economies |
| Royal Mail | Tracked & Signed | UK origin, 200+ destinations |
| Canada Post | Tracked Packet | North America origin |
| EasyPost (consolidated) | Economy consolidated | Best price · longer ETA |
EasyPost and Shippo aggregate 50+ regional carriers behind a single API — the list above is what the quote widget surfaces on most routes. EU pallets and >70 kg freight road through dedicated forwarders (Schenker, DSV, Kuehne+Nagel) on request.
Speed tiers and indicative pricing
| Tier | Intra-region (EU↔EU, etc.) | Inter-region | Multiplier |
|---|---|---|---|
| Express | 1–3 business days | 3–6 business days | ~1.6× priority |
| Priority (default) | 2–5 business days | 5–10 business days | baseline |
| Economy | 5–10 business days | 10–21 business days | ~0.55× priority |
Pricing is per-shipment, not per-month — the calculator returns a USD amount per shipment based on weight, dimensional weight, customs value and route. Card fees and duties are quoted separately so they never hide inside the line item.
How the calculator works
- Inputs. Origin + destination (country and postal code), weight in kg, package dimensions in cm, and declared customs value in USD.
- Provider chain. Buyka tries EasyPost first, falls back to Shippo, and finally to a heuristic stub (haversine × billable-weight × per-carrier multiplier) so the widget never returns an empty page during a provider outage.
- Rate table. You see 3–7 rows: carrier, service name, total cents in your selected currency, ETA in business days, and whether the quote is binding or indicative (stub mode is marked clearly).
- Lead-time fallback. If a route has no live rate (EXW, courier strike, sanctioned destination), the page still shows a typical 3 / 7 / 14-day ETA range from our regional matrix so you can plan.
Incoterms — who pays what
The listing wizard lets the supplier publish a default Incoterm; the buyer can request a different one inside the RFQ. We support the full 2020 set:
- EXW — Ex Works (buyer picks up, buyer pays everything from the supplier’s door).
- FCA / FOB — Free Carrier / Free on Board (seller hands to nominated carrier; FOB is maritime-only).
- CPT / CIP — Carriage Paid / Carriage and Insurance Paid (seller pays freight, risk shifts at first carrier).
- CFR / CIF — Cost and Freight / Cost, Insurance and Freight (maritime equivalents of CPT/CIP).
- DAP / DPU / DDP — Delivered at Place / Delivered at Place Unloaded / Delivered Duty Paid (seller carries cost and risk all the way; DDP also covers import duties).
Each term has a tooltip in the wizard with the ICC 2020 responsibility split (export clearance, main carriage, insurance, import clearance, duties). The API endpoint GET /api/v1/shipping/incoterms returns the same table for partners building on top of Buyka.
Customs, taxes, and paperwork
- Commercial invoice + packing list are auto-generated from the deal page once both sides confirm — PDF, signed with the supplier’s e-signature when KYC is verified.
- HS code lookup on the listing page suggests a 6–10 digit Harmonized System code from the catalog; the supplier can override.
- DDP buyers see an estimate of import duties + VAT in the quote (Stripe Tax integration); under DAP/EXW the import paperwork is on the buyer.
- Restricted goods. Lithium batteries, dangerous goods, dual-use items: the wizard prompts for IATA / ADR documentation before the listing can be published.
Tracking and exceptions
Every shipment lands in the deal page with a single tracking link that pulls events from the carrier in real time. The buyer gets notifications (in-app + email + optional Telegram) on these milestones:
- Picked up by the carrier
- In transit / out for customs
- Delivery exception (held at customs, address issue, refused)
- Delivered (signature / proof attached)
If a parcel is lost or the tracking goes silent for more than 5 days past ETA, the escrow dispute window opens automatically on the buyer’s side — see the escrow page.
For developers
Same data the listing page consumes is exposed under /api/v1/shipping:
GET /api/v1/shipping/options → which provider is live
GET /api/v1/shipping/incoterms → 11-row Incoterms table
GET /api/v1/shipping/regions → 7 world regions + colour for map
GET /api/v1/shipping/lead-time → typical days per route + tier
POST /api/v1/shipping/estimate → rate table for a concrete parcel
All endpoints are public, rate-limited globally; the estimate body schema is OpenAPI-documented at /api/v1/docs.