{"openapi":"3.0.3","info":{"title":"APICK 한국어 AI 내레이션 TTS","version":"1.0.0","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다."},"servers":[{"url":"https://apick.app"}],"paths":{"/rest/tts/jobs":{"post":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"202":{"description":"작업 접수 완료. 반환된 job_id로 상태를 조회합니다.","content":{"application/json":{"schema":{"type":"object","description":"공개 JSON 응답.","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","description":"접수 응답에서 받은 작업 ID. 같은 계정의 작업에만 접근할 수 있습니다."},"status":{"type":"string","description":"접수 완료.","enum":["waiting"]},"voice_id":{"type":"string","description":"선택한 목소리 ID."},"character_count":{"type":"integer","description":"공백·문장부호를 포함한 합성 글자 수."}}},"api":{"type":"object","description":"호출 메타데이터.","properties":{"success":{"type":"boolean","description":"API 공통 처리 여부. HTTP 상태·업무 결과와 함께 확인합니다."},"cost":{"type":"number","description":"이번 호출에서 차감한 포인트. 무료 조회·재전송은 0."},"pl_id":{"type":"integer","description":"과금 기록 ID. 과금 기록이 있을 때만 포함합니다."}}}}}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"voice_id":{"type":"string","description":"지원 voice_id (string)","enum":["v2_ann_m_30s_01","v2_ann_m_30s_02","v2_ann_m_30s_04","v2_ann_m_30s_05","v2_ann_f_30s_01","v2_ann_f_30s_02","v2_ann_f_30s_03","v2_ann_f_30s_04","v2_ann_f_30s_05","v2_m_teen_01","v2_m_young_01","v2_m_mid_01","v2_m_senior_01","v2_f_teen_01","v2_f_young_01","v2_f_senior_01"],"example":"v2_ann_m_30s_01"},"text":{"type":"string","description":"합성할 한국어 본문. text와 utterances 중 하나만 사용합니다. 전체 1~800자(공백·줄바꿈 포함). (string)","example":"오늘 들려드릴 이야기는 한 사람의 선택에서 시작됩니다."},"utterances[0][text]":{"type":"string","description":"발화 본문. text와 utterances 중 하나만 사용합니다. 최대 100개 발화, 전체 본문 합계 800자입니다. (string)"},"utterances[0][paragraph_id]":{"type":"string","description":"발화가 속한 문단 식별자입니다. (string)"},"utterances[0][pause_after]":{"type":"string","description":"발화 뒤 쉼. none=없음, micro=짧은 쉼, normal=보통, strong=긴 쉼, paragraph=문단 경계. 생략하면 문맥에 맞춰 자동 지정합니다. (string)","enum":["none","micro","normal","strong","paragraph"]},"utterances[0][pause_before_ms]":{"type":"string","description":"발화 앞 쉼의 길이. 밀리초 단위 정수 0~10000. (integer)"}},"required":["voice_id"],"oneOf":[{"required":["text"],"not":{"required":["utterances[0][text]"]}},{"required":["utterances[0][text]"],"not":{"required":["text"]}}]}}}}}},"/rest/tts/jobs/{job_id}":{"get":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"서비스 응답","content":{"application/json":{"schema":{"type":"object","description":"공개 JSON 응답.","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","description":"접수 응답에서 받은 작업 ID. 같은 계정의 작업에만 접근할 수 있습니다."},"status":{"type":"string","description":"작업 진행 상태. 완료 여부와 다운로드 가능 여부를 함께 확인합니다.","enum":["waiting","processing","completed","cancelled","failed"]},"result_available":{"type":"boolean","description":"최종 MP3를 내려받을 수 있는지 여부."},"subtitles_available":{"type":"boolean","description":"자막을 내려받을 수 있는지 여부."},"resume_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0},"quality":{"type":"object","description":"품질 상세. 아직 검사 전이면 null이거나 생략됩니다.","properties":{"schema_version":{"type":"string","description":"품질 결과 규격 버전."},"attempt":{"type":"integer","description":"현재 검사 시도 회차."},"phase":{"type":"string","description":"현재 처리 단계."},"accepted_utterances":{"type":"integer","description":"통과 발화 수."},"failed_utterances":{"type":"integer","description":"실패 발화 수."},"total_utterances":{"type":"integer","description":"전체 발화 수."},"expires_at":{"type":"string","description":"후보 결과 보관 만료 일시.","nullable":true},"queue_elapsed_sec":{"type":"number","description":"대기 시간(초)."},"generation_elapsed_sec":{"type":"number","description":"생성 시간(초)."},"utterances":{"type":"array","description":"발화별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"candidates":{"type":"array","description":"음원 후보별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"final_quality":{"type":"object","description":"최종 결과 검사. 최종 검사 전에는 생략됩니다.","properties":{"schema_version":{"type":"string","description":"품질 결과 규격 버전."},"attempt":{"type":"integer","description":"현재 검사 시도 회차."},"phase":{"type":"string","description":"현재 처리 단계."},"accepted_utterances":{"type":"integer","description":"통과 발화 수."},"failed_utterances":{"type":"integer","description":"실패 발화 수."},"total_utterances":{"type":"integer","description":"전체 발화 수."},"expires_at":{"type":"string","description":"후보 결과 보관 만료 일시.","nullable":true},"queue_elapsed_sec":{"type":"number","description":"대기 시간(초)."},"generation_elapsed_sec":{"type":"number","description":"생성 시간(초)."},"utterances":{"type":"array","description":"발화별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"candidates":{"type":"array","description":"음원 후보별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"status":{"type":"string","description":"최종 검사 상태."},"audio_sha256":{"type":"string","description":"최종 음원 SHA-256."}}}},"nullable":true},"error":{"type":"object","description":"실패 상태일 때 포함합니다.","properties":{"code":{"type":"string","description":"실패한 작업의 공개 오류코드."},"message":{"type":"string","description":"오류 설명."}}}}},"api":{"type":"object","description":"호출 메타데이터.","properties":{"success":{"type":"boolean","description":"API 공통 처리 여부. HTTP 상태·업무 결과와 함께 확인합니다."},"cost":{"type":"number","description":"이번 호출에서 차감한 포인트. 무료 조회·재전송은 0."},"pl_id":{"type":"integer","description":"과금 기록 ID. 과금 기록이 있을 때만 포함합니다."}}}}}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/rest/tts/jobs/{job_id}/cancel":{"post":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"서비스 응답","content":{"application/json":{"schema":{"type":"object","description":"공개 JSON 응답.","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","description":"접수 응답에서 받은 작업 ID. 같은 계정의 작업에만 접근할 수 있습니다."},"status":{"type":"string","description":"취소 완료 상태.","enum":["cancelled"]}}},"api":{"type":"object","description":"호출 메타데이터.","properties":{"success":{"type":"boolean","description":"API 공통 처리 여부. HTTP 상태·업무 결과와 함께 확인합니다."},"cost":{"type":"number","description":"이번 호출에서 차감한 포인트. 무료 조회·재전송은 0."},"pl_id":{"type":"integer","description":"과금 기록 ID. 과금 기록이 있을 때만 포함합니다."}}}}}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}},"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{}}}}}}},"/rest/tts/jobs/{job_id}/result":{"get":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"파일 직접 응답","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/rest/tts/jobs/{job_id}/subtitles":{"get":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"파일 직접 응답","content":{"text/plain":{"schema":{"type":"string","format":"binary"}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/rest/tts/jobs/{job_id}/quality":{"get":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"서비스 응답","content":{"application/json":{"schema":{"type":"object","description":"공개 JSON 응답.","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","description":"접수 응답에서 받은 작업 ID. 같은 계정의 작업에만 접근할 수 있습니다."},"resume_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0},"schema_version":{"type":"string","description":"품질 결과 규격 버전."},"attempt":{"type":"integer","description":"현재 검사 시도 회차."},"phase":{"type":"string","description":"현재 처리 단계."},"accepted_utterances":{"type":"integer","description":"통과 발화 수."},"failed_utterances":{"type":"integer","description":"실패 발화 수."},"total_utterances":{"type":"integer","description":"전체 발화 수."},"expires_at":{"type":"string","description":"후보 결과 보관 만료 일시.","nullable":true},"queue_elapsed_sec":{"type":"number","description":"대기 시간(초)."},"generation_elapsed_sec":{"type":"number","description":"생성 시간(초)."},"utterances":{"type":"array","description":"발화별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"candidates":{"type":"array","description":"음원 후보별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"final_quality":{"type":"object","description":"최종 결과 검사. 최종 검사 전에는 생략됩니다.","properties":{"schema_version":{"type":"string","description":"품질 결과 규격 버전."},"attempt":{"type":"integer","description":"현재 검사 시도 회차."},"phase":{"type":"string","description":"현재 처리 단계."},"accepted_utterances":{"type":"integer","description":"통과 발화 수."},"failed_utterances":{"type":"integer","description":"실패 발화 수."},"total_utterances":{"type":"integer","description":"전체 발화 수."},"expires_at":{"type":"string","description":"후보 결과 보관 만료 일시.","nullable":true},"queue_elapsed_sec":{"type":"number","description":"대기 시간(초)."},"generation_elapsed_sec":{"type":"number","description":"생성 시간(초)."},"utterances":{"type":"array","description":"발화별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"candidates":{"type":"array","description":"음원 후보별 검사 결과.","items":{"type":"object","description":"발화·음원 후보별 공개 검사 결과. 단계별로 제공되는 항목만 포함합니다.","properties":{"id":{"type":"string","description":"발화 식별자."},"utterance_id":{"type":"string","description":"발화 식별자. 예: u001."},"candidate_id":{"type":"string","description":"음성 후보 식별자."},"status":{"type":"string","description":"항목 처리 또는 검사 상태."},"attempt":{"type":"integer","description":"생성 시도 회차."},"voice_id":{"type":"string","description":"요청한 공개 목소리 ID."},"created_at":{"type":"string","description":"항목 생성 일시."},"elapsed_sec":{"type":"number","description":"처리 경과 시간(초)."},"reasons":{"type":"array","description":"검사·실패 사유 목록. 사유가 없으면 빈 배열입니다.","items":{"type":"string","description":"검사 결과 사유."}},"speech_rate":{"type":"object","description":"발화 속도 검사. 검사 단계에 따라 일부 필드는 생략됩니다.","properties":{"characters":{"type":"integer","description":"발화 글자 수."},"chars":{"type":"integer","description":"발화 글자 수."},"duration_sec":{"type":"number","description":"측정 음성 길이(초)."},"duration_ms":{"type":"number","description":"측정 음성 길이(밀리초)."},"cps":{"type":"number","description":"초당 발화 글자 수."},"expected_sec":{"type":"number","description":"예상 발화 길이(초)."},"expected_duration_ms":{"type":"number","description":"예상 발화 길이(밀리초)."},"duration_ratio":{"type":"number","description":"실제 길이/예상 길이 비율. 계산할 수 없으면 null.","nullable":true},"min_cps":{"type":"number","description":"최소 허용 초당 글자 수."},"minimum_characters":{"type":"integer","description":"검사에 필요한 최소 글자 수."},"status":{"type":"string","description":"속도 검사 결과."}}},"audio_sha256":{"type":"string","description":"후보 음원 SHA-256. 동일 음원 확인에 사용합니다."},"audio_duration_ms":{"type":"number","description":"음원 길이(밀리초)."},"audio_available":{"type":"boolean","description":"후보 음원 다운로드 가능 여부."},"transcript":{"type":"string","description":"음원에서 인식한 텍스트."},"cer":{"type":"number","description":"문자 오류율. 낮을수록 원문과 가깝습니다."},"coverage":{"type":"number","description":"원문에 대한 음성의 포함률."},"repeat":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"reference_intrusion":{"type":"object","description":"검출 결과. 분석할 수 없는 항목은 생략되거나 null입니다.","properties":{"detected":{"type":"boolean","description":"해당 현상이 검출됐는지 여부."},"suspected":{"type":"boolean","description":"추가 확인이 필요한지 여부."},"correlation":{"type":"number","description":"비교 구간의 상관도."},"best_lag_sec":{"type":"number","description":"가장 잘 일치한 시간 차(초)."},"window_start_sec":{"type":"number","description":"검사 구간 시작(초)."},"window_end_sec":{"type":"number","description":"검사 구간 끝(초)."},"matched_characters":{"type":"integer","description":"일치한 글자 수."},"matched_chars":{"type":"integer","description":"일치한 글자 수."}}},"text_qa_status":{"type":"string","description":"텍스트 검사 상태."},"active_start_ms":{"type":"number","description":"유효 음성 구간 시작(밀리초)."},"active_end_ms":{"type":"number","description":"유효 음성 구간 끝(밀리초)."},"tail_guard_attached":{"type":"boolean","description":"끝부분 확인용 보호 구간 부착 여부."},"tail_verified":{"type":"boolean","description":"끝부분 검증 완료 여부."},"tail_verified_at_ms":{"type":"number","description":"끝부분을 검증한 시각(밀리초). 검증 전에는 null.","nullable":true},"tail_body_end_at_ms":{"type":"number","description":"본문 끝 위치(밀리초).","nullable":true},"tail_guard_attached_chunk_ids":{"type":"array","description":"보호 구간이 붙은 음성 구간 ID 목록.","items":{"type":"string","description":"확인한 구간 ID."}},"generation_budget_exhausted":{"type":"boolean","description":"해당 발화의 자동 생성 시도 한도 소진 여부."},"retry_requires_new_regeneration_key":{"type":"boolean","description":"새 재생성 키가 필요한 상태인지 여부."},"candidate_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0}}}},"status":{"type":"string","description":"최종 검사 상태."},"audio_sha256":{"type":"string","description":"최종 음원 SHA-256."}}}}},"api":{"type":"object","description":"호출 메타데이터.","properties":{"success":{"type":"boolean","description":"API 공통 처리 여부. HTTP 상태·업무 결과와 함께 확인합니다."},"cost":{"type":"number","description":"이번 호출에서 차감한 포인트. 무료 조회·재전송은 0."},"pl_id":{"type":"integer","description":"과금 기록 ID. 과금 기록이 있을 때만 포함합니다."}}}}}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/rest/tts/jobs/{job_id}/candidates/{candidate_id}/audio":{"get":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"candidate_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Range","in":"header","required":false,"schema":{"type":"string"},"description":"bytes=N-M, bytes=N-, bytes=-N 지원."}],"responses":{"200":{"description":"파일 직접 응답","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"206":{"description":"파일 직접 응답","content":{"audio/wav":{"schema":{"type":"string","format":"binary"}}}},"416":{"description":"유효하지 않은 바이트 범위. 본문이 비어 있을 수 있습니다."},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/rest/tts/jobs/{job_id}/retry":{"post":{"summary":"한국어 AI 내레이션 TTS","description":"16가지 전문 내레이션 목소리와 타임라인이 맞는 ASS 자막을 함께 생성합니다.","security":[{"bearerAuth":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"작업 접수 완료. 반환된 job_id로 상태를 조회합니다.","content":{"application/json":{"schema":{"type":"object","description":"공개 JSON 응답.","properties":{"data":{"type":"object","properties":{"job_id":{"type":"string","description":"접수 응답에서 받은 작업 ID. 같은 계정의 작업에만 접근할 수 있습니다."},"status":{"type":"string","description":"작업 진행 상태. 완료 여부와 다운로드 가능 여부를 함께 확인합니다.","enum":["waiting","processing","completed","cancelled","failed"]},"resume_revision":{"type":"integer","description":"재시도 회차. 0은 최초 생성이며 재시도할 때 증가합니다.","minimum":0},"operation_revision":{"type":"integer","description":"이번 재시도 요청이 시작한 회차. 현재 최대 회차와 다를 수 있습니다."}}},"api":{"type":"object","description":"호출 메타데이터.","properties":{"success":{"type":"boolean","description":"API 공통 처리 여부. HTTP 상태·업무 결과와 함께 확인합니다."},"cost":{"type":"number","description":"이번 호출에서 차감한 포인트. 무료 조회·재전송은 0."},"pl_id":{"type":"integer","description":"과금 기록 ID. 과금 기록이 있을 때만 포함합니다."}}}}}}}},"default":{"description":"TTS_REQUEST_INVALID (400·413·422): 목소리·문자 수·발화 구조·입력 크기를 확인하세요.\nTTS_AUTH_FAILED (401): 인증키를 확인하세요.\nTTS_ACCESS_DISABLED (403): 계정의 API 이용 제한 상태를 확인하세요.\nTTS_PAYMENT_REQUIRED (403): 최초 결제를 완료한 뒤 이용하세요.\nTTS_INSUFFICIENT_POINTS (402): 필요한 포인트를 충전하세요.\nTTS_NOT_FOUND (404): 작업·후보 ID와 소유 계정을 확인하세요.\nTTS_JOB_CONFLICT (409): 작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요.\nTTS_GENERATION_FAILED (409): 실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요.\nTTS_RESULT_UNAVAILABLE (410): 파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다.\nTTS_TEMPORARILY_UNAVAILABLE (429·503): Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요.\nTTS_BILLING_FAILED (424): 결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요.\nTTS_INTERNAL_ERROR (500): 잠시 후 다시 시도하세요.","content":{"application/json":{"schema":{"type":"object"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","description":"동일 재개 요청에 재사용하는 키 (string)","example":"apick-example-20260921-01"},"utterance_ids[0]":{"type":"string","description":"재시도 API에서 다시 생성할 발화 ID. 예: u001. 접수 API에는 보내지 않습니다. (string)","example":"u001"}},"required":["idempotency_key","utterance_ids[0]"]}}}}}}},"x-code-tables":[{"title":"2. 작업 상태 조회","columns":["구분","내용"],"rows":[["API entry point 소개","GET /rest/tts/jobs/{job_id}"],["기능 소개","접수한 작업의 현재 상태와 음성·자막 다운로드 가능 여부를 확인합니다."],["호출 방식","접수 응답의 job_id를 URL에 넣고 Authorization: Bearer 헤더를 전송합니다. 완료 전에는 2~5초 간격 조회를 권장합니다."],["호출 결과","HTTP 200과 waiting, processing, completed, cancelled, failed 중 하나를 반환합니다."],["응답 결과","result_available은 MP3, subtitles_available은 ASS 자막의 다운로드 가능 여부입니다."]]},{"title":"응답과 상태","columns":["status","의미"],"rows":[["waiting","접수되어 처리 시작을 기다리는 중"],["processing","음성 생성 중"],["completed","완료, MP3·ASS 자막 다운로드 가능"],["cancelled","취소 완료"],["failed","생성 실패"]]},{"title":"상태 오류","columns":["코드","HTTP","원인","해결책"],"rows":[["TTS_REQUEST_INVALID","400·413·422","요청 내용이 올바르지 않음","입력 형식과 지원 조건 확인"],["TTS_AUTH_FAILED","401","인증 실패","인증키 확인"],["TTS_NOT_FOUND","404","작업을 찾을 수 없음","접수 응답의 작업 ID 확인"],["TTS_JOB_CONFLICT","409","현재 상태에서 요청을 처리할 수 없음","최신 상태 확인 후 다시 요청"],["TTS_TEMPORARILY_UNAVAILABLE","429·503","일시적으로 서비스 이용 불가","Retry-After 이후 재시도"],["TTS_GENERATION_FAILED","409","음성 또는 자막 생성 실패","입력 확인 후 새 작업 접수"],["TTS_RESULT_UNAVAILABLE","410","해당 파일의 1회 다운로드 완료 또는 24시간 만료","보관본이 없으면 새 작업 접수"],["TTS_INTERNAL_ERROR","500","분류되지 않은 서비스 오류","잠시 후 재시도"]]}],"x-service-errors":[{"code":"TTS_REQUEST_INVALID","status":"400·413·422","message":"목소리·문자 수·발화 구조·입력 크기를 확인하세요."},{"code":"TTS_AUTH_FAILED","status":401,"message":"인증키를 확인하세요."},{"code":"TTS_ACCESS_DISABLED","status":403,"message":"계정의 API 이용 제한 상태를 확인하세요."},{"code":"TTS_PAYMENT_REQUIRED","status":403,"message":"최초 결제를 완료한 뒤 이용하세요."},{"code":"TTS_INSUFFICIENT_POINTS","status":402,"message":"필요한 포인트를 충전하세요."},{"code":"TTS_NOT_FOUND","status":404,"message":"작업·후보 ID와 소유 계정을 확인하세요."},{"code":"TTS_JOB_CONFLICT","status":409,"message":"작업 상태·재시도 회차·같은 멱등 키의 요청 내용을 확인하세요."},{"code":"TTS_GENERATION_FAILED","status":409,"message":"실패 상태를 확인하고 입력을 수정하거나 새 작업을 접수하세요."},{"code":"TTS_RESULT_UNAVAILABLE","status":410,"message":"파일이 이미 다운로드됐거나 보관 기간이 만료됐습니다."},{"code":"TTS_TEMPORARILY_UNAVAILABLE","status":"429·503","message":"Retry-After 이후 다시 시도하세요. 재시도 요청에는 같은 멱등 키를 사용하세요."},{"code":"TTS_BILLING_FAILED","status":424,"message":"결제를 완료하지 못했습니다. Retry-After 이후 다시 시도하세요."},{"code":"TTS_INTERNAL_ERROR","status":500,"message":"잠시 후 다시 시도하세요."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}