Skip to main content

🗣️ Thai Text-to-Speech V3 (Kaitom Voice)

⚠️ ALPHA VERSION

⚠️ Alpha Version Notice: This API is currently in alpha testing. The service may experience intermittent availability. For production use, please use TTS V2 (Stable) instead. V3 is FREE during alpha testing.

FREE(Alpha testing - no credits charged)
v3.0⚠️ ALPHA🎙️ Speech

Welcome to Thai Text-to-Speech API V3 featuring the all-new Kaitom Voice (น้องไข่ต้ม เวอร์ชั่น 3). This next-generation version delivers significantly improved speech naturalness with advanced text normalization, IPA pronunciation support, and automatic Thai-English language handling.

iApp Text to Speech API V3 - Kaitom Voice

What's New in V3

  • Smart Text Normalization - Automatically handles numbers, dates, currency, and special characters
  • IPA Pronunciation Support - Use IPA notation for precise pronunciation control
  • Automatic Language Detection - No need to specify language mode, V3 handles Thai-English mixing automatically
  • Extended Character Limit - Support for up to 10,000 characters per request
  • Simplified JSON API - Clean JSON request body instead of form data
  • High-Quality Audio - 44.1 kHz WAV output for professional applications

Try Demo

Try Our AI Demo

Login or create a free account to use this AI service demo and explore our powerful APIs.

Get 100 Free Credits (IC) when you sign up!

Offer ends December 31, 2025

V3 automatically handles Thai-English mixed text. No language mode selection needed.

Getting Started

  1. Prerequisites

    • An API key from iApp Technology
    • Text input in Thai and/or English
    • Maximum text length: 10,000 characters
    • Supported output format: WAV (44.1 kHz)
  2. Quick Start

    • Fast processing with high-quality output
    • Improved natural speech generation
    • Automatic Thai-English mixed text support
    • No language mode selection required
  3. Key Features

    • Next-generation speech synthesis engine
    • Smart text normalization (numbers, dates, currency)
    • IPA pronunciation support for precise control
    • Automatic Thai-English language handling
    • Emoji and special character support
    • Extended 10,000 character limit
  4. Security & Compliance

    • GDPR and PDPA compliant
    • No data retention after processing
How to get API Key?

Please visit API Key Management page to view your existing API key or request a new one.

Previous Versions
  • V2: Looking for the POST-based API with language mode selection? See Text-to-Speech V2
  • V1: Looking for the legacy GET-based API with Kaitom V1 or Cee voice? See Text-to-Speech V1

API Endpoint

EndpointMethodContent-TypeDescriptionCost
/v3/store/audio/tts/generatePOSTapplication/jsonThai TTS with Kaitom Voice V31 IC per 400 characters

Quick Example

Sample Request

curl -X POST 'https://api.iapp.co.th/v3/store/audio/tts/generate' \
--header 'apikey: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"text": "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3"}' \
--output 'output.wav'

Sample Response

Audio file output (WAV format, 44.1 kHz).

API Reference

Text-to-Speech V3 Endpoint

  • Endpoint: POST https://api.iapp.co.th/v3/store/audio/tts/generate
  • Content-Type: application/json
  • Required Parameters:
    • apikey: Your API key (header)
    • text: Text to convert to speech (JSON body)

Request Body

{
"text": "Your Thai or mixed Thai-English text here"
}

Response

  • Content-Type: audio/wav
  • Sample Rate: 44.1 kHz
  • Format: WAV audio file

Code Examples

Python

import requests
import json

url = "https://api.iapp.co.th/v3/store/audio/tts/generate"
headers = {
"apikey": "YOUR_API_KEY",
"Content-Type": "application/json"
}
data = {
"text": "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3 มาพร้อมเสียงที่เป็นธรรมชาติมากขึ้น"
}

response = requests.post(url, headers=headers, json=data)
with open("output.wav", "wb") as f:
f.write(response.content)
print("Audio saved to output.wav")

JavaScript (Node.js)

const axios = require("axios")
const fs = require("fs")

const url = "https://api.iapp.co.th/v3/store/audio/tts/generate"
const config = {
headers: {
"apikey": "YOUR_API_KEY",
"Content-Type": "application/json"
},
responseType: "arraybuffer"
}
const data = {
text: "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3 มาพร้อมเสียงที่เป็นธรรมชาติมากขึ้น"
}

axios.post(url, data, config)
.then((response) => {
fs.writeFileSync("output.wav", response.data)
console.log("Audio saved to output.wav")
})
.catch((error) => console.error(error))

JavaScript (Fetch API)

const response = await fetch("https://api.iapp.co.th/v3/store/audio/tts/generate", {
method: "POST",
headers: {
"apikey": "YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
text: "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3"
})
});

const blob = await response.blob();
// Use blob for audio playback or download

PHP

<?php
$curl = curl_init();

$data = json_encode([
"text" => "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3 มาพร้อมเสียงที่เป็นธรรมชาติมากขึ้น"
]);

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/audio/tts/generate',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY',
'Content-Type: application/json'
),
));

$response = curl_exec($curl);
curl_close($curl);

file_put_contents("output.wav", $response);
echo "Audio saved to output.wav";
?>

Swift

import Foundation

let url = URL(string: "https://api.iapp.co.th/v3/store/audio/tts/generate")!
var request = URLRequest(url: url, timeoutInterval: Double.infinity)
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"

let body: [String: Any] = [
"text": "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3"
]
request.httpBody = try? JSONSerialization.data(withJSONObject: body)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
// Save or play audio data
try? data.write(to: URL(fileURLWithPath: "output.wav"))
print("Audio saved to output.wav")
}
task.resume()

Kotlin

val client = OkHttpClient()
val mediaType = "application/json".toMediaType()
val body = """{"text": "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3"}""".toRequestBody(mediaType)

val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/audio/tts/generate")
.post(body)
.addHeader("apikey", "YOUR_API_KEY")
.addHeader("Content-Type", "application/json")
.build()

val response = client.newCall(request).execute()
// Handle audio response

Java

OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType,
"{\"text\": \"สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3\"}");

Request request = new Request.Builder()
.url("https://api.iapp.co.th/v3/store/audio/tts/generate")
.method("POST", body)
.addHeader("apikey", "YOUR_API_KEY")
.addHeader("Content-Type", "application/json")
.build();

Response response = client.newCall(request).execute();
// Handle audio response

Dart

import 'dart:convert';
import 'package:http/http.dart' as http;
import 'dart:io';

void main() async {
var url = Uri.parse('https://api.iapp.co.th/v3/store/audio/tts/generate');
var headers = {
'apikey': 'YOUR_API_KEY',
'Content-Type': 'application/json'
};
var body = jsonEncode({
'text': 'สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3'
});

var response = await http.post(url, headers: headers, body: body);

if (response.statusCode == 200) {
File('output.wav').writeAsBytesSync(response.bodyBytes);
print('Audio saved to output.wav');
} else {
print('Error: ${response.statusCode}');
}
}

Go

package main

import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
)

func main() {
url := "https://api.iapp.co.th/v3/store/audio/tts/generate"

data := map[string]string{
"text": "สวัสดีครับ น้องไข่ต้ม เวอร์ชั่น 3",
}
jsonData, _ := json.Marshal(data)

req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("apikey", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

audioData, _ := io.ReadAll(resp.Body)
os.WriteFile("output.wav", audioData, 0644)
}

Features & Capabilities

Smart Text Normalization

V3 automatically normalizes various text elements:

TypeInputOutput (spoken)
Numbers1,234.56"หนึ่งพันสองร้อยสามสิบสี่จุดห้าหก"
Dates27/01/2569"วันที่ยี่สิบเจ็ดมกราคมสองพันห้าร้อยหกสิบเก้า"
Currency฿1,500"หนึ่งพันห้าร้อยบาท"
Time14:30"สิบสี่นาฬิกาสามสิบนาที"
Percentages25%"ยี่สิบห้าเปอร์เซ็นต์"

IPA Pronunciation Support

Use IPA (International Phonetic Alphabet) notation for precise pronunciation control:

พูด {IPA: kʰun} ให้ถูกต้อง

Automatic Language Handling

V3 automatically detects and handles mixed Thai-English text without requiring language mode selection:

Hello and Welcome! ยินดีต้อนรับสู่ iApp Technology

Error Codes

Status CodeDescriptionSolution
400Bad Request - Invalid JSON formatCheck JSON syntax
402Insufficient CreditsAdd credits
413Payload Too LargeText exceeds 10,000 characters
429Rate Limit ExceededCheck API key limits
503Service UnavailableTemporary issue, retry later

Migration Guide

From V2 to V3

AspectV2V3
Content-Typemultipart/form-dataapplication/json
Request BodyForm dataJSON body
Language ModeRequired (TH / TH_MIX_EN)Auto-detected
Max CharactersNo limit10,000
Audio QualityStandard WAV44.1 kHz WAV
Endpoint/v3/store/speech/text-to-speech/kaitom/v3/store/audio/tts/generate

V2 Request (Old):

curl -X POST 'https://api.iapp.co.th/v3/store/speech/text-to-speech/kaitom' \
--header 'apikey: YOUR_API_KEY' \
--form 'text="สวัสดีครับ"' \
--form 'language="TH"'

V3 Request (New):

curl -X POST 'https://api.iapp.co.th/v3/store/audio/tts/generate' \
--header 'apikey: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"text": "สวัสดีครับ"}'

From V1 to V3

AspectV1V3
MethodGETPOST
RequestQuery parametersJSON body
Voice OptionsKaitom V1, CeeKaitom V3
Output FormatMP3/WAVWAV (44.1 kHz)
Endpoint/v3/store/speech/text-to-speech/kaitom/v1/v3/store/audio/tts/generate

Limitations

  • Thai and English language support only
  • Single voice option: Kaitom V3 (male voice)
  • Maximum text length: 10,000 characters
  • Output format: WAV only (44.1 kHz)

Best Practices

  1. Use proper punctuation for natural pauses and intonation
  2. Keep sentences conversational for the most natural output
  3. Test with small text segments before processing large texts
  4. Use IPA notation for technical terms or names requiring specific pronunciation
  5. Monitor character count to stay within the 10,000 character limit

Pricing

AI API Service NameEndpointIC Per CharactersOn-Premise
Thai Text-to-Speech V3 (Kaitom Voice)/v3/store/audio/tts/generate1 IC/400 CharactersContact

See Also