Complete a multipart upload
Complete a multipart upload
/v1/videos/{id}/upload/completeThis operation supports dashboard session-cookie authentication. Call it only from trusted server code; browsers must not manufacture or expose the session cookie.
Step 3 of the upload flow. The server loads the part ledger written by
the upload endpoint (a client parts array is rejected), completes the
multipart upload, verifies the object, and transitions the video to
uploaded. A completion checksumSha256 that differs from a checksum
already durably declared for this upload is rejected with
409 checksum_conflict before the multipart completion runs, so a
conflicting checksum never finalizes the object; an identical value is
accepted. Requires an API key with write scope, or session-cookie
auth plus projectId. Rate limit: 60 requests per 60 s per caller.
Error codes: unauthorized (401), insufficient_scope (403),
account_not_approved (403), invalid_project_id (400),
not_found (404), video_not_found (404), invalid_body (400),
invalid_checksum_sha256 (400), parts_missing (409),
checksum_mismatch (400), checksum_conflict (409),
upload_already_completed (409),
upload_completion_in_progress (409).
Authentication
- apiKey — Project API key:
Authorization: Bearer vh_live_...(live mode) orAuthorization: Bearer vh_test_...(test mode). Keys carryreadand/orwritescopes. - sessionCookie — Dashboard session cookie set by
POST /v1/auth/login. Video and playback endpoints additionally require theprojectIdquery parameter under cookie auth.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string (Ulid) | Yes | — |
Request body
optional
Content type: application/json
Schema: UploadCompleteRequest
{
"checksumSha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}Responses
| Status | Meaning |
|---|---|
200 | Upload completed; the video is uploaded and queued for encoding. |
400 | The request body or query failed validation. The per-operation description lists the exact error.code values. |
401 | No valid credential was presented. |
403 | The credential is valid but does not permit this action. The per-operation description lists the exact error.code values. |
404 | The resource does not exist or is not visible to this caller. |
409 | The request conflicts with the resource's current state. The per-operation description lists the exact error.code values. |
429 | Rate limit exceeded. |
Example request
{
"checksumSha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}Try it
/v1/videos/{id}/upload/completeAPI playground
Send a live request to api.videohati.com with a test-mode key.
The key is stored in your browser on docs.videohati.com only.
https://api.staging.videohati.com/v1/videos/{id}/upload/complete