Lewati ke konten
kenari.

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:

Terminal window
curl -s https://kenari.id/v1/models \
| jq '.data[] | select(.endpoints | index("audio_transcription")) | {id, pricing_lines}'

Request-nya multipart/form-data.

FieldTipeWajibKeterangan
modelstringyaId model speech to text, misalnya whisper-large-v3-turbo.
filefileyaAudio yang akan ditranskripsi.
languagestringtidakKode bahasa audio, misalnya id atau en. Dideteksi otomatis kalau dikosongkan.
promptstringtidakTeks yang memandu ejaan nama dan istilah atau gaya transkrip.
temperaturenumbertidakSuhu sampling. Diteruskan ke provider apa adanya.
response_formatstringtidakjson (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.

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 memakai recording.mp3. Ganti dengan path rekamanmu sendiri.

Terminal window
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"
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)
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);

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.

StatusKodeKapan
400bad_requestModel bukan model speech to text, file atau model tidak ada, body multipart rusak atau terpotong, atau provider menolak audionya.
413tidak adaBody request di atas 32 MiB. Response-nya teks biasa.

Kode bersama, seperti insufficient_balance dan all_providers_failed, ada di Error.