REST API reference¶
Every web address of Cuebot's REST API, made from the same description Cuebot serves at /api/v1/openapi.json. New to this? Read Controlling Cuebot from other programs first: it shows how to turn the API on, where the token is, and how to try it.
- Address:
http://127.0.0.1:7475/api/v1(the port is on the REST API card on Apps > Servers). - Token: every request needs the header
Authorization: Bearer YOUR_TOKEN. Without it you get401. - Data: requests and answers are JSON. Errors look like
{"error": "...", "details": [{"path": "...", "message": "..."}]}. {id}in an address can be the id or the name of the action, command or timer. Put%20for a space.
The examples use curl, a small program that comes with Windows 10 and 11, macOS and Linux. Put your token in place of YOUR_TOKEN.
System¶
GET /status¶
Tells you Cuebot's version, which platforms are connected, which servers run, and how many actions, commands, timers and variables you have. A quick way to check your token works.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed.
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/status"
GET /openapi.json¶
Gives you this whole list of addresses as one OpenAPI file. OpenAPI is a standard way to describe an API, so tools like Postman or Swagger can read it and build requests for you.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed.
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/openapi.json"
Actions¶
GET /actions¶
Lists your actions in short form: id, name, group, whether they are on, their triggers and how many steps they have. Add ?group=Alerts or ?search=raid to show only some.
| In the address | What it is |
|---|---|
group (optional, after ?) |
Only this group |
search (optional, after ?) |
Name or group contains |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/actions"
POST /actions¶
Makes a new action from the JSON you send. Cuebot checks every trigger and sub-action type and setting first; mistakes come back as 400 with a list of problems. Find type ids with GET /triggers and GET /subactions.
The body is one Action.
Answers: 201 Created; 400 Invalid request (details lists each problem); 409 An action with this id exists; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Say hello","group":"Chat","enabled":true,"triggers":[{"type":"command.triggered","settings":{"command":"Hello"}}],"subActions":[{"type":"chat.send","parameters":{"platform":"All","message":"Hi %user%, welcome in!"}}]}' \
"http://127.0.0.1:7475/api/v1/actions"
GET /actions/{id}¶
Gives you one whole action: its settings, triggers and every sub-action, with the steps inside If and Group branches. Good to copy, change and send back with PUT.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers"
PUT /actions/{id}¶
Swaps the whole action for the one you send. The id in the address is kept. Fields you leave out go back to their defaults, so send the full action (get it with GET first). Use PATCH to change only a part.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
The body is one Action.
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Say hello","group":"Chat","enabled":true,"triggers":[{"type":"command.triggered","settings":{"command":"Hello"}}],"subActions":[{"type":"chat.send","parameters":{"platform":"All","message":"Hi %user%, welcome in!"}}]}' \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers"
PATCH /actions/{id}¶
Changes only the top-level fields you send and keeps the rest. Example: {"enabled": false} or {"name": "New name"}. A list like subActions is replaced as a whole, not added to.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PATCH -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Say hello (new)","group":"Chat"}' \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers"
DELETE /actions/{id}¶
Deletes the action for good. Its triggers stop at once. There is no undo, so export it first (GET /export) if you may want it back.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
Answers: 200 Deleted; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers"
POST /actions/{id}/run¶
Runs an action, as if its trigger happened. Without wait, Cuebot starts it and answers at once (202). With "wait": true, Cuebot answers when the action has finished, with how it went. A turned-off action answers 409.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
| Body field | Type | What it is |
|---|---|---|
args |
object | Variables for the action, like {"user": "Bob"}. Each one becomes a %name% word in its steps, so %user% turns into Bob. |
wait |
true/false | true: answer only when the action has finished, with how it went. false or left out: answer at once (202) while it runs. |
timeoutSeconds |
number | With wait: the most seconds to wait, from 1 to 300 (default 30). If it takes longer, you get 202 and the action keeps running. |
Answers: 202 Queued; 200 Finished (wait); 404 Not found; 409 The action is disabled; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"args":{"user":"Bob","message":"hello"},"wait":true,"timeoutSeconds":10}' \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers/run"
POST /actions/{id}/enable¶
Turns the action on, so its triggers work again. The change is saved. You get the action's short form back.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers/enable"
POST /actions/{id}/disable¶
Turns the action off. Its triggers are ignored and it cannot be run until you turn it on again. The change is saved.
| In the address | What it is |
|---|---|
id (required, in the path) |
Action id or name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/actions/Thank%20followers/disable"
Catalogue¶
GET /triggers¶
Lists every kind of trigger Cuebot knows, like twitch.follow or command.triggered, with their settings. Add ?category=Twitch or ?search=raid to show only some. The answer also lists all categories.
| In the address | What it is |
|---|---|
category (optional, after ?) |
Exact category |
search (optional, after ?) |
Words in type id, name or category |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/triggers"
GET /triggers/{type}¶
Tells you everything about one trigger type, like twitch.follow: its settings with help, live suggestions (for example your command names) and a settingsSchema that tools can check against.
| In the address | What it is |
|---|---|
type (required, in the path) |
Trigger type id |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/triggers/twitch.follow"
GET /subactions¶
Lists every kind of sub-action (step) Cuebot knows, like chat.send or core.delay, with their settings and branches. Add ?category=OBS or ?search=scene to show only some.
| In the address | What it is |
|---|---|
category (optional, after ?) |
Exact category |
search (optional, after ?) |
Words in type id, name or category |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/subactions"
GET /subactions/{type}¶
Tells you everything about one sub-action type, like chat.send: its settings with help, its branches and a parametersSchema that tools can check against.
| In the address | What it is |
|---|---|
type (required, in the path) |
Sub-action type id |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/subactions/chat.send"
GET /scriptfunctions¶
Lists the functions you can call from C# or Python code steps, with a short description and their inputs. Add ?search=chat to find some.
| In the address | What it is |
|---|---|
search (optional, after ?) |
Name or description contains |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/scriptfunctions"
Commands¶
GET /commands¶
Lists all your chat commands with their settings.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/commands"
POST /commands¶
Makes a new chat command, like !hello. A command does nothing alone: give an action a command.triggered trigger with the command's name so it runs when someone types it.
The body is one Command.
Answers: 201 Created; 400 Invalid request (details lists each problem); 409 A command with this id exists; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Hello","group":"Chat","enabled":true,"mode":"Basic","location":"Start","commands":["!hello","!hi"],"sources":[],"minimumRole":"Everyone","userCooldownSeconds":30}' \
"http://127.0.0.1:7475/api/v1/commands"
GET /commands/{id}¶
Gives you one command and, in linkedActions, the actions it runs (the ones with a command.triggered trigger for it). Use the command's name, like Hello, not what viewers type.
| In the address | What it is |
|---|---|
id (required, in the path) |
Command id or name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/commands/Hello%20command"
PUT /commands/{id}¶
Swaps the whole command for the one you send. The id in the address is kept. Fields you leave out go back to their defaults, so send the full command. Use PATCH to change only a part.
| In the address | What it is |
|---|---|
id (required, in the path) |
Command id or name |
The body is one Command.
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Hello","group":"Chat","enabled":true,"mode":"Basic","location":"Start","commands":["!hello","!hi"],"sources":[],"minimumRole":"Everyone","userCooldownSeconds":30}' \
"http://127.0.0.1:7475/api/v1/commands/Hello%20command"
PATCH /commands/{id}¶
Changes only the fields you send and keeps the rest. Example: {"enabled": false} or {"userCooldownSeconds": 60}. A list like commands is replaced as a whole.
| In the address | What it is |
|---|---|
id (required, in the path) |
Command id or name |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PATCH -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"userCooldownSeconds":60,"commands":["!hello","!hi","!hey"]}' \
"http://127.0.0.1:7475/api/v1/commands/Hello%20command"
DELETE /commands/{id}¶
Deletes the command for good. Actions that used it stay, but nothing starts them from chat any more.
| In the address | What it is |
|---|---|
id (required, in the path) |
Command id or name |
Answers: 200 Deleted; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/commands/Hello%20command"
Timers¶
GET /timers¶
Lists your timers. While timers run, each one also has a state: on or off right now, its interval and when it goes off next.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/timers"
POST /timers¶
Makes a new timer. A timer only goes off; to make it do something, give an action a core.timer trigger with the timer's name. The answer has a hint with that trigger.
The body is one Timer.
Answers: 201 Created; 400 Invalid request (details lists each problem); 409 A timer with this id exists; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Social links","enabled":true,"intervalSeconds":1200,"repeat":true,"minChatLines":5}' \
"http://127.0.0.1:7475/api/v1/timers"
GET /timers/{id}¶
Gives you one timer, with its state right now when timers run.
| In the address | What it is |
|---|---|
id (required, in the path) |
Timer id or name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/timers/Reminder"
PUT /timers/{id}¶
Swaps the whole timer for the one you send. The id in the address is kept. Fields you leave out go back to their defaults (300 seconds, repeat on). Use PATCH to change only a part.
| In the address | What it is |
|---|---|
id (required, in the path) |
Timer id or name |
The body is one Timer.
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Social links","enabled":true,"intervalSeconds":1200,"repeat":true,"minChatLines":5}' \
"http://127.0.0.1:7475/api/v1/timers/Reminder"
PATCH /timers/{id}¶
Changes only the fields you send and keeps the rest, and saves it. Example: {"intervalSeconds": 600}. For a change that is not saved, use POST /timers/{id}/state.
| In the address | What it is |
|---|---|
id (required, in the path) |
Timer id or name |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PATCH -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"intervalSeconds":600}' \
"http://127.0.0.1:7475/api/v1/timers/Reminder"
DELETE /timers/{id}¶
Deletes the timer for good. Actions with a core.timer trigger for it stay, but nothing starts them any more.
| In the address | What it is |
|---|---|
id (required, in the path) |
Timer id or name |
Answers: 200 Deleted; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/timers/Reminder"
POST /timers/{id}/state¶
Turns a timer on or off, or changes how often it goes off, only until Cuebot restarts. Nothing is saved, like the Set timer state sub-action. Turning it on or changing the time starts the wait again from now.
| In the address | What it is |
|---|---|
id (required, in the path) |
Timer id or name |
| Body field | Type | What it is |
|---|---|---|
enabled |
true/false | true: turn the timer on. false: turn it off. Leave it out to keep it as it is. Not saved. |
intervalSeconds |
whole number | New seconds between goes, like 600. 0 stops it going off. Leave it out to keep it. Not saved; does nothing for cron or random timers. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"enabled":true,"intervalSeconds":600}' \
"http://127.0.0.1:7475/api/v1/timers/Reminder/state"
Globals¶
GET /globals¶
Lists your global variables, the ~name~ words every action can use. Add ?persisted=true for only the saved ones, or ?persisted=false for only the temporary ones.
| In the address | What it is |
|---|---|
persisted (optional, after ?) |
true: persisted only, false: temporary only |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/globals"
GET /globals/{name}¶
Gives you one global variable: its value, what kind of value it is, whether it is saved, and when it last changed.
| In the address | What it is |
|---|---|
name (required, in the path) |
Variable name |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/globals/deaths"
PUT /globals/{name}¶
Sets a global variable, and makes it if it is new. Example: {"value": 3} for ~deaths~. It is saved unless you send "persisted": false.
| In the address | What it is |
|---|---|
name (required, in the path) |
Variable name |
| Body field | Type | What it is |
|---|---|---|
value |
any | The new value: text like "Bob", a number like 3, true/false, or null for empty. |
persisted |
true/false | true (default): the variable is saved and kept after a restart. false: it is temporary and gone when Cuebot closes. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"value":3,"persisted":true}' \
"http://127.0.0.1:7475/api/v1/globals/deaths"
DELETE /globals/{name}¶
Deletes a global variable. Actions that use ~name~ then find it empty.
| In the address | What it is |
|---|---|
name (required, in the path) |
Variable name |
Answers: 200 Deleted; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/globals/deaths"
Runs¶
GET /history¶
Lists recent action runs, newest first, with runs still waiting or running. You see what started each one, how long it took and any error. Add ?action=Say%20hello for one action or ?includeArgs=true for its variables.
| In the address | What it is |
|---|---|
limit (optional, after ?) |
Maximum runs (default 50) |
action (optional, after ?) |
Only this action (id or name) |
includeArgs (optional, after ?) |
Include the arguments |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/history"
Media requests¶
GET /media¶
Tells you about media requests: the video playing, the waiting queue, whether viewers may request now, whether the player is paused, and the volume.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/media"
POST /media/requests¶
Adds a YouTube video to the media request queue. It is free and does not count toward a viewer's limit. If Cuebot refuses it (closed, queue full, private video...), you get 400 with the reason.
| Body field | Type | What it is |
|---|---|---|
link |
text | The YouTube video: a normal link, a youtu.be or shorts link, or just the video id, like "dQw4w9WgXcQ". |
user |
text | The name shown as who asked for it, like "Bob". Empty means "API". |
Answers: 200 Added; 400 Invalid request (details lists each problem); 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"link":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","user":"Bob"}' \
"http://127.0.0.1:7475/api/v1/media/requests"
DELETE /media/requests/{id}¶
Takes a waiting video out of the queue and gives the viewer their points back. Find the id in GET /media. A video that is already playing cannot be removed here; use skip.
| In the address | What it is |
|---|---|
id (required, in the path) |
Request id |
Answers: 200 Removed; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/media/requests/REQUEST_ID"
POST /media/{command}¶
Controls media requests. skip: play the next video (404 if nothing plays). pause / resume: stop or go on with the player. clear: empty the waiting queue and refund it. open / close: let viewers request, or stop them.
| In the address | What it is |
|---|---|
command (required, in the path) |
skip, pause, resume, clear (refunds the queue), open or close requests |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/media/skip"
Giveaways¶
GET /giveaway¶
Tells you about the giveaway running now, or the last one: the prize, how to enter, how many people and tickets, and the winners. giveaway is empty if there has never been one.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/giveaway"
POST /giveaway¶
Opens a giveaway. Viewers on every platform enter with a chat command, like !join (or !join 3 for 3 tickets). Tickets can cost Cuebot points. Only one giveaway at a time: draw or cancel the last one first (else 409).
| Body field | Type | What it is |
|---|---|---|
title |
text | The prize, like "Steam game key". It must not be empty. |
command |
text | What viewers type to enter, like "!join" (the default). "!join 3" then buys 3 tickets. |
ticketCost |
whole number | Cuebot points one ticket costs, like 100. 0 (default) means free. |
maxTickets |
whole number | The most tickets one viewer can have, like 5. Default 1. |
currency |
text | Which points currency pays for tickets, like "Coins". Empty means your main currency. |
subscriberLuck |
number | How many times a subscriber's tickets count, like 2 for double chance. 1 (default) means the same as everyone. Not below 1. |
subscribersOnly |
true/false | true: only subscribers can enter. false (default): everyone can. |
seconds |
whole number | How many seconds it takes entries, like 300 for 5 minutes. 0 (default) means until you close it. |
winners |
whole number | How many winners to draw, like 3. Default 1. The same viewer never wins twice. |
Answers: 200 Opened; 400 Invalid request (details lists each problem); 409 A giveaway is still running; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"title":"Steam game key","command":"!join","ticketCost":100,"maxTickets":5,"subscriberLuck":2,"subscribersOnly":false,"seconds":300,"winners":1}' \
"http://127.0.0.1:7475/api/v1/giveaway"
POST /giveaway/{command}¶
Controls the giveaway. close: stop taking entries. draw: pick the winners at random. redraw: pick one more winner (for example if one did not answer). cancel: stop it and give every ticket's points back.
| In the address | What it is |
|---|---|
command (required, in the path) |
close, draw, redraw (one more winner) or cancel (refunds tickets) |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/giveaway/draw"
Store¶
GET /store¶
Tells you about the points store: the chat command to buy (like !redeem), the items, purchases waiting for your OK, and the latest 20 finished ones.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/store"
POST /store/redemptions/{id}/{command}¶
Answers a store purchase that waits for your OK. approve: accept it. reject: say no; the viewer gets the points back and the item goes back in stock. Find the id in pending from GET /store.
| In the address | What it is |
|---|---|
id (required, in the path) |
Redemption id |
command (required, in the path) |
approve or reject (refunds the points) |
Answers: 200 OK; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/store/redemptions/REDEMPTION_ID/approve"
Polls¶
GET /polls¶
Tells you the latest poll and prediction from each place (Twitch, YouTube and Cuebot's own), with votes and points, plus the chat commands to vote and bet in Cuebot's own ones.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/polls"
POST /polls¶
Starts a Cuebot chat poll that works on every platform. Viewers vote with the vote command, like !vote 2. Give 2 to 10 choices. Only one poll at a time (else 409).
| Body field | Type | What it is |
|---|---|---|
title |
text | The question, like "Which game next?". It must not be empty. |
choices |
list of text | The answers, 2 to 10 different ones, like ["Minecraft", "Tetris"]. Viewers vote by number (!vote 1) or by the answer. |
duration |
whole number | How many seconds the poll runs, like 120. Default 60. 0 means until you end it. |
Answers: 200 Started; 400 Invalid request (details lists each problem); 409 A chat poll is already running; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"title":"Which game next?","choices":["Minecraft","Elden Ring","Tetris"],"duration":120}' \
"http://127.0.0.1:7475/api/v1/polls"
POST /polls/end¶
Ends the Cuebot chat poll that runs now and shows the result. 404 if no poll runs.
Answers: 200 Ended; 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/polls/end"
POST /predictions¶
Starts a Cuebot prediction. Viewers bet Cuebot points on an outcome with the bet command, like !bet 1 500. Winners share all the points. Needs Cuebot points, and only one at a time (else 409).
| Body field | Type | What it is |
|---|---|---|
title |
text | The question, like "Will I beat the boss?". It must not be empty. |
outcomes |
list of text | The possible results, 2 to 10 different ones, like ["Yes", "No"]. |
window |
whole number | How many seconds viewers can bet, like 120 (the default). 0 means until you lock it. |
currency |
text | Which points currency viewers bet, like "Coins". Empty means your main currency. |
Answers: 200 Started; 400 Invalid request (details lists each problem); 409 A prediction is still open, or points are not available; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"title":"Will I beat the boss?","outcomes":["Yes","No"],"window":120,"currency":""}' \
"http://127.0.0.1:7475/api/v1/predictions"
POST /predictions/{command}¶
Controls the Cuebot prediction. lock: stop taking bets. resolve: pick the winning outcome, with {"winner": 1} (count from 1) or its title, and pay the winners. cancel: stop it and give every bet back.
| In the address | What it is |
|---|---|
command (required, in the path) |
lock, resolve (body {winner: number from 1 or title}) or cancel (refunds every bet) |
| Body field | Type | What it is |
|---|---|---|
winner |
text | Only for resolve: the winning outcome's number counting from 1, like "1", or its title, like "Yes". Leave it out for lock and cancel. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"winner":"1"}' \
"http://127.0.0.1:7475/api/v1/predictions/lock"
Speech¶
GET /speech¶
Tells you about Cuebot's speech (text read out loud): whether it is on, paused, how many texts wait, and the text playing now.
Answers: 200 OK; 503 Speech is not available; 401 Missing or wrong token; 403 Origin not allowed.
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/speech"
POST /speech/{command}¶
Controls the speech queue. pause / resume: hold or go on. skip: stop the text playing now. next: stop the text playing and, while paused, let one waiting text play, so you can go through them one by one.
| In the address | What it is |
|---|---|
command (required, in the path) |
next, pause, resume or skip |
Answers: 200 OK; 404 Not found; 503 Speech is not available; 401 Missing or wrong token; 403 Origin not allowed.
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/speech/pause"
Overlays¶
GET /alerts¶
Tells you whether the alerts on your stream overlay are paused (new ones wait) or muted (no sound).
Answers: 200 OK; 503 Overlays are not available; 401 Missing or wrong token; 403 Origin not allowed.
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/alerts"
POST /alerts/{command}¶
Controls the alerts on every overlay page. pause: the alert playing finishes, new ones wait. resume: go on. skip: end the alert playing now. mute / unmute: turn alert sounds and videos off or on.
| In the address | What it is |
|---|---|
command (required, in the path) |
pause, resume, skip, mute or unmute |
Answers: 200 OK; 404 Not found; 503 Overlays are not available; 401 Missing or wrong token; 403 Origin not allowed.
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/alerts/pause"
Chat¶
GET /chat¶
Gives you the latest chat messages from all platforms in one list, plus the activity feed (follows, subs, raids...). Add ?limit=20 for fewer. It also lists which platforms can send.
| In the address | What it is |
|---|---|
limit (optional, after ?) |
Maximum items (default 50) |
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/chat"
POST /chat¶
Writes a chat message. Pick a platform, like "Twitch", or "All" (the default) for every connected one. 409 if no platform could send.
| Body field | Type | What it is |
|---|---|---|
message |
text | What to write, like "Thanks for watching!". It must not be empty. |
platform |
text | Where to write, like "Twitch" or "YouTube". "All" or empty writes on every connected platform. GET /chat lists the ones that can send. |
Answers: 200 Sent; 400 Invalid request (details lists each problem); 409 No platform could send; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"message":"Thanks for watching! See you tomorrow.","platform":"All"}' \
"http://127.0.0.1:7475/api/v1/chat"
Companion¶
GET /dashboard¶
Everything a companion app's dashboard shows, in one answer: which platforms are connected, this stream's totals, your subathon timers and points goals, your top spenders, and the latest 50 activity items (newest first). revision goes up whenever any of it changes; GET /events sends dashboard.changed with the new revision, so an app only fetches this again when it needs to.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/dashboard"
GET /decks¶
Lists your Cuebot Decks with their id, name, whether they are on, their grid size and how many pages they have. The decks themselves (their buttons, presses and live updates) are on the HTTP server at /deck/{id}.
Answers: 200 OK; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/decks"
POST /subathon/{timer}/{command}¶
Controls one subathon timer, by id or name. start, pause, resume, toggle and reset need no body. time adds or takes away time with {"add": 300} (seconds, negative to take away) or sets the time left with {"set": 3600}. multiplier sets how much time events add, like {"value": 0.5} when too much is coming in. Answers with every timer and goal.
| In the address | What it is |
|---|---|
timer (required, in the path) |
Timer id or name |
command (required, in the path) |
start, pause, resume, toggle, reset, time ({"add": seconds} or {"set": seconds}) or multiplier ({"value": 2}) |
| Body field | Type | What it is |
|---|---|---|
add |
number | For time: seconds to add, like 300. Negative takes time away. |
set |
number | For time: the time left to set, in seconds, like 3600. |
value |
number | For multiplier: how much time events add, like 0.5 for half or 2 for double. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"add":300}' \
"http://127.0.0.1:7475/api/v1/subathon/{timer}/pause"
POST /goals/{goal}/{command}¶
Changes one points goal, by id or name. points adds points with {"add": 5} or sets them with {"set": 20}. multiplier sets how many points events give, like {"value": 2}. reset starts the goal again from 0. Answers with every timer and goal.
| In the address | What it is |
|---|---|
goal (required, in the path) |
Goal id or name |
command (required, in the path) |
points ({"add": n} or {"set": n}), multiplier ({"value": 2}) or reset |
| Body field | Type | What it is |
|---|---|---|
add |
number | For points: points to add, like 5. Negative takes points away. |
set |
number | For points: the goal's points to set, like 20. |
value |
number | For multiplier: how many points events give, like 2 for double. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"add":5}' \
"http://127.0.0.1:7475/api/v1/goals/{goal}/pause"
Import/export¶
POST /import/preview¶
Shows what an import would add or change, without changing anything. Send the import text in data: a Cuebot share text (starts with CUEBOT1:) or a Streamer.bot export.
| Body field | Type | What it is |
|---|---|---|
data |
text | The import text: a Cuebot share text (starts with CUEBOT1:), Cuebot share JSON, or a Streamer.bot export string. |
Answers: 200 OK; 400 Invalid request (details lists each problem); 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"data":"CUEBOT1:PASTE_THE_WHOLE_IMPORT_TEXT_HERE"}' \
"http://127.0.0.1:7475/api/v1/import/preview"
POST /import/apply¶
Imports a Cuebot share text (CUEBOT1:...) or a Streamer.bot export. Nothing in it runs. mode says what to do when something with the same id or name is already there. Check it with /import/preview first.
| Body field | Type | What it is |
|---|---|---|
data |
text | The import text: a Cuebot share text (starts with CUEBOT1:), Cuebot share JSON, or a Streamer.bot export string. |
mode |
one of overwrite, addAsNew, skip |
What to do when something with the same id or name is already there. overwrite: replace it. addAsNew: add a copy with a new name. skip: keep yours. |
items |
list of object | Choices for single things, like [{"kind": "action", "name": "Say hello", "include": false}]. kind is action, queue, command, timer or global. Leave it out to import everything. |
Answers: 200 Imported; 400 Invalid request (details lists each problem); 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"data":"CUEBOT1:PASTE_THE_WHOLE_IMPORT_TEXT_HERE","mode":"addAsNew","items":[{"kind":"action","name":"Say hello","include":true,"mode":"overwrite"}]}' \
"http://127.0.0.1:7475/api/v1/import/apply"
GET /export¶
Makes a share text (starts with CUEBOT1:) for the things you name, like ?actions=Say%20hello,Raid%20alert. Others can paste it into their import. Things they need, like queues and other actions, come along unless includeDependencies=false.
| In the address | What it is |
|---|---|
actions (optional, after ?) |
Actions |
commands (optional, after ?) |
Commands |
timers (optional, after ?) |
Timers |
globals (optional, after ?) |
Global variables |
includeDependencies (optional, after ?) |
Include referenced actions, queues... (default true) |
name (optional, after ?) |
Bundle name |
Answers: 200 OK; 400 Invalid request (details lists each problem); 404 Not found; 401 Missing or wrong token; 403 Origin not allowed; 503 That part of Cuebot is not available (its module is not loaded or not ready).
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/export"
Events¶
GET /events¶
Keeps the connection open and sends you each Cuebot event as it happens (Server-Sent Events), like twitch.chatMessage, plus action.runCompleted when a run ends and dashboard.changed (with the new revision) when something GET /dashboard shows has changed. Add ?types=twitch.* for only some. At most 16 at once.
| In the address | What it is |
|---|---|
types (optional, after ?) |
Comma separated event types; a trailing * matches a prefix (twitch.*) |
Answers: 200 text/event-stream; data is {type, time, args}; 401 Missing or wrong token; 429 Too many open event streams.
curl -H "Authorization: Bearer YOUR_TOKEN" \
"http://127.0.0.1:7475/api/v1/events"
Data shapes¶
The objects the answers above name, with their fields.
Error¶
| Field | Type | What it is |
|---|---|---|
error |
text | What went wrong, in one sentence, like "Action 'Say hi' not found". |
details |
list of Problem | When there are several problems: one entry per problem, each with where it is and what is wrong. |
Giveaway¶
| Field | Type | What it is |
|---|---|---|
id |
text | The giveaway's id. |
title |
text | The prize, like "Steam game key". |
status |
text | Where it is: open (taking entries), closed (no more entries), drawn (winners picked) or canceled. |
command |
text | What viewers type to enter, like "!join". |
ticketCost |
whole number | Cuebot points one ticket costs. 0 means free. |
maxTickets |
whole number | The most tickets one viewer can have. |
currency |
text | The name of the points currency that pays for tickets. |
subscribersOnly |
true/false | true when only subscribers can enter. |
endsAt |
text | When entries close, as date and time (UTC). Empty when it runs until you close it. |
entrants |
whole number | How many viewers entered. |
tickets |
whole number | How many tickets there are in all. |
recent |
list of text | The names of the latest viewers who entered, newest first (up to 8). |
winners |
list of object | The winners so far, each with name and platform. |
Poll¶
| Field | Type | What it is |
|---|---|---|
source |
text | Where it runs: twitch, youtube or cuebot (Cuebot's own chat poll or prediction). |
kind |
text | What it is: poll (viewers vote) or prediction (viewers bet points on the result). |
id |
text | The poll's or prediction's id. |
title |
text | The question, like "Which game next?". |
status |
text | Where it is: active, locked (a prediction taking no more bets), ended or canceled. |
choices |
list of object | The answers, each with its id, title, votes (people), points bet and percent. |
winner |
whole number | The winning answer's place, counting from 0 (0 is the first answer). -1 while there is no winner. |
endsAt |
text | When voting or betting closes, as date and time (UTC). Empty when it has no time limit. |
totalVotes |
whole number | How many votes (or bettors) in all. |
totalPoints |
whole number | For predictions: how many points were bet in all. |
currency |
text | For Cuebot predictions: the name of the points currency bet. |
command |
text | For Cuebot's own: the chat command to vote or bet, like "!vote" or "!bet". |
Problem¶
| Field | Type | What it is |
|---|---|---|
path |
text | Where the problem is in the data you sent, like "subActions[0].parameters.platform" (the first step's platform setting). |
message |
text | What is wrong there, like "'Twich' is not one of: All, Twitch, YouTube". |
Deleted¶
| Field | Type | What it is |
|---|---|---|
deleted |
true/false | true when it was deleted. |
id |
text | The id of what was deleted. Global variables have none. |
name |
text | The name of what was deleted. |
Status¶
| Field | Type | What it is |
|---|---|---|
app |
object | About Cuebot itself: name, version (like "0.1.0"), the .NET version, your system, this copy's id, and the API version (v1). |
connections |
list of object | One entry per platform or app, like Twitch or OBS: its name, its state (like Connected) and a status message. |
servers |
list of object | One entry per Cuebot server, like the overlay server: its kind, name, whether it is turned on and running, its port and a status message. |
counts |
object | How many you have of each thing: actions, enabledActions, timers, queues, commands, globals, triggerTypes and subActionTypes. |
chat |
object | Which platforms chat comes from (platforms), and which can send messages now (sendablePlatforms). |
ActionSummary¶
| Field | Type | What it is |
|---|---|---|
id |
text | The action's id, a long code. You can use it, or the name, in addresses. |
name |
text | The action's name, like "Thank followers". |
group |
text | The action's folder, like "Alerts". Empty means no group. |
enabled |
true/false | true if the action is on. |
queue |
text | The action queue it waits in. Empty means the Default queue. |
triggers |
list of object | Its triggers in short: each one's type (like twitch.follow) and whether it is on. |
subActionCount |
whole number | How many steps it has, counting the steps inside branches. |
Action¶
| Field | Type | What it is |
|---|---|---|
id |
text | The action's id, a long code like "3f2b9c1e-...". Leave it out for a new action and Cuebot makes one. |
name |
text | The action's name, like "Thank followers". It must not be empty. |
group |
text | A folder name to keep actions tidy, like "Alerts". Empty means no group. |
enabled |
true/false | true: the action is on. false: it is off and its triggers are ignored. |
queue |
text | The name of the action queue it waits in, from the Queues page. Empty means the Default queue. |
concurrent |
true/false | Only without a queue. false (default): runs of this action wait for each other. true: they can run at the same time. |
randomAction |
true/false | true: run only ONE of the top steps, picked at random (steps with a bigger weight are picked more often). |
concurrentSubActions |
true/false | true: start all top steps at the same time instead of one after another. Ignored when randomAction is true. |
alwaysRun |
true/false | true: the action still starts while its queue is paused. |
excludeFromHistory |
true/false | true: runs of this action are left out of the history and the pending list. Good for actions that run very often. |
triggers |
list of Trigger | What starts the action, like a follow or a chat command. Each one has a type and its settings. With no triggers it only runs when you or another action start it. |
subActions |
list of SubAction | The steps the action does, in order, like "send a chat message" then "wait 2 seconds". Steps can hold more steps in their branches. |
layout |
NodeLayout | Where this box sits on the flowchart view, as x and y. Only for looks; leave it out and Cuebot places it. |
Trigger¶
| Field | Type | What it is |
|---|---|---|
id |
text | The trigger's id, a long code. Leave it out and Cuebot makes one. |
type |
text | What kind of trigger it is, like "twitch.follow" or "command.triggered". GET /triggers lists them all. |
enabled |
true/false | true (default): the trigger works. false: it is ignored. |
settings |
object | The trigger's settings, each one as text, like {"command": "Hello"}. Numbers and true/false are written in quotes too. GET /triggers/{type} lists them. |
alwaysRun |
true/false | Run even when a narrower trigger of the same type also matches (ranges such as cheer amounts) |
layout |
NodeLayout | Where this box sits on the flowchart view, as x and y. Only for looks; leave it out and Cuebot places it. |
NodeLayout¶
| Field | Type | What it is |
|---|---|---|
x |
number | How far from the left of the flowchart, in pixels. |
y |
number | How far from the top of the flowchart, in pixels. |
SubAction¶
| Field | Type | What it is |
|---|---|---|
id |
text | The step's id, a long code. Leave it out and Cuebot makes one. |
type |
text | What the step does, like "chat.send" or "core.delay". GET /subactions lists them all. |
enabled |
true/false | true (default): the step runs. false: it is skipped. |
parameters |
object | The step's settings, each one as text, like {"milliseconds": "2000"}. They may use %variables% and ~globals~. GET /subactions/{type} lists them. |
branches |
object | Steps inside this step, by branch name: like {"True": [...], "False": [...]} for an If, or {"Steps": [...]} for a Group. |
weight |
number | How likely this step is to be picked when only one random step runs. Default 1; 2 is twice as likely; 0 means never. |
layout |
NodeLayout | Where this box sits on the flowchart view, as x and y. Only for looks; leave it out and Cuebot places it. |
Parameter¶
| Field | Type | What it is |
|---|---|---|
key |
text | The setting's name to use in settings or parameters, like "message". |
label |
text | The setting's name as the app shows it, like "Message". |
kind |
one of text, multiline, number, boolean, choice, code |
What to put in: text, multiline (several lines), number, boolean ("true" or "false"), choice (one from choices) or code. |
default |
text | The value used when you leave the setting out. |
choices |
list of text | For a choice setting: the values you may use, like ["All", "Twitch"]. |
language |
text | For a code setting: the language, like "csharp" or "python". |
help |
text | A short help text that says what to put in. |
suggestions |
list of text | Values that fit right now, like your OBS scene or command names (only for one type). You may still type others. |
TriggerType¶
| Field | Type | What it is |
|---|---|---|
typeId |
text | The id to put in a trigger's type, like "twitch.follow". |
name |
text | The trigger's name as the app shows it, like "Command triggered". |
category |
text | The group it is in, like "Twitch". |
eventTypes |
list of text | The Cuebot events it listens to. They are the same names GET /events sends. |
parameters |
list of Parameter | Its settings, one entry per setting. |
settingsSchema |
object | Only for one type: its settings as a JSON Schema, a standard way for tools to check the settings before you send them. |
SubActionType¶
| Field | Type | What it is |
|---|---|---|
typeId |
text | The id to put in a step's type, like "chat.send". |
name |
text | The step's name as the app shows it, like "Send chat message (any platform)". |
category |
text | The group it is in, like "Chat" or "OBS". |
branches |
list of text | The branch names its inner steps can go under, like True and False for an If. |
dynamicBranches |
true/false | true: the branch names depend on the step's settings (for example the cases of a Switch). |
container |
true/false | true: the step holds and runs other steps itself, like a Group or a loop. |
parameters |
list of Parameter | Its settings, one entry per setting. |
parametersSchema |
object | Only for one type: its settings as a JSON Schema, a standard way for tools to check the settings before you send them. |
Command¶
| Field | Type | What it is |
|---|---|---|
id |
text | The command's id, a long code. Leave it out for a new command and Cuebot makes one. |
name |
text | The command's name, like "Hello". Triggers find the command by this name. It must not be empty. |
group |
text | A folder name to keep commands tidy, like "Fun". Empty means no group. |
enabled |
true/false | true: the command works. false: chat typing it does nothing. |
mode |
one of Basic, Regex |
Basic: the texts are typed as they are, like !hello. Regex: each text is a search pattern (for advanced users). |
location |
one of Start, Exact, Anywhere |
Where in the message the command must be. Start: at the start, like "!so bob". Exact: the whole message. Anywhere: anywhere, as its own word. |
commands |
list of text | What viewers type, like ["!hello", "!hi"]. They share one cooldown and one counter. With none, the command never works. |
sources |
list of text | Where it listens, like ["Twitch", "YouTube"] or "Twitch:Whisper" for whispers. Empty means every platform. |
caseSensitive |
true/false | true: capital letters must match, so !Hello is not !hello. false (default): they do not matter. |
globalCooldownSeconds |
number | Seconds to wait before anyone can use it again, like 10. 0 means no wait. |
userCooldownSeconds |
number | Seconds one viewer must wait before using it again, like 30. 0 means no wait. |
minimumRole |
one of Everyone, Subscriber, Vip, Moderator, Broadcaster |
Who may use it: Everyone, Subscriber, Vip, Moderator or Broadcaster (you). Higher roles can always use it too. |
include |
true/false | Listed by the "Get commands" sub-action |
ignoreBotAccount |
true/false | Ignore the bot account's own messages |
ignoreInternal |
true/false | Ignore messages sent from Cuebot's own chat window |
allowedUsers |
list of text | Viewer names or ids that may always use the command, even without the minimum role. |
allowedGroups |
list of text | Viewer groups whose members may always use the command, even without the minimum role. |
deniedUsers |
list of text | Viewer names or ids that may never use the command. You, the broadcaster, always can. |
deniedGroups |
list of text | Viewer groups whose members may never use the command. |
persistCounter |
true/false | Keep the use counter after a restart |
persistUserCounter |
true/false | Keep each viewer's use counter after a restart |
linkedActions |
list of object | The actions this command runs (each with id and name): those with a command.triggered trigger for it. Cuebot fills this in; it is ignored when you send it. |
Timer¶
| Field | Type | What it is |
|---|---|---|
id |
text | The timer's id, a long code. Leave it out for a new timer and Cuebot makes one. |
name |
text | The timer's name, like "Social links". core.timer triggers find the timer by this name. It must not be empty. |
enabled |
true/false | true: the timer runs. false: it is off. |
intervalSeconds |
whole number | How many seconds between two goes, like 1200 for 20 minutes. At least 1 when there is no cron and no random interval. |
repeat |
true/false | true (default): it goes off again and again. false: it goes off once, then waits until it is turned on again. |
randomInterval |
true/false | true: wait a random time between minIntervalSeconds and maxIntervalSeconds each time, instead of intervalSeconds. |
minIntervalSeconds |
whole number | With randomInterval: the shortest wait, in seconds, like 600. At least 1. |
maxIntervalSeconds |
whole number | With randomInterval: the longest wait, in seconds, like 1800. Not smaller than minIntervalSeconds. |
minChatLines |
whole number | Only go off if at least this many chat messages came in since last time, like 5. Else that turn is skipped. 0 means always. |
cron |
text | A clock schedule instead of a wait, in your local time, like "0 * * * " (every hour) or "/15 * * * *" (every 15 minutes). Empty: use the interval. |
state |
object | What the timer does right now (only while timers run): on or off, its interval, when it goes off next, and chat lines since last time. Cuebot fills this in; it is ignored when you send it. |
GlobalVariable¶
| Field | Type | What it is |
|---|---|---|
name |
text | The variable's name without the ~ signs, like "deaths". |
value |
any | What it holds now: text, a number, true/false, or null when empty. |
type |
text | What kind of value it is: text, integer (whole number), decimal, boolean (true/false) or empty. |
persisted |
true/false | true: saved and kept after a restart. false: temporary, gone when Cuebot closes. |
lastWrite |
text | When it last changed, as date and time, like "2026-11-01T20:15:00+01:00". |
Run¶
| Field | Type | What it is |
|---|---|---|
runId |
text | This run's own id, a long code. |
actionId |
text | The id of the action that ran. |
actionName |
text | The name of the action that ran. |
queue |
text | The action queue it waited in, like "Default". |
source |
text | What started it, like a trigger's name, "API" or "Manual". |
state |
one of Pending, Running, Completed, Cancelled, Failed |
Where it is: Pending (waiting in its queue), Running, Completed, Cancelled or Failed. |
queuedAt |
text | When it was started and put in its queue, as date and time. |
startedAt |
text | When it really began. Empty while it still waits. |
completedAt |
text | When it ended. Empty while it still waits or runs. |
durationMs |
whole number | How long it ran, in milliseconds (1000 = 1 second), not counting the wait in its queue. |
error |
text | What went wrong, if it failed. Empty when all went well. |
depth |
whole number | 0 when a trigger, you or the API started it. 1 or more when another action or a code step started it. |
args |
object | Only with includeArgs: the %variables% it started with. |
argsAfterRun |
object | Only with includeArgs: the %variables% when it finished, with the ones its steps added. |
RunResult¶
| Field | Type | What it is |
|---|---|---|
queued |
true/false | true when Cuebot accepted the run. |
completed |
true/false | Only with wait: true when it finished in time. false when it still runs after timeoutSeconds. |
success |
true/false | Only when completed: true when the action went well, false when it failed. |
action |
object | Which action it was: its id and name. |
run |
Run | Only when completed: the run's details, like its state, duration, error and variables. |
message |
text | Only when it did not finish in time: tells you to look in GET /history later. |
ImportPlan¶
| Field | Type | What it is |
|---|---|---|
source |
one of Cuebot, StreamerBot |
Where the import comes from: Cuebot (a Cuebot share text) or StreamerBot (a Streamer.bot export). |
header |
object | About the import: its name, author, description, version, when it was made and which program made it. |
items |
list of object | One entry per thing in the import: its kind, name, whether it clashes with one you have, what will happen, and things to check. |
warnings |
list of text | Things to check after the import, like steps that point to something you do not have. |
mapped |
list of text | For Streamer.bot imports: what was turned into what, like "Send Message → twitch.sendMessage". |
placeholders |
whole number | How many Streamer.bot steps Cuebot could not turn into its own. They come in as turned-off stand-in steps for you to redo. |
containsCode |
true/false | true when the import has C# or Python code steps. Read code before you run it. |