VideohatiDocs
API referenceVideos

Complete a multipart upload

Complete a multipart upload

POST/v1/videos/{id}/upload/complete

This 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) or Authorization: Bearer vh_test_... (test mode). Keys carry read and/or write scopes.
  • sessionCookie — Dashboard session cookie set by POST /v1/auth/login. Video and playback endpoints additionally require the projectId query parameter under cookie auth.

Parameters

NameInTypeRequiredDescription
idpathstring (Ulid)Yes

Request body

optional

Content type: application/json

Schema: UploadCompleteRequest

{
  "checksumSha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}

Responses

StatusMeaning
200Upload completed; the video is uploaded and queued for encoding.
400The request body or query failed validation. The per-operation description lists the exact error.code values.
401No valid credential was presented.
403The credential is valid but does not permit this action. The per-operation description lists the exact error.code values.
404The resource does not exist or is not visible to this caller.
409The request conflicts with the resource's current state. The per-operation description lists the exact error.code values.
429Rate limit exceeded.

Example request

{
  "checksumSha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
}

Try it

POST
/v1/videos/{id}/upload/complete
Test mode only

API playground

Send a live request to api.videohati.com with a test-mode key.

This playground blocks vh_live_ keys. Use a key that starts with vh_test_ only; a request with a live key never leaves your browser.

The key is stored in your browser on docs.videohati.com only.

https://api.staging.videohati.com/v1/videos/{id}/upload/complete