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_..."