---
title: "Complete upload and start transcription"
method: POST
path: "/uploads/{id}/complete"
tags: ["Uploads"]
---

# Complete upload and start transcription

`POST /uploads/{id}/complete`

Submit every part number and S3 ETag in ascending order. The API completes the S3 multipart upload, verifies the actual object size, and queues ElevenLabs Scribe transcription.

## Request body

- UploadCompleteRequest
  - `parts` object[], required
    - `partNumber` integer, required
    - `etag` string, required

## Response `202`

Upload accepted for transcription

- UploadOperationResponse
  - `id` string, required
  - `status` 'initiated' | 'uploading' | 'uploaded' | 'processing' | 'awaiting_credits' | 'completed' | 'failed' | 'aborted', required
  - `requiredCredits` integer
  - `additionalCredits` integer

## Other responses

- `400` — Invalid request
- `401` — Missing or invalid API key
- `404` — Resource not found
- `413` — Uploaded object does not match the declared size or exceeds 3 GB
- `429` — Rate limit exceeded
- `500` — Internal server error

## Changes

- **2026-08-09** `fff36efa50d3` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/mediacaption/apis/media-caption-public-api/changes/uploads/:id/complete/post.md)

---

[API](https://skmtc.dev/mediacaption/apis/media-caption-public-api.md) · [All operations](https://skmtc.dev/mediacaption/apis/media-caption-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/mediacaption/media-caption-public-api/revisions/fff36efa50d3/schema)
