The server-side request adscapi builds when you track() a purchase and Roku is configured. Secrets and hashed values show as placeholders.
https://events.ads.rokuapi.net/v1/events
Authorization: Bearer {ROKU_ADS_TOKEN}
Accept: application/json
Content-Type: application/json{
"event_group_id": "{ROKU_EVENT_GROUP_ID}",
"events": [
{
"event_id": "order_1001",
"event_name": "PURCHASE",
"event_type": "conversion",
"event_time": 1739452800,
"event_source": "website",
"user_data": {
"is_hashed": true,
"em": "<sha256(normalized-email)>",
"ph": "<sha256(e164-phone)>",
"client_ip_address": "203.0.113.10"
},
"custom_data": {
"value": 49.99,
"currency": "USD",
"order_id": "order_1001"
}
}
]
}Verified against the library dispatcher (src/dispatchers/roku.ts). See the Roku setup guide for where to get each secret.
ROKU_ADS_TOKENROKU_EVENT_GROUP_IDRoku activates when every secret is present. One missing key and the platform no-ops — the rest still receive the event.
| Canonical event | Roku receives |
|---|---|
page_view | PAGE_VIEW |
lead | LEAD |
signup_start | SIGN_UP |
signup | SIGN_UP |
checkout_created | INITIATE_CHECKOUT |
purchase | PURCHASE |
reply_generated | reply_generated (custom event passthrough) |
upgrade_clicked | upgrade_clicked (custom event passthrough) |
Discover more free tools to fix your tracking
Pick a canonical conversion event, fill the fields, and see the exact JSON payload adscapi builds — before you write a line of code.
Try it nowType a raw email or phone number and see the normalized value plus its SHA-256 hash — the exact rules adscapi applies per platform. Nothing leaves the browser.
Try it nowSearch all 26 ad platforms adscapi dispatches to — support level, required secrets, and setup docs, always in sync with the library registry.
Try it nowadscapi is free and open source. Set your platform tokens, call track() once, and every configured Conversions API receives the event — hashed the way each platform expects.