Reddit Conversions API: The Complete Guide
The Reddit Conversions API is Reddit's server-side channel for conversion data: your server, tracker, or CRM posts events straight to Reddit instead of relying on a browser tag. This page is the front door to our Reddit CAPI cluster: what the API does, what a working event needs, how deduplication and validation fit together, and where each specific problem - a rejected payload, a double count, a mismatched report - has its own deep-dive guide.
What Is the Reddit Conversions API?
The Reddit Conversions API is Reddit's documented intake for conversion events sent directly from your systems. Reddit describes it for web, app, and offline event sources, which makes it the channel that still reports conversions an affiliate funnel produces on offer pages you do not control - the tracker records the sale, and the server event is what carries it to Reddit. Once delivered, server events feed the same measurement and optimization layer as Reddit Pixel events.
Reddit imposes three shape-giving constraints on any integration. Events must be sent within seven days of the conversion, so a delayed postback is recoverable but not indefinitely. The rate ceiling sits at 1,000 requests per second, 10,000 events per second, and 1,000 events per request - far above one funnel's volume, relevant only when batching a tracker's backlog. And when the Reddit Pixel and the API both report the same events - the configuration Reddit recommends - event deduplication is required, not optional.
The screen-by-screen setup path, token mistakes included, lives in the dedicated guide: Reddit Conversions API setup.
What You Need Before Setup
Reddit's setup needs exactly two values. The Pixel ID identifies the data source that receives your conversions and slots into the endpoint URL. Authorization comes from the conversion access token, which Reddit's best practices recommend over a developer token because it is non-expiring and simple to generate, and it is shown only once at creation, so copy it immediately.
Both values live in Reddit's Events Manager under Configure data source, Conversions API, Set up manually - the walk with screenshots lives in Reddit Conversions API setup, and the token and Pixel ID have their own credentials guide. Store them server-side: a token in a client-side bundle is a credential leak, not a shortcut.
Sending Events: The v3 Payload
The target is https://ads-api.reddit.com/api/v3/pixels/<pixel_id>/conversion_events, authenticated with the token as a bearer header. Each entry in the events array carries the fields a conversion needs, and Reddit's reference sample shows the shape:
event_at- the conversion timestamp; the seven-day window applies to it;action_source- where the conversion happened, such asWEBSITE,PHYSICAL_STORE, or an app source;PHYSICAL_STOREevents should not carry device identifiers;type- an object holdingtracking_type(PURCHASE,LEAD,PAGE_VISIT, orCUSTOMwith acustom_event_nameof up to 64 case-sensitive UTF-8 characters - only the 20 most recent custom events show on the dashboard);metadata- revenue and identity for the conversion:conversion_id,currency,value;user- match keys such asip_addressandexternal_id;event_source_url- recommended forWEBSITEevents: Reddit extracts the domain for reporting, and a click ID in the URL serves as a fallback identifier.
{
"data": {
"events": [
{
"click_id": "3184742045291813272",
"event_at": 1790000000000,
"action_source": "WEBSITE",
"event_source_url": "https://www.example.com/checkout?rdt_cid=3184742045291813272",
"type": { "tracking_type": "PURCHASE" },
"metadata": { "conversion_id": "order-8842", "currency": "USD", "value": 49.9 },
"user": { "ip_address": "192.0.2.1", "external_id": "7c73f2ae-a433-4d7b-9838-f467da98f48e" }
}
]
}
}A well-formed request returns a confirmation message about successfully processed conversion events; anything else is a documented error code with a documented fix - the error-handling section below. The field-by-field walkthrough lives in this cluster's events and parameters deep-dive.
Match Keys: What Reddit Matches On
Match keys are the identifiers Reddit uses to tie a conversion back to an ad engagement, and Reddit's guidance is explicit: share as many as possible, strongly recommend the IP address and the click ID, and add email, phone number, and user agent. A UUID is recommended when integrating CAPI with the pixel. Identifiers may go unhashed or pre-hashed; hashed values follow strict canonicalization - lowercase email with dots and plus-suffixes stripped, digit-only phone with country code, 64 lowercase hex digits for every digest.
The click ID deserves its own discipline: Reddit appends rdt_cid to your landing page URL at click time, and the delivery layer must pass it as click_id. Where each identifier sits, how canonicalization differs per network, and what silently fails are covered in match keys, the general discipline lives in CAPI user data hashing and normalization, and the click-ID persistence chain is in link tracking and click ID loss.
Deduplication: conversion_id Before Sessions
Running the Reddit Pixel and the Conversions API together is the recommended configuration, and deduplication is required in it. Reddit's job runs hourly and marks the lower-quality event as a duplicate: the event with more metadata and match keys wins, and among equals the later one is dropped. The recommended method passes a unique conversion_id from both the pixel and the server event; reusing one ID across too many events marks real conversions as duplicates. Without an ID, Reddit falls back to session-based dedup - a session being a stream of events from one user with no more than five minutes between neighbors - which needs a UUID or external ID on every event and only processes events that arrived within two days; the dedup log stays queryable for seven.
The mechanics are the same family as pixel and CAPI event deduplication in Meta's ecosystem: shared key, consistent naming, both channels live.
How to Validate Events Before Spending
Reddit's verify-events workflow is explicit:
- Copy the test ID from Events Manager and set it as
test_idin the POST request. - Send a test conversion and expand the event: check the received Pixel ID, conversion ID, match keys, and metadata.
- Remove the
test_idfield before deploying to production.
Mind the test rate limit of 10 events per second - batched requests are not displayed in the testing view.
Warnings are not failures: malformed-but-recognizable values are accepted, but each warning is a match key working below strength, and unresolved issues surface in Diagnostics, taking up to 24 hours to clear. The validation habit is the same as in Meta's ecosystem - test events before scaling.
For a one-off manual check, the free Pixel Activator sends valid test events to Reddit without any server setup. When delivery must recur from a tracker or CRM with deduplication built in, connect Most.
Error Handling and Rate Limits
Reddit documents five failure families, each with a distinct fix:
| Response | What Reddit reports | The fix |
|---|---|---|
| 400 | Invalid conversion events, none processed; or payloads above the 1,000-events-per-call cap | Fix the payload values; split the batch |
| 401 | No bearer token provided, or an invalid token | Check the Authorization header and the token value |
| 403 | Token not authorized for that Pixel ID; missing adsconversions scope | Match token and pixel; add the scope for developer apps |
| 429 | Rate limit hit; default user agents get throttled | Unique descriptive user-agent, exponential backoff, batching |
| 500 | Transient downtime, no events processed | Retry later |
Every family, its exact message, and its fix are tabulated in Reddit Conversions API errors.
Attribution Windows and Discrepancies
| Attribution type | Default window | Options |
|---|---|---|
| Click-through | 28 days | 1, 7, or 28 days |
| View-through and click-through (recommended) | 28-day click + 1-day view | View window never longer than the click window |
Both are edited in Events Manager under Attribution Settings. When Ads Manager and your tracker disagree, Reddit's own troubleshooting names the usual suspects: Reddit attributes conversions to the day the ad was viewed or clicked while third-party tools often use the completion day, attribution windows differ between platforms, view-through conversions may not exist in your tracker, reports ignore the UTC timezone, redirects strip UTM parameters, and ad blockers suppress third-party tracking.
The full checklist walks through each cause in Reddit Ads conversion discrepancy.
Automating Delivery: Keitaro, Pixel Activator, and Most
If your funnel runs through Keitaro, the tracker captures rdt_cid at click time and posts conversions toward Reddit's endpoint with the mapping in one place; the wiring pattern is documented in the Keitaro Reddit integration, and the Meta-side twin in the Keitaro Facebook CAPI integration. For manual single-shot tests, Pixel Activator remains the fastest zero-setup entry point. And when delivery must always happen - retries, deduplication, hashing, round-the-clock routing from a tracker or CRM - that is the job Most performs in the background.
For teams delivering through server-side Google Tag Manager, the payload rules translate directly - see Reddit Conversions API via server-side GTM.
Reddit Conversions API: Frequently Asked Questions
Frequently asked questions
Sources
Sources
- Conversions API overview - Reddit Ads API docs
- CAPI Direct Integration - Reddit Ads API docs
- CAPI Best Practices - Reddit Ads API docs
- CAPI Error Handling - Reddit Ads API docs
- Verify Events - Reddit Ads API docs
- Attribution - Reddit Help Center
- Third-Party Reporting Doesn't Match the Ads Manager - Reddit Help Center
- About Match Keys - Reddit Help Center
- Event Deduplication - Reddit Help Center
- Manual testing and validation: Pixel Activator fires free test events while you tune parameters.
- Automated delivery: Most routes conversions from your tracker or CRM continuously, with deduplication and retries handled.
