/streamstream:readHunts, bonuses, calculated results, guess counts, tournament and giveaway summaries, scene names. No individual votes or guesses.
stream8.ioCommands, Kick messages and your stream data — connected to your website.
STREAM8_API_KEY in your other website’s server secrets.Authorization: Bearer <your-key> on every request.Keys expire in 90 days. Revoke anytime. Access is limited to the issuing owner’s workspace, not a moderator’s selected workspace. Each key allows 120 requests per minute.
// Runs on wingitslots.com's server, NOT in a browser.
const response = await fetch('https://www.stream8.io/api/public/v1/commands/execute', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.STREAM8_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
eventId: 'wingit-event-0001', // unique per event; reuse on retries
viewer: 'viewer_name', // from your verified signed-in user
message: '!sr Wanted Dead or a Wild'
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
// result.data = { eventId, reply }This version must be published before these production URLs are available. Creating this API does not install the connection on wingitslots.com.
Paths below are relative to the base URL. Request bodies are JSON. Unknown fields are rejected.
/streamstream:readHunts, bonuses, calculated results, guess counts, tournament and giveaway summaries, scene names. No individual votes or guesses.
/requestsstream:readThe first 100 pending slot requests in queue order. Includes id, slot_name, status and created_at; excludes viewer identities.
/commandscommands:readConfigured commands including request defaults.
/commandscommands:writeCreate or replace one command by id. Send id, command, response, enabled, optional action and role. Does not replace other commands.
/commands/executecommands:executeExecute a viewer command. Send eventId, viewer and message. Uses Everyone permissions; returns a reply without posting to chat. Supports requests, custom replies, !guess, !gtb, !over, !under, !predict, !points and !pick (Pro).
/chatchat:sendPost a message to your connected Kick channel. Send content (1–500 characters). Requires an enabled, connected Kick bot.
/timed-messagestimers:readList up to 100 Kick timed messages, oldest first.
/timed-messagestimers:writeCreate or edit a timed message. Send content, every_minutes (2–1440), enabled, and id only when editing.
/timed-messagestimers:writeDelete one timed message. Send its id.
command: ! followed by 1–30 letters, numbers, underscores or hyphens. response: up to 500 characters; placeholders include {viewer}, {game}, {hunt} and {points}. action: reply or request. role: everyone, subscriber, vip, mod or broadcaster. Maximum 100 commands. Execute accepts a viewer name up to 100 characters and a message up to 500 characters.
All endpoints are listed above. Hunts, requests, scene names, tournament and giveaway summaries are read-only. Full hunt editing, OBS widget controls, account management, raw chat feeds and outgoing webhooks are not available through this API.
// Success
{"data":{"eventId":"wingit-event-0001","reply":"@viewer_name Wanted Dead or a Wild added to the request queue"}}
// Error
{"error":"forbidden"}Command events are deduplicated by eventId across a workspace. Repeat identical input with the same eventId to retrieve its saved response. Different input using the same id returns 409. An incomplete event remains blocked to prevent double awards; do not retry it with a new id. Chat posts and timed-message creation are not idempotent: do not automatically retry them after an uncertain response.