Complete blob upload Run in API Explorer

PUT /v2/{name}/blobs/uploads/{uuid}

Complete the upload of a blob by finalizing an upload session.

This request must include the digest query parameter and optionally the last chunk of data. When the registry receives this request, it verifies the digest and stores the blob.

This endpoint supports:

  • Monolithic uploads (upload entire blob in this request)
  • Finalizing chunked uploads (last chunk plus digest)

Headers

  • Authorization string Required

Path parameters

  • name string Required

    Repository name

  • uuid string Required

    Upload session UUID returned from the POST request

Query parameters

  • digest string Required

    Digest of the uploaded blob

application/octet-stream

Body

string(binary) string(binary)

Responses

  • 201

    Upload completed successfully

    Hide headers attributes Show headers attributes
    • Docker-Content-Digest string

      Canonical digest of the stored blob

    • Location string

      URL where the blob is now accessible

    • Content-Length integer

      Always zero for completed uploads

  • 400

    Invalid digest or missing parameters

  • 401

    Authentication required

  • 403

    Access denied

  • 404

    Upload session not found

  • 416

    Requested range not satisfiable (if used in chunked mode)

  • 429

    Too many requests

PUT /v2/{name}/blobs/uploads/{uuid}
# PUT – complete upload (monolithic or final chunk)
curl -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @layer.tar.gz \
  "https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123?digest=sha256:abcd1234..."
curl \
 --request PUT 'https://registry-1.docker.io/v2/library/ubuntu/blobs/uploads/abc123?digest=sha256%3Aabcd1234...' \
 --header "Content-Type: application/octet-stream" \
 --header "Authorization: Bearer eyJhbGciOi..." \
 --data-binary '<binary data not shown>'
Request example
<binary data not shown>