Bing (Microsoft Ads) Conversions
This guide covers how to submit offline conversions to Microsoft Advertising (Bing) through the TNT Growth API.
Authentication
All requests require an x-api-key header with your client-specific API key provided by TNT Growth.
-H "x-api-key: YOUR_API_KEY"
Submitting a Conversion
Endpoint
POST /api/bing/conversions/offline/add
Request Body Schema
| Field | Type | Required | Description |
|---|---|---|---|
customerAccountId | string | Yes | Your Microsoft Ads customer account ID (provided during onboarding) |
conversionName | string | Yes | The name of the offline conversion goal in Microsoft Ads |
microsoftClickId | string | Yes | Microsoft Click ID (msclkid) captured from the ad click |
conversionTime | number | Yes | Unix timestamp (seconds) of when the conversion occurred |
conversionValue | number | No | Monetary value of the conversion |
email | string | No | Customer email address (hashed before sending to Microsoft) |
phoneNumber | string | No | Customer phone number (hashed before sending to Microsoft) |
ingestionSource | string | No | Origin of the event (e.g. pixel, conversion-api) |
utmSource | string | No | UTM source parameter (e.g. bing) — stored for attribution reporting |
utmMedium | string | No | UTM medium parameter (e.g. cpc) — stored for attribution reporting |
utmCampaign | string | No | UTM campaign name — stored for attribution reporting |
utmTerm | string | No | UTM search keyword — stored for attribution reporting |
utmContent | string | No | UTM content parameter (ad/creative variant) — stored for attribution reporting |
Example Request
curl -X POST https://flex.tntgrowth.io/api/bing/conversions/offline/add \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"customerAccountId": "B012345678",
"conversionName": "Offline Purchase",
"microsoftClickId": "abc123def456ghi789",
"conversionTime": 1778043599,
"conversionValue": 150,
"email": "customer@example.com",
"phoneNumber": "+15551234567",
"utmSource": "bing",
"utmMedium": "cpc",
"utmCampaign": "brand-search-q2",
"utmTerm": "best treatment center",
"utmContent": "expanded-text-ad-variant-b"
}'
Example Response
{
"message": "Offline conversion sent to bing Example Client B012345678 Offline Purchase",
"data": {
"submissionId": "8f3c2d10-7e6b-4a51-9d8c-3b2e1f0a9b8c",
"duplicate": false
}
}
When a conversion is dedup-skipped (the same event was submitted within the last 24 hours), submissionId is null and duplicate is true.
Checking Submission Status
After submitting a conversion, use the submission ID to check processing status.
Endpoint
GET /api/conversions/submissions/:submissionId
Example Request
curl https://flex.tntgrowth.io/api/conversions/submissions/8f3c2d10-7e6b-4a51-9d8c-3b2e1f0a9b8c \
-H "x-api-key: YOUR_API_KEY"
Example Response
{
"id": "8f3c2d10-7e6b-4a51-9d8c-3b2e1f0a9b8c",
"source": "BING",
"externalAccountId": "B012345678",
"expectedCount": 1,
"createdAt": "2026-05-11T12:00:00.000Z",
"scheduledFor": null,
"counts": {
"success": 1,
"failed": 0
},
"status": "complete"
}
Status Values
| Status | Description |
|---|---|
pending | Conversion is queued and waiting to be processed |
pending_delivery | Submission is scheduled for future delivery. Currently only emitted by Google Ads ingest paths; Bing submissions never enter this state. |
complete | Conversion processed successfully |
complete_with_errors | Processing finished but some conversions failed — use GET /api/conversions/bing/failed?submissionId=<id> to fetch the actual error messages |
stalled | Processing has not progressed — contact support |
The scheduledFor field is always null for Bing submissions and is included only for schema parity with Google Ads, which uses it for deferred delivery.
Inspecting Failed Conversions In Your Batch
When a submission ends with complete_with_errors, the submission status endpoint surfaces only the count of failed rows. Fetch the actual error messages with:
GET /api/conversions/bing/failed?submissionId=<submissionId>
The response payload mirrors the Google Ads failed-conversion shape — see Google Ads → Inspecting Failed Conversions In Your Batch.
Best Practices
- Always include
microsoftClickId— themsclkidis required for Microsoft to attribute the offline conversion to the originating click - Use accurate timestamps —
conversionTimeshould reflect when the conversion actually occurred; Microsoft rejects conversions older than its lookback window - Match
conversionNameexactly to the offline conversion goal configured in Microsoft Ads - Send
emailand/orphoneNumberto enable enhanced conversion matching - Poll with a delay — wait 30-60 seconds after submission before checking status