Live Event Reference
This page documents the canonical event payloads that Social Stream Ninja emits for major platforms. Use it as a shared source of truth when wiring new sources, troubleshooting integrations, or aligning UI labels. For a shorter consumer-focused matrix, see Events and Alerts Compatibility.
On This Page
Jump to the shared field rules, a platform implementation, or the compatibility notes near the end.
Important: Event availability depends on the source, permissions, and capture settings. To hide event-marked rows in dock or featured overlays, add &hideevents or &hideallevents. To hide selected events, use &filterevents=subscription_gift,new_follower,gifted. These filters can also hide paid rows that carry an event; ordinary donation rows without an event marker are not matched by event filters. Other message filters still apply.
Choose the capture method: For YouTube, Twitch, and Kick, WebSocket mode generally provides broader event coverage. Standard DOM capture reads the rows and cards actually rendered on the page. YouTube Super Chats, Super Stickers, and Jewel gifts have capture paths in both modes; other gift, tip, and membership events vary by source. See the platform tables for the supported paths and required settings.
Payload shape: Donation-style chat rows should use hasDonation and optional donoValue. Do not set event: "donation" just because a normal chat/tip row has value; use specific event names only for real platform actions or paid item types, such as superchat, supersticker, gift, or jeweldonation. Use meta only for additional structured data that consumers actually need and that existing fields do not already cover.
Quick Feature Availability
Use this table to see which alert types each capture method currently delivers. Detailed payload notes follow below.
The dedicated Multi-Stream Alert Box groups live events into six core alert categories: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host, and Purchase, plus two opt-in categories (Auction and Hype Train) enabled via URL parameters. It derives those categories from the existing event, membership, subtitle, hasDonation, and meta fields documented here; no separate payload format is required.
| Source |
New Subs / Members |
New Followers |
Donations |
Counts & Extras |
| YouTube (Data API bridge) |
Membership joins, renewals, gifts |
Individual subscriber alerts* + totals |
Super Chats & Super Stickers |
Viewer, subscriber, and view totals (polled) |
| Twitch – DOM capture |
Gift bundle lines & gifted-to notices |
— |
Bits flagged via hasDonation |
Viewer count, reward cards, and community highlight cards |
| Twitch – EventSub/Websocket |
Instant subs, resubs, and gifts |
Instant follows + follower total |
Cheers, Power-ups, and channel point redemptions |
Viewer/sub/follower totals, stream status, ad notices |
| TikTok Live |
— |
Follow cards (when TikTok shows them) |
Gifts converted to coin totals |
Viewer count, join alerts, and like storms |
| YouNow |
— |
Fan and audience activity |
— |
Viewer count from the live audience panel |
| Favorited Studio |
— |
— |
— |
Viewer count from the live viewers tab |
| Whatnot |
— |
— |
— |
Viewer count, join alerts, live auction metadata, products, and giveaway snapshots |
| eBay Live |
— |
— |
— |
Viewer count, follower count, live event card snapshots, auction footer metadata (when exposed), reaction hearts, and upcoming event metadata |
| Streamlabs Alert Box |
Subs, gifts, sponsors, follows |
Cheer/bits, donations (with currency) |
Cheer/bits, donations (hasDonation) |
While an alert box is open; also available via sources/websocket/streamlabs.html socket token |
| OBS Flow Actions |
— |
— |
— |
OBS output, scene, replay-buffer, and media-ended events for Event Flow when actions.html is connected to OBS WebSocket |
| Kick – DOM |
— |
— |
— |
Viewer count plus basic reward/gift system notices; use the Kick bridge for richer alerts |
| Kick – Websocket/Bridge |
New subs, renewals, and gifts |
Follow alerts + follower total |
Support/tip events (amount + currency) |
Stream status, reward redemptions, and profile metadata |
| Facebook Live |
— |
— |
Stars when visible in DOM |
Chat rows, Stars, and viewer count polls |
| Rumble – DOM capture |
— |
— |
Visible Rant prices |
Chat, incoming raids, and viewer count polls |
| Rumble – Websocket/API URL |
New subs and gifted subs |
Follow alerts + follower total |
Rants/tips (amount + currency) |
Viewer totals, subscriber totals, live status, and chat feed |
| Streamplace |
— |
— |
— |
Viewer count plus chat names, colors, badges, replies, and links |
| WorldsWave |
— |
— |
Donation labels when present |
Rendered live chat plus opt-in viewer count updates |
| CHZZK |
— |
— |
Visible cheese donation rows |
Chat rows, badge images, emotes, and viewer count polls |
| BEAM |
— |
— |
— |
Chat rows and viewer count polls when the chat-only page exposes a viewer counter |
| Seal Team Sloth |
— |
— |
— |
Rendered pop-out chat rows plus viewer_update polls when viewer counts are enabled |
| Castyr |
— |
— |
— |
Rendered pop-out chat rows plus opt-in viewer count updates |
| RPLAY |
— |
— |
— |
Signed-in /live/chat/box/ popout: type: "rplay" chat, avatars, tier badge images, and emotes. Coin tips use hasDonation and numeric donoValue (coins), without a donation event. Opt-in viewer_update polls use integer meta from RPLAY's public stream endpoint. Relayed Twitch rows are excluded. |
| FLEX TV |
— |
— |
— |
Rendered chat rows with names, author colors, badge images, and member metadata |
*YouTube subscriber alerts are polled and may be delayed or incomplete. The API reference does not promise a fixed four-hour delivery window. See the official subscription API limits.
Field Overview
data here means the message object, not an extra wrapper to add. Chat rows and metadata-only events have different shapes: counters and status snapshots may omit chatname/chatmessage. In platform tables, message describes an ordinary chat row, not a literal event: "message".
| Field |
Shape |
Usage |
data.type |
string |
Source identifier used by overlays, filters, and Event Flow. Instagram keeps live chat as instagramlive and non-live comments as instagram. See the Source Types Guide for variants, generic sources, and outbound routing. |
data.chatname |
string |
Source-provided display name used by message processing and non-overlay outputs. A configured user display-name alias may replace this value only in copied dock and overlay transport payloads. |
data.username |
string |
Source username when available. An aliased dock or overlay payload may add this field to preserve the original chatname for user actions; the canonical message remains unchanged. |
data.userid |
string |
Platform-specific user identifier. User actions prefer this value over username and chatname. |
data.platform | string (optional) | Some integrations include this alongside type. Many source adapters omit it; use type for source routing. |
data.id | string | number (optional) | Message or event identifier. Its meaning depends on the source and transport; do not assume it is always a platform-native moderation ID. Use meta.messageId when the adapter exposes it for delete sync. |
data.donoValue | number (optional) | Numeric donation value when the producer supplies one. Units vary: some adapters convert to USD, while NinjaBacker and Throne use major units of the currency in their provider metadata. Do not sum different currencies or assume every value is USD. |
data.event |
string | boolean |
Identifier for system activity (for example viewer_update, subscription_gift, giftpurchase). Regular chat should leave this empty/false so overlays can distinguish system notices from conversational text. |
data.chatmessage |
string |
Message body. It may contain sanitized/renderable HTML only when data.textonly is false. |
data.textonly |
boolean |
Applies only to data.chatmessage. true means render chatmessage as plain text; false means chatmessage may contain sanitized/renderable HTML. Other normal fields are expected to be plain text, except media fields such as chatimg and contentimg. |
data.membership |
string |
Readable membership state such as MEMBERSHIP, new_sponsor, gift_recipient. Surfaces use it for badges, filters, and announcements. |
data.subtitle |
string |
Supplemental descriptor (membership tenure, tier upgrades, gifted by...). Keep it short and text-only so overlays can slot it under the display name. |
data.hasDonation |
string |
Monetary or virtual gift amount ($5.00, 500 bits, 300 coins). Populate even when data.event is blank so donation overlays can detect it. |
data.meta |
number | object | string (legacy) |
Use plain integers for single counters (viewer, follower, subscriber) and objects for richer context. Some older events, such as Twitch DOM community_highlight, carry a string. Check the event-specific shape before reading object properties; new structured details belong in an object. |
data.firsttime |
boolean |
Set to true when First-time chatter detection is enabled, the local database is enabled, and this is the first stored chat message for that user/source. The dock uses it for first-time highlighting and first-time beep filters; the optional first-time badge setting prepends a leaf badge to chatbadges. |
data.lastactivity |
number |
Unix timestamp in seconds for that user's previous stored chat activity, when First-time chatter detection and the local database are enabled. Omitted for brand-new users. |
Coverage and Compatibility Limits
This reference describes implemented payloads, not a guarantee that every platform delivers every event. Empty hasDonation assignments in a source do not demonstrate donation support. DOM visibility, account permissions, capture toggles, and API availability still determine what is received. Delete forwarding is source-specific; do not assume universal moderation sync.
Tracked Mismatches and Voids
| Pair/Area |
Observed Mismatch / Void |
Impact |
| Twitch: Standard vs Websocket |
Shared: reward, subscription_gift, viewer_update, hype_train, and opt-in watch_streak. Standard-only: giftpurchase, knock, community_highlight. Websocket-only: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. |
channel_points is now a deprecated legacy alias for Twitch reward redemptions; new integrations should key off reward. |
| Kick: Standard vs Websocket |
Standard emits lightweight markers (gift, reward, boolean true, viewer_update). Websocket adds official follow, subscription, gift, reward-redemption, KICKs, moderation, and live-status events. It retains compatibility handling for a legacy raid payload, but Kick does not currently offer an official raid/host subscription. |
Websocket mode is richer; automation built around Standard-only event names should be reviewed when switching. Do not require a Kick raid event. |
| YouTube: Standard vs Websocket |
Shared: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. Standard-only: thankyou, redirect. Websocket-only: membermilestone, new_follower, subscriber_update, view_update, likes_update (opt-in). |
Core member/event names are aligned across both; Super Chat, Super Sticker, and Jewels use hasDonation, while membership gift purchases/redemptions do not. |
| All surfaces |
Many sources populate hasDonation without setting data.event. |
This is correct; donation rendering should key off hasDonation, with data.event reserved for system/event semantics. |
Source-Specific Aliases and Legacy Names
These mappings are specific to the source/context listed, not global replacements. Consumer support for aliases varies by page. Current TikTok DOM and TikFinity sources still emit followed; Velora uses subscription and channel_points, and Streamlabs uses subscription. Accept the current source contract and its relevant legacy aliases rather than renaming every matching event.
| Alias / Legacy Name |
Canonical Replacement |
Context |
subscription | new_subscriber | Twitch/Kick new sub |
subgift | subscription_gift | Twitch gifted sub |
membership | sponsorship | YouTube new member (generic) |
new_member | sponsorship | YouTube new member |
new_membership | sponsorship | YouTube new member |
newmember | sponsorship | YouTube new member |
new-membership | sponsorship | YouTube DOM scraper (hyphenated variant) |
upgraded_membership | resub | YouTube tier upgrade |
upgraded-membership | resub | YouTube DOM scraper (hyphenated variant) |
membership_upgrade | resub | YouTube tier upgrade |
membership_milestone | membermilestone | YouTube milestone chat |
member_milestone | membermilestone | YouTube milestone chat (underscore variant) |
gift_membership | giftpurchase | YouTube gift bundle |
membership_gift | giftpurchase | YouTube gift bundle |
giftmemberships | giftpurchase | YouTube gift bundle (plural variant) |
gifted_membership | giftredemption | YouTube gift received |
gifted_memberships | giftpurchase | YouTube gift bundle (plural variant) |
community_gift | giftpurchase | Community gift bundle |
channel_points | reward | Twitch websocket reward redemption (legacy alias) |
followed | new_follower | Current TikTok DOM/TikFinity output; accept both names when combining TikTok capture modes. |
Using This Reference
- When adding a new event, reuse existing vocabulary (
subscription_gift, viewer_update, etc.) whenever possible. If a deviation is unavoidable, document it here along with the rationale.
- Keep
data.meta predictable: prefer flat keys, never overload strings with mixed data, and always include units (currency, bits, duration).
- Update this page alongside payload changes; update agent instructions only when shared development rules change.
- Validate payload changes against both the emitting source and the consuming overlay or Event Flow trigger.
- Capture depends on source support and settings. To hide event-marked rows in dock or featured overlays, add
&hideevents or &hideallevents. To hide selected events, use &filterevents=subscription_gift,new_follower,gifted.
- For YouTube, Twitch, and Kick, enable WebSocket mode for the broadest platform-specific event support. Gift/donation capture for YouTube (including gifts and super chats) is available in both Standard and WebSocket modes; WebSocket adds additional event types. Exact support still varies by platform, account role, and granted scopes.
Back to top
Monetization overlays
NinjaBacker tips use platform: "ninjabacker", type: "ninjabacker", chatname, plain-text chatmessage, textonly: true, a source-prefixed id, formatted hasDonation, and numeric donoValue. They are ordinary donation-style rows without an event override. meta.ninjabacker contains the ISO currency and major-unit amount. Anonymous tips use the display name Anonymous. The source uses either live SSE (no replay) or the opt-in signed webhook receiver on the SSN API (up to seven days of queued delivery). Reliable deliveries use a stable ninjabacker:delivery:DELIVERY_ID id. Neither mode receives refund/dispute reversals. Receiver credentials and signing secrets never enter event payloads. Caller-controlled callbackId values are not payment identity and are not forwarded. Dashboard test tips are excluded from donation rows. They emit event: "monetization_test" with meta.ninjabackerTest containing id and at (Unix milliseconds), for the dedicated preview alert only.
event: "monetization_update" is a meta-only snapshot from type/platform: "socialstream". meta.monetization.wishlist contains enabled, qr, position, rank, total, public url, and the current item (name, amount, currency, image, public url) or null. meta.monetization.ninja contains enabled, qr, position, username, and the public tipping url. Private Tip IDs are never included. meta.monetization.ebay contains enabled, qr, position, display (cycle/cheapest/first), seconds, opt-in announcement settings, and public items. Each item has id, name, amount, currency, image, url, auction, startingBid, endsAt, available, bought and updatedAt. Times are Unix milliseconds. No seller credential or buyer identity is included.
A host-confirmed wishlist purchase also includes meta.wishlistPurchase with id, name, optional supporter, and at (Unix milliseconds). This is a host confirmation, not an Amazon payment notification, and does not count as a monetary donation. Overlays should deduplicate its id and ignore old purchase notices.
Shopify paid orders
The optional signed Shopify receiver emits platform/type: "shopify" and event: "purchase" only for orders/paid with financial_status: "paid", a positive total, test: false, no cancellation, and a current signed-body update timestamp. Test, unpaid, stale, cancelled and refund notifications do not emit purchase actions. No gift intent is inferred.
chatname is Anonymous; customer fields, private notes and order URLs are excluded. chatmessage is plain text with textonly: true; subtitle holds up to three public product titles. meta.commerce contains orderTotal and currency in the shop's currency, plus quantity when a complete valid count is known. Recipient and physical/digital purpose remain unset. No hasDonation or donoValue is set. id is a stable opaque hash scoped to store/order with a Shopify prefix; it is not a raw order identifier.
Purchases use the existing activity, multi-alerts Purchase category and Event Flow paths. Product promotion uses the existing meta.monetization.commerce catalog. Importing a product or setting its promotional label to Gift does not generate a purchase or gift event. Shopify setup and delivery limits.
Gifts and commerce
Use event: "gift" for a gift, giftcontribution for paid support toward a gift, giftfunded for funding completion, and purchase for a product sale. These names are independent of the provider and whether an item is physical or digital. Reserve the legacy giftpurchase event for gifted memberships; Throne previously used that name incorrectly and now emits gift. Existing membership producers remain unchanged. Custom Throne event-name filters should switch to gift; donation filters need no change.
hasDonation remains the compatibility signal for paid support, with donoValue holding its known numeric value. Gifts and contributions retain those fields. Funding completion omits both to avoid counting contributions twice. Ordinary product sales omit them by default, preserving the eBay contract. Do not infer gifting intent from a store, wishlist URL, or physical item: a purchase for the buyer or another recipient remains a sale unless the source explicitly identifies creator gifting.
Optional shared meta.commerce fields are recipient (creator, buyer, other), itemType (physical, digital, service), quantity (positive item count), currency (ISO currency), goalAmount (major-unit funding target, never new income), and orderTotal (known major-unit paid order total; commerce, not donation income). Omit unknown details. Keep item names in subtitle, images in contentimg, and supporter text in chatmessage. Existing provider metadata remains available. Throne supplies recipient and currency, plus goalAmount on completion; eBay supplies quantity. Neither guesses item type or exposes private recipient information.
The activity feed displays these events even without supporter text. Multi-alerts uses donation presentation for gifts and contributions, including a distinct Gift Fully Funded notification without monetary value. Purchases have a separate Purchase category, enabled by default, with purchasestyle, purchasesound, purchaseaccent, and disablepurchases URL controls. Purchase alerts do not change donation totals.
Event Flow offers these event names in Event Type and Other Event triggers. Donation triggers still inspect hasDonation; Gift Sub triggers retain membership semantics. Compare Property accepts nested paths such as meta.commerce.recipient. Action templates accept {meta.commerce.quantity} and {meta.commerce.currency}, alongside existing {donation}, {subtitle}, and {meta}. Nested paths are case-sensitive, missing values render empty, and prototype traversal is prohibited.
Creator commerce webhooks and promotional overlays
Ko-fi public Donation payments retain hasDonation and gain numeric donoValue. Subscription payments use new_subscriber or resub, with the tier in membership. Shop Order and Commission use purchase without donation values. Private Ko-fi events remain excluded. Form-encoded JSON is decoded once; names and messages are plain text.
Buy Me a Coffee donation.created retains monetary support; extra_purchase.created and commission_order.created become purchase. wishlist_payment.created becomes giftcontribution using only that payment amount; meta.commerce.completed records the provider's completion flag without emitting another monetary row. membership.started becomes new_subscriber with the tier in membership, no longer misusing hasDonation for a tier name. A subscription-start amount is not independently treated as a paid charge. Test, refunded, failed, and unsupported update/lifecycle events do not produce paid alerts. Hidden supporter notes are omitted.
Fourthwall supports ORDER_PLACED (purchase), GIFT_PURCHASE (gift, recipient other), DONATION (normal donation row), and SUBSCRIPTION_PURCHASED (new_subscriber). Existing order totals retain hasDonation for backwards compatibility, marked meta.commerce.legacyDonationValue: true; this is an explicit exception to new product-sale defaults. Orders with applied gift cards emit a purchase alert without donation value: the new charge cannot be inferred reliably from the order total, and the gift purchase was already counted. Billing names and email addresses are not used for public identity. Dashboard test events and order updates do not generate paid alerts.
These adapters retain the existing relay, bot actions, Event Flow and destination routing, with meta.webhookId deduplication. They expose public names, plain-text messages, known item names in subtitle, and ISO meta.commerce.currency alongside numeric donation values when applicable. They do not add refund accounting or new receiver authentication; use the provider's existing configured webhook route.
meta.monetization.commerce in monetization_update contains enabled, qr, position, display (first/cycle), seconds, and a public items array. Each item has name, url, image, optional amount (null when unknown), currency, and purpose (shop/gift/support/membership). These are host-entered promotional details, not payment evidence. Adding or editing items emits no donation or purchase event. The generic overlay uses mode=commerce; view=both|showcase|card|alerts separates promotion from activity. Optional style, scale, cardevery, cardfor and onlytype URL parameters control presentation. Existing provider modes also accept view and scheduling controls. See the setup guide.
Throne gift events
The opt-in Monetization integration forwards signed Throne events with platform and type set to throne. All three use a stable delivery id, plain-text chatname, chatmessage with textonly: true, item name in subtitle, and optional HTTPS thumbnail in contentimg.
| event | Meaning | Donation amount / rank |
|---|
gift | A purchased gift | hasDonation and major-unit donoValue; +1 gift rank |
giftcontribution | A contribution towards a gift | Contribution amount only; no rank increase |
giftfunded | A crowdfunded gift completed | No hasDonation or donoValue, avoiding double-counting previous contributions; +1 gift rank |
meta.throne contains itemName, creator (public username), completed, currency and major-unit amount. For giftfunded, amount describes the goal, not new income. Anonymous gifters remain Anonymous; completed community gifts use Community. Private payment and shipping fields are never forwarded.
monetization_update snapshots additionally contain meta.monetization.throne: enabled, username, url, qr, position, rank, and gifts. These snapshots contain no webhook URL or listening credential.
Host voice commands (desktop preview)
The Event Flow When I say... trigger receives trusted local microphone commands from SSApp. Its internal action context uses chatname: "Host", type: "hostvoice", the recognized phrase in chatmessage, and textonly: true. This is not an incoming platform event or a new chat transport. Sending these fields through chat cannot activate a voice trigger.
Requires an updated desktop build, explicit microphone start, and enabling actions after Test mode. See the preview setup and validation status.