---
title: "Upload a file part"
method: PUT
path: "/files/uploads/{upload_id}/parts/{part_number}"
tags: ["Files"]
---

# Upload a file part

`PUT /files/uploads/{upload_id}/parts/{part_number}`

## Request

- Base URL: `https://app.gc.ai/api/external/v1`
- URL: `https://app.gc.ai/api/external/v1/files/uploads/{upload_id}/parts/{part_number}`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/gc-ai/apis/gc-ai-external-api/docs/files/uploads/:upload_id/parts/:part_number/put.ts> (a function with typed inputs; its response is checked against the schema)

Upload one part of a chunked upload. The request body is the raw bytes of the part (`application/octet-stream`). Parts may be uploaded in any order; re-sending the same `part_number` overwrites it, so a failed part is safe to retry.

## Path parameters

- `upload_id` string, uuid, required: The upload session ID from initiate.
- `part_number` integer, required: Part index, from 1 to 32.

## Request body `application/octet-stream`

- string, binary

## Response `200`

Part stored

- UploadPartResponse
  - `upload_id` string, uuid, required
  - `part_number` number, required: The part just stored.
  - `size` number, required: Bytes received for this part.

## Other responses

- `400`: Empty part body or part number out of range
- `401`: Missing or malformed API key
- `403`: Invalid API key
- `404`: Upload session not found or expired
- `429`: Rate limit exceeded. See [Rate Limits](https://docs.gc.ai/api-reference/concepts/rate-limits) for the tiers, limits, and how to back off.
- `500`: Internal server error
- `503`: Service temporarily unavailable

---

[API](https://skmtc.dev/gc-ai/apis/gc-ai-external-api.md) - [All operations](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/revisions/2bbdfddf7107?raw)
