# Video Transcription API

> Ekstrak transkrip tingkat kata dengan diarisasi pembicara (label pembicara) dari konten video atau audio.

## Video Transcription API

Kirimkan video atau file audio dan terima transkrip tingkat kata dengan diarisasi pembicara (setiap segmen diberi label pembicara yang terdeteksi). API ini mendukung video dari platform utama dan file video/audio yang diunggah secara lokal, beserta pengaturan bahasa.

## Sumber Video yang Didukung

API menerima URL dari platform berikut: YouTube, Vimeo, Dailymotion, Kick, Twitch, TikTok, Facebook, Zoom, Rumble, dan lainnya.

Anda juga dapat mentranskripsi [file audio atau video lokal yang Anda unggah](https://wayin.ai/id/api-docs/upload/) — unggah lokal memerlukan langganan **Starter** atau lebih tinggi.

### Alur Kerja

1. **Kirim** tugas transkripsi dari URL video
2. **Polling** hasil hingga status menjadi `SUCCEEDED`

---

## Kirim Tugas Transkripsi

Kirimkan tugas transkripsi baru dari URL video atau audio.

```
POST https://wayinvideo-api.wayin.ai/api/v2/transcripts
```

### Body Permintaan

| Parameter | Tipe | Wajib | Default | Deskripsi |
|-----------|------|-------|---------|-----------|
| `video_url` | string | Ya | — | URL video/audio sumber atau identifier file yang diunggah |
| `source_lang` | string | Tidak | `null` | Bahasa sumber video (lihat [Bahasa yang Didukung](https://wayin.ai/id/api-docs/supported-languages/)). Jika `null`, sistem mendeteksi bahasa asli secara otomatis. |
| `target_lang` | string | Tidak | `null` | Bahasa target untuk transkrip (lihat [Bahasa yang Didukung](https://wayin.ai/id/api-docs/supported-languages/)). Jika `null`, tidak ada penerjemahan yang diterapkan. Jika `target_lang` berbeda dari bahasa asli video, transkrip akan diterjemahkan secara otomatis ke bahasa target. |

### Contoh Permintaan

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/transcripts \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -d '{
    "video_url": "https://www.youtube.com/watch?v=example",
    "target_lang": "en"
  }'
```

```python
import requests

requests.post(
    "https://wayinvideo-api.wayin.ai/api/v2/transcripts",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "x-wayinvideo-api-version": "v2",
    },
    json={
        "video_url": "https://www.youtube.com/watch?v=example",
        "target_lang": "en",
    },
)
```

```javascript
await fetch("https://wayinvideo-api.wayin.ai/api/v2/transcripts", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "x-wayinvideo-api-version": "v2",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    video_url: "https://www.youtube.com/watch?v=example",
    target_lang: "en",
  }),
});
```

### Respons

```json
{
  "data": {
    "id": "trans_proj_001",
    "name": "sample project name",
    "status": "CREATED"
  }
}
```

| Field | Tipe | Deskripsi |
|-------|------|-----------|
| `id` | string | Identifier tugas (digunakan untuk mengambil hasil) |
| `name` | string | Nama tugas |
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |

---

## Contoh

Skenario transkripsi yang umum. Ganti `YOUR_API_KEY` dengan kunci dari [API Dashboard](https://wayin.ai/wayinvideo/api-dashboard).

### Transkripsikan video YouTube

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/transcripts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{"video_url": "https://www.youtube.com/watch?v=EXAMPLE"}'
```

### Transkripsikan podcast dengan beberapa pembicara

Berikan URL audio podcast apa pun (atau [identifier file yang diunggah](https://wayin.ai/id/api-docs/upload/)) — diarisasi pembicara berjalan otomatis; setiap segmen dalam respons membawa label `speaker`.

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/transcripts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{"video_url": "https://www.youtube.com/watch?v=EXAMPLE"}'
```

### Terjemahkan transkrip non-Inggris ke bahasa Inggris

Atur `target_lang` untuk menerjemahkan secara langsung. Gabungkan dengan `source_lang` jika Anda sudah mengetahui bahasa sumbernya.

```bash
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/transcripts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://www.youtube.com/watch?v=EXAMPLE",
    "source_lang": "ja",
    "target_lang": "en"
  }'
```

---

## Ambil Hasil Transkripsi

Ambil transkrip dengan stempel waktu tingkat kata dan label pembicara. Lakukan polling hingga `status` menjadi `SUCCEEDED`.

```
GET https://wayinvideo-api.wayin.ai/api/v2/transcripts/results/{id}
```

### Parameter Path

| Parameter | Tipe | Wajib | Deskripsi |
|-----------|------|-------|-----------|
| `id` | string | Ya | ID tugas yang dikembalikan oleh endpoint pengiriman |

### Contoh Permintaan

```bash
curl -X GET https://wayinvideo-api.wayin.ai/api/v2/transcripts/results/trans_proj_001 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-wayinvideo-api-version: v2"
```

### Respons

```json
{
  "data": {
    "status": "SUCCEEDED",
    "cost_usage": 27.0,
    "transcript": [
      {
        "text": "Welcome to today's presentation",
        "language": null,
        "start": 200,
        "end": 4500,
        "speaker": "Speaker 1"
      },
      {
        "text": "Thanks for coming",
        "language": null,
        "start": 5000,
        "end": 8200,
        "speaker": "Speaker 2"
      }
    ]
  }
}
```

### Field Respons

| Field | Tipe | Deskripsi |
|-------|------|-----------|
| `status` | string | `CREATED`, `QUEUED`, `ONGOING`, `SUCCEEDED`, `FAILED` |
| `error_message` | string | Alasan error (hanya ada saat `status` adalah `FAILED`) |
| `cost_usage` | number | Kredit API yang digunakan untuk permintaan ini |
| `transcript` | array | Daftar segmen transkrip (lihat di bawah) |

### Segmen Transkrip

| Field | Tipe | Deskripsi |
|-------|------|-----------|
| `text` | string | Teks yang ditranskripsikan |
| `language` | string \| null | Kode bahasa yang terdeteksi, atau `null` jika tidak terdeteksi |
| `start` | integer | Waktu mulai dalam milidetik |
| `end` | integer | Waktu berakhir dalam milidetik |
| `speaker` | string | Label pembicara (mis. `"Speaker 1"`) |


---

## FAQ

### Berapa panjang video maksimum?

Tidak ada batasan panjang yang tegas. API ini mendukung klip pendek maupun konten video atau audio berdurasi panjang dari platform sumber yang didukung.

### Apakah API mengembalikan stempel waktu tingkat kata?

Ya. Setiap segmen transkrip menyertakan stempel waktu `start` dan `end` dalam milidetik, `text` yang ditranskripsikan, `language` yang terdeteksi, dan label `speaker` yang diberikan dari diarisasi pembicara.

### Bagaimana cara kerja diarisasi pembicara?

Pembicara dideteksi dan diberi label secara otomatis (`Speaker 1`, `Speaker 2`, …) per segmen. Tidak ada konfigurasi yang diperlukan — diarisasi berjalan pada setiap tugas transkripsi.

### Format audio dan video apa saja yang didukung?

URL sumber didukung dari YouTube, Vimeo, Dailymotion, Kick, Twitch, TikTok, Facebook, Zoom, Rumble, dan lainnya. Untuk unggahan lokal, kirim `mp4`, `mov`, `webm`, atau `avi` (file audio-saja dapat di-mux ke salah satu kontainer ini).

### Bisakah saya menerjemahkan transkrip ke bahasa lain?

Bisa — berikan parameter `target_lang`. Transkrip diterjemahkan ketika `target_lang` berbeda dari bahasa sumber. Lihat [Bahasa yang Didukung](https://wayin.ai/id/api-docs/supported-languages/) untuk daftar lengkap kode bahasa.
