---
title: "Finalize a file upload against a session"
method: POST
path: "/upload-sessions/{token}/files/{assetId}/complete"
tags: ["Upload Sessions"]
---

# Finalize a file upload against a session

`POST /upload-sessions/{token}/files/{assetId}/complete`

Verifies the uploaded object landed in storage and marks the asset ready. assetId must have been returned by a prior POST to this same session.

## Path parameters

- `token` string, required — Upload session bearer token
- `assetId` string, required — Asset ID returned by POST /files

## Request body

- object
  - `parts` object[] — Multipart part etags (required for multipart uploads)
    - `partNumber` integer, required
    - `etag` string, required

## Response `200`

Asset finalized and ready

- object
  - `data` object, required
    - `id` string, required — Asset ID
    - `filename` string, nullable, required — Display filename
    - `status` string, required — pending | uploading | ready | failed | expired
    - `url` string — Stable content URL — present only once the asset is ready

## Other responses

- `400` — Multipart completion is missing part etags
- `404` — Unknown token, or assetId not tracked by this session
- `409` — Asset is not in a finalizable state, or the upload was not found in storage
- `410` — Session expired or no longer active
- `413` — Uploaded file exceeds the org's plan size limit

## Changes

- **2026-08-29** `4d10ec4266ee` — 1 info
  - api operation id `completeUploadSessionFile` was added
- **2026-07-26** `ad4351c79853` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rendobar/apis/rendobar-api/changes/upload-sessions/:token/files/:assetId/complete/post.md)

---

[API](https://skmtc.dev/rendobar/apis/rendobar-api.md) · [All operations](https://skmtc.dev/rendobar/apis/rendobar-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rendobar/rendobar-api/revisions/4d10ec4266ee/schema)
