Store operations

Shipping, inventory sync and fulfillment APIs

3PL and marketplace APIs, stock sync without overselling, duties and taxes at checkout.

4 guides4 in-depth70 min of reading

Once stock lives in more than one system, every number except one is a copy. A 3PL's warehouse count, a marketplace listing and the store's own stock field drift apart between syncs, and oversells happen in that gap: an order lands while a sync is running, or a plain "set stock to N" overwrites a sale recorded a second earlier. Cross-border shipping opens a second gap, between the total at checkout and what the customer is asked to pay at the door when import duty and tax are collected on delivery.

Integrating a 3PL API with WooCommerce works through ShipBob's API, which has no inventory webhook. It polls the fulfillable quantity (not the sellable one, which counts inbound stock), subtracts paid orders the warehouse hasn't received yet, and applies changes as atomic increments and decrements. In its race test, a plain set left 2 phantom units on sale while the delta left the correct number. Amazon SP-API for price and inventory sync covers private-developer registration, self-authorization, Login with Amazon tokens and the per-operation usage plans. Syncing 50,000 products compares Shopify's GraphQL bulk operations with BigCommerce's REST catalog and its per-30-second request quota, including batch variant updates and B2B price lists.

Dynamic DDP shipping in WooCommerce quotes duty, import tax and the courier's DDP fee at checkout from Easyship's Rates API, which needs an HS code and country of origin for each product. It only calls the API once the address is complete, caches each quote and caps how long checkout waits. Across these guides the pattern is the same: decide which system owns each number, sync with operations that can't lose updates, and check the authoritative source again at the moment money changes hands.

Start here

Shipping & inventory21 min read

Integrating a 3PL API with WooCommerce: oversell protection, inventory sync and order routing

Once ShipBob holds your stock, WooCommerce's stock number is a copy, and every oversell comes from the gap between the copy and the warehouse. ShipBob's 2026-07 API has no inventory webhook, so poll GET /inventory-level and set WooCommerce stock to fulfillable quantity (not sellable, which counts inbound stock) minus paid orders ShipBob hasn't received yet, minus a small buffer. Apply the change with WooCommerce's atomic increase/decrease rather than a plain set: in our race test a plain set left 2 phantom units on sale after an order landed mid-sync, while the delta left the correct number. Right before payment, ask ShipBob again for just the cart's SKUs with a 3-second timeout, because other channels sell from the same stock; WooCommerce's own stock hold already settles two shoppers racing for the last unit. Send paid orders from Action Scheduler with reference_id set to the WooCommerce order ID (ShipBob answers a resend with 422, not a second shipment), and treat webhooks as a doorbell for a reconcile job that reads ShipBob's orders and writes tracking back. ShipBob is our pick for the warehouse side.

Shipping & inventory17 min read

Dynamic DDP shipping in WooCommerce checkout: real-time duties and taxes from an API

WooCommerce's tax rules model your own sales tax or VAT, not the destination's customs: import duty depends on each product's HS code, its country of origin, the destination's thresholds and the courier's DDP fee, and WooCommerce stores none of that. Quote it at checkout instead. Easyship's Rates API (v2024-09) returns DDP rates whose total_charge already includes import duty, import tax and the DDP handling fee when you send incoterms DDP with calculate_tax_and_duties true. Use that endpoint, not the separate Taxes and Duties endpoint, which is limited to 100 calls a day. Only call it once the address is complete and the postcode is valid, cache each quote for 30 minutes, cap the wait at 3 seconds, and stop calling for a minute after a failure. When there's no DDP quote, show a rate that says plainly that duties are due on delivery, never a guessed DDP price. In our tests a cached quote added nothing, an 0.8-second API added about 0.8 seconds once, and an outage cost the first shopper 3 seconds and everyone after them nothing. Easyship is our pick; DDP rates need a paid plan.

Shipping & inventory16 min read

Syncing 50,000 products: BigCommerce vs Shopify API rate limits, variants and B2B pricing

For a full catalog export, Shopify's GraphQL bulk operations are the better tool: one query, no rate limit, a JSONL file you rebuild with __parentId. Paged GraphQL queries are a poor fit at this size because nested variants make each query expensive and Shopify caps pagination at 25,000 objects. BigCommerce's REST catalog is simpler to reason about: 250 products per page with variants included, and a request quota per 30 seconds (150 on Core and Growth, 450 on Scale) that parallel workers can share using the rate limit headers. For frequent writes and B2B pricing, BigCommerce is ahead on lower plans: batch variant updates of 50, price lists with bulk upserts of 1,000 records, and customer groups from Growth up, while Shopify's points budget grows tenfold only on Plus.

All shipping & inventory guides

Shipping & inventory16 min read

Amazon SP-API for price and inventory sync: a plain-English setup guide

To sync your own Amazon prices and stock, register as a private developer in Seller Central, give your app the Pricing and Amazon Fulfillment roles, and self-authorize it to get a refresh token. Your script swaps that refresh token for a one-hour access token at Login with Amazon (LWA), then calls the SP-API with it in the x-amz-access-token header. AWS IAM and request signing have not been required since October 2023. Stay inside each operation's usage plan: getInventorySummaries allows 2 requests per second and getPricing 0.5 per second for up to 20 SKUs.

Tools these guides recommend

Disclosure: these are affiliate links. If you sign up through them, I may earn a commission at no extra cost to you. How this site makes money.

More in store operations