Stream Issues
Why does my YouTube URL not work?
Trio only works with live streams, not regular videos or past broadcasts (VODs). Check that your URL:- Has a red “LIVE” badge on YouTube
- Is currently broadcasting
- Is not region-restricted
NOT_LIVESTREAM
Solution: Find a currently live stream. You can search YouTube for “live” and filter by “Live” under the Filters menu.
Why am I getting “Failed to fetch stream” errors?
This usually means:- The stream is region-restricted and not accessible from our servers
- The stream went offline while you were setting up the job
- YouTube is rate-limiting requests (temporary)
STREAM_FETCH_FAILED
Solution: Try a different stream or wait a few minutes and retry.
Why did my job stop after 10 minutes?
Jobs automatically stop after 10 minutes to prevent runaway costs. This is by design. Solution: Set up your webhook handler to restart the job when it receives ajob_status event with auto_stopped: true. See Webhooks Guide.
Webhook Issues
Why am I not receiving webhooks?
- URL not publicly accessible - Your webhook URL must be reachable from the internet
- Firewall blocking - Check if your firewall allows incoming POST requests
- HTTPS required - Some hosting providers require HTTPS
- Job not running - Check job status with
GET /jobs/{job_id}
- Test with webhook.site first
- Check logs endpoint for “webhook” entries
- Verify job status is “running”
Why is my webhook timing out?
Webhooks must respond within 30 seconds. If your handler takes longer, process the webhook asynchronously.Condition Issues
Why is my condition never triggering?
- Condition too vague - Be specific about what to look for
- Condition not a yes/no question - Use questions like “Is there…?” not “How many…?”
- Static stream - Pre-filter skips frames with no motion
"people"
Good: "Are there people walking on the sidewalk?"
See Writing Conditions for best practices.
Why is my condition triggering too often?
- Condition too broad - Add constraints
- Prefilter disabled - Enable motion detection to filter static frames
"Is there a car?"
After: "Is there a red sports car moving fast?"
API Issues
What does error code 429 mean?
Error:MAX_JOBS_REACHED
You have reached the limit of 10 concurrent jobs. Each job runs for up to 10 minutes.
Solution: Cancel an existing job with DELETE /jobs/{id} or wait for one to complete.
How do I authenticate API requests?
Include your API key in theAuthorization header:
What’s the difference between frames, clip, and hybrid modes?
| Mode | How it works | Latency | Best for |
|---|---|---|---|
frames | Single frame snapshot | ~4s | Fast checks, static scenes |
clip | 1-10 second video | ~8s | Motion detection, temporal events |
hybrid | Frame + clip combined | ~12s | Best accuracy (default) |
frames for speed, hybrid for accuracy.
What stream types are supported?
| Platform | URL Format | Notes |
|---|---|---|
| YouTube Live | youtube.com/watch?v=ID | Must be currently live (red LIVE badge) |
| Twitch | twitch.tv/channel | Live streams only |
| RTSP | rtsp://host:port/path | IP cameras, security systems |
How do I use Trio with AI agents (MCP)?
Trio supports Model Context Protocol (MCP) for AI agent integration. Claude Desktop config (~/.config/claude/claude_desktop_config.json):
My API key isn’t working
- Check the format - Use
Authorization: Bearer YOUR_KEY(not just the key) - No extra spaces - Copy the key exactly, no trailing spaces
- Correct header name - It’s
Authorization, notAuthorAPI-Key
Why did my job fail?
Check the job status for details:- Stream went offline - The broadcaster ended the stream
- Stream URL expired - YouTube URLs expire after ~2 hours
- Region restricted - Stream not accessible from our servers
How do I cancel a job?
Send a DELETE request to the job endpoint:job_status webhook with the stats.
Cost & Performance
How does pre-filtering save costs?
Trio’s motion detection skips frames that haven’t changed. For static streams (like security cameras), this can reduce VLM API calls by 70-90%. Enable withenable_prefilter: true (default).
Why are some frames being skipped?
This is the pre-filter working correctly! It skips frames with no motion to save on VLM costs. Check theframes_skipped stat in job details to see how many frames were filtered.
Still Need Help?
- Check the API Reference for endpoint details
- Review Debugging Guide for troubleshooting
- Open an issue on GitHub