Show your CamuCam chat wherever you already show chat: in multi-chat overlays, bots and tools like Streamer.bot. Free, read-only, no key needed.
It carries exactly what everyone sees on the channel page: messages, tips, CamuCam’s own lines (raids, parties, goals), removed lines and the viewer count.
Quick start
Open a WebSocket to this address. Every message is one JSON event. Add &history=20 to get the last 20 lines with the first event.
wss://camucam.com/api/v1/chat/ws?channel=yourname
const ws = new WebSocket("wss://camucam.com/api/v1/chat/ws?channel=yourname&history=20");
ws.onmessage = (m) => {
const e = JSON.parse(m.data);
if (e.type === "message") show(e.id, e.user.name, e.user.color, e.text);
if (e.type === "delete") remove(e.id);
};Events
hello- first, once: the channel and (if asked for) recent lines
message- a chat line
tip- a tip with its message and amount (USD)
system- a line from CamuCam – raid, party, goal … (text in English)
delete- remove the line with this id – moderation must reach your overlay too
viewers- people watching right now
live- the stream started or ended
pong- the answer to your ping message
Who wrote it
Messages and tips carry a user: handle, name, colour (as in the chat), avatar (always an image – a drawn initial without a photo), profile link and badges: streamer, moderator, team, verified, level, fan level, season sign.
{
"type": "message",
"id": "4711",
"at": "2026-10-19T20:15:03.120Z",
"user": {
"id": 12,
"handle": "mara",
"name": "Mara",
"color": "#f2a98a",
"avatar": "https://camucam.com/api/avatar/mara?initial=1",
"url": "https://camucam.com/@mara",
"badges": [
{
"type": "level",
"level": 5
},
{
"type": "fan",
"level": 3,
"name": null
}
]
},
"text": "hi everyone!"
}Without WebSocket
GET https://camucam.com/api/v1/channels/yourname/chat/streamthe same events as server-sent events (EventSource), ?history=nGET https://camucam.com/api/v1/channels/yourname/chat?limit=50the latest lines, oldest first (?limit=1–50)GET https://camucam.com/api/v1/channels/yournamethe channel: live or not, title, viewers and the addresses above
In your tools
OBS
Our own overlay shows CamuCam’s chat first and Twitch’s next to it: Go live → Settings → Chat overlay for OBS.
Social Stream Ninja
Go live → Settings → Chat overlay for OBS → Social Stream Ninja: paste your SSN session ID and keep the bridge it gives you open while you stream. CamuCam then shows up in SSN like any other platform.
Streamer.bot
Servers/Clients → WebSocket Clients → add the address above. Trigger: Core → Websocket → Client → Websocket Client Message. The event arrives as %message% (JSON) – a C# action can read it:
using Newtonsoft.Json.Linq;
public class CPHInline
{
public bool Execute()
{
if (!CPH.TryGetArg("message", out string raw)) return false;
var e = JObject.Parse(raw);
if ((string)e["type"] != "message") return true;
CPH.SetArgument("ccName", (string)e["user"]["name"]);
CPH.SetArgument("ccText", (string)e["text"]);
return true;
}
}Your own overlay or bot
Anything that speaks WebSocket works – ChatRD, nutty’s overlay or your own code: connect as in the quick start and draw the events.
Fair use
- Read only – nobody can write into a chat through the API.
- Up to 10 open connections and 120 requests a minute per address.
- When a delete event comes, remove that line. Moderation has to reach every screen.
- No WebSocket pings in your tool? Send a ping message now and then:
{"type":"ping"} - Version 1 only grows: new fields and events may come, existing ones stay.
Try it
Connect and write in that channel’s chat – the events show up here.
