Skip to main content

Testing Your Integration

You can send test conversions end to end — through validation, de-duplication, and storage — without the conversion ever reaching the ad platform. This lets you confirm your setup (payload shape, authentication, client resolution) against a live account without polluting your real conversion data.

How it works

Prefix the click identifier in your payload with TNT_TEST_. Any value that starts with TNT_TEST_ marks that conversion as a test:

  • it runs the full ingest → validate → store → queue path, exactly like a real conversion, so anything misconfigured still surfaces as an error; but
  • the final send to the ad platform is skipped, so your account's conversion data is never touched.
The suffix is yours

TNT_TEST_ is the only part that matters — append anything after it. TNT_TEST_1, TNT_TEST_smoke, and TNT_TEST_2026_01_15 all work.

Which field to prefix, per platform

Use the exact request field from your platform's guide. For Google Ads, any one of its three click-id fields works.

PlatformField(s) to prefix with TNT_TEST_
Google Adsgclid, gbraid, or wbraid
Metafbc
TikTokttclid
RedditclickId
LinkedInliFatId
BingmicrosoftClickId
OpenAIoppref

Only the click identifier changes — the rest of the payload is identical to a real submission (see the per-platform guides). Google Ads example:

curl -X POST https://flex.tntgrowth.io/api/google/conversions/add \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '[
{
"customerId": "4482546575",
"conversionActionId": "7567171084",
"gclid": "TNT_TEST_smoke_001",
"timeStamp": 1778043599,
"conversionValue": 1
}
]'
Conversions with no click identifier

Some conversions match on hashed email/phone (Google enhanced conversions) or other user data instead of a click id — for example an OpenAI event sent without an oppref. There's no click identifier to prefix, so the TNT_TEST_ trick doesn't apply to those. To test them safely, ask your TNT contact to flag the account as a test account — that bypasses every outbound send regardless of click id.

Confirming a test succeeded

Every submission gets a status record you can query.

1. Grab the submission id from the POST response. Google's .../conversions/add returns them directly (other platforms return an equivalent id):

{
"message": "Conversions queued",
"submissionIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"statusUrls": ["/api/conversions/submissions/3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"batchStatusUrl": "/api/google/conversions/status"
}

2. Query the submission status with your client API key:

curl https://flex.tntgrowth.io/api/conversions/submissions/3fa85f64-5717-4562-b3fc-2c963f66afa6 \
-H "x-api-key: YOUR_CLIENT_API_KEY"
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"source": "GOOGLE_ADS",
"externalAccountId": "1234567890",
"expectedCount": 1,
"createdAt": "2026-01-15T15:30:00.000Z",
"counts": { "success": 1, "failed": 0 },
"status": "complete"
}

Reading the result

statusMeaning
pendingStill being processed — poll again shortly.
pending_deliveryAccepted; delivery is scheduled (e.g. a future-dated conversion).
completeFinished — check counts.
complete_with_errorsFinished, but one or more conversions failed (counts.failed > 0).
stalledProcessing didn't finish in time — reach out to us.

A successful test shows status: complete with counts.success equal to the number you sent and counts.failed: 0. Because the ad-platform send is bypassed for tests, complete confirms the conversion passed cleanly through TNT's pipeline — it is intentionally not delivered to the ad platform.

Client-scoped

GET /api/conversions/submissions/{id} requires your client-specific x-api-key and only returns your own submissions (others return 404).