Event Format
Every WebSocket message follows this structure:
{
"event": "chat",
"data": {
"user": { "uniqueId": "viewer42", "nickname": "Viewer", "profilePictureUrl": "..." },
"comment": "Hello!",
"userId": "123456789",
...
}
}chat
Fired when a viewer sends a chat message in the live stream. This is the most common event.
Very frequent — fires for every chat message.
Data Fields
userObjectSender info: uniqueId, nickname, profilePictureUrl, badgescommentStringThe chat message textuserIdStringNumeric TikTok user IDExample
{
"event": "chat",
"data": {
"user": {
"uniqueId": "viewer42",
"nickname": "Viewer 42"
},
"comment": "Hello everyone!",
"userId": "7123456789"
}
}gift
Fired when a viewer sends a virtual gift. Includes the gift name, diamond value, and whether it is a streak gift.
Moderate — depends on stream engagement.
Data Fields
userObjectSender infogiftNameStringName of the gift (e.g., "Rose", "Lion")giftIdNumberNumeric gift identifierdiamondCountNumberDiamond value of the giftrepeatCountNumberNumber of times this gift was sent in a streakrepeatEndBooleanTrue when the streak has endedExample
{
"event": "gift",
"data": {
"user": {
"uniqueId": "big_fan"
},
"giftName": "Rose",
"giftId": 5655,
"diamondCount": 1,
"repeatCount": 5,
"repeatEnd": true
}
}like
Fired when a viewer taps the like button. Includes the total accumulated like count.
Very frequent — viewers can tap rapidly.
Data Fields
userObjectUser who likedlikeCountNumberNumber of likes from this eventtotalLikeCountNumberTotal accumulated likes for the streamExample
{
"event": "like",
"data": {
"user": {
"uniqueId": "liker1"
},
"likeCount": 15,
"totalLikeCount": 12500
}
}member
Fired when a viewer joins the live stream room.
Moderate — fires for visible joins.
Data Fields
userObjectUser who joined: uniqueId, nickname, profilePictureUrlExample
{
"event": "member",
"data": {
"user": {
"uniqueId": "new_viewer",
"nickname": "New Viewer"
}
}
}follow
Fired when a viewer follows the streamer during the live stream.
Low — depends on viewer engagement.
Data Fields
userObjectUser who followedExample
{
"event": "follow",
"data": {
"user": {
"uniqueId": "new_follower",
"nickname": "New Follower"
}
}
}share
Fired when a viewer shares the live stream with others.
Low — occasional sharing events.
Data Fields
userObjectUser who sharedExample
{
"event": "share",
"data": {
"user": {
"uniqueId": "sharer",
"nickname": "Sharer"
}
}
}roomUserSeq
Periodic viewer count update. This is the primary way to track real-time viewer numbers.
Periodic — every few seconds.
Data Fields
viewerCountNumberCurrent number of live viewerstopViewersArrayTop viewers ranked by engagementExample
{
"event": "roomUserSeq",
"data": {
"viewerCount": 1234,
"topViewers": [
{
"user": {
"uniqueId": "top_fan"
},
"coinCount": 5000
}
]
}
}subscribe
Fired when a viewer subscribes to the streamer.
Rare — subscription events.
Data Fields
userObjectUser who subscribedExample
{
"event": "subscribe",
"data": {
"user": {
"uniqueId": "subscriber1"
}
}
}linkMicBattle
Fired when a TikTok Live battle starts, updates, or ends. Includes battle scores and participants.
During battles — start/update/end events.
Data Fields
battleUsersArrayBattle participants with scorestypeNumberBattle event type (1=start, 2=update, 3=end)Example
{
"event": "linkMicBattle",
"data": {
"type": 1,
"battleUsers": [
{
"uniqueId": "streamer1"
},
{
"uniqueId": "streamer2"
}
]
}
}roomPin
Fired when the streamer pins a message in the live chat.
Rare — only when streamer pins.
Data Fields
pinnedMessageObjectThe pinned message content and sender infoExample
{
"event": "roomPin",
"data": {
"pinnedMessage": {
"text": "Welcome to my stream!",
"user": {
"uniqueId": "streamer"
}
}
}
}