Skip to main content

Complete Upload

POST 

/v1/:slug/assets/upload_complete

Final Step of Asset Upload Process

This endpoint completes the asset upload process by creating the Asset record in Playbook's database. Call this after successfully uploading the file to cloud storage.

What this endpoint does:

  1. Verifies the signed_gcs_id from upload_prepare
  2. For Backblaze multipart: completes the multipart upload using multipart_upload_id
  3. Confirms the file exists in cloud storage
  4. Creates the Asset record in Playbook's database
  5. Triggers background processing (thumbnails, transcoding, etc.)
  6. Returns the complete Asset object with URLs and metadata

For GCS Organizations

After completing the 4-step GCS upload flow:

POST /v1/{org_slug}/assets/upload_complete
Headers:
Authorization: Bearer {your_access_token}
Content-Type: application/json
Body:
{
"asset": {
"signed_gcs_id": "{value_from_upload_prepare}",
"title": "my-image.jpg",
"description": "Optional description",
"collection_token": "optional_collection_token"
}
}

For Backblaze Organizations

Single-Part Upload (no multipart_upload_id):

POST /v1/{org_slug}/assets/upload_complete
Body:
{
"asset": {
"signed_gcs_id": "{value_from_upload_prepare}",
"title": "my-image.jpg"
}
}

Multipart Upload (has multipart_upload_id):

POST /v1/{org_slug}/assets/upload_complete
Body:
{
"asset": {
"signed_gcs_id": "{value_from_upload_prepare}",
"multipart_upload_id": "{value_from_upload_prepare}",
"title": "my-large-video.mp4"
}
}

Required Parameters:

  • signed_gcs_id: Always required - exact value from upload_prepare response
  • multipart_upload_id: Required only for Backblaze multipart uploads (files >= 5MB)

Important:

  • Do not URL-encode or modify the signed_gcs_id
  • This step is required - without it, the file exists in storage but not in Playbook
  • For Backblaze multipart: ensure all parts uploaded before calling this endpoint

Request

Responses

Asset upload completed successfully