---
title: "Complete Multipart Upload Target"
method: POST
path: "/api/workspace/uploads/multipart/complete"
tags: ["runtime_mutations", "workspace-uploads"]
---

# Complete Multipart Upload Target

`POST /api/workspace/uploads/multipart/complete`

Assemble an upload's parts into the object.

Answers with the assembled object's ETag, which the client then sends on
``/uploads/complete`` like any other upload's. That is the whole reason this
route stops at "the object exists": verification and delivery stay in one
place for both transports.

## Request body

- MultipartCompleteRequest
  - `relative_path` string, required
  - `upload_id` string, nullable
  - `s3_upload_id` string, required
  - `parts` CompletedPart[], required
    - `part_number` integer, required
    - `etag` string, required

## Response `200`

Successful Response

- MultipartCompleteResponse
  - `relative_path` string, required
  - `etag` string, nullable, required

## 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)
