NetraFlow

Quickstart

Submit your first video analysis in under a minute.

1. Get an API key

Sign up, create a workspace, and create a key in the console under API keys. Keep it in an environment variable: it can spend credits.

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_abcdefghij123456",
    "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": 2,
    "credits_charged": null,
    "processing_seconds": null,
    "return_proof": true,
    "follow_id": null,
    "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.

On Free, a job that watches the video is capped at 3 minutes. Transcription alone allows 20, which is why this example starts there. See Limits.

3. Retrieve results

Poll the job every 30 seconds until status is "completed", or let a webhook tell you.

curl https://api.netraflow.com/v1/jobs/job_abcdefghij123456 \
  -H "X-Api-Key: sk_live_your_key_here"
{
  "data": {
    "job_id": "job_abcdefghij123456",
    "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": 2,
    "credits_charged": 1,
    "processing_seconds": 37,
    "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,
    "follow_id": null,
    "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" }
}

credits_estimated assumes your plan's longest video until the real length is known, so it usually drops. A failed job has error: { code, message } instead of results, and is not charged.

Next steps

On this page