TEASEDocs
ProductsStreamHow-to

Choose which platforms receive your stream

Set the RTMP destination, stream key, and frame layout for each platform your video is fanned out to.

stream/targets is the video fan-out side of a platform connection — paired with stream/ingest (where the feed comes from). One row per (owner, platform): the platform's RTMP address, its stream key, a wide/vertical frame choice, and an "armed" toggle.

Read your current targets

GET /api/admin/stream/targets returns every target you've configured, keyed by platform. The stream key is never echoed back — only a boolean hasKey.

Set or update a target

PUT /api/admin/stream/targets/{platform} — a partial patch:

FieldNotes
urlThe platform's RTMP ingest address.
keyThe stream key. An empty value means "leave it as-is" — the same pattern as the platform's own stream key and native-settings token, so a form can resend the field without accidentally wiping it.
enabledArms or disarms fan-out to this platform. Arming is only accepted for a target that already has both a URL and a key — an incomplete target that showed "armed" would be a green toggle lying about whether anything is actually going out.
frameWhich frame layout (wide or tall) this platform receives — see Build a vertical frame. Empty defaults to wide.

A target can only be created for a platform whose registry entry declares a video_sink — platforms without one (TikTok, LiveJasmin) don't accept an RTMP push at all, so the API won't let you save an address that was never going to be used.

Remove a target

DELETE /api/admin/stream/targets/{platform}.

A per-owner database row, not a shared config file

Targets used to live in a file next to ffmpeg on the motor — fine when every creator had their own box, but on a shared GPU box that same file would mean one model's targets are visible to, and overwritable by, another. Targets are keyed by owner_id instead, and the motor learns which owner it's serving from the publish path itself — so one motor safely serves any number of creators at once.

Verify it worked

GET /api/admin/stream/targets again and check enabled and hasKey for the platform. The stream key itself is decrypted and used in exactly one place — the token-gated motor resolver ffmpeg reads from — so you can't verify the key's value directly through the API; verify that going live actually reaches the platform instead.

What's next

Set your room title and category — the other half of a platform connection: what it shows about you, not what video it receives.

On this page