Restream / simulcast

Forward your Kardolive live stream simultaneously to YouTube Live, Twitch, Facebook Live, X/Twitter Live, LinkedIn Live, or any custom RTMP endpoint. One source, many destinations.

No-code option: Save destinations and watch live routes from the customer portal at /app/restream. Attach destinations to a live stream from /app/streams/<id>Restream tab.

1. How it works

When a stream starts publishing to Kardolive (via RTMP/RTMPS/WHIP), our ingest server tees the same source feed to every restream destination you've attached. We don't re-encode — we just pass-through the existing H.264 / AAC bitstream, so there's no extra CPU cost and no quality loss. Each destination shows up as if you published directly to it.

                                  ┌─ rtmp://a.rtmp.youtube.com/live2/<key>
[Your publisher]                  │
   │                              │
   ▼                              ├─ rtmp://live.twitch.tv/app/<key>
[Kardolive SRS ingest] ─── tee ──►│
   │                              │
   ▼                              ├─ rtmps://live-api-s.facebook.com:443/rtmp/<key>
[HLS / WHEP / chat …]             │
                                  └─ rtmp://your-custom-endpoint/path/<key>

Destinations run for the entire duration of the stream and stop when the stream ends.

2. Save a destination

Targets are saved once and reused across many streams. Each target = one RTMP URL.

POST https://api.kardocloud.com/v1/me/restream/targets
Authorization: Bearer kl_live_xxx
{
  "name":     "Brand YouTube channel",
  "platform": "youtube",
  "rtmpUrl":  "rtmp://a.rtmp.youtube.com/live2/abcd-efgh-ijkl-mnop"
}
→ { "id": "rt_xxx", "name": "Brand YouTube channel", "platform": "youtube",
    "rtmpUrl": "rtmp://a.rtmp.youtube.com/live2/****-mnop",   // tail masked
    "active": true, "createdAt": "..." }

The full RTMP URL is stored encrypted at rest. When listed it's masked — only the last 6 characters are shown.

List existing destinations:

GET /v1/me/restream/targets
→ [{ "id": "rt_xxx", "name": "...", "platform": "youtube", "rtmpUrl": "rtmp://a.rtmp.youtube.com/live2/****-mnop" }]

Delete a destination (also stops any running routes):

DELETE /v1/me/restream/targets/rt_xxx

3. Attach destinations to a stream

Before starting your live stream, attach the destinations you want to simulcast to. Up to 8 destinations per stream.

POST /v1/me/restream/streams/<streamId>
{ "targetIds": ["rt_xxx", "rt_yyy", "rt_zzz"] }
→ { "attached": 3 }

When the stream goes live, Kardolive automatically starts forwarding to every attached destination. Status moves pending → live → ended (or failed with an error message if the target rejects the connection).

Check current routes:

GET /v1/me/restream/streams/<streamId>
→ [
    { "id": "rr_1", "targetId": "rt_xxx", "target": { "name": "YouTube", "platform": "youtube" },
      "status": "live", "startedAt": "...", "endedAt": null, "errorMessage": null },
    { "id": "rr_2", "targetId": "rt_yyy", "target": { "name": "X / Twitter", "platform": "x" },
      "status": "live", "startedAt": "...", "endedAt": null, "errorMessage": null }
  ]

4. Detach destinations

Detaching a destination mid-stream stops the forwarder for that one target. The main stream keeps publishing on Kardolive + other attached destinations.

DELETE /v1/me/restream/streams/<streamId>/<targetId>

5. Webhook events

EventWhen
restream.startedFFmpeg forwarder connected to target successfully
restream.endedStream ended; forwarder shut down cleanly
restream.failedTarget rejected the connection — see errorMessage in payload

6. Per-platform setup

YouTube Live

  1. YouTube Studio → Go Live → Streaming settings
  2. Copy "Stream URL" + "Stream key"
  3. Combine: rtmp://a.rtmp.youtube.com/live2/<your-stream-key>
  4. Save as a Kardolive target with platform: "youtube"

Twitch

  1. Twitch Creator Dashboard → Settings → Stream → Primary Stream key
  2. RTMP URL: rtmp://live.twitch.tv/app/<your-stream-key>

Facebook Live

  1. Facebook → Live Producer → Use stream key
  2. RTMPS URL: rtmps://live-api-s.facebook.com:443/rtmp/<your-stream-key>

X / Twitter Live

  1. Twitter Media Studio → Producer → Create broadcast
  2. Use the provided RTMP URL + key combination

LinkedIn Live

  1. LinkedIn → Create → Event → Live video
  2. Approved publishers only — request access through LinkedIn

Custom RTMP

Set platform: "custom" and pass the full URL. Anything that accepts H.264 + AAC over RTMP/RTMPS works (Wowza, nginx-rtmp, Vimeo, BoxCast, Akamai, etc.).

Next

Scheduled premieres → · Clips → · Push notifications →