Quickstart
Submit your first video analysis in under a minute.
Your API key (sk_live_...) is a secret. Store it in environment variables — never commit it to version control.
1. Get an API key
Sign up, create a workspace, and generate an API key from the dashboard.
2. Submit a video
curl -X POST https://api.netraflow.com/v1/jobs \
-H "Content-Type: application/json" \
-H "X-Api-Key: sk_live_your_key_here" \
-d '{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"capabilities": ["transcription"]
}'{
"data": {
"job_id": "job_abc123",
"status": "pending",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"platform": "youtube",
"capabilities": ["transcription"],
"language": null,
"video_title": null,
"video_duration_seconds": null,
"video_thumbnail_url": null,
"credits_estimated": 1,
"credits_charged": null,
"return_proof": true,
"created_at": "2026-04-03T12:00:00.000Z",
"started_at": null,
"completed_at": null
},
"meta": { "request_id": "req_xyz789" }
}The 202 also carries Location (the job's URL) and Retry-After: 30.
Capabilities that analyze frames — summary and brands — are capped at 1 minute of video on Free, 3 on Starter,
10 on Pro, 20 on Scale. Transcription-only jobs get a much higher ceiling (10 / 30 / 90 / 120 minutes), which is why
this example starts there. A video over your cap fails after ingestion with VIDEO_TOO_LONG.
3. Retrieve results
Poll the job until status is "completed" — no more often than every 30 seconds — or use webhooks and skip polling entirely.
curl https://api.netraflow.com/v1/jobs/job_abc123 \
-H "X-Api-Key: sk_live_your_key_here"{
"data": {
"job_id": "job_abc123",
"status": "completed",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"platform": "youtube",
"capabilities": ["transcription"],
"language": null,
"video_title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"video_duration_seconds": 212,
"video_thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"credits_estimated": 1,
"credits_charged": 1,
"results": {
"transcription": {
"text": "We're no strangers to love, you know the rules...",
"segments": [
{ "start": 0.0, "end": 4.8, "text": "We're no strangers to love" },
{ "start": 4.8, "end": 8.2, "text": "You know the rules and so do I" }
],
"language": "en",
"duration_seconds": 212.0,
"word_count": 423
}
},
"return_proof": true,
"created_at": "2026-04-03T12:00:00.000Z",
"started_at": "2026-04-03T12:00:01.000Z",
"completed_at": "2026-04-03T12:00:38.000Z"
},
"meta": { "request_id": "req_abc456" }
}Failed jobs carry an error object with a code and message instead of results.
Next steps
- API Reference — Full endpoint documentation
- Capabilities — Detailed capability schemas
- Webhooks — Receive results without polling