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

CodeMeaning
200Played
400Body was missing sound
401Missing, wrong or revoked key — also returned for a room that does not exist
403Playback is paused by the room owner. The key is still valid
404No sound in this room matched
409The name was ambiguous, see candidates
429Rate 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.