Thai speech to text for meetings
Transcribe recorded meetings into written Thai with the figures in digits, then draft the minutes from the text.
What the transcript says
A budget figure
spokenงบการตลาดไตรมาสสี่ตกลงที่ สองล้านห้าแสนบาท เพิ่มจากเดิม สิบห้าเปอร์เซ็นต์
writtenงบการตลาดไตรมาส 4 ตกลงที่ 2,500,000 บาท เพิ่มจากเดิม 15%
Digits under the written convention. The minutes copy the line as it stands.
An action item with a date
spokenคุณนภาส่งร่างสัญญาให้ฝ่ายกฎหมายภายในวันศุกร์ที่ สิบสอง กันยายน
writtenคุณนภาส่งร่างสัญญาให้ฝ่ายกฎหมายภายในวันศุกร์ที่ 12 กันยายน
The owner and the deadline are in one sentence. A vocabulary keeps colleagues' names spelled the way they spell them.
A product term in English
spokenฟีเจอร์ auto top-up จะขึ้น production พร้อมกันทุกๆ ประเทศในรอบเดียว
writtenฟีเจอร์ auto top-up จะขึ้น production พร้อมกันทุก ๆ ประเทศในรอบเดียว
English terms stay English. The written convention sets the repetition mark the way Thai style guides write it.
Every transcript pair on this page is an authored illustration of what the convention option changes, re-checked against live output before publish. The Speech-to-Text page carries the model's own witnessed transcripts of a real recording, with the capture date.
How it fits a team
Minutes are written from memory the day after, by whoever drew the short straw. The budget figure is off by a zero, the deadline moved in someone's head, and the decision that mattered is the one nobody wrote down. A transcript fixes the source. Send the recording when the meeting ends and the whole conversation is text within minutes, with amounts and dates as digits under the written convention. Draft the minutes from that. Give the transcript to your own summarization model if you have one. Keep the word timestamps and every decision in the minutes links back to the second it was made.
- Record the meeting as you already doAny phone or meeting tool writes a file the API reads: MP3, M4A, WAV, WebM, and more, up to 60 minutes a request.
- Transcribe with the written convention and word timestampsFigures and dates arrive as digits, every word with its second. A vocabulary of up to 50 names and project terms keeps spelling consistent, in the same request. Turn diarization on and each turn carries a speaker number.
- Draft the minutes from the textQuote decisions as they were said. Link each to its second. Hand the transcript to your own model for a summary if you want one.
From a recording to minutes
recordings/
2026-09-08-planning.m4a 45:12 the file the room recorded
POST /v1/stt convention=written timestamps=word
transcripts/
2026-09-08-planning.json text + 6,400 word spans
minutes/
2026-09-08-planning.md drafted from the transcript
decisions 3 each linked to its second
actions 7 owner, deadline in digitsThe transcript is the record. The minutes are a reading of it, by a person or by your own summarization model.
A meeting, by the second
Word timestamps give every line a second. The minutes link to moments; the reader checks the recording only where it matters.
What a month of meetings costs
| Workload | Audio | Credits |
|---|---|---|
| One meeting, 45 minutes | 45 min | 375 |
| A week, 5 meetings | 4 h | 1,875 |
| A month, 20 meetings | 7,500 credits | |
8.33 credits a minute of audio, billed by the millisecond. Word timestamps and the written convention cost nothing extra.
For developers
The snippets send one recording, ask for word timestamps, and read the transcript, the spans, and the credits charged from the response.
AUDIO=$(base64 < meeting.m4a | tr -d '\n')
curl -X POST https://api.paxalabs.com/v1/stt \
--max-time 300 \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"audio\": \"$AUDIO\", \"model\": \"paxa-stt-lite-v1-preview\", \"timestamps\": \"word\"}"import { readFile } from "node:fs/promises";
const audio = (await readFile("meeting.m4a")).toString("base64");
const response = await fetch("https://api.paxalabs.com/v1/stt", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAXA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ audio, model: "paxa-stt-lite-v1-preview" }),
// A long recording can run for minutes; give it room.
signal: AbortSignal.timeout(300_000),
});
if (!response.ok) throw new Error(`Transcription failed: ${response.status}`);
const { text, usage } = await response.json();
console.log(text, `${usage.credits} credits`);import base64
import os
import requests
with open("meeting.m4a", "rb") as file:
audio = base64.b64encode(file.read()).decode()
response = requests.post(
"https://api.paxalabs.com/v1/stt",
headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"},
json={"audio": audio, "model": "paxa-stt-lite-v1-preview"},
# A long recording can run for minutes; give it room.
timeout=300,
)
response.raise_for_status()
body = response.json()
print(body["text"], body["usage"]["credits"], "credits")What the model was built to hear
Paxa STT Lite transcribes Thai and English, including sentences that switch language halfway. It numbers speaker turns on request and publishes no accuracy figure until the evaluation method is published beside it.
Common questions
- Does it write the minutes?
- It writes the transcript. Minutes are a reading of it, by a person or by a summarization model you run over the text.
- Does it say who spoke?
- It numbers the speakers. Set diarization to true and each turn arrives with a speaker number, counted from 0 by first appearance. No name is attached. Match the numbers to the attendee list yourself. Turns come from one pass over the recording. Send a meeting in parts under 9 minutes and match the numbers part by part.
- Can I use word timestamps and a vocabulary together?
- Yes. One request carries both, and speaker turns beside them. None of the three changes the price.
- What does a meeting over an hour cost?
- The same rate, split across requests of up to 60 minutes, or under 9 for the parts you want speaker turns on. Cut at a break and send the parts in parallel.
Start with free credits
Sign in with Google, GitHub, or Hugging Face and spend 100 one-time free credits on your own text.