---
title: "Complete a multipart upload"
description: "Validates parts server-side and starts transcription. May return 200 or 202."
canonical: "https://verbafy.io/docs/api/uploads/complete-transcript-upload"
last-updated: "2026-09-23"
---

# Complete a multipart upload

Validates parts server-side and starts transcription. May return 200 or 202.

`POST /api/v1/transcript-uploads/{id}/complete`

OpenAPI operation `completeTranscriptUpload`. Authenticate with a Clerk session JWT (`Authorization: Bearer {jwt}`) or the `verbafy_guest_session` cookie. `{jwt}` is a Clerk session token after you sign in on the website. Verbafy does not issue that token and does not show it in Settings. For scripts and agents, sign in, create an API key at [Settings → API keys](/app/settings/api-keys), and call Remote MCP with `Authorization: Bearer sk-…`. Credential setup: [Auth.md](/auth.md). Machine-readable contract: [OpenAPI](/openapi.json).

## curl

```curl
curl -X POST 'https://verbafy.io/api/v1/transcript-uploads/{id}/complete' \
  -H 'Authorization: Bearer {jwt}' \
  -H 'Content-Type: application/json' \
  -d '{"parts":[{"partNumber":1,"etag":"part-etag"}]}'
```

## JavaScript

```javascript
const response = await fetch('https://verbafy.io/api/v1/transcript-uploads/{id}/complete', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer {jwt}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"parts":[{"partNumber":1,"etag":"part-etag"}]})
});
```

## Python

```python
import httpx

response = httpx.post(
    "https://verbafy.io/api/v1/transcript-uploads/{id}/complete",
    headers={"Authorization":"Bearer {jwt}","Content-Type":"application/json"},
    json={"parts":[{"partNumber":1,"etag":"part-etag"}]},
)
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://verbafy.io/#organization",
      "name": "Verbafy",
      "url": "https://verbafy.io",
      "inLanguage": "en",
      "knowsAbout": [
        "YouTube transcription",
        "Spotify episode transcription",
        "Meeting recording transcription",
        "Speaker diarization",
        "Transcript export"
      ],
      "hasOfferCatalog": {
        "@id": "https://verbafy.io/pricing#offers"
      },
      "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer support",
        "email": "support@verbafy.io",
        "url": "https://verbafy.io/contact"
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://verbafy.io/docs/api/uploads/complete-transcript-upload#page",
      "name": "Complete a multipart upload",
      "description": "Validates parts server-side and starts transcription. May return 200 or 202.",
      "url": "https://verbafy.io/docs/api/uploads/complete-transcript-upload",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://verbafy.io/#website"
      },
      "publisher": {
        "@id": "https://verbafy.io/#organization"
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://verbafy.io"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Complete a multipart upload",
          "item": "https://verbafy.io/docs/api/uploads/complete-transcript-upload"
        }
      ]
    }
  ]
}
```
