Start an upload
Returns the generated video_id plus whatever the file's size requires to upload it directly to storage, then call POST /videos/upload/complete to register the upload and get the credit cost.
When mode is single, PUT the bytes to upload_url with the same Content-Type you declared here.
When mode is multipart the file is past the storage provider's single-PUT ceiling: split it into part_size-byte chunks and PUT each one to the matching entry of part_urls (index 0 is part 1, the last part may be shorter). Collect each response's ETag header and post them to POST /videos/upload/multipart/complete.
Max file size comes from your plan — a FILE_TOO_LARGE response reports the effective ceiling in max_size. Extensions: .mp4, .mov, .webm, .mkv.
Authorization
apiKey In: header
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/videos/upload" \ -H "Content-Type: application/json" \ -d '{ "file_name": "string", "file_size": 0 }'{ "mode": "single", "video_id": "string", "upload_url": "string", "expires_in": 0}Get credit history GET
Returns the credit transaction ledger for this workspace, newest first. Each row shows the delta (`amount`, negative for debits), the resulting balance, and what caused it (`reference_type` + `reference_id`) so you can reconcile against submissions, renewals, refunds, and bonuses.
Finalize a multipart upload POST
Assembles the uploaded parts into the final object. Only needed when `POST /videos/upload` answered with `mode: "multipart"`. After this succeeds, call `POST /videos/upload/complete` to register the video.