TikTok · Events API

On TikTok the sale rarely happens in the session that clicked

Someone discovers a product in the feed, leaves the app, and comes back to buy later, often on another device. The browser pixel sees only a fragment of that journey. The Events API sends the purchase from your server, with the ttclid captured at first contact.

POST /open_api/v1.3/event/track/
{
"event":"PlaceAnOrder"
"user": {
"ttclid":"E.C.P.abc…9f"
"ttp":"9f2c…41ab"
"email":"sha256:8f4e…c1a"
"phone":"sha256:2b7d…e90"
"external_id":"sha256:91af…33c"
"ip":"203.0.113.4"
"user_agent":"Mozilla/5.0…"
},
"properties": {
"value":84.90
"currency":"EUR"
"content_id":"SKU-4471"
}
}
SHA-256 hashedclick identifiersent as-is
What Trackful actually sends to TikTok for one order.

The problem

Why TikTok understates your performance

A channel that looks less profitable than it is ends up getting less budget. Under-measurement becomes a decision.

The in-app browser keeps nothing

The first click happens in TikTok's in-app browser. The purchase often happens later in Safari or Chrome. Those are two separate storage contexts, and what was written in one does not exist in the other.

The ttclid is lost before checkout

The click identifier arrives in the URL of the first page. If it is not captured and kept server-side right then, it will be gone by the time the order is placed, and the purchase attaches to no ad.

The lag between discovery and purchase

TikTok is a discovery channel: the delay between view and purchase tends to be longer than elsewhere. Measurement that cannot outlive the session is structurally wrong for this channel.

Match keys

What TikTok accepts, and what we send

Personal data is SHA-256 hashed on your server. Click identifiers are sent as-is, as TikTok requires.

ttclid
The TikTok click identifier, captured when the visitor lands and kept until the order. It is the strongest key on this channel: when it is present, the purchase attaches to the ad unambiguously.
ttp
The browser-side TikTok pixel identifier, passed with the server event. It complements the ttclid for visitors who return later without going through an ad again.
email, phone, external_id
SHA-256 hashed. The phone is normalised to E.164 from the buyer's actual country, never an assumed one: a wrong dialling code produces a hash that matches nobody.
ip, user_agent
Sent unhashed, with the visitor's real values. They act as a fallback when no click identifier survived the journey.

TikTok's rules

Constraints we respect on your behalf

Learned from the API itself, including the hard way.

Strict types, silent rejections

The Events API refuses an event when a field has the wrong type, and that error surfaces nowhere in your TikTok interface. A malformed send produces no alert, only an absence of conversions.

Consent denied, nothing sent

If the visitor declines advertising tracking, nothing goes to TikTok. Unspecified consent limits the payload to click identifiers, with no personal data.

A test code hijacks real events

A test code left active sends your real conversions to the test tab instead of your reports. Trackful passes that code only during an explicit test, never on production sends.

Setup

Connected in minutes

  1. 1

    Enter the pixel

    Pixel code and Events API token, generated in your TikTok Events Manager.

  2. 2

    Send a test

    A test conversion goes out immediately and you watch it land in Events Manager.

  3. 3

    Switch the channel on

    Once delivery is confirmed, leave the channel running. Trackful alerts you if sends stop landing.

Read the TikTok documentation

Questions

Frequently asked

Should I keep the TikTok pixel on my site?

Yes. The pixel and the Events API complement each other: the browser captures what it can, the server fills the rest. Trackful sends a shared event identifier so TikTok collapses the duplicate instead of counting two purchases.

Why are my TikTok conversions not showing up?

The most common cause is an event rejected for a wrongly typed field, a rejection that appears nowhere in the TikTok interface. The second is a test code left active, which routes real conversions to the test tab.

Does the ttclid survive if the customer buys the next day?

Yes, that is exactly the point. It is captured on arrival and kept server-side, independent of what the browser decides to retain. On WooCommerce a server-set cookie holds it for a year.

What happens when a visitor declines tracking?

No event is sent to TikTok for that visitor. The decision is enforced on the server, where a script cannot bypass it.

Trackful is not affiliated with or endorsed by TikTok. TikTok is a trademark of ByteDance Ltd., referenced here to identify the service Trackful sends your conversions to.

Stop paying for results you cannot measure

Every day without Trackful is a day you make ad decisions with only 60% of the data. Install Trackful in 5 minutes and see the difference.

14 days free
No credit card
No developer
30-day guarantee