Uploads
Analyze your own video files instead of a platform URL.
Upload works in three steps: ask for a presigned URL, PUT the file straight to storage, then create a job referencing the returned key. The file never transits the API.
Uploads are available on every plan — credits are the only cost control.
1. Request a presigned URL
POST /v1/uploads/presign
| Prop | Type | Description |
|---|---|---|
| content_type | string | One of video/mp4, video/quicktime, or video/webm. |
| size_bytes | integer | Exact file size in bytes. Maximum 500 MB. |
curl -X POST https://api.netraflow.com/v1/uploads/presign \
-H "Content-Type: application/json" \
-H "X-Api-Key: sk_live_your_key_here" \
-d '{
"content_type": "video/mp4",
"size_bytes": 18234112
}'{
"data": {
"put_url": "https://<upload-host>/uploads/...?X-Amz-Signature=...",
"key": "uploads/ten_abc123/01J.../video.mp4"
},
"meta": { "request_id": "req_xyz789" }
}2. Upload the file
PUT the raw bytes to put_url. Send the same Content-Type you presigned with — a mismatch invalidates the signature.
curl -X PUT "$PUT_URL" \
-H "Content-Type: video/mp4" \
--data-binary @my-video.mp4The presigned URL is short-lived. Request a fresh one if the upload is delayed.
3. Create the job
Pass upload_key instead of url, plus upload_filename for the video title.
curl -X POST https://api.netraflow.com/v1/jobs \
-H "Content-Type: application/json" \
-H "X-Api-Key: sk_live_your_key_here" \
-d '{
"upload_key": "uploads/ten_abc123/01J.../video.mp4",
"upload_filename": "my-video.mp4",
"capabilities": ["transcription"]
}'{
"data": {
"job_id": "job_abc123",
"status": "pending",
"url": null,
"platform": "upload",
"capabilities": ["transcription"],
"video_title": "my-video.mp4",
"credits_estimated": 1,
"credits_charged": null,
"created_at": "2026-04-03T12:00:00.000Z"
},
"meta": { "request_id": "req_xyz789" }
}Uploaded jobs report platform: "upload" and behave like any other job from there. Supplying both url and upload_key — or neither — returns VALIDATION_FAILED (422).
Duration limits still apply to uploaded files, based on the capabilities you request. See Jobs.
Limits
| Prop | Type | Description |
|---|---|---|
| Maximum size | 500 MB | Per file. |
| Accepted formats | mp4, mov, webm | video/mp4, video/quicktime, video/webm. |
Batches accept uploaded files too — pass them in the uploads array. See Batch.