Docs

Everything you need to go live. Three steps, no special software.

Quick start
1
Add your destinations

Create an account, then add Twitch, YouTube, Kick, or any custom RTMP endpoint from the dashboard. Paste each platform's stream key once. You can switch destinations on and off whenever you like, even mid-stream.

2
Point OBS at PSiStream

Your dashboard shows your ingest URL and your PSiStream stream key. In OBS (or Streamlabs, or any encoder) open Settings → Stream, set Service to Custom, paste the URL as Server and the key as Stream Key.

3
Go live

Hit Start Streaming. PSiStream relays your stream to every enabled destination at once, and the dashboard shows each destination's health in real time.

Good to know
If you disconnect

Your destinations stay live through a reconnect grace window. Get back online within it and viewers see a brief hiccup, not an ended stream.

Chat inside OBS

Your unified Twitch, YouTube, and Kick chat lives at psistream.com/chat. To put it inside OBS: click Copy OBS dock linkon the dashboard's Chat card, then in OBS open View → Docks → Custom Browser Docks and paste the link. No sign-in needed. Treat the link like a password; copying a new one (or hitting Revoke) disables the old link.

Want it translucent? The whole page is styled through CSS variables, so paste this into the dock's Custom CSS box and tune the last number in each rgba() (0 = glass, 1 = solid):

:root {
  --bg: rgba(9, 9, 11, 0.35);
  --surface: rgba(24, 24, 27, 0.35);
  --border: rgba(39, 39, 42, 0.5);
}
body { background: transparent !important; }
body::before { display: none; } /* dot grid */
nav { display: none; } /* optional: hide the header */
If a destination fails

Each destination runs in isolation. If one platform drops the relay, the others and your ingest keep going. Failed destinations retry automatically and are flagged on the dashboard. Live network health is on the status page.

For developers: webhooks

Skip this unless you're building your own integration. Custom webhooks (configured on the Notifications page) receive a POST with Content-Type: application/json for the events you subscribe to: stream.started, stream.ended, and destination.failed.

{
  "event": "stream.started",
  "timestamp": "2026-06-06T22:00:00.000Z",
  "data": {
    "streamId": "...",
    "destinations": [
      { "id": "...", "label": "Twitch", "platform": "twitch" }
    ]
  }
}

Two headers ship with every delivery: X-Webhook-Event (the event name) and X-Webhook-Signature (an HMAC-SHA256 hex digest of the raw body, keyed with your signing secret). To verify authenticity, compute HMAC-SHA256(secret, body) on your side and compare it to the signature header before trusting the payload.