Skip to content

Shared Schemas ​

Types used in more than one location.

CoinExchangePayload ​

amountnumber
bonus?number
coinType'paid' | 'free'
source?ExchangeSource
transactionIDTransactionID
example?boolean
anonymous?boolean
timestampnumber

CrowdControlUserChannelRoleType ​

'moderator' | 'editor'

CSSProperties ​

A block of CSS declarations, as a plain object: keys are CSS property names in camelCase (backgroundColor for background-color) and values are the corresponding CSS values, as strings or — for unitless properties — numbers. Every property is optional. See the MDN CSS reference for the full list and what each one accepts.

Record<string, string>

EffectRequestParameters ​

type'options' | 'hex-color'
titlestring
valuestring
name?string

ExchangeSource ​

'tiltify' | 'stripe' | 'paypal' | 'twitch-bits' | 'twitch-channel-points-redemption' | 'twitch-sub' | 'twitch-charity' | 'vpzone-channel-points-redemption'

GameDetails ​

gameIDstring

GamePackEffectType ​

'input' | 'image' | 'game' | 'video' | 'audio' | 'live' | 'streamerbot' | 'human' | 'streamdeck' | 'chance'

GameRecord ​

gameIDGameID
namestring
image?string

GameSessionEffectPaybackStatus ​

Lifecycle of a streamer-initiated payback against the requester of an effect: sent when dispatched to the viewer's extension, then exactly one of landed (playback confirmed, coins credited), failed, or expired (no ack).

'sent' | 'landed' | 'failed' | 'expired'

GameSessionEffectPayload ​

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

pooled?boolean
pricenumber
unitPricenumber
quantity?number
requestIDGameSessionRequestID
example?boolean
localTimestamp?number
admin?boolean

Whether the requester is an administrator.

viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

message?string
messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean
timestampnumber

GameSessionEffectPayloadEffectData ​

One of 10 shapes:

GameSessionMenuEffect ​

One of 10 shapes:

GameSessionPrivateEffectPaybackPayload ​

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

pooled?boolean
pricenumber
unitPricenumber
quantity?number
requestIDGameSessionRequestID
example?boolean
localTimestamp?number
admin?boolean

Whether the requester is an administrator.

viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

message?string
messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean
timestampnumber
coinReward?number

Coins credited to the viewer when the payback lands.

paybackEffectName?string

Display name of the disrupt played against the viewer.

paybackEffectID?string

Identity of the disrupt played against the viewer — lets the targeted viewer report custom disrupts straight from their activity feed.

paybackPackID?string
paybackPackType?'user' | 'crowd-control'
paybackExpiresAt?number

Epoch ms when a sent payback expires without an ack.

GameSessionPrivateTimedEffectUpdatePayload ​

timeRemainingnumber

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

pooled?boolean
pricenumber
unitPricenumber
quantity?number
requestIDGameSessionRequestID
example?boolean
localTimestamp?number
admin?boolean

Whether the requester is an administrator.

viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

message?string
messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean
timestampnumber

GameSessionPublicEffectFailurePayload ​

temporary?boolean
message?string
admin?boolean

Whether the requester is an administrator.

quantity?number
pooled?boolean
example?boolean
timestampnumber

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

requestIDGameSessionRequestID
localTimestamp?number
viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean

GameSessionPublicEffectPaybackPayload ​

message?string
admin?boolean

Whether the requester is an administrator.

quantity?number
pooled?boolean
example?boolean
timestampnumber

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

requestIDGameSessionRequestID
localTimestamp?number
viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean
coinReward?number

Coins credited to the viewer when the payback lands.

paybackEffectName?string

Display name of the disrupt played against the viewer.

paybackEffectID?string

Identity of the disrupt played against the viewer — lets the targeted viewer report custom disrupts straight from their activity feed.

paybackPackID?string
paybackPackType?'user' | 'crowd-control'
paybackExpiresAt?number

Epoch ms when a sent payback expires without an ack.

GameSessionPublicEffectPayload ​

message?string
admin?boolean

Whether the requester is an administrator.

quantity?number
pooled?boolean
example?boolean
timestampnumber

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

requestIDGameSessionRequestID
localTimestamp?number
viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean

GameSessionPublicEffectPayloadEffectData ​

One of 10 shapes:

GameSessionPublicTimedEffectUpdatePayload ​

timeRemainingnumber
message?string
admin?boolean

Whether the requester is an administrator.

quantity?number
pooled?boolean
example?boolean
timestampnumber

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

requestIDGameSessionRequestID
localTimestamp?number
viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean

GameSessionReadyStatusPhase ​

Live game ready / pending pill state from the host desktop app (native client games).

'wait' | 'ready' | 'pending'

GameSessionTimedEffectStatus ​

'begin' | 'end' | 'pause' | 'resume'

LobbyStatus ​

'left' | 'in-session' | 'checklist-green' | 'checklist-red'

LobbyUser ​

ccUIDCrowdControlUserID
imagestring
namestring
originIDstring
statusLobbyStatus
joinedAtstring
channel?string

The name or ID of the channel that the user streams on. May be missing for old lobbies or non-streaming platforms.

MinimalUserRecord ​

ccUIDCrowdControlUserID
imagestring
namestring
originID?string

NativeClientCommandResponsePayload ​

requestIdstring
methodstring
args?unknown
rpcRecord<string, unknown>
packMessages?Record<string, unknown>[]

PrivateEffectFailurePayload ​

temporary?boolean

Another VIEWER this effect was aimed at (viewer-to-viewer paybacks). target remains the streamer on these so this is what identifies who the effect was actually played on. Present only on viewer-aimed effects.

pooled?boolean
pricenumber
unitPricenumber
quantity?number
requestIDGameSessionRequestID
example?boolean
localTimestamp?number
admin?boolean

Whether the requester is an administrator.

viaTwitchExtension?boolean

True when the request was sent from the Twitch extension. Paybacks can only reach viewers inside the extension, so the feed uses this to decide whether the payback action is offered as available.

paybackable?boolean

True when a payback can be offered on this request (extension-sourced and the viewer allowed paybacks at request time). The feed hides the payback action when this is unset on an extension-sourced request; the server re-checks the live setting on click. The raw opt-out preference is never exposed.

paybackWindowEndsAt?number

Epoch ms deadline for the streamer to send a payback (acceptedAt + PAYBACK_SEND_WINDOW_MS). Server-enforced. Only set on paybackable success payloads.

When set, the refund or retry was performed by someone other than the host (e.g. an editor).

message?string
messageID?string

Set on a parent effect's payloads once CHILD effect requests have been linked to it — chance (wheel/cards) winners and attachment-triggered effects. Lets the session event queue render the children nested under the parent entry. Carries only display info (no payment data).

parentRequestID?GameSessionRequestID

Set on payloads of CHILD effect requests (chance winners / linked attachment effects) — the ID of the parent request. The client uses this to route the child's timed updates into the parent's nested child row.

refundable?boolean

True when this effect can be refunded (has a transaction and is not pooled). Allows host/editors to show the refund button without exposing payment details in public payloads.

notifyAfter?number

Delay 'success' notification in the extension by these milliseconds.

anonymous?boolean
timestampnumber

PublicCoinExchangePayload ​

coinType'paid' | 'free'
source?ExchangeSource
transactionIDTransactionID
example?boolean
anonymous?boolean
timestampnumber

PublicGameSessionStartPayload ​

updatedAtstring
gamePackIDstring
ccUIDstring
status?string
endedAt?string
createdAtstring
gameSessionIDstring
profileType'tiktok' | 'twitch' | 'youtube' | 'discord'
additionalGamePackIDs?string[]
menuNamestring
streamGame?string
gamePausedAt?number

Milliseconds since epoch the streamer paused the session (absent/0 means not paused). A paused session still exists and viewers still see it, but no effect can be ordered.

gamePausedUntil?number

Milliseconds since epoch the session should auto-resume at. Enforced server-side (lazily on session reads) so a crashed desktop app can never strand a session as paused.

parentGameSessionID?string
bankIDstring
isHostOnly?boolean
emailedAt?string

PublicUserBanUpdateBanPayload ​

type'ban'
updatedAtstring
ccUIDstring
createdAtstring
scopestring
reason?string

PublicUserBanUpdateUnbanPayload ​

type'unban'
ccUIDstring

PublicUserRoleUpdatePayload ​

action'add' | 'remove'

PubSubEventTopic ​

A subscription topic, formatted as <domain>/<scope>/<target> or <domain>/<target>, where scope and target are each either a Crowd Control user ID or *. Every domain can be subscribed to except direct, which is reserved for messages the server addresses to a single connection. Some domains do not support/utilize targets.

string

PurchaseTransactionPayments ​

RequiredPartialGameSessionMenu ​

excludePaidEffectsFromRateLimit?boolean

RpcCall ​

One of the calls documented under RPC calls. method selects which, and args is shaped to match it. See the dedicated doc page for more information.

idstring

A client-generated identifier for this call.

type'call'
methodstring

The RPC method being invoked.

argsunknown[]

Arguments for method.

SanitizedSourceDetails ​

One of 24 shapes:

SanitizedUserRecord ​

namestring
imagestring
ccUIDstring
originIDstring

SortableString ​

"String" that can optionally choose to supply an object containing a custom string to be used for sorting its parent. Max 64 characters.

One of 2 shapes, including:

string

SourceDetails ​

One of 24 shapes:

TikTokCoinGoalProgress ​

Live progress of a single TikTok coin-goal trigger (tracked by the host desktop app).

keystring

Stable accumulator key for the goal (trigger groupID || uuid).

namestring

Display name for the goal (trigger name or effect name).

image?string

Optional effect image URL for display.

targetnumber

Coin amount required to trigger.

raisednumber

Coins accumulated so far toward the target.

UserDisplay ​

ccUID?CrowdControlUserID
namestring
safeNamestring
image?string

Optional portrait URL for synthetic sources (e.g. chaos mode bot) shown like a user avatar.

UserDisplayBadge ​

type'platform' | 'role'
urlstring
labelstring

UserRecord ​

subscriptions('max' | 'pro')[]
roles('admin' | 'ambassador' | 'trial' | 'debug' | 'dev' | 'event-host' | 'partner' | 'staff' | 'hog' | 'subscription-blocked' | 'alternate-tiktok' | 'tiktoklegacy' | 'twitch-onboarded' | 'alt-ban' | 'alt-exempt')[]
imagestring
split?number
ccUIDstring
namestring
profile'tiktok' | 'twitch' | 'youtube' | 'discord' | 'tiktok-gifter'
originIDstring

ValidLinkedProfileType ​

'tiktok' | 'twitch' | 'vpzone' | 'youtube' | 'discord' | 'pulsoid'

ValidUserRecordProfileType ​

'tiktok' | 'twitch' | 'youtube' | 'discord' | 'tiktok-gifter'