# Create upload part URLs

`POST https://api.cademi.com.br/api/v3/uploads/{upload_id}/parts`

Operation ID: `uploads.parts.create` · API v3

Returns presigned URLs for uploading the requested parts of an open upload session.

Send each part with a `PUT` request directly to its URL; the content never passes through the API. Each URL is valid for 15 minutes. Keep the `ETag` returned by the storage service for each part, because it is required to complete the upload.

Presigned URLs are short-lived secrets. Do not log or share them.

Required permissions: `files.write`.

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `upload_id` | path | string | yes |  |

## Request body

Content type: `application/json`, required.

| Field | Type | Required | Description |
|---|---|---|---|
| `part_numbers` | array of integer | yes |  |

## Responses

### 201

Returns one presigned URL for each requested part.

Body: `data`: array of UploadPartUrl.

Fields of UploadPartUrl:

| Field | Type | Required | Description |
|---|---|---|---|
| `expires_at` | string (date-time) | yes |  |
| `method` | string, one of `PUT` | yes |  |
| `object` | string, one of `upload_part_url` | yes |  |
| `part_number` | integer | yes |  |
| `url` | string | yes |  |

### 401

The credential is missing, malformed, expired, or revoked.

Body: Error.

### 403

The current credentials do not have the permission required by this operation.

Body: Error.

### 404

The upload session was not found or is not accessible with the current credentials.

Body: Error.

### 409

The upload session is no longer open because it was already completed, cancelled, failed, or expired. Returns the state_conflict error code.

Body: Error.

### 422

The request body or query parameters failed validation.

Body: ValidationFailed.

### 503

The storage service is temporarily unavailable. Retry the request with backoff.

Body: Error.

Full schema: https://cademi.dev/openapi/v3.json
