Docs

1. Quick start#

WebSocket client (browser)#

  1. Connect: wss://<chat host>/mvn (through nginx).
  2. Log in: send MVN AUTH <username> <token> #vl-mark. Guests send MVN AUTH guest.
  3. Wait for the reply that starts with ACK . If you get disconnected instead, the login failed.
  4. Join: JOIN #vl-mark. You get your own JOIN line, then chat history, then MVN HISTORYEND.
  5. Chat: CHAT #vl-mark :Hello everyone
  6. Stay alive: when you receive PING, send PONG.

IRC client#

  1. Connect to the chat server port with any IRC client.
  2. Set the server password to your chat token and your nick to your username. This sends PASS and NICK.
  3. Wait for numerics 001 … 376. Only VIP accounts are allowed on IRC. Others are disconnected.
  4. JOIN #vl-mark, then PRIVMSG #vl-mark :Hello.

2. Basics#

2.1 Message format#

TEXT
COMMAND arg1 arg2 :free text until end of message
  • Separator: fields are separated by single spaces.
  • Free text: starts after : (space, colon) and runs to the end.
  • Case: commands are UPPERCASE and case-sensitive.
  • One command per message:
    • WebSocket: one command per text frame.
    • Raw TCP and IRC: one command per line, ending with \n.
  • Two command families:
    • Top-level commands: CHAT, JOIN, PART, PONG, PRIVMSG, …
    • Server commands, which start with MVN : MVN AUTH, MVN BAN, …

⚠️ MVN CHAT does not exist. CHAT is top-level. Sending MVN CHAT … is an unknown MVN command, and the server disconnects you.

2.2 Unknown commands disconnect you#

You send Result
A top-level command not in section 4 Disconnected
MVN <something> not in section 5 Disconnected (logged as UNHANDLED_ACTION2)
IRC CAP, USER, USERHOST, LIST, WHO, WHOIS, NOTICE, EXIT, MODE, QUIT Ignored
Any other IRC command (TOPIC, AWAY, ISON, …) Disconnected

2.3 Channel names#

TEXT
#<site>-<streamer>
Site prefix Platform
vl Vaughn Live
btv Breakers.TV
igb Instagib.TV
vtv, pt, vc Older sites (still mapped to databases)
  • Lookup: channel names are matched in lowercase.
  • # is optional: JOIN vl-mark and JOIN #vl-mark are the same channel.
  • Stream owner: the user whose name matches the part after - is the streamer (caster) of that channel.

2.4 Text the server changes in your messages#

Before handling a message, the server replaces these characters. Clients receive the replaced form and must decode it for display.

Character Becomes (WebSocket) Becomes (raw TCP / IRC)
; &semi; &semi;
' &#039; &#039;
" &#034; &quot;
` &#096; &#096;
\ &#092; &#092;
Tab ^ removed
\x0B @ removed
\r \n \0 removed removed
&nbsp, <#VN>, </#VN>, ⠀ (U+2800) removed removed
  • &lt&semi; is turned back into &lt;, and &gt&semi; into &gt;.
  • The server does NOT escape <, > or &. The web client escapes them before sending. Any client that displays chat as HTML must escape incoming text itself.
  • IRC receivers: for IRC clients the server decodes &quot; &#039; &#092; &lt; &gt; back to plain characters.

2.5 Limits#

Limit Value
One unfinished incoming message (frame, line or handshake) 16 KB. Larger means you are disconnected.
Guest chat message 70 characters (cut off). Links are removed.
Idle before the server sends PING About 10 to 25 seconds
Idle before disconnect 300 seconds
MVN INVITE cooldown 6 minutes per connection
Mute length 6 minutes (automatic unmute)
Channel IP ban after BAN 24 hours

Idle means nothing has been received from the client. Any message resets the timer, not only PONG.


3. Connecting#

3.1 WebSocket#

Standard RFC 6455 handshake.

TEXT
GET /mvn HTTP/1.1
Host: <chat host>
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: <key>
Sec-WebSocket-Version: 13
  • Path: the server does not check the path. /mvn is the convention.
  • Header case: Upgrade: websocket is accepted in any letter case.
  • Real IP: through nginx, the client IP comes from CF-Connecting-IP. That header is only trusted when the connection comes from an IP listed in trusted_proxies in Settings.mvn.
  • Text frames: client frames must be masked (standard). Each server frame is one message, and its payload ends with \0, which you should strip.
  • Control frames:
    • Close (opcode 8) disconnects you.
    • Ping (opcode 9) is answered with pong (opcode 10).
  • No fragmented frames: continuation frames are not supported. Send each command as one complete frame.

3.2 Raw TCP (Android app)#

  • Plain text lines ending with \n, using the same commands as WebSocket.
  • Log in with MVN AUTH_ANDROID … (section 5.1).
  • Server lines end with \n.

3.3 IRC#

  • Plain IRC lines ending with \n.
  • Log in with PASS and NICK (section 6).

4. Top-level commands (client → server)#

Command Who What it does
CHAT #chan :text Logged in and joined Send a chat message (section 7)
CHAT #chan,<uuid> :text Same Same, with your own message ID. The server answers MVN MSGID (section 7.3).
CHAT_GIF #chan :text VIP only (others are disconnected) Same as CHAT
CHAT_IMGUR #chan :text VIP only Same as CHAT
PRIVMSG #chan :text Same as CHAT IRC form of CHAT
JOIN #chan Logged in Join a channel. Several at once: JOIN #a,#b
PART #chan In the channel Leave a channel
PONG Anyone Answer to the server's PING
PING <token> IRC Server answers PONG <token>
NAMES #chan IRC List the users in a channel (section 6.4)
QUIT, MODE … Anyone Ignored
<policy-file-request/> Anyone Disconnected (old Flash request)

4.1 Chat "dot commands"#

A CHAT message starting with . is treated as a command. These need the same permissions as the matching MVN command (section 5).

Message Same as
.clear MVN CLEAR
.mods MVN MODS
.bans MVN BANS
.unbanall MVN UNBANALL
.unmodall MVN UNMODALL
.gueston / .guestoff MVN GUESTON / MVN GUESTOFF
.random MVN RANDOM
.ban <user> / .unban <user> MVN BAN / MVN UNBAN
.kick <user> MVN KICK
.mute <user> / .unmute <user> MVN MUTE / MVN UNMUTE
.purge <user> MVN PURGE
.mod <user> / .unmod <user> MVN MOD / MVN UNMOD
.regular <user> or .reg <user> MVN REGULAR
.unregular <user> or .unreg <user> MVN UNREGULAR

Any other text starting with . is sent as normal chat.


5. MVN commands (client → server)#

Format: MVN <ACTION> <arg1> <arg2> …

5.1 Login#

Command Output format Connection type
MVN AUTH <user> <token> <#chan> Text WebSocket
MVN AUTH guest Text WebSocket, logs in as a guest
MVN AUTHGM <user> <token> <#chan> Text Ghost mode: a VIP appears as a guest. Guests are refused.
MVN AUTH2 … / MVN AUTH2GM … JSON chat (section 7.4) Same as AUTH / AUTHGM
MVN AUTH_ANDROID <user> <token> <#chan> Text Raw TCP
MVN AUTH2_ANDROID … JSON Raw TCP
MVN SYNC <#chan> <token> Re-reads your settings and follow/sub status for a channel. Answer: MVN SYNCD

The arguments:

  • <token> is the account's chat token. The server checks it with the auth API (chatAuth2_dapi.php) and does not check it itself.
  • <#chan> is the channel you are logging in from.
    • Its site prefix (vl-, btv-) sets your site tag.
    • Your follow/subscriber status for that channel is loaded at login.

Possible results:

Result Meaning
ACK … line Logged in (format below)
MVN VPN <ip>, then disconnect VPN detected
Disconnect, no message Bad token, banned (PBAN/GBAN), or the API failed

ACK format. All fields after the first space are joined with ;:

TEXT
ACK <name>;<color>;<level>;<username_font>;<username_color>;<chat_font>;<chat_color>;<chatclearing>;<secondary_timestamp>;<fontsize>;<theme>;<theme_color>;<confirmed 0/1>;<following 0/1>;<following_epoch>

The server then also sends MVN IMSTATUS <vn:name>1</vn> (or …>0</vn>).

User levels:

Level Role
0 Guest
1 User
2 Moderator (in this channel)
3 Streamer (in their own channel)
4 Tech
5 Crew (helper)
9 Staff
10 Owner

Quirk: login replies come in the background. If you send JOIN or CHAT before ACK arrives, you are not logged in yet and get disconnected.

5.2 Channel info#

Command Who Answer
MVN CHATTERS #chan Anyone MVN CHATTERS #chan <list>, repeated in chunks of about 21 users, then MVN CHATTERSEND #chan. Each list entry is name;color;level;vip, separated by ,. Guests are not listed.
MVN MODS #chan Staff, streamer MVN NOTICE Mods: a,b,c or MVN NOTICE No Moderators for this channel
MVN BANS #chan Staff, streamer, mod MVN NOTICE Bans: a,b,c or MVN NOTICE No Bans for this channel
MVN RANDOM #chan Staff, streamer, mod Channel gets MVN NOTICE <you> requested a random chatter..., then MVN NOTICE The random chatter is: <name>

Important: a web or Android client only receives other users' JOIN and PART lines for a channel after it has sent MVN CHATTERS #chan for that channel. IRC clients always receive them.

5.3 Moderation#

Permissions:

  • "Mod rights" means: staff, the streamer, a moderator of the channel, the bot account, or a chat relay. Tech accounts also have them in a few house channels.
  • Protected targets: staff, crew, tech and the streamer can't be targeted.
  • Mods vs mods: a moderator can't act on another moderator. The streamer or staff can, and doing so removes the target's mod status first.
Command Who Effect Broadcast to channel
MVN BAN #chan <user> Mod rights Channel ban (saved), 24 h channel IP ban, history purged, user disconnected MVN BAN #chan <user> <by>
MVN UNBAN #chan <user> Mod rights Removes ban MVN UNBAN #chan <user> <by>
MVN KICK #chan <user> Mod rights Disconnects the user if they are in the channel, purges their history MVN KICK #chan <user> <by>
MVN MUTE #chan <user> Mod rights Mutes for 6 minutes MVN MUTE #chan <user> <by>. At expiry, the user gets MVN UNMUTE #chan <user>.
MVN UNMUTE #chan <user> Mod rights Unmutes MVN UNMUTE #chan <user> <by>
MVN PURGE #chan <user> Mod rights Hides the user's messages in history MVN PURGE #chan <user> <by>
MVN PURGE_ID #chan <user> <message_id> Mod rights Hides one message MVN PURGE #chan <user> <by> <message_id>
MVN PURGEALL #chan <user> Mod rights Same as PURGE Same
MVN CLEAR #chan Mod rights Clears chat history MVN CLEAR #chan <by>
MVN MOD #chan <user> Staff, streamer, bot, relay Makes the user a moderator MVN MOD #chan <user> <by>
MVN UNMOD #chan <user> Staff, streamer, bot, relay Removes moderator MVN UNMOD #chan <user> <by>
MVN REGULAR #chan <user> Staff, streamer, bot, relay Makes the user a regular (exempt from slow mode) MVN REGULAR #chan <user> <by>
MVN UNREGULAR #chan <user> Staff, streamer, mod Removes regular MVN UNREGULAR #chan <user> <by>
MVN UNBANALL #chan Staff, streamer, mod Removes all bans You get two MVN NOTICE lines
MVN UNMUTEALL #chan Staff, streamer, mod Removes all mutes You get two MVN NOTICE lines
MVN UNMODALL #chan Staff, streamer Removes all moderators You get two MVN NOTICE lines

Staff-only (global):

Command Effect Answer to you
MVN DROP <user> Disconnects every connection of the user none
MVN GBAN <user> / MVN DELGBAN <user> Global ban: refused at login and join MVN NOTICE …, then MVN GBAN <you> <user> / MVN DELGBAN <you> <user>
MVN GMUTE <user> / MVN DELGMUTE <user> Global mute: disconnected when they chat MVN NOTICE …, then MVN GMUTE … / MVN DELGMUTE …
MVN PBAN <user> / MVN DELPBAN <user> Permanent ban plus IP ban MVN NOTICE …, then MVN PBAN … / MVN DELPBAN …
MVN GLOBAL <text> Sends the whole line to every channel MVN NOTICE Sending Global Message...
MVN GLOBALVL / GLOBALBTV / GLOBALIGB <text> Same, but only #vl- / #btv- / #igb- channels Same

Quirk: for GLOBAL*, channels receive the whole original line with /all removed, for example MVN GLOBAL Server restart in 5 minutes.

5.4 Channel modes#

Who: staff, the streamer or a moderator, unless noted. <seconds> is optional.

Command Effect Broadcast
MVN SLOWON #chan <seconds> Slow mode. Default 10; 1 or less becomes 10; maximum 300. MVN SLOWON #chan <seconds>
MVN SLOWOFF #chan MVN SLOWOFF #chan
MVN SLOWVIP_ON #chan / SLOWVIP_OFF VIPs skip slow mode MVN SLOWVIP_ON #chan / MVN SLOWVIP_OFF #chan (OFF goes to the sender only)
MVN FOLLOWERS_ON #chan <seconds> Followers-only (must have followed at least <seconds>) MVN FOLLOWERS_ON #chan <seconds>
MVN FOLLOWERS_OFF #chan MVN FOLLOWERS_OFF #chan
MVN FOLLOWERSON_VPNON / FOLLOWERSON_VPNOFF / FOLLOWERSOFF_VPNON / FOLLOWERSOFF_VPNOFF #chan <seconds> Followers mode plus its VPN filter in one command The two matching broadcasts
MVN FOLLOWERSVPN_ON / FOLLOWERSVPN_OFF #chan VPN filter for followers-only MVN FOLLOWERSVPN_ON #chan / …_OFF
MVN SUBSCRIBERS_ON #chan <seconds> Subscribers-only MVN SUBSCRIBERS_ON #chan <seconds>
MVN SUBSCRIBERS_OFF #chan MVN SUBSCRIBERS_OFF #chan
MVN SUBSCRIBERSON_VPNON / …_VPNOFF Same as SUBSCRIBERS_ON (the VPN part does nothing)
MVN SUBSCRIBERSOFF_VPNON / …_VPNOFF Same as SUBSCRIBERS_OFF
MVN GUESTON #chan / GUESTOFF Guest chat. Needs a VIP account, and the sender must be staff or the streamer. Non-VIPs get MVN GUEST_NOVIP #chan. MVN GUESTON #chan / MVN GUESTOFF #chan
MVN MODON #chan / MODOFF Mods-only chat (staff, or the streamer when not overridden) MVN MODON #chan / MVN MODOFF #chan
MVN ACTVPN_ON / ACTVPN_OFF #chan (also ACTON_VPNON / ACTON_VPNOFF) VPN filter for confirmed-only chat MVN ACTVPN_ON #chan / …_OFF
MVN VPNFILTER_ON / VPNFILTER_OFF #chan VPN filter for everyone MVN VPNFILTER_ON #chan / …_OFF
MVN ACTON, ACTOFF, ACTOFF_VPNON, ACTOFF_VPNOFF, SYNC_FOLLOWER, SYNC_SUBSCRIBER, SC_REMOVE, CHAT_REMOVE, IMFRIENDS Accepted and ignored

5.5 Messaging and other#

Command Answer / effect
MVN IM <vn:target>text</vn> Target gets MVN IM <vn:you>text</vn>. Your other connections get MVN IM_SYNC target;you <vn>text</vn>. Needs a confirmed (non-guest) account.
Errors: MVN IMERROR <vn:IMOFF>target</vn> (target has IMs off), MVN IMERROR <vn:IMACTSEND>you</vn> (your account isn't confirmed)
MVN IMSTATUS <vn:yourname>0</vn> (or 1) Turns your own IMs off or on. No spaces. Ignored for other names.
MVN COLOR <color> Answer MVN COLOR <color>. Allowed: firebrick blue orangered midnightblue deeppink cadetblue purple royalblue olive tomato black goldenrod green dodgerblue. Not for guests.
MVN INVITE #chan Friends get MVN INVITE <you> invited you to watch https://vaughnlive.tv/<name> (the link uses the matching site). You get MVN NOTICE Invites Sent To Friends, or MVN NOTICE Another invite?! Slow down there buddy! within 6 minutes.
MVN COHOST #vl-<yourname> <user> Your own channel only. Target gets MVN COHOST <yourname> <32-char key>. You get MVN COHOSTSENT <user>.
MVN VAUGHN <anything> Passed as-is to the bot account (user vaughn)
MVN VAUGHNRESP <vn:user>text</vn> Bot only. The user gets MVN VAUGHN <vn:user>text</vn>.
MVN FHSUB #chan / MVN FHUNSUB #chan Firehose subscribe/unsubscribe. Answer MVN FHSUB #chan / MVN FHUNSUB #chan.

6. IRC#

6.1 Login#

TEXT
PASS <chat token>
NICK <username>
  • Order: either order works. Login starts once both have been received.

  • Nick prefixes: tags like [vip] and [ Mod ] are stripped from the nick.

  • VIP only: non-VIP accounts are disconnected after the auth API replies.

  • On success:

    TEXT
    :<irc_name> 001 <tagged nick> :Connected to VaughnSoft IRC
    :<irc_name> 002 <tagged nick> :Welcome to the VaughnSoft IRC Network
    :<irc_name> 003 <tagged nick> :This server was created on <date>
    :<irc_name> 004 <tagged nick> VaughnSoft IRC by VaughnSoft Media Corporation
    :<irc_name> 005 <tagged nick> PREFIX=(aqhgov)~&%^@+ :
    :<irc_name> 376 <tagged nick> END OF MOTD

    <irc_name> is the irc_name value in Settings.mvn.

6.2 Name tags#

User names sent to IRC clients carry role tags in front:

Tag Meaning
[vip] VIP
[ sub ] Subscriber of this channel
[ mvn ] Owner (level 10)
[ Staff ] Staff
[ Tech ] Tech
[ Streamer ] Streamer
[ Mod ] Moderator

Quirk: tags contain spaces, so a source like :[vip] [ Mod ] Bob PRIVMSG #vl-mark :hi doesn't follow strict IRC syntax. Most IRC clients show it, but parsers may split it.

6.3 Joining and chatting#

You send You receive
JOIN #vl-mark :<tag>you JOIN :#vl-mark, then history lines like :vn PRIVMSG #vl-mark :[ HISTORY ] alice: hello, then a role line if you have one, for example :vn PRIVMSG #vl-mark :You are a Mod in #vl-mark
PRIVMSG #vl-mark :hi Others get :<tag>you PRIVMSG #vl-mark :hi. You don't get an echo.
PART #vl-mark :<tag>you PART #vl-mark

What IRC clients receive from others:

  • Chat: :<tag>name PRIVMSG #chan :text
  • Joins and parts: :<tag>name JOIN :#chan and :<tag>name PART #chan

Quirk: channel events like bans and mode changes reach IRC clients as raw MVN lines, for example MVN BAN #vl-mark bob alice, not as IRC messages.

When you run a moderation command, you get a readable line instead, for example :vn PRIVMSG #vl-mark :alice banned bob.

6.4 Names and keep-alive#

You send You receive
NAMES #vl-mark :<irc_name> 353 <you> #vl-mark :<tag>alice,<tag>bob,… in chunks of about 21 (comma-separated), then :<irc_name> 366 <you> #vl-mark End of /NAMES list.
PING :abc PONG :abc
(server) PING :VaughnSoft Reply with PONG :VaughnSoft. Any line resets the idle timer.

7. Chat messages#

7.1 Sending#

TEXT
CHAT #vl-mark :This is my chat message to mark's stream on Vaughn Live

You must be logged in and have joined the channel. The bot and relay accounts don't need to join.

When the message is not sent:

Reason What you get
Followers-only, not following MVN ERROR #chan not_following
Followers-only, followed too recently MVN ERROR #chan following_duration <required>;<your seconds>
Subscribers-only, not subscribed MVN ERROR #chan not_subscribed
Subscribers-only, subscribed too recently MVN ERROR #chan subscriber_duration <required>;<your seconds>
Slow mode (VIPs exempt if SLOWVIP is on) MVN SLOWNOTICE #chan
Guest cooldown MVN SLOWNOTICE #chan
VPN detected MVN VPN <ip>, then disconnect
Globally muted Disconnect
Muted in channel Nothing (silently dropped)
Mods-only, staff mode, guest chat off, or confirmed-only Nothing (silently dropped)

Who skips slow mode: bots, relays, the streamer, mods, staff, crew, tech and regulars.

7.2 Receiving (text format)#

TEXT
<user info> CHAT #chan :<text>

<user info> is 11 fields joined with ;:

# Field Values
1 name Display name
2 color Name color, or -2
3 level See 5.1. 3 = streamer and 2 = mod are set per channel
4 vip 0 / 1
5 site vl, btv, irc or null
6 username_font Number, -1 = default
7 username_color Number, -1 = default
8 chat_font Number, -1 = default
9 chat_color Number, -1 = default
10 payload Base64 (see below)
11 message_id GUID

Example:

TEXT
Alice;blue;1;1;vl;-1;-1;-1;-1;bWVzc2FnZV9pZCw...;0f8e...c2 CHAT #vl-mark :hello

Payload field. Decode the base64. You get key,value; pairs:

  • subscriber,<base64("1;<ISO date>")>; when the sender is a subscriber of the channel
  • message_id,<GUID>;

You don't receive your own messages back. The server confirms them with MVN MSGID (7.3).

7.3 Message IDs#

TEXT
CHAT #vl-mark,<your uuid> :hello
  • The server answers MVN MSGID <your uuid> <server GUID>.
  • If you don't send a UUID, the server makes one up and still sends MVN MSGID.
  • The server GUID is the ID other users see and the one MVN PURGE_ID uses.

7.4 JSON format#

When the sender logged in with MVN AUTH2…, their messages go out as JSON. This happens for every recipient, not just JSON clients.

JSON
{"id":"abc-123456789","type":"chat","site":"vl","platform":"vaughnlive","channel":"mark",
 "username":"Alice","user_level":1,"user_vip":true,"username_font":-1,"username_color":-1,
 "chat_font":-1,"chat_color":-1,"message":"hello",
 "channel_subscribed":false,"channel_subscribed_level":0,"channel_subscribed_months":0,
 "channel_subscribed_dt":0,"channel_subscribed_dt_iso":"",
 "channel_followed":false,"channel_followed_months":0,"channel_followed_dt":0,"channel_followed_dt_iso":"",
 "dt_epoch":1793500000,"dt_iso":"2026-11-01T12:00:00.000Z"}

Quirks:

  • The format follows the sender's login, not the receiver's.
  • The channel_subscribed* and channel_followed* fields are always defaults.
  • message is not JSON-escaped beyond the character replacements in 2.4.

8. Joining a channel (web and raw TCP)#

8.1 What you receive#

  1. Your JOIN line:

    TEXT
    <name>;<color>;<level>;<vip>;<site>;<gold badge>;<payload> JOIN #chan <channel settings>

    <channel settings> is 17 fields joined with ;:

    | # | Field | |---|---| | 1 | guest chat on | | 2 | slow on | | 3 | slow seconds | | 4 | confirmed-only on | | 5 | username_font | | 6 | username_color | | 7 | chat_font | | 8 | chat_color | | 9 | VPN filter | | 10 | guest VPN filter | | 11 | confirmed VPN filter | | 12 | followers-only on | | 13 | followers seconds | | 14 | followers VPN filter | | 15 | you follow | | 16 | follow date ISO | | 17 | seconds followed |

  2. History, up to 64 lines:

    TEXT
    <user info>;<message_id> HISTORY <ISO date> #chan :<text>
    • The user info has the same 11 fields as 7.2, followed by the message ID again.
    • Purged messages read &lt;purged message&gt;.
    • Superchats look like <id> HISTORY_SC <ISO date> <payload>.
  3. End of history: MVN HISTORYEND. WebSocket only. Web and raw TCP clients get all history in one message separated by \n.

8.2 What can stop the join#

Reason What you get
Channel banned MVN BANNED #chan
Channel IP ban (24 h) MVN BANNED #chan
Global ban Disconnect
VPN filter MVN VPN <ip>, then disconnect
Channel still loading after about 5 s Disconnect

8.3 Other users joining and leaving#

You only see these after you have sent MVN CHATTERS #chan (5.2).

  • Joins: <name>;<color>;<level>;<vip>;<site>;<gold badge>;<payload> JOIN #chan <guest>;<slow>;<confirmed-only>
  • Leaves: <name>;<color>;<level> PART #chan
  • Not shown: guests, and users who already have another connection in the channel.

9. Messages the server sends on its own#

9.1 Keep-alive and errors#

Message Meaning
PING (PING :VaughnSoft on IRC) Keep-alive. Answer PONG.
MVN NOTICE <text> Informational text
MVN IPBAN You were IP-banned (sent before disconnect)

9.2 Channel events from the website#

These are pushed through the HTTP API.

Message Meaning
MVN FOLLOW #chan <user> New follower
MVN SUB #chan <user> New subscriber
MVN SUB_RECV #chan <user> <payload> Sent to the new subscriber only
MVN SUB_GIFTED #chan <gifter> <ISO date> Gifted subscriptions
MVN SUB_GIFTED_RECV #chan <user> <payload> Sent to each user who received a gifted sub
MVN SUPERCHAT #chan <id> <payload> Superchat
MVN SUPERCHAT_REPLAY #chan <id> <payload> Superchat replayed
MVN SUPERCHAT_SKIP #chan <id> Superchat skipped
MVN SUPERCHAT_REMOVE #chan <id> Superchat removed
MVN DONATE <data> Donation
MVN COMMERCIAL <data> Commercial break
MVN CLOSE Channel closed
MVN DMCA DMCA takedown
MVN GLOBAL … Global message (see 5.3)

10. Example session (WebSocket)#

TEXT
→ MVN AUTH alice 3f9c…|vn| #vl-mark
← MVN IMSTATUS <vn:Alice>1</vn>
← ACK Alice;blue;1;-1;-1;-1;-1;-1;-1;-4;-4;-4;1;1;1790000000
→ JOIN #vl-mark
← Alice;blue;1;1;vl;0;… JOIN #vl-mark 0;1;10;1;-1;-1;-1;-1;0;0;0;0;10;0;1;2026-01-01T00:00:00.000Z;26000000
← Bob;purple;1;0;vl;…;9a1e… HISTORY 2026-11-01T11:59:00.000Z #vl-mark :hi all
← MVN HISTORYEND
→ MVN CHATTERS #vl-mark
← MVN CHATTERS #vl-mark Bob;purple;1;0,Alice;blue;1;1
← MVN CHATTERSEND #vl-mark
→ CHAT #vl-mark,7d0c2c1e-0000-4000-8000-000000000001 :hello!
← MVN MSGID 7d0c2c1e-0000-4000-8000-000000000001 5b6f…
← PING
→ PONG

(→ is client to server, ← is server to client. Each ← WebSocket frame payload ends with \0.)

Search pages and protocol commands.