io.atcr.hold.completeUpload
{
"$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
}
Metadata
- DID
-
did:plc:wfj5kyialpmcv2fzk6uqwsln - CID
-
bafyreigbfwzy6rrzrfovlceev2me7wvcw4cgul5f23daxylzzo5776ifry - Indexed At
- 2026-02-18 19:28 UTC
- AT-URI
-
at://did:plc:wfj5kyialpmcv2fzk6uqwsln/com.atproto.lexicon.schema/io.atcr.hold.completeUpload
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
io.atcr.hold.initiateUpload procedure
Start a new multipart upload session for an OCI blob. Returns an uploadId to be used with subsequent part upload and completion endpoints.
-
Finish an upload. This call is idempotent and safe to retry. On deduplication completedJobId may differ from the input jobId; poll getJobStatus with completedJobId. Probe-based validation failures surface later as JOB_S…
-
Upload one part. Parts are idempotent and may be retried or re-sent while the session is created. Each expected length is derived from the upload size and part size, and Content-Length must match exactly. ETags are neve…
-
io.atcr.hold.getPartUploadUrl procedure
Get a presigned URL or endpoint info for uploading a specific part of a multipart upload.