Skip to main content

Reddit Conversions

This guide covers how to submit offline conversions to Reddit Ads 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/reddit/events/add

Request Body Schema

FieldTypeRequiredDescription
pixelIdstringYesYour Reddit Pixel ID (provided during onboarding)
eventTypeobjectYesThe type of conversion event (see below)
eventTimenumberNoUnix timestamp (seconds) of when the event occurred
clickIdstringNoReddit click ID captured from the ad click
eventSourceUrlstringNoThe URL where the event took place
testIdstringNoReddit test mode ID for verifying in Events Manager
userDataobjectNoCustomer identifiers for matching (see below)
eventMetadataobjectNoConversion details like value and products (see below)
utmSourcestringNoUTM source parameter (e.g. reddit) — stored for attribution reporting
utmMediumstringNoUTM medium parameter (e.g. cpc) — stored for attribution reporting
utmCampaignstringNoUTM campaign name — stored for attribution reporting
utmTermstringNoUTM search keyword — stored for attribution reporting
utmContentstringNoUTM content parameter (ad/creative variant) — stored for attribution reporting

Event Type

FieldTypeRequiredDescription
tracking_typestringYesOne of the tracking types listed below
custom_event_namestringNoCustom event name (required when tracking_type is Custom)

Tracking types: PageVisit, ViewContent, Search, AddToCart, AddToWishlist, Purchase, Lead, SignUp, Custom

User Data Fields

FieldTypeDescription
emailstringCustomer email address
phonestringCustomer phone number
ipAddressstringIP address of the customer
userAgentstringBrowser user agent string
externalIdstringYour internal customer ID
idfastringApple ID For Advertisers
aaidstringAndroid Advertising ID
uuidstringUnique user identifier
screenDimensionsobject{ width: number, height: number }
dataProcessingOptionsobjectPrivacy compliance options (see below)

Event Metadata

FieldTypeDescription
itemCountnumberNumber of items in the conversion
currencystringCurrency code (e.g. USD)
valueDecimalnumberMonetary value of the conversion
conversionIdstringYour internal conversion/order ID
productsarrayArray of { id, name, category } objects

Example Request

curl -X POST https://flex.tntgrowth.io/api/reddit/events/add \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"pixelId": "t2_abc123def",
"eventType": {
"tracking_type": "Purchase"
},
"eventTime": 1778043599,
"clickId": "rdt_abc123...",
"eventSourceUrl": "https://example.com/thank-you",
"userData": {
"email": "customer@example.com",
"phone": "+15551234567",
"externalId": "cust-12345"
},
"eventMetadata": {
"currency": "USD",
"valueDecimal": 150.00,
"itemCount": 2,
"conversionId": "order-12345"
},
"utmSource": "reddit",
"utmMedium": "cpc",
"utmCampaign": "awareness-q2",
"utmTerm": "treatment options",
"utmContent": "promoted-post-variant-b"
}'

Example Response

{
"message": "Conversion successfully queued for Example Client",
"data": {
"submissionId": "8f3c2d10-7e6b-4a51-9d8c-3b2e1f0a9b8c"
}
}

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": "REDDIT",
"externalAccountId": "t2_abc123def",
"expectedCount": 1,
"createdAt": "2026-05-11T12:00:00.000Z",
"scheduledFor": null,
"counts": {
"success": 1,
"failed": 0
},
"status": "complete"
}

Status Values

StatusDescription
pendingConversion is queued and waiting to be processed
pending_deliverySubmission is scheduled for future delivery — the scheduledFor field carries the ISO-8601 fire timestamp. Currently only emitted by Google Ads ingest paths; Reddit submissions never enter this state.
completeConversion processed successfully
complete_with_errorsProcessing finished but some conversions failed — use GET /api/conversions/reddit/failed?submissionId=<id> to fetch the actual error messages
stalledProcessing has not progressed — contact support

The scheduledFor field is always null for Reddit 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/reddit/failed?submissionId=<submissionId>

The response payload mirrors the Google Ads failed-conversion shape — see Google Ads → Inspecting Failed Conversions In Your Batch.

Data Processing Options

For privacy compliance (e.g. CCPA), you can include data processing options in userData:

{
"dataProcessingOptions": {
"modes": ["LDU"],
"country": "US",
"region": "CA"
}
}

Best Practices

  • Include clickId when available — Reddit click IDs provide the strongest attribution signal
  • Send userData with email and/or phone to improve match rates for offline events
  • Use accurate timestampseventTime should reflect when the event actually occurred
  • Include conversionId in eventMetadata for deduplication on Reddit's side
  • Poll with a delay — wait 30-60 seconds after submission before checking status
  • Use Custom tracking type with a custom_event_name for events that don't map to standard types