---
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
    - `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/c53108d35a70/schema)
