Create a direct or multipart video upload
/api/v1alpha1/videosOpens a server-selected direct or multipart upload session. The request contains only the original filename and exact file_size; the server determines content type from the filename and measures duration during processing. Video bytes go directly to storage and never pass through this API. Files up to 200 MiB use one PUT, and larger files use 10 MiB multipart chunks. The response reports the selected strategy.
- Access: an alpha-enabled API key with the
UPLOAD_VIDEOSpermission. - Size:
file_sizeis required and must be exact. The maximum is 10 GiB. - Strategy: upload selection is always automatic; callers cannot submit a strategy preference.
- Retries: send an
Idempotency-Keyto safely retry session creation.
After the storage upload, record multipart ETags with PUT /api/v1alpha1/videos/{video_id}/upload/parts, then call POST /api/v1alpha1/videos/{video_id}/upload/complete. Poll GET /api/v1alpha1/videos/{video_id} for processing status.
Authorization
apiKey In: header
Header Parameters
Optional key for safe retry of this POST. The key is retained for 24 hours and compared with the request payload and concrete path parameters.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/api/v1alpha1/videos" \ -H "Authorization: Bearer $DEEPFRAME_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "file_size": 157286400, "filename": "warehouse-inspection-2026-08-08.mp4" }'{ "chunk_size": 10485760, "completed_parts": 2, "expires_at": "2026-08-08T10:15:00.000Z", "file_size": 157286400, "received_parts": [ 1, 3 ], "reported_bytes": 20971520, "state": "open", "strategy": "direct", "target": { "expires_at": "2026-08-08T10:15:00.000Z", "headers": {}, "method": "put", "part_number": 2, "url": "https://s3.example.test/upload" }, "targets": [ { "expires_at": "2026-08-08T10:15:00.000Z", "headers": {}, "method": "put", "part_number": 2, "url": "https://s3.example.test/upload" } ], "total_chunks": 16, "uploaded_bytes": 10485760, "verified_bytes": 0, "video_id": "vid_0190b5d4-7e1f-7a2b-9c3d-1234567890ab"}