io.atcr.hold.completeUpload
Finalize a multipart upload and move the assembled blob to its final location.
Details · procedure
| Kind | procedure |
|---|---|
| Authority | hold.atcr.io |
| Indexed |
Checks
Valid Lint pass{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "Finalize a multipart upload and move the assembled blob to its final location.",
"errors": [
{
"name": "InvalidUploadId"
},
{
"name": "InvalidDigest"
},
{
"name": "MissingParts"
},
{
"name": "CompletionFailed"
}
],
"input": {
"encoding": "application/json",
"schema": {
"properties": {
"digest": {
"description": "Final blob digest (e.g., sha256:abc123...)",
"maxLength": 128,
"type": "string"
},
"parts": {
"description": "List of uploaded parts with their ETags",
"items": {
"ref": "#partInfo",
"type": "ref"
},
"type": "array"
},
"uploadId": {
"description": "Upload session ID from initiateUpload",
"maxLength": 256,
"type": "string"
}
},
"required": [
"uploadId",
"digest",
"parts"
],
"type": "object"
}
},
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"digest": {
"description": "The digest of the completed blob",
"maxLength": 128,
"type": "string"
},
"status": {
"const": "completed",
"description": "Always 'completed' on success",
"maxLength": 16,
"type": "string"
}
},
"required": [
"status",
"digest"
],
"type": "object"
}
},
"type": "procedure"
},
"partInfo": {
"description": "Information about a completed upload part",
"properties": {
"etag": {
"description": "ETag returned when the part was uploaded",
"maxLength": 256,
"type": "string"
},
"partNumber": {
"description": "Part sequence number (1-indexed)",
"minimum": 1,
"type": "integer"
}
},
"required": [
"partNumber",
"etag"
],
"type": "object"
}
},
"id": "io.atcr.hold.completeUpload",
"lexicon": 1
}