← API 문서

영어회화 웹앱에 음성 연결하기

운영 주소: https://tts.erroop.com
인증: Authorization: Bearer <API_KEY>
모든 출처의 CORS를 허용합니다. 음성 생성에는 유효한 키가 필요합니다.

1. cURL로 확인

curl https://tts.erroop.com/v1/audio/speech \
  -H "Authorization: Bearer $TTS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":"Hello! What is your favorite animal?","voice":"af_heart","speed":0.9}' \
  --output hello.wav

2. 웹앱 백엔드에서 호출

TTS_API_KEY를 서버 환경변수에 저장하세요. 아래는 Node.js / Express 예제입니다.

app.post('/api/english-speech', async (req, res) => {
  // 이 경로에는 웹앱의 사용자 인증과 사용량 제한을 적용하세요.
  const response = await fetch('https://tts.erroop.com/v1/audio/speech', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${process.env.TTS_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ input: req.body.text, voice: 'af_heart', speed: 0.9 }),
    signal: AbortSignal.timeout(110000),
  });
  if (!response.ok) {
    const retryAfter = response.headers.get('retry-after');
    if (retryAfter) res.set('Retry-After', retryAfter);
    return res.status(response.status).json(await response.json());
  }
  res.type('audio/wav').send(Buffer.from(await response.arrayBuffer()));
});

3. 브라우저에서 재생

const response = await fetch('/api/english-speech', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ text: 'Great job! Let us try one more.' }),
});
if (!response.ok) throw new Error('음성을 만들지 못했어요.');
const url = URL.createObjectURL(await response.blob());
const audio = new Audio(url);
audio.addEventListener('ended', () => URL.revokeObjectURL(url), { once: true });
// 모바일 자동 재생 정책에 따라 재생 버튼에서 audio.play()를 호출하세요.
await audio.play();

브라우저에서 직접 호출할 때도 Bearer 헤더를 보내면 됩니다. 다만 브라우저에 전달한 장기 API 키는 방문자가 확인할 수 있으므로, 배포할 웹앱에서는 위처럼 백엔드가 키를 보관하는 구성을 권장합니다.

요청과 응답

항목설명
input영어 문장, 최대 1,000자
voice기본 af_heart. /v1/voices에서 8개 목소리 조회
speed0.5~2.0, 기본 1.0. 연습용으로 0.9부터 테스트
응답24 kHz · mono · PCM16 WAV
제한키당 60회/분, 추론 1건 + 대기 4건
429 / 503Retry-After 초 이후 재시도. 무제한 재시도는 피하세요.
데이터문장·키를 로그에 기록하지 않음. WAV는 최대 5분·32 MiB 메모리 캐시

전체 OpenAPI 명세 다운로드 · Swagger에서 직접 호출