Truex Media · AsyncAPI Specification

Truex Media Webhooks

Version

View Spec View on GitHub CompanyAdvertisingAdTechVideo AdvertisingConnected TVInteractive AdvertisingSDKMobileAd ServingReportingAttention MeasurementOTTAsyncAPIEvents

AsyncAPI Specification

truex-media-webhooks.yml Raw ↑
generated: '2026-08-12'
method: searched
source: >-
  https://github.com/socialvibe/truex-ads-docs (web_service_ad_api.md,
  js_ad_api.md, engagement_interaction_tracking.md, choice_card_event_tracking.md,
  choice_card_vpaid_events.md, conversion_pixel.md) and the renderer references
  in truex-ad-renderer-web-integration, truex-android-integrations and
  truex-roku-integrations.
spec_type: none
asyncapi_published: false
asyncapi_note: >-
  true[X] publishes no AsyncAPI document. No /asyncapi.yaml, /asyncapi.json or
  event-catalog endpoint answered on any truex.com or infillion.com host, and
  the socialvibe GitHub organization contains no AsyncAPI file. NOT FABRICATED —
  what is captured below is the provider's real, documented event surface in its
  own terms: one server-to-server HTTP callback plus several client-side event
  streams.
webhooks:
- name: engagement_callback
  type: server-to-server HTTP callback
  direction: true[X] -> partner
  trigger: >-
    Fired when a user successfully completes an engagement (True Attention is
    met — typically 30 seconds spent plus at least one interaction).
  endpoint: >-
    Partner-supplied callback URL, registered with true[X] during the
    integration phase. There is no self-service webhook management surface.
  transport: HTTP GET with query parameters
  delivery: >-
    Generally real time, but may be delayed depending on current load. At-least-
    once: a partner response of 0 causes true[X] to retry.
  signing:
    algorithm: HMAC-SHA1
    parameter: sig
    key: application_secret
    canonicalization: >-
      key=value pairs sorted alphabetically by key, concatenated with no
      separator, application_secret appended, base64 encoded, URL escaped.
  deduplication:
    key: engagement_id
    contract: >-
      "If a non-unique engagement_id is passed to the partner, the request
      should be ignored and return a failure code to avoid over-crediting a
      user." The partner returns code 3, and true[X] does not retry.
  source_ip_allowlist:
    published: true
    note: >-
      true[X] publishes eight egress IP addresses and states that all external
      calls except those from the allowlist are blocked. Addresses are not
      copied here; read them from the reference, which is the authoritative and
      current list.
  payload:
  - field: application_key
    type: string
    description: The partner-specific application key provided by true[X].
  - field: network_user_id
    type: string
    description: Partner-provided identifier for the user who completed the ad.
  - field: currency_amount
    type: int
    description: Amount of publisher currency earned by completing the ad.
  - field: currency_label
    type: string
    description: Label of the currency used, e.g. "coins".
  - field: revenue
    type: decimal
    description: Revenue earned by the partner for this engagement, up to 8 decimal places.
  - field: placement_hash
    type: string
    description: Identifier hash of the placement this engagement originated from.
  - field: campaign_name
    type: string
  - field: campaign_id
    type: string
  - field: creative_name
    type: string
  - field: creative_id
    type: string
  - field: engagement_id
    type: string
    description: Unique true[X]-generated identifier for this engagement; the dedupe key.
  - field: sig
    type: string
    description: HMAC-SHA1 signature of the signed request.
  responses:
    reference: errors/truex-media-error-codes.yml
    codes:
    - 0 recoverable failure (retried)
    - 1 processed
    - 2 invalid signature
    - 3 invalid user or duplicate engagement_id (not retried)
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/web_service_ad_api.md
client_event_streams:
- name: js_client_ad_events
  transport: JavaScript callbacks on the ad object
  library: https://static.truex.com/js/client.js
  events:
  - name: onStart
    description: The ad is loaded and the user can begin interacting.
  - name: onCredit
    description: >-
      The billing event. Fired once the user has spent 30 seconds and interacted
      at least once. Yields an engagement object.
  - name: onClose
    description: The ad window was closed; fires independently of onFinish and onCredit.
  - name: onFinish
    description: The ad is fully complete and the user reached the end.
  - name: onMessage
    description: Custom messages from the engagement unit.
    payloads:
    - true_targeting_started
    - true_targeting_complete
    - ad_passback
  - name: onError
    description: An error occurred with the ad; treat as an exception.
  - name: onClickthrough
    description: >-
      Mobile only; fires when handle_clickthrough_manually is true, yielding the
      clickthrough URL for the host app to process.
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/js_ad_api.md
- name: truexadrenderer_events
  transport: renderer callbacks (subscribe / delegate / observeField per platform)
  platforms:
    web: '@truex/ad-renderer — tar.subscribe(handler)'
    android: TruexAdEvent enum via IEventEmitter
    roku: TruexAdRenderer node output events
    ios_tvos: TruexAdRendererDelegate methods
  terminal_events:
  - adCompleted
  - adError
  - noAdsAvailable
  - userCancelStream
  events:
  - name: adFetchCompleted
    android: AD_FETCH_COMPLETED
    ios: onFetchAdComplete
  - name: adStarted
    android: AD_STARTED
    ios: onAdStarted
  - name: adDisplayed
    android: AD_DISPLAYED
  - name: adCompleted
    android: AD_COMPLETED
    ios: onAdCompleted
    terminal: true
  - name: adError
    android: AD_ERROR
    ios: onAdError
    terminal: true
  - name: noAdsAvailable
    android: NO_ADS_AVAILABLE
    ios: onNoAdsAvailable
    terminal: true
  - name: adFreePod
    android: AD_FREE_POD
    ios: onAdFreePod
    description: The user did sufficient interaction to earn an ad credit; skip the pod.
  - name: userCancelStream
    android: USER_CANCEL_STREAM
    terminal: true
  - name: optIn
    android: OPT_IN
    ios: onOptIn
  - name: optOut
    android: OPT_OUT
    ios: onOptOut
  - name: skipCardShown
    android: SKIP_CARD_SHOWN
    ios: onSkipCardShown
  - name: userCancel
    android: USER_CANCEL
    ios: onUserCancel
  - name: popupWebsite
    android: POPUP_WEBSITE
    ios: onPopupWebsite
  - name: adsAvailable
    ios: onAdsAvailable
    platforms:
    - roku
    - ios
  - name: xtendedViewStarted
    platforms:
    - web
  - name: videoEvent
    platforms:
    - roku
  source: https://github.com/socialvibe/truex-ad-renderer-web-integration/blob/master/DOCS.md
- name: vpaid_adinteraction_events
  transport: VPAID AdInteraction events dispatched from the choice card ad flow
  events:
  - TrueXChoiceCardLoaded
  - TrueXSkipCardLoaded
  - TrueXNoAdLoaded
  - TrueXUserOptIn
  - TrueXUserOptOut
  - TrueXUserTimeOut
  - TrueXClosedAfterCredit
  - TrueXClosedBeforeCredit
  - TrueXCredit
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/choice_card_vpaid_events.md
- name: interaction_tracking
  transport: tracking beacons emitted by the ad container / renderer
  shape:
    category: One of ten fixed categories.
    name: The action being taken.
    value: Optional additional context or a millisecond timing value.
    step: The step in which the interaction took place.
    user_initiated: Whether the interaction came from a user input.
  categories:
  - timing
  - multimedia
  - navigation
  - external_page
  - click
  - other
  - share
  - data_entry
  - aggregate
  - debug
  standard_events:
  - timing/initial
  - timing/total_time_spent
  - timing/true_attention_time_met
  - timing/true_attention_interaction_met
  - timing/continue_to_end
  - timing/creative_completion
  - click/interaction
  - debug/heart_beat
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/engagement_interaction_tracking.md
- name: choice_card_events
  transport: tracking beacons from the FEP choice card trigger point
  category_convention: fep_<platform>_<choice_card_config_name>
  required_events:
  - player_load
  - player_no_load
  - player_ad_free
  - choice_card_select_unit
  - choice_card_select_watch
  - choice_card_auto_advance
  - choice_card_re-select_unit
  optional_events:
  - choice_card_debug
  - choice_card_error
  - select_back
  - unit_closed_by_x_after_credit
  - unit_closed_by_x_before_credit
  - unit_load
  - unit_credit
  - unit_first_interaction
  - unit_time_met
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/choice_card_event_tracking.md
tracking_pixels:
- name: conversion_pixel
  url_template: https://engage.truex.com/c.gif?value=LABEL
  mechanism: >-
    Drops a cookie when a user completes an engagement; a later fire of the
    pixel on the advertiser's site records a conversion event.
  limitation: >-
    Safari blocks third-party cross-site cookies, so the pixel does not work
    there; the provider states it should not be used on mobile campaigns.
  source: https://github.com/socialvibe/truex-ads-docs/blob/master/conversion_pixel.md
gaps:
- No AsyncAPI, CloudEvents or event-schema document of any kind.
- Callback URL registration is manual, via a true[X] contact — no webhook management API.
- No published delivery-retry schedule, backoff policy or dead-letter behavior.
- No signature algorithm modernization; HMAC-SHA1 is the only documented option.
- No replay or redelivery endpoint for missed callbacks.

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/truex-media-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.