---
title: "Finish a direct video upload"
method: POST
path: "/v1/videos/uploads/complete"
tags: ["Videos"]
---

# Finish a direct video upload

`POST /v1/videos/uploads/complete`

## Request

- Base URL: `https://nanostudiopro.com/api`
- URL: `https://nanostudiopro.com/api/v1/videos/uploads/complete`
- Auth: HTTP bearer

Closes the upload, checks the real size, counts it against your storage, cuts a poster and adds the clip to your library. Returns the clip with its `permanent_url`, and `index` when indexing was asked for.

## Request body

- object
  - `upload_token` string, required
  - `parts` object[], required
    - `n` integer
    - `etag` string

## Response `201`

The clip: `id`, `video_path`, `size`, `duration_sec`, `width`, `height`, `permanent_url`, `metadata`, `task_id`, `index`, `index_error`, and `versions` when the same footage is already in your library (`relation: "larger"` = a bigger file, e.g. the raw original).

## Other responses

- `400`: Missing parts, size mismatch, or not readable as video
- `401`: Missing or invalid token
- `402`: Your space filled up during the upload
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api.md) · [All operations](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nanostudiopro/apis/nano-studio-pro-api/revisions/b454211e598e?raw)
