---
title: "Complete Uploads"
method: POST
path: "/api/workspace/uploads/complete"
tags: ["runtime_mutations", "workspace-uploads"]
---

# Complete Uploads

`POST /api/workspace/uploads/complete`

Verify the uploaded keys, then get them in front of the workspace.

What "in front of" means is the difference between the two planes. On the
canonical plane the bytes are already where the browser reads them, so this
only nudges running boxes to refresh. On the transfer plane they are in a
staging bucket the browser cannot see, so the box has to fetch them before
the upload exists as far as the user is concerned.

## Request body

- CompleteUploadsRequest
  - `files` CompletedUploadClaim[], required
    - `relative_path` string, required
    - `upload_id` string, nullable
    - `etag` string, nullable
    - `size` integer, nullable
    - `mtime_ns` integer, nullable

## Response `200`

Successful Response

- CompleteUploadsResponse
  - `files` CompletedUpload[], required
    - `relative_path` string, required
    - `verified` boolean, required
    - `upload_id` string, nullable
    - `reason` 'ok' | 'invalid_path' | 'store_error' | 'absent' | 'mismatch' — Why a claim verified or not. ``verified: bool`` alone collapses outcomes the client must tell apart: an absent key means the bytes are not durable ("failed"), an ETag or corroboration mismatch means the object at the key is not the claimant's, while a transient store error leaves durable bytes merely unconfirmed ("still syncing"). Kept alongside ``verified`` rather than replacing it so older clients keep working.
    - `pull_requested` boolean
    - `final_path` string, nullable
  - `boxes_pulled` integer, nullable
  - `scheduled` integer, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/quadrillion/apis/quadrillion-cloud-api.md) · [All operations](https://skmtc.net/quadrillion/apis/quadrillion-cloud-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/quadrillion/quadrillion-cloud-api/revisions/f90b0af01f1e/schema)
