Skip to main content
POST
Complete a Direct Blob Upload
Finishes a direct upload. The API checks that every part is stored, that the total size matches, that the checksum matches if you sent one, and that the content isn’t an executable. Then it creates the object and returns it. Until this call succeeds, the object doesn’t exist. Scope: blob:write. Accepts an upload token. Upload token: this route also accepts an upload token (Authorization: Bearer vcup_...) instead of an API key.
string
required
The upload ID.
string
The workspace ID, when the blob belongs to a workspace. The call acts on the blob of the workspace owner and needs the blob:read workspace permission (blob:manage on routes that change data). Leave it out to act on your own blob.

Example request

Response

object
The created blob object.

Error Responses

string
The error code indicating the reason for failure. Possible values:
  • AUTH_TOKEN_MISSING (401): No Authorization header was sent.
  • API_KEY_INVALID (401): The API key doesn’t exist, was revoked, or its secret doesn’t match.
  • API_KEY_SCOPE_DENIED (403): The key lacks the scope this route needs (blob:read or blob:write); details.required names it.
  • WORKSPACE_PERMISSION_DENIED (403): Only with workspace_id: you’re not a member, or your role lacks the blob permission.
  • WORKSPACE_NOT_FOUND (404): Only with workspace_id: no workspace with that ID, or you’re not a member.
  • BLOB_UPLOAD_TOKEN_INVALID (401): The upload token doesn’t exist, has expired or was revoked (only with an upload token).
  • BLOB_UPLOAD_NOT_FOUND (404): No upload with that ID in this account, or it was already completed or aborted.
  • BLOB_UPLOAD_EXPIRED (410): The upload’s time limit has passed. Start a new upload.
  • BLOB_UPLOAD_INCOMPLETE (409): Parts are missing, or the stored size differs from the declared size.
  • BLOB_CHECKSUM_MISMATCH (400): The stored content doesn’t match the checksum_sha256 sent at start.
  • BLOCKED_FILE_TYPE (422): The content is an executable, detected from its bytes.
  • BLOB_OBJECT_ALREADY_EXISTS (409): path was taken by another object while the upload was running, and overwrite is not true.