· Germán Muñoz Moreno, Co-founder
TikTok Events API: how to measure real sales from TikTok Ads

How do I set up TikTok's Events API, and why does TikTok report a different number of sales than my store?
TikTok is often the channel where the gap between the platform's numbers and the store's is widest and hardest to explain: short videos, many views, few clicks, and purchases that happen later on another device. The Events API closes part of the gap, the part caused by purchases TikTok never heard about. It does not close the rest, and it is worth knowing which is which before you set it up.
What the Events API is
According to TikTok's help center, the Events API is a connection between TikTok and your marketing data across web, app and offline channels, such as physical stores and CRMs. Instead of relying only on the pixel in the visitor's browser, your server tells TikTok that a conversion happened. TikTok lists the benefits as capturing conversions the pixel misses because of connectivity or browser issues, consolidating events from several channels in one API, and controlling exactly which data you share.
TikTok also notes that a pixel or Events API setup is a prerequisite for its Web Conversions objective, and recommends using both together with event deduplication.
Deduplication: the part that must be right
If you send the same purchase from the pixel and from your server, TikTok receives two events. Its deduplication rules collapse them only when both carry the same event name and the same event_id:
- Identical events from the pixel, or from the Events API, are deduplicated within a 48-hour window from the first one.
- A pixel copy and an Events API copy are merged when the second arrives after 5 minutes and within 48 hours of the first. TikTok keeps and enriches the first event.
- If you send different events from each side, for example add-to-cart from the pixel and purchases only from the server, deduplication is not needed.
Use the order number as the event_id on both sides. It is the one value the browser and the server both know. We explain the general pattern in how to tell if the same purchase is counted twice.
How to set it up
- Pick the route. A platform integration from your store (Shopify, WooCommerce and others have TikTok apps), server-side tagging, or a direct call from your backend. The backend route is the most reliable for purchases because it fires when the order exists.
- Capture TikTok's click identifier. When a visitor arrives from a TikTok ad, store the ttclid from the URL and keep it with the session and the order.
- Send the purchase from the order. Include the order number as event_id, the value and currency, the click identifier, and customer data hashed as TikTok specifies. More match keys mean more purchases matched to ad interactions.
- Keep the pixel for the journey. Page views, product views and add-to-cart events are what TikTok's delivery learns from before a purchase.
- Verify. Place a test order and confirm in TikTok's Events Manager that one purchase appears, not two, and that it shows as received from both sources.
Why TikTok will still report differently from your store
Even with a perfect setup, TikTok's number and your store's will not match, for reasons that have nothing to do with the Events API:
- Self-attribution. TikTok credits itself for purchases within its own attribution windows, including after a view without a click. The same purchase can also be claimed by Meta and Google.
- Cross-device journeys. Many TikTok viewers watch on a phone and buy later on another device, which TikTok may or may not connect.
- Refunds and cancellations are not subtracted from what TikTok reported.
- Time zones and currency differ between your ad account and your store.
Each cause is covered in why Meta, Google, GA4 and your store never match.
The weekly check
Every week, compare the purchases TikTok claims with the orders your store settled for the same days, and with the orders that arrived with a TikTok click identifier or TikTok UTMs. TikTok's claim above the second number is its view-through and cross-device credit, plausible and unverifiable; any platform total above the first is double counting. For the server-side foundation this builds on, see server-side tracking.
Where Adray fits
Adray does not send events to TikTok's Events API today; for that, use TikTok's own integrations or a server-side setup. What Adray does is the check above: it attributes each verified order to the channel of the visit that produced it, TikTok included, from the click identifiers and UTMs it captured, so TikTok's claim can be read against sales that exist.
Common questions
What is the TikTok Events API?
TikTok's server-to-server connection for sharing conversion events with TikTok. It covers web, app and offline channels such as physical stores and CRMs, and TikTok recommends using it together with the TikTok Pixel.
Do I need both the TikTok Pixel and the Events API?
TikTok recommends both, with event deduplication. The pixel sees browsing on your site; the Events API reports conversions your server knows about, including ones the browser missed.
How does TikTok deduplicate pixel and server events?
By the event name and event_id. TikTok deduplicates identical events within a 48-hour window from the first one, and merges pixel and Events API copies that arrive after 5 minutes and within 48 hours, keeping and enriching the first event.
Why does TikTok report more sales than my store?
Because it credits itself for any purchase inside its attribution windows, including view-through purchases and sales that another platform also claims. The store counts each order once. Compare weekly totals and check TikTok's claim against the orders that exist.
Can the Events API send sales that happen offline?
Yes. TikTok describes the Events API as covering offline channels such as stores and CRMs, so a sale closed by phone or in person can be reported if you can tie it back to the customer.
