Create a new video inference stream. Returns connection details for the chosen transport.
Workflow: Create stream → connect video source → receive results on WebSocket → send keepalives → close when done.
Transport options:
source. Response includes livekit.url and livekit.token for publishing video.source.type: 'webrtc' with an SDP offer. Response includes webrtc answer and turn_servers.source.type: 'livekit' with your room URL and token.Processing modes:
target_fps, clip_length_seconds, delay_seconds for temporal analysis (motion, actions).interval_seconds for static analysis (OCR, object detection).Limits: 5 concurrent streams per API key. Requires credits.
Documentation Index
Fetch the complete documentation index at: https://docs.overshoot.ai/llms.txt
Use this file to discover all available pages before exploring further.
id — pass this in every later URL: /v1/streams/{id}/... plus stream URLs you embed in chat completion messages.publish.url + publish.token — feed these to a LiveKit client SDK to connect a video source. Any LiveKit publisher works (browser, native, server-to-server). The token is short-lived; use the one returned by /keepalive if your publisher reconnects later.expires_at_ms + ttl_seconds — the lease deadline. Call /keepalive before it elapses (every ~2 minutes is safe). After expiry the stream’s state flips to ended and stays there.active state immediately, even before the first frame arrives. GET /streams/{id} returns last_frame_at_ms: null until a publisher actually delivers a frame.All requests must include Authorization: Bearer <api_key>. Get a key from the
Overshoot dashboard. Listing models (GET /models) does not require auth.
Stream created.
Unique stream identifier. Use this in every subsequent stream URL.
Always active for a freshly created stream.
active WebRTC publish target. Connect with the LiveKit client SDK.
Wall-clock Unix ms when the lease will expire if not renewed via /keepalive.
Lease TTL in seconds. Currently 300 for all streams.