Roku
Datafly Signal sends conversions to Roku Ads Manager server-to-server through the Roku Conversions API, for CTV and streaming ad attribution, optimisation and custom audiences.
Prerequisites
Generate an API key
In Roku Ads Manager open the Events tab and select CAPI, then Generate an API key (Organization or Account Admins only). The key is a JSON web token that does not expire; revoke and regenerate it if it is exposed.
Find your Event Group ID
An event group represents one website or app. Note its ID in the CAPI section of the Events tab; every request is sent under it.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
event_group_id | Yes | The Event Group ID of the website or app you send events for (an event group represents one online property). Shown in Roku Ads Manager under Events > CAPI. Sent as event_group_id on every request. |
api_key | Yes | Conversions API key (a JSON web token that does not expire). Generate it in Roku Ads Manager under Events > CAPI > Generate an API key (Organization or Account Admins only). Sent as a Bearer token. |
Management UI Setup
- Go to Integrations > Add Integration > Roku.
- Choose a preset: Default (
default), Retail (ecommerce), Media & Subscription (media_subscription), Insurance (insurance), Travel (travel). - Fill in the fields above and click Save.
Request format
POST https://events.ads.rokuapi.net/v1/events
{
"event_group_id": "example_website_123",
"events": [
{
"custom_data": {
"content_type": "product",
"contents": [
{
"id": "SKU_1",
"price": 120,
"quantity": 2
},
{
"id": "SKU_2",
"price": 19.99,
"quantity": 1
}
],
"currency": "GBP",
"order_id": "ORD-1001",
"value": 259.99
},
"event_id": "evt-e3-1",
"event_name": "PURCHASE",
"event_source": "website",
"event_source_url": "https://shop.example.co.uk/checkout/done?x=1",
"event_time": 1758500000,
"event_type": "conversion",
"opt_out": "false",
"referrer_url": "https://www.example.com/",
"user_data": {
"client_ip_address": "203.0.113.9",
"client_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"em": "86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d",
"external_id": "crm-user-9",
"fn": "81f8f6dde88365f3928796ec7aa53f72820b06db8664f5fe76a7eb13e24546a2",
"ln": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f",
"ph": "9e1919ad78a34fd67a84bfbcf2fea14074065517bea32e92924771c3f92e5462"
}
}
]
}event_group_id, and on each event event_name (a Roku event), event_type (conversion), event_time (epoch seconds) and user_data are required. Up to 1,000 events per request; Signal batches up to 500. https://events.ads.rokuapi.net/v1/test_events validates a payload without recording it.
Event Mapping
| Signal event | Vendor event | Presets |
|---|---|---|
page | PAGE_VIEW | Default, Retail, Media & Subscription, Insurance, Travel |
view_item | VIEW_CONTENT | Default, Retail, Travel |
search | SEARCH | Default, Retail, Travel |
add_to_cart | ADD_TO_CART | Default, Retail |
begin_checkout | INITIATE_CHECKOUT | Default, Retail, Insurance |
purchase | PURCHASE | Default, Retail, Media & Subscription, Insurance, Travel |
generate_lead | LEAD | Default, Retail, Insurance |
sign_up | COMPLETE_REGISTRATION | Default, Retail, Media & Subscription |
add_to_wishlist | ADD_TO_WISHLIST | Retail |
add_payment_info | ADD_PAYMENT_INFO | Retail |
content_viewed | VIEW_CONTENT | Media & Subscription |
trial_started | START_TRIAL | Media & Subscription |
subscription_started | SUBSCRIBE | Media & Subscription |
subscription_renewed | SUBSCRIPTION_RENEWAL | Media & Subscription |
subscription_cancelled | SUBSCRIPTION_CANCELLATION | Media & Subscription |
quote_requested | LEAD | Insurance |
quote_completed | LEAD | Insurance |
contact_requested | CONTACT | Insurance |
booking_started | INITIATE_CHECKOUT | Travel |
booking_completed | PURCHASE | Travel |
Signal forwards properties the preset does not map unless the integration’s strict output contract is on. Turn on strict_output_contract for this integration so only the documented fields are sent.
Identity
user_data carries em and ph as normalised SHA-256 (phone in E.164 first), fn and ln hashed the same way, external_id (your user ID), client_ip_address, client_user_agent and aGI (the mobile advertising ID). Roku needs at least one of IP, email, phone or a device ID, so every web event qualifies through its IP. Roku also removes a +alias from email addresses before hashing; Signal does not, so name+tag@example.com hashes differently.
Consent
Roku is an advertising destination and requires marketing consent by default. opt_out (Limited Data Use, for US state privacy laws) is "true" when the visitor has denied marketing consent.
Troubleshooting
| Problem | Solution |
|---|---|
| 400 with an event_name error | Event names must be Roku events (PURCHASE, ADD_TO_CART, …). Check any event you renamed in the preset. |
| 401 | The API key is missing, revoked or pasted with spaces. |
Blueprint
The Roku blueprint version is 0.12.0. It was last reviewed against the vendor’s documentation on 2026-09-22.