vendor/reddit-conversions-api · vendor documented
Reddit Conversions API v3 payloads
The server-side sibling of the Reddit Pixel. Same conversion, different hop, a documented JSON contract instead of an image request.
What this pack matches
Rules
Codes are stable. A finding in CI, MCP, or the playground lands on the same id.
| Field | Required | What it checks | Rule ids | Source |
|---|---|---|---|---|
pixel_id |
required | It is the Reddit Pixel ID, and it travels in the v3 path. Fix: Put the Pixel ID from Events Manager in the path as `/api/v3/pixels/{pixel_id}/conversion_events`. | vendor.reddit-conversions-api.param.pixel_id.missingvendor.reddit-conversions-api.param.pixel_id.empty |
docs |
event_at |
required | Reddit CAPI v3 documents `event_at` as Unix time in milliseconds. A 10-digit value is seconds and lands in 1970. Fix: Send milliseconds: a JavaScript `Date.now()` is already in the right unit. | vendor.reddit-conversions-api.body.event_at.missingvendor.reddit-conversions-api.body.event_at.emptyvendor.reddit-conversions-api.body.event_at.invalid |
docs |
action_source |
required | v3 makes `action_source` required. Reddit documents `WEBSITE`, `APP`, `PHYSICAL_STORE`, and `OTHER`. Fix: Send `WEBSITE`, `APP`, `PHYSICAL_STORE`, or `OTHER`. | vendor.reddit-conversions-api.body.action_source.missingvendor.reddit-conversions-api.body.action_source.emptyvendor.reddit-conversions-api.body.action_source.invalid |
docs |
type.tracking_type |
required | v3 spells standard events in UPPER_SNAKE_CASE. Custom events use `CUSTOM` plus `custom_event_name`. Fix: Send `PURCHASE` or another documented type. For a custom event, send `CUSTOM` and `type.custom_event_name`. | vendor.reddit-conversions-api.body.type.tracking_type.missingvendor.reddit-conversions-api.body.type.tracking_type.emptyvendor.reddit-conversions-api.body.type.tracking_type.invalid |
docs |
metadata.currency |
optional | It is an ISO 4217 currency code. Fix: Use the three-letter code, such as `USD`. | vendor.reddit-conversions-api.body.metadata.currency.emptyvendor.reddit-conversions-api.body.metadata.currency.invalid |
docs |
user.ip_address |
optional | It is the visitor IP address. Reddit accepts it unhashed. Fix: Send the browser's public IP, not a digest. | vendor.reddit-conversions-api.body.user.ip_address.empty |
docs |
user.user_agent |
optional | It is the visitor user agent. Reddit accepts it unhashed. Fix: Send the browser's user agent string, not a digest. | vendor.reddit-conversions-api.body.user.user_agent.empty |
docs |
body.hashed_plaintext_field |
required | This field looks like a SHA-256 digest, but Reddit documents `user.ip_address` and `user.user_agent` as unhashed match keys. Fix: Send the raw IP address or user agent. Hashing it makes the event unmatchable. | vendor.reddit-conversions-api.body.hashed_plaintext_field |
docs |
Validate a payload
pixellint validate json @payload.json --rulepack vendor/reddit-conversions-api
Or paste it into the playground. Same engine, in the browser, nothing sent anywhere.
cargo install pixellint
·
npm install pixellint