Skip to content
NextQuest

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 | null is present with a null value when it has no data. It is not left out.
  • Nested objects are named for what they describe, such as game, board, viewer or streamer. Read a field as object.field, for example game.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.

Linked from

Updated