Quick Start
1. Get your API key
Sign in to the dashboard, click + New key, and copy the value shown. You'll see the raw key once — store it somewhere safe.
2. Subscribe to a stream
Give us a name and a stream URL. The runner picks it up within seconds and starts transcribing.
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions \
-H "X-API-Key: str_..." \
-H "Content-Type: application/json" \
-d '{"name": "TOK FM", "stream_url": "https://stream.example/radio.mp3", "language": "pl"}'
# {"id":"abc-123","name":"TOK FM","status":"active"}3. Pull news digests (polling)
Digests are produced continuously as the stream is consolidated. Poll the /digests endpoint on your own schedule.
curl https://api.stream2llm.com/v2/streams/subscriptions/abc-123/digests \
-H "X-API-Key: str_..."
# [{"window_start_seconds":0,"window_end_seconds":900,"stories":[
# {"title":"...","summary":"...","facts":[...],"quotes":[...]}]}]4. Or receive them via webhook / SSE
Pass callback_url when subscribing and we'll POST each new digest to that URL. Or stream digests live over Server-Sent Events:
# Webhook: digests POSTed to your endpoint as they're produced
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions \
-H "X-API-Key: str_..." \
-d '{"name":"TOK FM","stream_url":"https://...","callback_url":"https://you.com/digest"}'
# SSE: stream chunks & digests live (header auth)
curl -N https://api.stream2llm.com/v2/streams/subscriptions/abc-123/results/stream \
-H "X-API-Key: str_..."5. Other sources: YouTube & audio files
The same digests come out of more than live radio. Monitor a YouTube channel and we auto-spawn a subscription for each new live stream and video; or submit a single video / VOD on demand; or process a finite audio file by passing source_mode: "file".
# Monitor a YouTube channel (auto-picks up live streams & new videos)
curl -X POST https://api.stream2llm.com/v2/youtube/monitors \
-H "X-API-Key: str_..." \
-d '{"channel_url":"https://www.youtube.com/@some-news-channel"}'
# Or process one YouTube video / VOD
curl -X POST https://api.stream2llm.com/v2/youtube/items \
-H "X-API-Key: str_..." \
-d '{"url":"https://www.youtube.com/watch?v=...","name":"Press briefing"}'
# Or process a plain audio file (runs once to completion, then stops)
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions \
-H "X-API-Key: str_..." \
-d '{"name":"Interview","stream_url":"https://example/talk.mp3","source_mode":"file"}'6. Just the final digest
For a recording or a finished broadcast you often only want one consolidated result, not a digest every few minutes. Set final_digest_only: true on any subscription, monitor, or item and we deliver (and keep) only the final digest. It's inherited by the subscriptions a monitor spawns.
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions \
-H "X-API-Key: str_..." \
-d '{"name":"Interview","stream_url":"https://example/talk.mp3","source_mode":"file","final_digest_only":true}'7. Attach the raw transcript
Add include_transcript: true to any subscription, monitor, or item and each delivered digest payload gains a transcript_url — a durable public link to the raw .txt transcript on Cloudflare R2 (null if no transcript was produced for that window). Combined with final_digest_only, the single final digest carries the transcript for the whole run.
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions \
-H "X-API-Key: str_..." \
-d '{"name":"Interview","stream_url":"https://example/talk.mp3","source_mode":"file","final_digest_only":true,"include_transcript":true}'
# Delivered digest payload will include:
# "transcript_url": "https://storage.stream2llm.com/transcripts/.../0-3600.txt"
# "transcript_window_seconds": [0, 3600]8. Stop a subscription
Stop monitoring at any time from the dashboard or the API.
curl -X POST https://api.stream2llm.com/v2/streams/subscriptions/abc-123/stop \
-H "X-API-Key: str_..."