Event reference
All 15 WebSocket event types with their fields, JSON examples and the actions that trigger them.
The API sends 15 event types. Each is one JSON text frame. Connect and authenticate first. See Authentication and WebSocket connection.
A lane runs across the board and holds up to 3 sections. A section is a stack inside a lane that holds games.
Common fields
Every event has these four fields. Events also carry a board object and, where the event is about a game, a game object. See Shared objects.
| Field | Type | Description |
|---|---|---|
type |
string | The event name, such as vote.cast. |
streamer |
object | The streamer the event belongs to, which is you. Its id is the same on every event you receive. See streamer. |
timestamp |
string | When the server built the event. ISO 8601 with offset, for example 2026-11-04T12:00:00.123456+00:00. The fraction of a second can be shorter or longer. |
isTest |
boolean | true on samples sent from the Test events section of the API dashboard. false on real events. Skip events where this is true if they would trigger real actions. |
Other conventions:
- Field names are camelCase. Event names use dots and underscores exactly as shown.
- IDs are numbers, except platform user IDs, which are strings. Names are strings.
- A field marked
string | nullis present with anullvalue when it has no data. It is not left out. - Nested objects are named for what they describe, such as
game,board,viewerorstreamer. Read a field asobject.field, for examplegame.title. - The server sends events for every board you own.
Quick index
| Event | Fires when |
|---|---|
| suggestion.submitted | A viewer suggests a game. |
| suggestion.accepted | You accept a suggestion. |
| suggestion.rejected | You reject a suggestion. |
| vote.cast | A viewer adds or changes a vote. |
| vote.retracted | A viewer removes a vote. |
| board_game.added | You add a game to a board. |
| board_game.moved | A game moves to another section. |
| board_game.removed | A game is removed from a board. |
| board.created | A board is created. |
| board.deleted | A board is deleted. |
| board.set_active | You make a board the public one. |
| section.created | A section is added. |
| section.updated | A section's name, visibility, voting or outcome changes. |
| section.deleted | A section is deleted. |
| sections.lane_changed | Sections are rearranged. |
Shared objects
Events reuse the objects below. Each event names the thing it is about as one object, such as game or viewer. The field tables here are the full shape of each object.
game
The catalogue game an event is about. Every suggestion, vote and board game event carries one.
| Field | Type | Description |
|---|---|---|
igdbId |
number | The game's IGDB identifier. |
slug |
string or null | The catalogue slug, used in the game page address /game/{slug}. null if the catalogue has none. |
title |
string | The game title. Empty if the catalogue has no record of the game. |
coverArtUrl |
string or null | Cover image URL, or null if the game has no cover. |
genres |
string array | Genre names. Can be empty. |
releaseYear |
number or null | Release year, or null if unknown. |
board
One of your boards. Every event carries one.
| Field | Type | Description |
|---|---|---|
id |
number | The board's ID. |
name |
string | The board name. |
slug |
string | The URL-safe name. |
isActive |
boolean | true if the board is your public board. |
streamer
The streamer the event belongs to: the account that owns your API key. Every event carries one.
| Field | Type | Description |
|---|---|---|
id |
number | Your NextQuest user ID. |
displayName |
string | Your display name. |
platformIds |
object | Your user IDs on other platforms. See platform ids. |
platform ids
Platform user IDs for one person. Each key is a platform. Twitch is the only platform for now. Other platforms will appear as more keys, so ignore any key you do not read.
| Field | Type | Description |
|---|---|---|
twitch |
string or null | The person's Twitch user ID. null if they have not linked Twitch. |
section reference
A section by ID and name. Events use it when they only name the section.
| Field | Type | Description |
|---|---|---|
id |
number | The section's ID. |
name |
string | The section name. |
section detail
A section with its place on the board and its settings. Sent by section.created and section.updated.
| Field | Type | Description |
|---|---|---|
id |
number | The section's ID. |
name |
string | The section name. |
laneOrder |
number | The lane the section is in. 0 is the first lane. |
stackOrder |
number | The position in that lane. 0 is the top. |
isVisibleOnPublicDashboard |
boolean | true if viewers can see the section on the public board. |
votingEnabled |
boolean | true if viewers can vote on games in it. |
outcome |
number | The terminal outcome. A number, not a string. See the table below. |
outcome is a number, not a string:
| Value | Meaning |
|---|---|
0 |
Neutral |
1 |
Positive |
2 |
Negative |
Only sections in the terminal lane can have a non-neutral outcome. By default, Finished is 1 and Dropped is 2.
section position
A section and where it sits on the board. Events use it in lists of sections.
| Field | Type | Description |
|---|---|---|
id |
number | The section's ID. |
name |
string | The section name. |
laneOrder |
number | The lane. 0 is the first lane. |
stackOrder |
number | The position in the lane. 0 is the top. |
viewer
A viewer who acted.
| Field | Type | Description |
|---|---|---|
id |
number | The viewer's ID. |
displayName |
string | The viewer's display name. |
platformIds |
object | The viewer's user IDs on other platforms. See platform ids. |
board game
The game's entry on a board. This is the card on your board, not the catalogue game. For the catalogue game, read game.
| Field | Type | Description |
|---|---|---|
id |
number | The entry's ID on the board. |
suggestion
A viewer's suggestion for a game on one board.
| Field | Type | Description |
|---|---|---|
id |
number | The suggestion's ID. |
vote
A viewer's vote on a board game.
| Field | Type | Description |
|---|---|---|
id |
number | The vote record. A switched vote keeps its ID. |
value |
string | "up" or "down". Lowercase strings. |
vote tally
Vote totals for a board game after the action.
| Field | Type | Description |
|---|---|---|
upVotes |
number | Total upvotes. |
downVotes |
number | Total downvotes. |
netVotes |
number | upVotes minus downVotes. |
Suggestion events
suggestion.submitted
A viewer suggested a game to one of your boards. It fires in three cases:
- A viewer starts a new suggestion.
- A viewer suggests a game again after you rejected it and the wait passed. The suggestion reopens.
- A viewer adds their name to a suggestion that is still pending.
It does not fire if the same viewer suggests the same pending game again. The event comes from the viewer who just suggested, not from everyone on the suggestion.
{
"type": "suggestion.submitted",
"suggestion": { "id": 1 },
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"viewer": { "id": 99, "displayName": "TestViewer", "platformIds": { "twitch": "90210" } },
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
suggestion |
object | The suggestion. One suggestion exists per board and game, so several viewers share one suggestion.id. See suggestion. |
board |
object | The board it was suggested to. See board. |
game |
object | The game. See game. |
viewer |
object | The viewer who just suggested. See viewer. |
suggestion.accepted
You accepted a pending suggestion. NextQuest adds the game to the board's intake section and turns every suggester's name into an upvote. No board_game.added and no vote.cast event follows. Use this event instead.
{
"type": "suggestion.accepted",
"suggestion": { "id": 1 },
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"boardGame": { "id": 10 },
"section": { "id": 1, "name": "Up next" },
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
suggestion |
object | The accepted suggestion. See suggestion. |
board |
object | The board. See board. |
game |
object | The game. See game. |
boardGame |
object | The new entry on the board. See board game. |
section |
object | The intake section the game landed in. See section reference. |
suggestion.rejected
You rejected a pending suggestion. If you also blacklist the game, you get one event for each pending suggestion of that game across all your boards.
{
"type": "suggestion.rejected",
"suggestion": { "id": 1 },
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"rejectedAttemptCount": 1,
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
suggestion |
object | The rejected suggestion. See suggestion. |
board |
object | The board it belonged to. See board. |
game |
object | The game. See game. |
rejectedAttemptCount |
number | How many times this game has been rejected on this board, including this one. |
Vote events
vote.cast
A viewer's vote is now in place. It fires when a viewer:
- votes on a game for the first time, or
- switches an existing vote, for example from up to down.
vote.value is the vote after the action. The event does not say whether it was new or a switch. A switch also does not send vote.retracted.
{
"type": "vote.cast",
"vote": { "id": 1, "value": "up" },
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"boardGame": { "id": 10 },
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"viewer": { "id": 99, "displayName": "TestViewer", "platformIds": { "twitch": "90210" } },
"votes": { "upVotes": 5, "downVotes": 1, "netVotes": 4 },
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
vote |
object | The vote. vote.value is the vote after the action. See vote. |
board |
object | The board. See board. |
boardGame |
object | The game entry that was voted on. See board game. |
game |
object | The game. See game. |
viewer |
object | The voter. See viewer. |
votes |
object | Totals for the game after the action. See vote tally. |
vote.retracted
A viewer removed their vote. This happens only when they press the same vote again, for example up on a game they already upvoted.
{
"type": "vote.retracted",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"boardGame": { "id": 10 },
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"viewer": { "id": 99, "displayName": "TestViewer", "platformIds": { "twitch": "90210" } },
"votes": { "upVotes": 4, "downVotes": 1, "netVotes": 3 },
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
boardGame |
object | The game entry. See board game. |
game |
object | The game. See game. |
viewer |
object | The viewer who removed their vote. See viewer. |
votes |
object | Totals for the game after the removal. See vote tally. |
Tip
To keep a live tally, store the votes object from the latest vote.cast or vote.retracted for each boardGame.id. The totals are authoritative. Do not add and subtract by hand.
Board game events
board_game.added
You added a game to a board yourself, from the dashboard. The game lands in the board's intake section, or in the first section if the board has no intake. Accepting a suggestion sends suggestion.accepted instead.
{
"type": "board_game.added",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"section": { "id": 1, "name": "Up next" },
"boardGame": { "id": 10 },
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"addedByStreamerId": 1,
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
section |
object | The section the game was placed in. See section reference. |
boardGame |
object | The new entry. See board game. |
game |
object | The game. See game. |
addedByStreamerId |
number or null | The streamer who added it. In practice this is always your own ID. |
board_game.moved
A game moved to another section, or you dropped it back in the same section. A move within the same section still sends the event, with equal fromSection.id and toSection.id.
{
"type": "board_game.moved",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"boardGame": { "id": 10 },
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"fromSection": { "id": 1, "name": "Up next" },
"toSection": { "id": 2, "name": "Playing" },
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
boardGame |
object | The game entry. See board game. |
game |
object | The game. See game. |
fromSection |
object | The section it left. See section reference. |
toSection |
object | The section it entered. See section reference. |
board_game.removed
You removed a game from a board.
{
"type": "board_game.removed",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"boardGame": { "id": 10 },
"game": {
"igdbId": 1234,
"slug": "hollow-knight",
"title": "Hollow Knight",
"coverArtUrl": "https://images.igdb.com/igdb/image/upload/t_cover_big_2x/co93cr.jpg",
"genres": ["Platform", "Adventure"],
"releaseYear": 2017
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
boardGame |
object | The entry that was removed. See board game. |
game |
object | The game. See game. |
Board events
board.created
A board was created. This also fires for the starter board, "Stream Queue", that NextQuest makes the first time you sign in. Creating a board sends no section.created events for its default sections.
{
"type": "board.created",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The new board. board.isActive is true only for your first board. Later boards start inactive. See board. |
board.deleted
You deleted a board.
{
"type": "board.deleted",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The deleted board, with the name it had. See board. |
Note
If you delete your public board, NextQuest makes your oldest remaining board public. That change sends no board.set_active event. After a board.deleted for the public board, treat your public board as unknown.
board.set_active
You made a board your public board. The previous public board becomes inactive. The event names only the new one.
{
"type": "board.set_active",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The new public board. See board. |
Section events
A section holds games. Sections sit in lanes, up to 3 per lane. laneOrder and stackOrder both start at 0. The last lane of a board is its terminal lane.
section.created
You added a section to a board. New sections always start with outcome 0.
{
"type": "section.created",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"section": {
"id": 1,
"name": "Up next",
"laneOrder": 0,
"stackOrder": 0,
"isVisibleOnPublicDashboard": true,
"votingEnabled": true,
"outcome": 0
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
section |
object | The new section. See section detail. |
section.updated
You changed a section's name, visibility, voting setting or outcome. It has the same board and section objects as section.created. Every field shows the section's current state, so compare with your stored copy to see what changed.
{
"type": "section.updated",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"section": {
"id": 1,
"name": "Up next",
"laneOrder": 0,
"stackOrder": 0,
"isVisibleOnPublicDashboard": true,
"votingEnabled": true,
"outcome": 0
},
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
section |
object | The section's current state. See section detail. |
section.deleted
You deleted a section. A section can only be deleted when it holds no games. If it was the intake section, the board has no intake afterward, and no event says so.
{
"type": "section.deleted",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"section": { "id": 3, "name": "Finished" },
"remainingSections": [
{ "id": 1, "name": "Up next", "laneOrder": 0, "stackOrder": 0 },
{ "id": 2, "name": "Playing", "laneOrder": 1, "stackOrder": 0 }
],
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
section |
object | The deleted section. See section reference. |
remainingSections |
array | Every section left on the board, with its new position. NextQuest renumbers lanes and stacks after a delete. Each item is a section position. |
sections.lane_changed
You rearranged the sections on a board. The event lists every section on the board with its new position.
{
"type": "sections.lane_changed",
"board": {
"id": 1,
"name": "Test board",
"slug": "test-board",
"isActive": true
},
"sections": [
{ "id": 1, "name": "Up next", "laneOrder": 0, "stackOrder": 0 },
{ "id": 2, "name": "Playing", "laneOrder": 1, "stackOrder": 0 },
{ "id": 3, "name": "Finished", "laneOrder": 2, "stackOrder": 0 }
],
"streamer": {
"id": 1,
"displayName": "TestStreamer",
"platformIds": { "twitch": "12345678" }
},
"timestamp": "2026-11-04T12:00:00.123456+00:00",
"isTest": false
}
| Field | Type | Description |
|---|---|---|
board |
object | The board. See board. |
sections |
array | All sections, in lane and stack order. Each item is a section position. |
What sends no event
- Renaming a board.
- Changing the intake section.
- Anything the Twitch bot does.
- Viewer sign-ins and permission changes.
See WebSocket connection for delivery rules: no replay, no buffering.