Activity Fields

Every activity shares a common set of base fields, plus type-specific fields.

Base Fields (all activities)

FieldTypeDescription
idstringUnique activity identifier
typestringActivity type (e.g. 'follow', 'tip')
providerstringSource platform: 'kick', 'rumble', or 'blaze'
usernamestringActor’s display name
timestampnumberUnix millisecond timestamp
rawobjectOriginal unmodified platform payload

follow

No additional fields. Just base fields.
SBCanvas.activities.on('follow', (a) => {
  // a.username, a.provider, a.timestamp
});

subscribe

FieldTypeDescription
tierstringSubscription tier: '1', '2', or '3'
messagestring?Optional sub message
SBCanvas.activities.on('subscribe', (a) => {
  console.log(`${a.username} subbed at tier ${a.tier}`);
  if (a.message) console.log(`Message: ${a.message}`);
});

gift_sub

FieldTypeDescription
amountnumberNumber of subs gifted
tierstringGift tier
recipientstring?Specific recipient (if targeted gift)
giftedtrueAlways true for gift subs
SBCanvas.activities.on('gift_sub', (a) => {
  console.log(`${a.username} gifted ${a.amount} tier ${a.tier} subs`);
  if (a.recipient) console.log(`To: ${a.recipient}`);
});

rant (Rumble only)

FieldTypeDescription
amountnumberRant amount in cents
currencystringCurrency code (e.g. 'USD')
messagestringRant message text
SBCanvas.activities.on('rant', (a) => {
  console.log(`${a.username} ranted $${a.amount / 100}: ${a.message}`);
});

tip (Kick, Blaze)

FieldTypeDescription
amountnumberTip amount
currencystringCurrency code
messagestring?Optional tip message
SBCanvas.activities.on('tip', (a) => {
  console.log(`${a.username} tipped ${a.currency}${a.amount}`);
  if (a.message) console.log(`"${a.message}"`);
});

raid

FieldTypeDescription
viewersnumberNumber of viewers in the raid
SBCanvas.activities.on('raid', (a) => {
  console.log(`${a.username} raided with ${a.viewers} viewers`);
});

host (Kick only)

FieldTypeDescription
viewersnumberNumber of hosted viewers
SBCanvas.activities.on('host', (a) => {
  console.log(`${a.username} hosted with ${a.viewers} viewers`);
});

The raw Field

Every activity includes the original unmodified payload from the platform in raw. Use it when you need platform-specific data that isn’t covered by the normalized fields:
SBCanvas.activities.on('subscribe', (a) => {
  // Access Kick-specific fields not in the normalized schema
  const kickBadges = a.raw?.badges;
  console.log('Raw platform data:', a.raw);
});