Soundboard Online API
Play sounds in a room from outside the browser — a Twitch bot, a Stream Deck, a Cloudflare Worker, or anything that can make an HTTP request. Free, and included with every room.
What you can build
Anything that can send an HTTP POST can play a sound in your room. The common ones:
Twitch channel point redemptions
Point a redemption at a small Worker or bot that POSTs to /play. Viewers spend points, the sound fires on stream, and the reward name maps straight onto the clip name — no lookup table, because name matching ignores case, spaces, underscores and hyphens.
Chat commands
Wire !ps <name> in Nightbot, StreamElements, Fossabot, or your own bot to the same endpoint. GET /sounds returns everything the room can play, so the bot can answer "what sounds are there?" without you maintaining a second list.
Stream Deck buttons
A Stream Deck multi-action with a Web Request step plays a clip on a physical key press, with no soundboard window in front of you and nothing to alt-tab to mid-game.
Discord and Slack bots
Any bot that can make an outbound HTTP request can trigger a sound for everyone with the room open — a slash command, a reaction handler, or a scheduled standup chime.
Alerts from anything with a webhook
CI that failed, a donation, a deploy that finished, a doorbell: if it can send an HTTP POST, it can play a sound in the room. One key, one endpoint, no SDK.
Home Assistant and scripts
A rest_command in Home Assistant, a cron job, or a two-line shell script all work the same way — the API takes a plain JSON body and a bearer token.
How it fits together
The room stays open in a browser — the streamer's OBS browser source, or just a tab. That browser is what plays the audio. This API tells the server play sound X in room Y, and the server pushes it over the WebSocket the room already has open.
A sound only plays if something is connected. If the browser source is closed the call
still succeeds and the play is counted, but nobody hears it — every response carries a
listeners count so you can tell the difference.
Getting a key
Open your room, click Bot in the toolbar and choose Create key. The key is shown once, is stored hashed, and only plays sounds in that one room — it cannot read chat, change members, upload, or reach any other room.
Endpoints
Base URL — https://soundboardonline.com/api/v1
GET /rooms/{roomId}/sounds
Everything the room can play, so a bot can map chat commands onto sounds.
POST /rooms/{roomId}/play
Plays one sound. Name matching is deliberately forgiving — case, spaces, underscores and
hyphens are ignored, so Air Horn, air_horn and AIRHORN
all hit the same clip. An ambiguous prefix returns a 409 with the candidates rather than
firing the wrong sound on a live stream.
POST /rooms/{roomId}/stop
Stops everything currently playing in the room.
Authentication
Send the key as a bearer token on every request:
Authorization: Bearer sbo_your_key_here
X-Api-Key: sbo_… also works if a bearer token is awkward in your setup.
Try it
curl -X POST https://soundboardonline.com/api/v1/rooms/YOUR_ROOM_ID/play \
-H "Authorization: Bearer sbo_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"sound":"airhorn","by":"SomeViewer"}'
Status codes
| Code | Meaning |
|---|---|
200 | Played |
400 | Body was missing sound |
401 | Missing, wrong or revoked key — also returned for a room that does not exist |
403 | Playback is paused by the room owner. The key is still valid |
404 | No sound in this room matched |
409 | The name was ambiguous, see candidates |
429 | Rate limited |
Rate limits
1000 requests per minute per API key. The limit is per key rather than per IP, so running on shared infrastructure like Cloudflare Workers will not make you collide with anyone else.
The owner’s kill switch
Room owners have a Bot playback switch for when a raid or a joke gets out
of hand. While it is off, /play returns 403 and nothing is heard
or counted. It is a pause, not a revoke — the key stays valid and nothing needs
reconfiguring.
Browser source links (OBS)
A room can hand out a signed URL built to be pasted into OBS and left running as the room's speaker, so nobody has to keep a soundboard tab open. Listen-only preview links let viewers hear a clip without joining the room.