Skip to main content

일반 STT

일반 STT API는 음성 파일을 텍스트로 변환할 수 있는 API입니다. 일반 STT API의 경우, HTTP 기반의 REST API로 구현되어 있습니다.

지원 포맷

tip

일반 STT API는 음성 파일 포맷 mp4, m4a, mp3, amr, flac, wav 을 지원하고 있습니다.

인증 토큰 발급

일반 STT API는 인증 가이드를 통해 토큰을 발급받은 뒤 사용하실 수 있습니다.


API 목록

MethodURLDescription
POST/v1/transcribe파일 전사 요청
GET/v1/transcribe/{TRANSCRIBE_ID}파일 전사 결과 조회

1) [POST] /v1/transcribe

저장된 음성 파일에 대해 전사를 요청하는 API입니다.

HTTP 요청

POST https://openapi.vito.ai/v1/transcribe

요청 헤더

Authorization: bearer {YOUR_JWT_TOKEN}
  • scheme: bearer
  • bearerFormat: JWT

요청 바디 (Request body)

content-type: multipart/form-data

FieldTypeRequired
configRequestConfigrequired
fileBinaryrequired

RequestConfig

NameDescTypeRequiredValueDefault
model_name음성인식 모델stringoptionalsommers, whispersommers
language음성인식 언어, whisper 사용할 때만 적용stringoptionalko
use_diarization화자 분리 사용 여부booleanoptionalfalse
diarization.spk_count화자수, use_diarization이 true일 때만 적용integeroptional0 이상의 정수0 (화자수 예측)
use_itn영어/숫자/단위 변환 여부booleanoptionaltrue
use_disfluency_filter간투어 필터 사용 여부booleanoptionaltrue
use_profanity_filter비속어 필터 사용 여부booleanoptionalfalse
use_paragraph_splitter문단 나누기 사용 여부booleanoptionaltrue
paragraph_splitter.max문단의 최대 문자 길이, use_paragraph_splitter이 true일 때만 적용integeroptional1 이상의 정수50
domain음성파일의 종류 (도메인)stringoptionalGENERAL, CALLGENERAL
use_word_timestamp단어별 Timestamp 사용 여부booleanoptionalfalse
keywords키워드 부스팅용 단어 리스트arrayoptional
caution

일반 STT API의 경우 아래와 같은 제약 사항이 있습니다.

  1. POST API 동시처리 제한: 10개, POST API로 요청한 뒤 처리가 완료되기 전까지의 요청 개수를 의미하며, API 처리에 대한 완료는 아래 GET API를 통해 확인 가능합니다.
  2. 최대 인식파일 크기: 2GB, 최대 인식가능 시간: 4시간.

샘플 코드 1


curl -X "POST" \
"https://openapi.vito.ai/v1/transcribe" \
-H "accept: application/json" \
-H "Authorization: Bearer ${YOUR_JWT_TOKEN}" \
-H "Content-Type: multipart/form-data" \
-F "file=@sample.wav" \
-F 'config={}'

샘플 코드 2


curl -X "POST" \
"https://openapi.vito.ai/v1/transcribe" \
-H "accept: application/json" \
-H "Authorization: Bearer ${YOUR_JWT_TOKEN}" \
-H "Content-Type: multipart/form-data" \
-F "file=@sample.wav" \
-F 'config={
"use_diarization": true,
"diarization": {
"spk_count": 2
},
"use_itn": false,
"use_disfluency_filter": false,
"use_profanity_filter": false,
"use_paragraph_splitter": true,
"paragraph_splitter": {
"max": 50
}
}'

응답 바디 (Response Body)

응답이 성공한 경우 HTTP Status 200과 함께 아래와 같은 응답을 내려줍니다.

{
"id": "{TRANSCRIBE_ID}"
}

오류 코드

HTTP StatusCodeNotes
400H0001잘못된 파라미터 요청
400H0010지원하지 않는 파일 포맷
401H0002유효하지 않은 토큰
413H0005파일 사이즈 초과
413H0006파일 길이 초과
429A0001사용량 초과
429A0002동시 처리 제한 초과
500E500서버 오류

아래는 응답이 실패한 경우 가운데 하나의 예시입니다.

{
"code": "H0001",
"msg": "unexpected end of JSON input"
}

2) [GET] /v1/transcribe/{TRANSCRIBE_ID}

  • 음성 파일의 전사 결과를 조회하는 API입니다. 전사 요청 API에서 응답받은 TRANSCRIBE_ID를 사용하여 전사 결과를 조회할 수 있습니다.

HTTP 요청

GET https://openapi.vito.ai/v1/transcribe/{TRANSCRIBE_ID}

요청 헤더

Authorization: bearer {YOUR_JWT_TOKEN}
  • scheme: bearer
  • bearerFormat: JWT

샘플 코드


curl -X "GET" \
"https://openapi.vito.ai/v1/transcribe/${TRANSCRIBE_ID}" \
-H "accept: application/json" \
-H "Authorization: Bearer ${YOUR_JWT_TOKEN}"

응답 바디 (Response Body)

응답이 성공한 경우 HTTP Status 200과 함께 아래와 같은 응답을 내려줍니다.

NameDescTypeValue
idtranscribe idstring
status전사 결과 상태stringtranscribing, completed, failed
results.utterances발화 정보array
results.utterances.start_at발화 시작 시각 (ms)integer
results.utterances.duration발화 duration (ms)integer
results.utterances.msg발화 텍스트string
results.utterances.spk화자/채널 IDinteger
tip

일반 STT API의 경우, 긴 음성 파일도 지원하기 위하여 Polling 방식으로 구현되어 있습니다. 전사 요청 API에서 응답받은 {TRANSCRIBE_ID}의 상태 값이 transcribing인 경우, 최종 상태(completed 또는 failed)가 될 때까지 주기적으로 조회하여 변환 결과를 확인할 수 있습니다. 권장하는 Polling 주기는 5초입니다. (Polling 주기가 너무 짧을 경우 HTTP Status 429로 요청 제한 초과 응답이 내려갈 수 있습니다.)

status: transcribing

{
"id": "{TRANSCRIBE_ID}",
"status": "transcribing"
}

status: completed

{
"id": "{TRANSCRIBE_ID}",
"status": "completed",
"results": {
"utterances": [
{
"start_at": 4737,
"duration": 2360,
"msg": "안녕하세요.",
"spk": 0
},
{
"start_at": 8197,
"duration": 3280,
"msg": "네, 안녕하세요? 반갑습니다.",
"spk": 1
}
]
}
}

status: failed

응답은 성공했지만 전사가 실패한 경우 아래와 같은 응답을 내려줍니다.

{
"id": "{TRANSCRIBE_ID}",
"status": "failed",
"error": {
"code": "{ERROR_CODE}",
"message": "{MESSAGE}"
}
}

위와 같은 경우가 지속적으로 발생할 경우, 문의해주시기 바랍니다.

오류 코드

HttpStatusCodeNotes
400H0001잘못된 파라미터 요청
401H0002유효하지 않은 토큰
403H0003권한 없음
404H0004전사 결과 없음
410H0007전사 결과 만료됨
429A0003요청 제한 초과
500E500서버 오류

아래는 응답이 실패한 경우 가운데 하나의 예시입니다.

{
"code": "H0004",
"msg": "not found"
}