How to Connect Perspection to Reddit Conversions API for Server-Side Tracking

Reddit Conversions API Server-Side | Perspection

Step-by-step guide to connect Perspection to Reddit Conversions API. Configure Account ID, Pixel ID, OAuth credentials, and event mapping.

Perspection sends conversion events server-to-server directly to the Reddit Conversions API v2.0, bypassing browser limitations imposed by ad blockers, Safari ITP cookie restrictions, and iOS App Tracking Transparency. The Perspection Reddit connector maps nine standard event types -- Purchase, SignUp, Lead, AddToCart, AddToWishlist, ViewContent, Search, PageVisit, and Custom -- into the Reddit conversion payload schema, automatically hashing user data fields and extracting the Reddit Click ID (rdt_cid) for click-to-conversion attribution. Setup requires six credentials: Account ID, Pixel ID, Client ID, Client Secret, Access Token, and Refresh Token. The connector enforces a 600-call-per-minute rate limit, implements exponential backoff retry on transient failures, and respects CCPA opt-out and consent signals by setting the opt_out flag on outbound events.

How does server-side Reddit conversion tracking work?

Server-side Reddit conversion tracking sends events from Perspection servers directly to the Reddit Ads API, bypassing the visitor's browser. Perspection enriches each event with identity-resolved user data, extracts the Reddit Click ID (rdt_cid) from click parameters, and dispatches the payload to the Reddit Conversions API v2.0 endpoint at ads-api.reddit.com.

Browser-based Reddit Pixel tracking depends on JavaScript executing inside the visitor's browser. Three forces degrade browser-side Reddit Pixel accuracy:

  1. Ad blockers: Extensions such as uBlock Origin, Brave Shield, and Firefox Enhanced Tracking Protection block outbound requests to Reddit tracking domains, silently dropping Reddit Pixel events before Reddit Pixel events leave the browser.

  2. Safari Intelligent Tracking Prevention (ITP): Safari caps first-party JavaScript-set cookies at 7 days of expiry. Reddit's _rdt_uuid cookie expires after 7 days of visitor inactivity, breaking return-visitor attribution chains for Reddit ad campaigns.

  3. Apple App Tracking Transparency (ATT): Since iOS 14.5, Apple requires explicit opt-in for cross-app tracking. Roughly 75-96% of users deny the ATT prompt, limiting Reddit Pixel's ability to read device-level identifiers on iOS.

Perspection eliminates all three failure points. The Perspection Reddit connector (RedditConnector class) authenticates against the Reddit OAuth token endpoint using Client ID and Client Secret credentials, then posts conversion event payloads to the POST /api/v2.0/conversions/events/{pixel_id} endpoint. Reddit receives the conversion signal regardless of whether the visitor's browser blocked, restricted, or failed to execute the Reddit Pixel JavaScript.

The Perspection Reddit connector maps each incoming event through a standardized transformation pipeline:

Perspection Event Name

Reddit Tracking Type

page_view

PageVisit

view_content

ViewContent

search

Search

add_to_cart

AddToCart

add_to_wishlist

AddToWishlist

purchase

Purchase

lead

Lead

sign_up

SignUp

Any unmapped event

Custom (with custom_name)

When Perspection encounters an event name that does not match any entry in the mapping table above, the Perspection Reddit connector sets the Reddit tracking_type to Custom and passes the original event name as the custom_name field. Reddit Ads Manager displays custom events under their original names for campaign optimization and reporting.

Because Perspection operates a first-party tracking domain on behalf of each workspace, the Perspection SDK sets cookies under the merchant's own domain. Safari ITP treats Perspection first-party cookies as genuine first-party storage, extending cookie lifetime beyond the 7-day cap and preserving the rdt_cid click identifier that Reddit requires for accurate click-to-conversion attribution.

How do you connect Perspection to Reddit Conversions API?

Open the Perspection dashboard, navigate to Connectors then Destinations, select Reddit, enter the Account ID and Pixel ID from Reddit Ads Dashboard, paste the Client ID, Client Secret, Access Token, and Refresh Token from the Reddit OAuth 2.0 flow, and click Save. Perspection validates the connection by querying the Reddit Ads API account endpoint.

Step-by-step: Generate Reddit Conversions API credentials

  1. Navigate to Reddit Ads Dashboard and sign in with the Reddit account that owns the advertising account.

  2. Open Account Settings and copy the Account ID. Reddit Account IDs follow the format t2_xxxxxxxx.

  3. Navigate to Events Manager in the Reddit Ads Dashboard. If no Reddit Pixel exists, create a new Reddit Pixel. Copy the Pixel ID displayed on the Events Manager page. Reddit Pixel IDs also follow the t2_xxxxxxxx format.

  4. Open reddit.com/prefs/apps in a separate browser tab. Click "are you a developer? create an app..." at the bottom of the page.

  5. Select "web app" as the application type. Enter a name (for example, "Perspection CAPI"), a description, and the redirect URI required by the Reddit OAuth flow.

  6. After creating the application, Reddit displays the Client ID directly below the application name and the Client Secret labeled as "secret." Copy both values.

  7. Complete the Reddit OAuth 2.0 authorization flow to generate an Access Token and Refresh Token. The OAuth flow requires the ads.manage scope for Conversions API access. Store both tokens securely -- the Access Token expires periodically, and the Perspection Reddit connector uses the Refresh Token to obtain new Access Tokens automatically.

Step-by-step: Configure the destination in Perspection

  1. Log into the Perspection dashboard and select the workspace that should send events to Reddit.

  2. Open Connectors > Destinations from the left navigation.

  3. Under Available Destinations, click the Reddit card labeled "Conversions API."

  4. Enter the Account ID (format: t2_xxxxxxxx).

  5. Enter the Pixel ID (format: t2_xxxxxxxx).

  6. Enter the Client ID from the Reddit developer app page.

  7. Enter the Client Secret from the Reddit developer app page.

  8. Enter the Access Token generated via the Reddit OAuth 2.0 flow.

  9. Enter the Refresh Token generated via the Reddit OAuth 2.0 flow.

  10. Toggle the Live switch to enabled.

  11. Click Save. Perspection creates the destination and displays a "Live" health badge.

  12. Click Test to validate the connection. Perspection queries the Reddit Ads API account endpoint and reports the connection test result and latency in milliseconds.

What credentials does Reddit require?

Reddit Conversions API requires six credentials in the Perspection dashboard: Account ID (advertiser account identifier), Pixel ID (conversion pixel identifier), Client ID (Reddit developer app), Client Secret (Reddit developer app), Access Token (Reddit OAuth 2.0), and Refresh Token (automatic token renewal). All six fields are required, and the Perspection dashboard validates completeness before saving.

Credential reference table

Field

Required

Format

Where to Find

UI Field Type

Account ID

Yes

t2_xxxxxxxx

Reddit Ads Dashboard > Account Settings

Text

Pixel ID

Yes

t2_xxxxxxxx

Reddit Ads > Events Manager

Text

Client ID

Yes

24-character alphanumeric

reddit.com/prefs/apps > App > Client ID (under app name)

Text

Client Secret

Yes

24-character alphanumeric

reddit.com/prefs/apps > App > Secret

Password (masked)

Access Token

Yes

JWT format (eyJxxxxxxxx...)

Reddit OAuth 2.0 authorization flow

Password (masked)

Refresh Token

Yes

24-character alphanumeric

Reddit OAuth 2.0 authorization flow

Password (masked)

How Reddit OAuth 2.0 authentication works in Perspection

The Perspection Reddit connector authenticates against the Reddit token endpoint at https://www.reddit.com/api/v1/access_token using the client_credentials grant type. The Perspection Reddit connector encodes the Client ID and Client Secret as a Base64 Basic Authentication header and requests a short-lived bearer token. Reddit returns an Access Token and an expiration window.

The Perspection Reddit connector refreshes authentication tokens automatically before each API call. Advertisers do not need to manually rotate tokens after the initial setup. However, if the Reddit developer app is deleted, the Client ID revoked, or the advertiser's Reddit account changes, the Perspection Reddit connector returns an authentication error. The Perspection dashboard displays a "Down" health badge, and the Destination Health monitoring panel surfaces the specific error message.

Security considerations

  • Client Secret and tokens are stored encrypted. The Perspection dashboard masks Client Secret, Access Token, and Refresh Token fields with password-type inputs. Perspection stores credential values in the data plane database under the destinations.destinations table with the config JSONB column.

  • Principle of least privilege. Request only the ads.manage scope when generating the Access Token. Perspection does not require read access to Reddit user profiles, subreddits, or comment data.

  • Token rotation. If the Access Token or Refresh Token is compromised, generate new tokens via the Reddit OAuth flow and update the credentials in the Perspection dashboard. Revoking the Reddit developer app invalidates all tokens immediately.

What are the current capabilities of the Perspection Reddit connector?

The Perspection Reddit connector supports nine standard conversion event types (Purchase, SignUp, Lead, AddToCart, AddToWishlist, ViewContent, Search, PageVisit, Custom), automatic rdt_cid click ID extraction for conversion attribution, SHA-256-hashed user data transmission (email, phone), event metadata including value/currency/contents, consent-aware opt-out handling for CCPA compliance, 600-call-per-minute rate limiting, and exponential backoff retry with 3 attempts on transient failures.

Data Perspection sends to Reddit

The Perspection Reddit connector transforms each event into the Reddit Conversions API payload schema. The following table documents every field the Perspection Reddit connector populates:

User data parameters

Perspection Field

Reddit API Parameter

Format

Purpose

external_id

user.external_id

Raw string

Cross-device identity matching

email_hash

user.hashed_email

SHA-256 hash (64 hex chars)

Primary identity matching

phone_hash

user.hashed_phone_number

SHA-256 hash (64 hex chars)

Secondary identity matching

client_ip_address

user.ip_address

IPv4/IPv6 string

Geographic and session matching

client_user_agent

user.user_agent

Full UA string

Device identification

rdt_cid (click ID)

user.click_id

Reddit Click ID string

Click-to-conversion attribution

Event metadata parameters

Perspection Field

Reddit API Parameter

Purpose

value

event_metadata.value

Conversion monetary value

currency

event_metadata.currency

ISO 4217 currency code (defaults to workspace currency or USD)

quantity / item_count

event_metadata.item_count

Number of items in conversion

event_id

event_metadata.conversion_id

Unique event identifier for deduplication

product_ids

event_metadata.contents[].id

Product catalog IDs for Dynamic Product Ads

search_term

event_metadata.search_string

Search query for Search events

page_url

event_metadata.page_url

Page URL where event occurred

Reddit Click ID (rdt_cid) extraction

The rdt_cid parameter is the Reddit equivalent of Facebook's fbclid or Google's gclid. When a user clicks a Reddit ad, Reddit appends the rdt_cid query parameter to the landing page URL. The Perspection SDK captures rdt_cid from URL parameters and stores the value in the click IDs JSONB field.

The Perspection Reddit connector extracts rdt_cid using the base connector's extractClickIds() method, which reads from three sources in priority order:

  1. JSONB click_ids field (primary source -- new storage format)

  2. Individual event columns (fallback -- legacy storage format)

  3. Event properties object (fallback -- raw SDK events)

When rdt_cid is present, Reddit can attribute the conversion directly to the specific ad click. Without rdt_cid, Reddit falls back to probabilistic matching using hashed email, hashed phone, IP address, and user agent -- a lower-accuracy attribution method.

Consent and privacy handling

The Perspection Reddit connector respects user consent signals and privacy regulations. Before dispatching each event, the Perspection Reddit connector evaluates four consent conditions:

  1. CCPA opt-out (consent.ccpa_opt_out === true)

  2. Ad storage denied (consent.ad_storage === 'denied')

  3. Ad user data denied (consent.ad_user_data === 'denied')

  4. Explicit opt-out property (properties.opt_out === true)

When any of the four conditions evaluates to true, the Perspection Reddit connector sets the event_metadata.opt_out flag to true in the Reddit payload. Reddit processes opt-out events for aggregate reporting but excludes opt-out events from user-level targeting and personalization. Perspection never silently drops events based on consent status -- all events dispatch to Reddit with the appropriate opt-out flag, preserving aggregate conversion counts while respecting privacy preferences.

For detailed consent enforcement configuration, see the Consent Enforcement and Compliance guide.

Rate limiting and retry behavior

The Perspection Reddit connector enforces a rate limit of 600 API calls per minute, matching the Reddit Conversions API rate limit. The Perspection base connector tracks remaining capacity and resets the counter every 60 seconds.

Scenario

Perspection Action

Rate limit exceeded

Event re-queued for dispatch after reset window

HTTP 200 (Success)

Event logged as delivered

HTTP 429 (Rate Limited)

Exponential backoff retry (3 attempts, 500ms base delay)

HTTP 5xx (Server Error)

Exponential backoff retry (3 attempts, 500ms base delay)

HTTP 4xx (Client Error)

Non-retriable -- logged and routed to Dead Letter Queue

The exponential backoff schedule follows the pattern: first retry after 500ms, second retry after 1,000ms, third retry after 2,000ms. If all three retry attempts fail, the event routes to the Dead Letter Queue for manual investigation.

Connection validation

The Perspection Reddit connector validates the connection by sending a GET request to the Reddit Ads API account endpoint at https://ads-api.reddit.com/api/v2.0/accounts/{account_id}. When the Perspection dashboard user clicks the Test button, the Perspection Reddit connector authenticates with the stored OAuth credentials and checks that the Account ID resolves to a valid Reddit advertising account. The Perspection dashboard reports "Connection test successful!" with the response latency, or displays the specific Reddit API error message if validation fails.

Event mapping configuration

Beyond the default event name mapping table, Perspection provides a visual and JSON-based event mapping editor for customizing how Perspection events translate to Reddit conversion events. The mapping editor supports:

  1. Event name remapping: Map a custom source event name (for example product_viewed) to a specific Reddit tracking type (for example ViewContent).

  2. Property remapping: Map source properties to Reddit-specific metadata keys using dot-notation paths (for example properties.price mapped to value).

  3. Event ignoring: Mark specific source events to skip dispatch to Reddit entirely.

  4. Visual and JSON modes: Toggle between a drag-and-drop visual editor and a raw JSON editor for advanced configurations.

To configure event mapping, expand the Reddit destination card in the Perspection dashboard, scroll to the Event Mapping section (visible after saving the destination), and add mapping rules. The mapping configuration saves separately from the destination credentials.

What the Reddit connector does not currently support

For transparency, the following capabilities are not yet available in the Perspection Reddit connector:

  • Baseline Pixel comparison. Unlike the Meta CAPI connector, the Reddit connector does not include a Baseline Pixel ID field for comparing Perspection-recovered conversions against an existing Reddit Pixel implementation.

  • EMQ scoring. The Perspection Reddit connector does not calculate an Event Match Quality score for Reddit events. EMQ scoring is currently available for Meta CAPI destinations only.

  • Test Event Code. Reddit Conversions API does not provide a test event routing mechanism equivalent to Meta's Test Event Code. Validate Reddit events using the Reddit Events Manager in the Reddit Ads Dashboard.

Methodology

All Reddit Conversions API configuration details in this guide were verified against the Perspection production dashboard and Reddit Ads Manager as of February 2026.

"The single highest-impact action for improving Reddit conversion attribution is capturing the rdt_cid click parameter. When a user clicks a Reddit ad, Reddit appends rdt_cid to the landing page URL. Perspection's first-party domain setup preserves the rdt_cid value in a first-party cookie beyond Safari ITP's 7-day expiry, enabling accurate click-to-conversion attribution even when 14 or more days elapse between the ad click and the purchase. Without rdt_cid, Reddit falls back to probabilistic matching using hashed email and IP address -- a method that typically captures only 40-60% of conversions that deterministic click-based matching would attribute. Advertisers running Reddit campaigns alongside Meta or Google should configure Perspection to collect all platform click IDs simultaneously, as the Perspection SDK captures rdt_cid, fbclid, gclid, ttclid, and 13 other click ID formats in a single page load." -- Perspection Engineering Team

Sources & References

  1. Reddit Ads -- Conversions API, https://business.reddithelp.com/helpcenter/s/article/Conversions-API

  2. Reddit Ads Help Center, https://business.reddithelp.com/

  3. Perspection Product Guide -- Event Match Quality, /library/event-match-quality-guide

  4. Perspection Product Guide -- Destination Health, /library/destination-health-failed-events-guide

Data Pipeline for Digital Marketing and Business Analytics

Contact Us

info@perspection.app

Data Pipeline for Digital Marketing and Business Analytics

Contact Us

info@perspection.app