---
title: "Upload Assembly File"
method: POST
path: "/api/v1/projects/{project_id}/assembly-file/upload"
tags: ["assembly-files"]
---

# Upload Assembly File

`POST /api/v1/projects/{project_id}/assembly-file/upload`

Stream an assembly file to R2 server-side (firewall-safe upload proxy).

Replaces the browser's direct PUT to ``*.r2.cloudflarestorage.com``.
The client POSTs the file as ``multipart/form-data`` to this endpoint;
the API streams it straight to R2. The client must still call
``POST /confirm-upload`` afterwards.

Authorization: the project must be owned by the current user, the
project status must still allow mutations, and the assembly file row
(created by ``/initiate-upload``) must be in UPLOADING status. The
file is written to the row's stored ``r2_key`` — the client cannot
choose an arbitrary key.

## Path parameters

- `project_id` string, uuid, required

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/prototyping/apis/prototyping-io-api.md) · [All operations](https://skmtc.dev/prototyping/apis/prototyping-io-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/prototyping/prototyping-io-api/revisions/f4a0079fbb57/schema)
