Transkripsi
Ubah file audio menjadi teks. Endpoint ini kompatibel dengan OpenAI Audio Transcriptions, jadi SDK resmi OpenAI bisa dipakai dengan base URL https://kenari.id/v1. Hanya model speech to text yang dilayani di sini. Mengirim model lain mengembalikan 400.
POST /v1/audio/transcriptions
Daftar model speech to text bisa diambil dengan:
curl -s https://kenari.id/v1/models \ | jq '.data[] | select(.endpoints | index("audio_transcription")) | {id, pricing_lines}'Request
Section titled “Request”Request-nya multipart/form-data.
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
model | string | ya | Id model speech to text, misalnya whisper-large-v3-turbo. |
file | file | ya | Audio yang akan ditranskripsi. |
language | string | tidak | Kode bahasa audio, misalnya id atau en. Dideteksi otomatis kalau dikosongkan. |
prompt | string | tidak | Teks yang memandu ejaan nama dan istilah atau gaya transkrip. |
temperature | number | tidak | Suhu sampling. Diteruskan ke provider apa adanya. |
response_format | string | tidak | json (default), verbose_json atau text. |
kenari tidak memeriksa format audio. Format yang bisa dipakai bergantung pada modelnya. Seluruh request, termasuk file, boleh sampai 32 MiB, dan body yang lebih besar ditolak dengan 413. Provider punya waktu 120 detik untuk menjawab, jadi pecah rekaman yang sangat panjang menjadi beberapa file.
timestamp_granularities tidak didukung. Field lain diabaikan.
Response
Section titled “Response”Dengan json, atau kalau response_format dikosongkan, response hanya berisi teks:
{ "text": "Halo, ini adalah transkripsi audio." }Dengan verbose_json, response menambahkan task, language, duration dalam detik, dan segments dengan waktu setiap segmen. Field yang tidak dilaporkan model tidak muncul.
{ "text": "Halo, ini adalah transkripsi audio.", "task": "transcribe", "language": "id", "duration": 8.5, "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 3.2, "text": "Halo, ini adalah transkripsi audio.", "tokens": [50364, 1234], "temperature": 0.0, "avg_logprob": -0.28, "compression_ratio": 1.23, "no_speech_prob": 0.008 } ]}kenari menyusun ulang response dari field di atas, jadi field lain yang dikirim model tidak ikut diteruskan. Array words hanya muncul kalau model mengirimkannya.
Dengan text, body response berupa transkrip biasa, bukan JSON.
srt dan vtt tidak didukung. Keduanya mengembalikan response json default.
Contoh
Section titled “Contoh”Contoh memakai recording.mp3. Ganti dengan path rekamanmu sendiri.
curl https://kenari.id/v1/audio/transcriptions \ -H "Authorization: Bearer $KENARI_API_KEY" \ -F "file=@recording.mp3" \ -F "model=whisper-large-v3-turbo" \ -F "language=id"Python
Section titled “Python”import os
from openai import OpenAI
client = OpenAI( base_url="https://kenari.id/v1", api_key=os.environ["KENARI_API_KEY"],)
with open("recording.mp3", "rb") as audio: transcript = client.audio.transcriptions.create( model="whisper-large-v3-turbo", file=audio, language="id", )
print(transcript.text)JavaScript
Section titled “JavaScript”import fs from "node:fs";import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://kenari.id/v1", apiKey: process.env.KENARI_API_KEY,});
const transcript = await client.audio.transcriptions.create({ model: "whisper-large-v3-turbo", file: fs.createReadStream("recording.mp3"), language: "id",});
console.log(transcript.text);Penagihan
Section titled “Penagihan”Transkripsi ditagih per detik audio, dibulatkan ke atas. Saldo yang ditahan dihitung dari durasi yang diperkirakan kenari dari ukuran file, jadi request bisa gagal dengan 402 walau audionya pendek. Lihat Cara penagihan untuk cara penahanan dan penagihan, dan harga setiap model di Model & harga.
| Status | Kode | Kapan |
|---|---|---|
| 400 | bad_request | Model bukan model speech to text, file atau model tidak ada, body multipart rusak atau terpotong, atau provider menolak audionya. |
| 413 | tidak ada | Body request di atas 32 MiB. Response-nya teks biasa. |
Kode bersama, seperti insufficient_balance dan all_providers_failed, ada di Error.