Skip to main content
Get Started
MomentIQ

TikTok Shop Orders API: Sync Order Data Step by Step

How to sync TikTok Shop orders programmatically: order search vs detail, status transitions, external references, webhooks, and the sync pitfalls to avoid.

By Alex Elsea 7 min read

Once a TikTok Shop is doing real volume, the orders tab stops being a place you visit and starts being a queue you need in your own systems. Pulling orders programmatically is usually the first integration a growing seller builds: it feeds the warehouse, keeps the ERP honest, and makes revenue reporting something other than a monthly export ritual. This guide walks the Orders API end to end — what it covers, how list and detail differ, how to keep an external system in sync, and the failure modes that quietly corrupt order data.

Key Takeaways
  • Use the order search endpoint to pull lists by status and time window, then fetch detail per order — list responses are deliberately lean.
  • Order status is a ladder, not a flag: your sync logic should be driven by status transitions, not by a single "is it done" check.
  • External order references let you link a TikTok Shop order to your own OMS or 3PL record, in both directions.
  • Webhooks plus a periodic reconciliation poll beat either approach alone — webhooks can be missed, polling alone is slow and expensive.
  • Most sync corruption traces to three causes: pagination drift, duplicate handling, and clock skew on your time-window filters.

What the Orders API covers

The orders domain handles everything from the moment a buyer checks out to the point where the order is settled: retrieving orders, inspecting line items and price breakdowns, and linking orders to your own systems. It does not handle shipping label creation or package management — that is the fulfillment domain, which we cover separately in the fulfillment and shipping guide.

Every call here rides on the same authentication layer as the rest of the API. If you have not built that yet, start with TikTok Shop API authentication — access tokens, shop_cipher, and request signing all apply identically to order calls.

Get Order List vs Get Order Detail

These two endpoints have deliberately different jobs, and using the wrong one is the most common early mistake.

Order search (POST /order/202309/orders/search) is the discovery call: you pass filters — status, creation or update time window, and paging parameters — and get back a page of matching orders with a lean payload. It answers "which orders changed?"

Order detail (GET /order/202507/orders/{order_id} in the current generation) is the enrichment call: full line items, recipient information, payment breakdown, and shipping context for one order. It answers "what exactly is in this order?"

The pattern that scales: search on a time window to find the order IDs that moved, then fetch detail only for those. Fetching detail for every order on every cycle burns rate limit for no new information.

Filtering by order status

TikTok Shop orders move through a status ladder — awaiting payment, awaiting shipment, in transit, delivered, completed — with cancellation and return paths branching off it. Two rules keep sync logic sane:

  • Drive off transitions, not snapshots. "Order is now awaiting shipment" is an event your warehouse cares about; "order is awaiting shipment" as a standing fact is not. Store the previous status and act on the change.
  • Never hard-code the full status list into branching logic. Platforms add statuses. Treat unknown statuses as "log and skip," not as an error that halts the run.

Filter by update time rather than creation time when you are polling for changes — an order created last week can move to a new status today, and a creation-time filter will never surface it.

External order references for OMS sync

The orders domain includes endpoints for attaching your own identifiers to a TikTok Shop order and for searching by them. This is the piece that turns a one-way pull into a genuine two-way integration: your OMS record and the TikTok Shop order can each find the other.

Use it deliberately. Write your reference at the moment your system creates its record, not later in a batch job — the window between order ingestion and reference-writing is exactly where duplicates get created if a retry fires.

Polling vs webhooks for order updates

TikTok Shop supports shop webhooks, so your endpoint can be notified when orders change instead of asking repeatedly. Webhooks are the right primary mechanism: they are fast and cheap.

They are not sufficient alone. Delivery can fail, your endpoint can be down during a deploy, and a missed notification is silent. The durable pattern is hybrid: webhooks drive near-real-time updates, and a lower-frequency reconciliation poll (say, every 15-30 minutes over a trailing window) catches anything the webhook path dropped. The poll is your safety net, so make it idempotent — it will re-process orders you already have, and that must be a no-op.

Whichever you use, acknowledge webhook deliveries quickly and process asynchronously. Doing real work inside the webhook handler is how you end up with timeouts and retries stacking on each other.

Handling price detail and line items

Order totals are not a single number. A TikTok Shop order carries a price breakdown — item subtotals, platform discounts, seller discounts, shipping, and fees — and the orders domain exposes a dedicated price-detail surface for exactly this reason.

Two practical points. First, for margin reporting, reconcile against the finance domain's settlement data rather than inferring net revenue from order totals: fees and adjustments land there, not on the order. Second, store the full breakdown as received. Collapsing it to a single total at ingestion time is a decision you cannot reverse when finance asks why two months disagree.

Sync pitfalls: duplicates, pagination, clock skew

Nearly every corrupted order dataset traces to one of three causes:

  • Pagination drift. Orders are being created while you page through results, so a purely offset-based crawl can skip or repeat records. Prefer cursor/token-based paging where available, and always sort by a stable key.
  • Duplicate ingestion. Retries, overlapping windows, and webhook-plus-poll designs all deliver the same order twice by design. Make ingestion idempotent on the TikTok Shop order ID — upsert, never blind insert.
  • Clock skew. Time-window filters use the platform's clock. If your server drifts, your "last 30 minutes" window silently misses orders. Sync with NTP and overlap your windows slightly (fetch the last 35 minutes every 30) so a small drift costs you a duplicate — which idempotency absorbs — rather than a gap, which is invisible.

Add one more habit: keep a raw copy of every API response you ingest, at least for a rolling window. When a discrepancy surfaces weeks later, the difference between "we can prove what the platform told us" and "we can only see what our parser kept" is the difference between a ten-minute answer and a week of guessing.

Rate limits and retry discipline

Order sync is the highest-volume traffic most sellers send to the API, so it is where rate limiting bites first. Three habits keep a sync healthy under load:

  • Back off exponentially, with jitter. A fixed retry delay across a fleet of workers produces synchronized retry storms — every worker hits the same wall at the same moment. Randomized backoff spreads the load.
  • Separate your queues. The trailing-window reconciliation poll should never compete with real-time webhook processing for the same rate budget. When you are near a limit, latency-sensitive work should win.
  • Fail loudly on persistent errors, quietly on transient ones. A single 429 is normal and deserves a retry, not an alert. Fifteen minutes of unbroken 429s means your sync has fallen behind and a human needs to know.

Instrument the lag between an order's platform timestamp and the moment your system finished processing it. That single number — sync lag — tells you more about integration health than any error count, because it degrades gradually before anything actually breaks.

Testing an order integration safely

Order data is real money and real customers, so exercise the flow in Partner Center's sandbox before touching a live shop. Once you go to production, start read-only: run order search and detail against the live shop while writing to a staging datastore, and diff that against what Seller Center reports for the same window. Any discrepancy in that comparison is a bug in your sync logic, and finding it there costs nothing.

Only after a clean read-only period should you enable writes — external references first, then anything with side effects. The teams that skip this step usually discover their pagination bug through a warehouse mis-ship rather than a diff report.

What to automate first

If you are building this from scratch, sequence it: (1) authenticated order search on a trailing window, writing to your own store idempotently; (2) order detail enrichment for changed orders; (3) external references so your OMS and TikTok Shop can find each other; (4) webhooks layered on top for latency, with the poll retained as reconciliation. Only then move on to inventory automation and fulfillment writes, which carry real side effects.

That order matters because each stage is verifiable on its own. Teams that try to build all four at once usually cannot tell which layer is producing a discrepancy.

If you would rather have this running next month than staff it, our TikTok Shop management team operates these integrations for brands day to day — talk to us about what your stack needs.

Frequently Asked Questions

What is the difference between order search and order detail?

Order search returns a filtered, paginated list with a lean payload — it answers which orders changed in a time window. Order detail returns the full record for one order: line items, recipient data, and the price breakdown. The scalable pattern is to search for changed order IDs, then fetch detail only for those.

Should I use webhooks or polling for TikTok Shop order updates?

Both. Webhooks give you low latency but can be missed if your endpoint is down or a delivery fails, and a missed notification is silent. Run webhooks as the primary path and a lower-frequency reconciliation poll over a trailing window as the safety net, with idempotent ingestion so re-processing is a no-op.

How do I link a TikTok Shop order to my own OMS record?

The orders domain provides external order reference endpoints: you attach your own identifier to the TikTok Shop order and can later search by it, so each system can find the other. Write the reference at the moment your system creates its record — the gap before it is written is where retries create duplicates.

Why do my synced order totals not match my payouts?

Order totals are not net revenue. Platform and seller discounts, shipping, and fees appear in the price breakdown and in settlement data from the finance domain. Reconcile payouts against settlement statements, and store the full price breakdown at ingestion rather than collapsing it to a single number.

Explore More