Skip to content

Chat API

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=n
  • GET 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.