# Finish a multipart upload
`POST https://octopus.livepush.io/streams/{stream_id}/videos/uploadurl/multipart/finish`
Completes the multipart upload by listing every uploaded part with its `ETag`. The object only becomes readable once this succeeds.

The body is the storage provider's completion record, passed through unchanged.

Requires a token with the `streams.videos.write` scope.
- **Tag:** Videos
- **Operation ID:** `finishMultipartVideoUpload`
- **Authentication:** Bearer token required
- **Docs:** https://developers.livepush.io/videos/finish-a-multipart-upload/

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `stream_id` | string | yes | Unique identifier of the stream. |


### Request body

`application/json` (required)

- `Key` (string) **required**
- `uploadId` (string) **required**
- `parts` (object[]) **required** — The uploaded parts, each with its part number and ETag.
  - `PartNumber` (integer)
  - `ETag` (string)
- `zone` (string) **required**


```json
{
  "Key": "string",
  "uploadId": "string",
  "parts": [
    {
      "PartNumber": 1,
      "ETag": "string"
    }
  ],
  "zone": "eu-central"
}
```


### Example request

```bash
curl -X POST 'https://octopus.livepush.io/streams/st_xxxxxxxxxxxxx/videos/uploadurl/multipart/finish' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "Key": "string",
    "uploadId": "string",
    "parts": [
      {
        "PartNumber": 1,
        "ETag": "string"
      }
    ],
    "zone": "eu-central"
  }'
```


### Responses


#### 200 — Finish a multipart upload.

- `Location` (string) — Final object URL.
- `Bucket` (string)
- `Key` (string)
- `ETag` (string)


```json
{
  "Location": "string",
  "Bucket": "string",
  "Key": "string",
  "ETag": "string"
}
```


#### 401 — Response


#### 404 — Not found for this account.

