Skip to main content

Conversion API

The TNT Growth Conversion API allows you to submit offline conversion data to advertising platforms. This enables accurate attribution of leads and sales back to the ad clicks that generated them.

Platform Guides

Delivery visibility

Already sending conversions through TNT Growth? Your account manager can share a private Conversion Delivery Portal link so you can review sent vs failed delivery, charts, and Records (including click IDs) without using the Conversion API.

Authentication

All API requests require an x-api-key header containing your client-specific API key. Contact your TNT Growth account manager to obtain your key.

curl -X POST https://flex.tntgrowth.io/api/google/conversions/add \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '[...]'

All endpoints are mounted under the /api prefix on the Flex host: https://flex.tntgrowth.io/api/....

The Attribution Handle (tntId)

Every conversion endpoint below accepts an optional tntId — the handle for the attribution session the TNT Growth pixel opened when the visitor first arrived on your site from an ad. It is a v4 UUID.

That session holds what the browser could see at the moment of the click and nothing else can see later: the click identifiers (gclid, gbraid, wbraid, fbclid, msclkid, ttclid, li_fat_id, rdt_cid), the UTM parameters, the landing URL, and match signals such as the IP address and user agent. Sending the handle back with a conversion days or weeks later lets us fill in whatever that conversion is missing, without you having to store any of it yourself.

Two spellings, on purpose

The browser side is tnt_id — the cookie name, the ?tnt_id query parameter, the <meta name="tnt_id"> tag, and the hidden form field the pixel injects. The API request body field is tntId, camelCased like every other field in these payloads.

What we do with it

We look up the session the handle names — scoped to your own account — and use it to fill gaps only. A session never overwrites a value you supplied: if you send a gclid and the session holds a different one, yours wins. Each platform guide lists exactly which of its fields a session can fill.

What happens when it is missing or wrong

Nothing fails. tntId is optional on every endpoint and has no error path:

SituationResult
OmittedConversion delivered as sent. We then try to match a session on the click ID you did send.
Not a UUIDIgnored without a lookup. Conversion delivered as sent.
Names no session we holdIgnored. Conversion delivered as sent.
Names a session belonging to a different accountRefused, and raises a security alert on our side. Nothing from that session is used.

A conversion is worth more than the attribution on it, so the handle is never allowed to block one.

Where to get it

If you run the TNT Growth pixel you do not have to do anything — it attaches the handle to every conversion it sends itself, and appends a hidden tnt_id input to your forms so the handle also reaches your CRM.

You need tntId here when your own backend submits the conversion. Read it from the tnt_id field on the submitted form, or from the CRM record that form created, and pass it through. See Good and Bad Installations for the pixel side of that.

Submission Tracking

Every conversion submission returns one or more submissionIds that you can use to check processing status. The status endpoint is shared across all platforms:

GET /api/conversions/submissions/:submissionId

See each platform's guide for details on submission and status checking.

New to the API? See Testing Your Integration — send safe test conversions (they run the full pipeline but never reach the ad platform) and confirm they processed.