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

FieldRequiredDescription
event_group_idYesThe 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_keyYesConversions 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

  1. Go to Integrations > Add Integration > Roku.
  2. Choose a preset: Default (default), Retail (ecommerce), Media & Subscription (media_subscription), Insurance (insurance), Travel (travel).
  3. 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 eventVendor eventPresets
pagePAGE_VIEWDefault, Retail, Media & Subscription, Insurance, Travel
view_itemVIEW_CONTENTDefault, Retail, Travel
searchSEARCHDefault, Retail, Travel
add_to_cartADD_TO_CARTDefault, Retail
begin_checkoutINITIATE_CHECKOUTDefault, Retail, Insurance
purchasePURCHASEDefault, Retail, Media & Subscription, Insurance, Travel
generate_leadLEADDefault, Retail, Insurance
sign_upCOMPLETE_REGISTRATIONDefault, Retail, Media & Subscription
add_to_wishlistADD_TO_WISHLISTRetail
add_payment_infoADD_PAYMENT_INFORetail
content_viewedVIEW_CONTENTMedia & Subscription
trial_startedSTART_TRIALMedia & Subscription
subscription_startedSUBSCRIBEMedia & Subscription
subscription_renewedSUBSCRIPTION_RENEWALMedia & Subscription
subscription_cancelledSUBSCRIPTION_CANCELLATIONMedia & Subscription
quote_requestedLEADInsurance
quote_completedLEADInsurance
contact_requestedCONTACTInsurance
booking_startedINITIATE_CHECKOUTTravel
booking_completedPURCHASETravel

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.

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

ProblemSolution
400 with an event_name errorEvent names must be Roku events (PURCHASE, ADD_TO_CART, …). Check any event you renamed in the preset.
401The 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.

See also