Referensi API
Dokumentasi API
Transkrip berkas audio dan video secara terprogram. Real-time streaming, diarisasi speaker, AI summarization, 100+ bahasa.
Ringkasan
API STT.ai menyediakan transkripsi pidato-ke-teks, streaming real-time, dan summarisasi AI-powered. Semua permintaan langsung ke server API bertenaga GPU kami.
https://api.stt.ai
Format masukan yang didukung: MP3, WAV, FLAC, OGG, M4A, AAC, OPUS, WMA, MP4, WebM, MKV, AVI, MOV, WMV, MPEG. Ukuran berkas Max: 2GB.
Otentikasi
Kirim kunci API Anda pada tajuk Otorisasi sebagai token Pembawa:
Authorization: Bearer YOUR_API_KEY
Dapatkan kunci API Anda dari Pengaturan Akun. Permintaan anonim diperbolehkan dengan batas 3 transkripsi per hari per IP.
Batas Laju
| Tier | Transkripsi | Ukuran Berkas Max | Bersama |
|---|---|---|---|
| Anonim | 3/day per IP | 100 MB | 1 |
| Bebas (terdaftar) | 600 min/month | 500 MB | 2 |
| Rencana yang telah dibayar | Didasarkan pada kredit | 2 GB | 5 |
Kredit dikurangi berdasarkan durasi audio: 1 kredit = 1 menit audio, dibulatkan.
Titik Akhir
https://api.stt.ai/v1/transcribe
Upload an audio or video file for transcription with speaker diarization, language detection, and word-level timestamps.
Parameter Permintaan
Kirim sebagai multipart/form-data
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
file | file | Yes | — | Audio or video file |
model | string | No | large-v3-turbo | Model: large-v3-turbo, large-v3, medium, small |
language | string | No | auto | ISO 639-1 code or auto |
diarize | boolean | No | true | Enable speaker diarization |
speakers | integer | No | 0 | Expected speakers (0 = auto) |
response_format | string | No | json | json, txt, srt, vtt |
Respons (JSON)
{
"text": "Hello, welcome to the meeting...",
"language": "en",
"duration": 125.4,
"segments": [
{
"start": 0.0,
"end": 3.2,
"text": "Hello, welcome to the meeting.",
"speaker": "Speaker 1",
"confidence": 0.95,
"words": [
{"word": "Hello", "start": 0.0, "end": 0.4},
{"word": "welcome", "start": 0.5, "end": 0.9}
]
}
],
"speakers": ["Speaker 1", "Speaker 2"]
}
https://api.stt.ai/v1/summarize
Summarize transcript text using an on-device LLM. No data leaves our servers.
Isi Permintaan (JSON)
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
text | string | Yes | Transcript text to summarize |
style | string | No | brief (default), detailed, action_items, bullet_points |
Respons
{
"summary": "The team discussed Q3 revenue growth of 15%...",
"style": "brief",
"model": "qwen2.5-1.5b-instruct"
}
wss://api.stt.ai/v1/stream
Real-time speech-to-text via WebSocket. Send raw PCM audio (16-bit, 16kHz, mono) and receive transcription updates instantly.
Protokol
- Connect to
wss://api.stt.ai/v1/stream - Send JSON config:
{"language": "en", "model": "large-v3-turbo"} - Wait for
{"status": "ready"} - Stream raw PCM Int16 audio chunks (binary frames)
- Receive JSON updates:
{"text": "...", "partial": "..."} - Send
{"action": "stop"}to finalize
Pesan dari Server
| Kolom | Deskripsi |
|---|---|
status | "ready" — connection established, ready for audio |
partial | Partial/interim transcript (updates as you speak) |
text | Finalized transcript segment |
is_final | true when stream is complete |
https://api.stt.ai/v1/models
List all available transcription models. No authentication required.
{
"models": [
{"id": "large-v3-turbo", "name": "Whisper Large V3 Turbo", "languages": 99, "speed": "fast"},
{"id": "large-v3", "name": "Whisper Large V3", "languages": 99, "speed": "standard"},
{"id": "medium", "name": "Whisper Medium", "languages": 99, "speed": "fast"},
{"id": "small", "name": "Whisper Small", "languages": 99, "speed": "very_fast"}
]
}
https://api.stt.ai/v1/languages
List all supported languages with ISO codes. No authentication required.
{
"languages": [
{"code": "en", "name": "english"},
{"code": "es", "name": "spanish"},
{"code": "fr", "name": "french"},
...
]
}
https://api.stt.ai/health
Check GPU and API health. No authentication required.
{
"status": "ok",
"gpu_available": true,
"gpu_name": "NVIDIA A100",
"gpu_memory_mb": 8188
}
Contoh Kode
cURL
# Transcribe a file
curl -X POST https://api.stt.ai/v1/transcribe \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@meeting.mp3" \
-F "model=large-v3-turbo" \
-F "language=auto" \
-F "diarize=true"
# Get SRT subtitles
curl -X POST https://api.stt.ai/v1/transcribe \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@video.mp4" \
-F "response_format=srt" \
-o subtitles.srt
# Summarize text
curl -X POST https://api.stt.ai/v1/summarize \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Full transcript text here...", "style": "brief"}'
# List models (no auth needed)
curl https://api.stt.ai/v1/models
# Health check
curl https://api.stt.ai/health
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.stt.ai"
# Transcribe a file
with open("meeting.mp3", "rb") as f:
resp = requests.post(
f"{BASE}/v1/transcribe",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": ("meeting.mp3", f, "audio/mpeg")},
data={"model": "large-v3-turbo", "language": "auto", "diarize": "true"},
)
result = resp.json()
print(f"Language: {result['language']}, Duration: {result['duration']:.1f}s")
for seg in result["segments"]:
print(f"[{seg['start']:.1f}s] {seg.get('speaker', '')}: {seg['text']}")
# Summarize the transcript
summary = requests.post(
f"{BASE}/v1/summarize",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"text": result["text"], "style": "bullet_points"},
).json()
print(summary["summary"])
Node.js
const fs = require("fs");
const FormData = require("form-data");
const API_KEY = "YOUR_API_KEY";
const BASE = "https://api.stt.ai";
async function transcribe(filePath) {
const form = new FormData();
form.append("file", fs.createReadStream(filePath));
form.append("model", "large-v3-turbo");
form.append("language", "auto");
form.append("diarize", "true");
const resp = await fetch(`${BASE}/v1/transcribe`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, ...form.getHeaders() },
body: form,
});
const result = await resp.json();
console.log(`Duration: ${result.duration.toFixed(1)}s`);
for (const seg of result.segments) {
console.log(`[${seg.start.toFixed(1)}s] ${seg.speaker}: ${seg.text}`);
}
return result;
}
transcribe("meeting.mp3");
WebSocket (Browser)
// Real-time transcription from microphone
const ws = new WebSocket("wss://api.stt.ai/v1/stream");
ws.binaryType = "arraybuffer";
ws.onopen = () => {
ws.send(JSON.stringify({ language: "auto", model: "large-v3-turbo" }));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.status === "ready") {
startStreaming(); // Begin sending audio
}
if (data.text) console.log("Final:", data.text);
if (data.partial) console.log("Partial:", data.partial);
};
async function startStreaming() {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const ctx = new AudioContext({ sampleRate: 16000 });
const source = ctx.createMediaStreamSource(stream);
const processor = ctx.createScriptProcessor(4096, 1, 1);
processor.onaudioprocess = (e) => {
const float32 = e.inputBuffer.getChannelData(0);
const int16 = new Int16Array(float32.length);
for (let i = 0; i < float32.length; i++) {
int16[i] = Math.max(-32768, Math.min(32767, float32[i] * 32767));
}
if (ws.readyState === 1) ws.send(int16.buffer);
};
source.connect(processor);
processor.connect(ctx.destination);
}
// Stop: ws.send(JSON.stringify({ action: "stop" }));
Kesalahan Menangani
The API returns standard HTTP status codes with JSON error bodies.
| Status | Arti | Kapan |
|---|---|---|
200 | OK | Request succeeded |
400 | Bad Request | Missing file, unsupported format |
401 | Unauthorized | Invalid or missing API key |
402 | Payment Required | No credits remaining |
429 | Too Many Requests | Rate limit exceeded (free tier) |
503 | Service Unavailable | GPU temporarily unavailable |
// Error response format
{"error": "No credits remaining. Upgrade your plan."}
SDK & Pustaka
Official SDKs for Python and Node.js. Install and start transcribing in minutes.
Siap untuk memulai?
Daftar gratis dan dapatkan kunci API Anda dalam hitungan detik. 600 menit/bulan gratis.
Daftar gratis Lihat harga