VoiceGen AI API

텍스트를 자연스러운 음성으로 변환하는 REST API입니다. XTTS v2 기반 다국어 TTS와 음성 클로닝을 지원합니다.

Base URL: https://vg.kiam.kr

🔒 인증

모든 API 요청에는 X-API-Key 헤더에 발급받은 API 키를 포함해야 합니다.

X-API-Key: vg_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API 키는 대시보드에서 발급할 수 있습니다.

⏳ 사용 한도

플랜월 한도1회 최대클로닝
Free10,000자500자불가
Starter100,000자1,000자1개
Pro500,000자2,000자무제한
Business2,000,000자5,000자무제한

🎙 POST /api/v1/generate.php

POST /api/v1/generate.php
텍스트를 선택한 목소리로 음성(WAV)으로 변환합니다.

요청 파라미터 (multipart/form-data)

파라미터타입필수설명
textstring필수변환할 텍스트 (최대 플랜 한도)
voice_idstring선택목소리 ID (기본: ko_female_1)
speedfloat선택재생 속도 0.5~2.0 (기본: 1.0)
languagestring선택언어 코드: ko, en, ja, zh, fr, de (기본: ko)

응답

성공 시 audio/wav 바이너리 데이터를 반환합니다.

헤더설명
X-VG-Chars이번 요청에서 사용된 글자수
X-VG-Remaining이번 달 남은 글자수
curl -X POST https://vg.kiam.kr/api/v1/generate.php \
  -H "X-API-Key: vg_your_api_key" \
  -F "text=안녕하세요, VoiceGen AI입니다." \
  -F "voice_id=ko_female_1" \
  -F "speed=1.0" \
  -o output.wav

🎤 POST /api/v1/clone.php

POST /api/v1/clone.php
업로드한 레퍼런스 오디오(내 목소리)로 텍스트를 읽어줍니다. STARTER 이상 플랜 필요.

요청 파라미터 (multipart/form-data)

파라미터타입필수설명
textstring필수읽어줄 텍스트
reference_audiofile필수내 목소리 파일 (WAV/MP3/OGG, 5초 이상, 최대 20MB)
languagestring선택언어 코드 (기본: ko)
speedfloat선택속도 0.5~2.0 (기본: 1.0)
curl -X POST https://vg.kiam.kr/api/v1/clone.php \
  -H "X-API-Key: vg_your_api_key" \
  -F "text=이것은 내 목소리로 읽는 텍스트입니다." \
  -F "reference_audio=@my_voice.wav" \
  -F "language=ko" \
  -o cloned.wav

♫ GET /api/v1/voices.php

GET /api/v1/voices.php
사용 가능한 목소리 목록을 반환합니다.
응답 예시
{"voices":[
  {"id":"ko_female_1","name":"수아","lang":"ko","gender":"female"},
  {"id":"ko_male_1","name":"민준","lang":"ko","gender":"male"},
  {"id":"en_female_1","name":"Emma","lang":"en","gender":"female"},
  ...
],"count":6}

⚠ 오류 코드

HTTP 코드의미
400잘못된 요청 (파라미터 오류, 글자수 초과)
401API 키 없음 또는 유효하지 않음
403플랜 미지원 기능 (클로닝은 STARTER 이상)
429월 사용 한도 초과
500서버 내부 오류
503GPU 서비스 미준비

📄 전체 예제

Python

import requests

API_KEY = "vg_your_api_key"
BASE_URL = "https://vg.kiam.kr"

# 기본 음성 생성
resp = requests.post(
    f"{BASE_URL}/api/v1/generate.php",
    headers={"X-API-Key": API_KEY},
    data={"text": "안녕하세요!", "voice_id": "ko_female_1"}
)
with open("output.wav", "wb") as f:
    f.write(resp.content)

# 음성 클로닝
with open("my_voice.wav", "rb") as ref:
    resp = requests.post(
        f"{BASE_URL}/api/v1/clone.php",
        headers={"X-API-Key": API_KEY},
        data={"text": "클로닝 테스트입니다.", "language": "ko"},
        files={"reference_audio": ref}
    )
with open("clone.wav", "wb") as f:
    f.write(resp.content)

JavaScript (Node.js)

const FormData = require('form-data');
const fetch = require('node-fetch');
const fs = require('fs');

const API_KEY = 'vg_your_api_key';
const form = new FormData();
form.append('text', '안녕하세요!');
form.append('voice_id', 'ko_female_1');

const res = await fetch('https://vg.kiam.kr/api/v1/generate.php', {
  method: 'POST',
  headers: { 'X-API-Key': API_KEY, ...form.getHeaders() },
  body: form
});
fs.writeFileSync('output.wav', Buffer.from(await res.arrayBuffer()));