NetraFlow

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

On this page