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.

Common questions

How do I stop overselling when stock syncs with a 3PL?

Pick one system as the source of truth for stock, push changes by webhook instead of relying only on scheduled polling, and reserve stock when the order is created rather than when it ships. Keep a small buffer on fast sellers and run a full stock reconciliation on a schedule to correct drift.

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

What is DDP shipping and should duties be charged at checkout?

DDP (Delivered Duty Paid) means the seller pays import duties and taxes, so the customer pays nothing at the door; with DAP the buyer pays on delivery, which leads to refused parcels. Calculating landed cost at checkout needs each product's HS code and country of origin. The EU (IOSS, up to €150) and the UK (up to £135) already expect VAT to be collected at the point of sale for low-value imports.

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

What are Shopify's API rate limits for large catalog syncs?

The REST Admin API uses a leaky bucket that refills at 2 requests per second on standard plans and 20 on Shopify Plus. The GraphQL Admin API limits by calculated query cost in points that refill each second, with higher limits on Plus. For tens of thousands of products, use GraphQL bulk operations, which run as one background job outside the normal limits.

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

How do I update Amazon prices and inventory by API?

Use the Selling Partner API (SP-API): the Listings Items API for single SKUs, or the Feeds API with a JSON listings feed for many SKUs at once, and the Reports API for bulk reads. Each operation has its own rate limit and returns HTTP 429 when exceeded, so batch large updates through feeds. You need a registered developer profile and Login with Amazon authorization.

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

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