---
title: "Upload a direct-upload part"
method: PUT
path: "/api/v1/projects/{projectId}/upload/parts/{partNumber}"
tags: ["Sources"]
---

# Upload a direct-upload part

`PUT /api/v1/projects/{projectId}/upload/parts/{partNumber}`

## Request

- Base URL: `https://prismclip.com`
- URL: `https://prismclip.com/api/v1/projects/{projectId}/upload/parts/{partNumber}`
- Auth: HTTP bearer

Stream exactly the expected bytes for one multipart part. Send the opaque upload session ID in X-PrismClip-Upload-Id and retain the returned ETag. Binary transfer is available through REST and is intentionally omitted from MCP tools.

## Path parameters

- `projectId` string, uuid, required
- `partNumber` integer, required: Sequential multipart part number

## Headers

- `X-PrismClip-Upload-Id` string, required: Opaque multipart upload session ID returned when the project was created

## Response `200`

The uploaded part number and ETag required for completion.

- object
  - `partNumber` integer, required
  - `etag` string, required

## Other responses

- `400`: The part number or byte count is invalid.
- `401`: The API key is missing or invalid.
- `403`: The API key lacks projects:write.
- `404`: The owned project was not found.
- `409`: The upload session or project state does not match.
- `429`: The API-key rate limit was exceeded.
- `503`: Project or object storage is unavailable.

---

[API](https://skmtc.dev/prismclip/apis/prismclip-api.md) · [All operations](https://skmtc.dev/prismclip/apis/prismclip-api/llms.txt) · [OpenAPI document](https://skmtc.dev/prismclip/apis/prismclip-api/revisions/05eda9436f1d?raw)
