- 01
API 키 발급
belindoc.com에 로그인한 뒤 오른쪽 위 프로필 메뉴에서 개발자 센터를 열고 키를 만듭니다. 키는 ft_로 시작하며 전체 값은 생성 직후 한 번만 표시됩니다.
- 02
파일 업로드
먼저 사전 서명 URL을 받은 뒤 PUT으로 파일을 바로 올립니다. URL은 10분간 유효하며, 응답의 objectKey는 다음 단계에서 사용합니다.
bash
# 1. 사전 서명된 업로드 URL 발급 (10분간 유효)
curl -X POST https://belindoc.com/api/external/translate/batchPresignedUploadUrl \
-H "X-Api-Key: $BELINDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileNameList": ["contract.pdf"]}'
# → data[0].persignedUploadUrl / data[0].objectKey
# 2. PUT으로 파일을 해당 URL에 바로 업로드
curl -X PUT "<persignedUploadUrl>" --upload-file contract.pdf
- 03
번역 제출
fileList, sourceLanguage, targetLanguage, model은 필수입니다. 원문 언어에 AnyLanguage를 넣으면 자동 감지되며, 모델 이름은 하드코딩하지 말고 getModelList 응답을 기준으로 하세요.
bash
curl -X POST https://belindoc.com/api/external/translate/batchSubmitTranslateTask \
-H "X-Api-Key: $BELINDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fileList": [{ "fileName": "contract.pdf", "fileObjectKey": "<objectKey>" }],
"sourceLanguage": "AnyLanguage",
"targetLanguage": "zh-CN",
"model": "Gemini-2.5-Flash"
}'
# → { "code": "200", "data": { "batchNo": "...", "fileList": [ ... ] } }
- 04
상태 조회 후 다운로드
batchNo로 status가 3이 될 때까지 조회한 다음 다운로드 URL을 요청합니다. 이 엔드포인트는 SSE로 응답하며 링크는 [DONE] 이벤트에 담겨 옵니다.
bash
# 작업 폴링: status = 3이면 번역 결과 준비 완료
curl -X POST https://belindoc.com/api/external/translate/searchTranslateFileByBatchNo \
-H "X-Api-Key: $BELINDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"batchNo": "<batchNo>"}'
# 번역 결과 다운로드 URL 발급: SSE 응답이며 링크는 [DONE] 이벤트에 담김
curl -N -X POST https://belindoc.com/api/external/translate/getTranslateS3DownloadUrl \
-H "X-Api-Key: $BELINDOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"translateOrderNo": "<translateOrderNo>", "urlType": 2}'
# event:[DONE]
# data:{"url":"https://..."}
http
POST /api/external/translate/getModelList HTTP/1.1
Host: belindoc.com
Content-Type: application/json
X-Api-Key: ft_xxxxxxxxxxxxxxxxxxxxxxxx
language: zh
{}
json
{
"code": "200",
"msg": null,
"requestId": "8f1c…",
"data": { }
}
- X-Api-Key 헤더
- 모든 요청에 키를 담아 보냅니다. 키가 없거나 비활성화·만료되었거나 호출 IP가 허용 목록 밖이면 비즈니스 로직에 들어가기 전에 차단됩니다.
- language 헤더
- 선택 항목으로 응답 msg의 언어를 정합니다. 값이 없으면 en입니다. 사이트가 지원하는 9개 언어(en, zh, zh-Hant, ja, ko, fr, ru, de, ar)를 받습니다.
- 키는 개인 계정에만 적용됩니다
- 키는 언제나 그것을 만든 개인 계정으로 해석됩니다. 파일은 플랫폼 스토리지에 저장되고 사용량도 해당 계정에서 차감됩니다. 조직 전용 작업 공간은 API로 접근하지 않습니다.
- 공통 응답 구조
- 모든 엔드포인트가 같은 래퍼로 응답합니다. code가 200이면 성공이고, 그 외에는 업무 오류이며 msg에 해당 언어 메시지가 담깁니다.
- JWT도 서명도 필요 없음
- 웹 엔드포인트를 지키는 토큰·서명 필터는 /external/를 그대로 통과시킵니다. 키가 유일한 자격 증명이므로 비밀번호처럼 다루고 서버 쪽에만 두세요.
- status: 0 대기 · 1 분석 중 · 2 번역 중 · 3 완료 · 4 실패 · 5 취소됨
- urlType: 1 원본 · 2 번역본 · 3 좌우 대조 · 4 상하 대조 · -1 EPUB 미리보기
01
업로드 URL 발급
POST/external/translate/batchPresignedUploadUrl
파일의 사전 서명 업로드 URL을 한 번에 받습니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| fileNameList | array[string] | 필수 | 업로드 URL을 받을 파일명 |
| 필드 | 타입 | 설명 |
|---|
| persignedUploadUrl | string | 사전 서명 PUT 주소, 10분 유효 |
| objectKey | string | 제출 시 함께 보낼 저장 키 |
| fileName | string | 원본 파일명 |
| storageType | number | 파일이 있는 저장소 유형 |
예시
요청
{
"fileNameList": ["contract.pdf"]
}
응답
{
"code": "200",
"data": [
{
"persignedUploadUrl": "https://s3.../contract.pdf?X-Amz-Signature=…",
"objectKey": "translate/10086/2026/contract.pdf",
"fileName": "contract.pdf",
"storageType": 1
}
]
}
02
스캔본 판별
POST/external/translate/isOcr
제출 전에 업로드한 파일이 스캔본인지 판별합니다. 필요한 경우에만 OCR을 켜기 위한 사전 확인입니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| fileObjectKey | string | 필수 | 사전 서명 응답의 objectKey |
| storageType | number | 필수 | 파일이 있는 저장소 유형 |
| 필드 | 타입 | 설명 |
|---|
| isOcr | number | 1이면 스캔본 |
| isDoubleDeck | number | 1이면 텍스트 레이어가 있는 스캔본 |
예시
요청
{
"fileObjectKey": "translate/10086/2026/contract.pdf",
"storageType": 1
}
응답
{
"code": "200",
"data": { "isOcr": 1, "isDoubleDeck": 0 }
}
03
번역 제출
POST/external/translate/batchSubmitTranslateTask
일괄 번역 작업을 제출하고 batchNo와 파일별 주문번호를 반환합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| fileList | array | 필수 | 번역할 파일 목록 |
| fileName | string | 필수 | 원본 파일명 |
| fileObjectKey | string | 필수 | 사전 서명 응답의 objectKey |
| isOcrFile | number | — | 1이면 이 파일을 스캔본으로 처리, isOcr 결과를 넣으세요 |
| sourceLanguage | string | 필수 | 원문 언어 코드, AnyLanguage는 자동 감지 |
| targetLanguage | string | 필수 | 목표 언어 코드 |
| model | string | 필수 | 모델 버전, getModelList에서 조회 |
| isOcr | number | — | 1이면 OCR 수행, 기본 0 |
| isMath | number | — | 1이면 수식 레이아웃 유지, 기본 0 |
| translateStyle | number | — | 번역 스타일 프리셋 |
| terminologyCollectionId | string | — | 적용할 용어집 ID. 용어집 생성과 관리는 현재 웹에서만 가능하며 API로는 제공하지 않습니다 |
| 필드 | 타입 | 설명 |
|---|
| batchNo | string | 제출 시 반환되는 배치 번호 |
| fileList | array | 번역할 파일 목록 |
| balanceHint | number | 1이면 잔여 사용량이 얼마 남지 않음 |
예시
요청
{
"fileList": [
{ "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
],
"sourceLanguage": "AnyLanguage",
"targetLanguage": "zh-CN",
"model": "Gemini-2.5-Flash",
"isOcr": 0,
"terminologyCollectionId": "66f1c2a4b8d3e5f7a9c1b2d3"
}
응답
{
"code": "200",
"data": {
"batchNo": "B20260828173001",
"fileList": [
{ "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
],
"balanceHint": 0
}
}
04
배치의 작업 조회
POST/external/translate/searchTranslateFileByBatchNo
배치 번호로 해당 배치의 모든 작업을 조회합니다. 진행 상태 조회는 이 엔드포인트를 사용하세요.
| 필드 | 타입 | 필수 | 설명 |
|---|
| batchNo | string | 필수 | 제출 시 반환되는 배치 번호 |
| 필드 | 타입 | 설명 |
|---|
| translateOrderNo | string | 작업 주문번호 |
| batchNo | string | 제출 시 반환되는 배치 번호 |
| sourceFileName | string | 원본 파일명 |
| status | number | 작업 상태 — 위 범례 참고 |
| textNumber | number | 이 작업의 과금 글자 수 |
| targetFileUrl | string | 번역본 파일 URL |
| targetFileUrl2 | string | 중국 본토 대체 URL |
| xComparisonS3Url | string | 좌우 대조 파일 |
| yComparisonS3Url | string | 상하 대조 파일 |
| freeTranslateQuota | number | 무료 사용량에서 차감된 페이지 |
| walletTranslateQuota | number | 유료 사용량에서 차감된 페이지 |
| createTime | number | 생성 시각, epoch 밀리초 |
| startTime | number | 시작 시각, epoch 밀리초 |
| endTime | number | 완료 시각, epoch 밀리초 |
| errorCode | string | status가 4일 때의 실패 코드 |
예시
요청
{
"batchNo": "B20260828173001"
}
응답
{
"code": "200",
"data": [
{
"translateOrderNo": "T20260828173002",
"batchNo": "B20260828173001",
"sourceFileName": "contract.pdf",
"status": 3,
"textNumber": 4820,
"targetFileUrl": "https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"
}
]
}
05
번역 이력 조회
POST/external/translate/searchTranslateFilePage
이 계정의 번역 이력을 페이지 단위로 조회합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| pageNum | number | 필수 | 페이지 번호, 1부터 |
| pageSize | number | 필수 | 페이지당 건수 |
| status | number | — | 작업 상태 — 위 범례 참고 |
| fileType | string | — | 파일 유형으로 필터, 예: PDF |
| sourceFileName | string | — | 파일명으로 필터 |
| 필드 | 타입 | 설명 |
|---|
| records | array | 현재 페이지 데이터 |
| total | number | 전체 건수 |
| current | number | 현재 페이지 |
| pages | number | 전체 페이지 수 |
06
작업 상세 조회
POST/external/translate/getTranslateFileDetail
주문번호로 단일 작업의 상세를 조회합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| translateOrderNo | string | 필수 | 작업 주문번호 |
| 필드 | 타입 | 설명 |
|---|
| translateOrderNo | string | 작업 주문번호 |
| batchNo | string | 제출 시 반환되는 배치 번호 |
| sourceFileName | string | 원본 파일명 |
| status | number | 작업 상태 — 위 범례 참고 |
| textNumber | number | 이 작업의 과금 글자 수 |
| targetFileUrl | string | 번역본 파일 URL |
| targetFileUrl2 | string | 중국 본토 대체 URL |
| xComparisonS3Url | string | 좌우 대조 파일 |
| yComparisonS3Url | string | 상하 대조 파일 |
| freeTranslateQuota | number | 무료 사용량에서 차감된 페이지 |
| walletTranslateQuota | number | 유료 사용량에서 차감된 페이지 |
| createTime | number | 생성 시각, epoch 밀리초 |
| startTime | number | 시작 시각, epoch 밀리초 |
| endTime | number | 완료 시각, epoch 밀리초 |
| errorCode | string | status가 4일 때의 실패 코드 |
07
다운로드 URL 발급
POST/external/translate/getTranslateS3DownloadUrl
원본·번역본·대조본의 다운로드 URL을 받습니다(SSE 응답).
| 필드 | 타입 | 필수 | 설명 |
|---|
| translateOrderNo | string | 필수 | 작업 주문번호 |
| urlType | number | 필수 | 어떤 파일을 받을지 — 위 범례 참고 |
| isWatermark | number | — | 0이면 워터마크 제거(요금제 지원 시) |
| 필드 | 타입 | 설명 |
|---|
| url | string | 다운로드 링크, [DONE] 이벤트에 포함 |
| url2 | string | 중국 본토 대체 링크(있을 때) |
예시
요청
{
"translateOrderNo": "T20260828173002",
"urlType": 2,
"isWatermark": 0
}
응답
event:[PROCESS]
data:
event:[DONE]
data:{"translateOrderNo":"T20260828173002","url":"https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"}
08
사용 가능 모델 조회
POST/external/translate/getModelList
model에 넣을 수 있는 값과 각 모델의 사용량 계수를 조회합니다.
파라미터 없음 — 빈 JSON 본문을 보내세요.
| 필드 | 타입 | 설명 |
|---|
| version | string | model에 넣을 값 |
| modelType | number | 내부 모델 계열 |
| vipType | number | 사용에 필요한 요금제 |
| coefficient | number | 이 모델의 사용량 계수 |
| groupType | number | 소속 그룹 |
09
지원 언어 조회
POST/external/translate/getLanguageEnum
지원하는 79개 언어 코드와 각 언어별 표기를 조회합니다.
파라미터 없음 — 빈 JSON 본문을 보내세요.
| 필드 | 타입 | 설명 |
|---|
| {locale} | object | 로케일 → 언어 코드 → 표기 |
예시
응답
{
"code": "200",
"data": {
"en": {
"AnyLanguage": "Any language",
"zh-CN": "Simplified Chinese",
"…": "…"
},
"zh": {
"AnyLanguage": "任意语言",
"zh-CN": "简体中文",
"…": "…"
},
"…": {}
}
}
- status: 0 시작 전 · 1 진행 중 · 2 완료 · 3 실패 · 4 취소됨
- step: 1 음성 인식 · 2 자막 번역 · 3 음성 생성
- stepStatus: 0 시작 전 · 1 진행 중 · 2 완료 · 3 실패
- subtitleType: 0 자막 없음 · 1 번역 자막 · 2 원문 자막 · 3 이중 자막
01
업로드 URL 발급
POST/external/videoTranslate/batchPresignedUploadUrl
영상 파일의 사전 서명 업로드 URL을 한 번에 받습니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| fileNameList | array[string] | 필수 | 업로드 URL을 받을 파일명 |
| 필드 | 타입 | 설명 |
|---|
| persignedUploadUrl | string | 사전 서명 PUT 주소, 10분 유효 |
| objectKey | string | 제출 시 함께 보낼 저장 키 |
| fileName | string | 원본 파일명 |
02
영상 제출
POST/external/videoTranslate/submitVideoTranslate
영상 번역 작업을 제출합니다. videoTaskParam에 음성·자막·폰트 설정을 담습니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| sourceLanguage | string | 필수 | 원문 언어 코드, AnyLanguage는 자동 감지 |
| targetLanguage | string | 필수 | 목표 언어 코드 |
| sourceFileObjectKey | string | 필수 | 업로드한 영상의 objectKey |
| videoFileName | string | 필수 | 원본 영상 파일명 |
| videoTaskParam | object | 필수 | 음성·자막·폰트 설정 |
| voiceRole | string | — | 더빙 음색, clone은 원 화자 복제 |
| subtitleType | number | — | 삽입할 자막 — 위 범례 참고 |
videoTaskParam의 나머지 필드 (25개, 모두 생략 가능)
| 필드 | 타입 | 설명 |
|---|
| recognType | number | 음성 인식 엔진, 기본 12 — 그대로 두세요 |
| modelName | string | 인식 모델, 기본 tiny |
| splitType | string | 분할 방식, 기본 all |
| isCuda | boolean | GPU 가속 사용 여부, 기본 false |
| translateType | number | 자막 번역 엔진, 기본 14 — 그대로 두세요 |
| ttsType | number | 음성 합성 엔진, 기본 15 — 그대로 두세요 |
| voiceRate | string | 더빙 속도, 예 +10%, 기본 +0% |
| volume | string | 더빙 음량, 예 +10%, 기본 +0% |
| pitch | string | 더빙 음높이, 예 +5Hz, 기본 +0Hz |
| voiceAutorate | boolean | 더빙 길이를 원본에 자동 맞춤, 기본 true |
| videoAutorate | boolean | 영상 길이를 더빙에 자동 맞춤, 기본 true |
| appendVideo | boolean | 길이가 모자라면 영상을 반복해 채움, 기본 true |
| isSeparate | boolean | 음성과 배경음을 따로 출력, 기본 false |
| onlyVideo | boolean | 영상만 출력하고 자막 파일은 만들지 않음, 기본 false |
| fontsize | number | 자막 글자 크기, 기본 14 |
| fontname | string | 자막 글꼴 이름, 생략하면 서버 기본값 |
| fontcolor | string | 자막 글자 색, #RRGGBB 또는 ASS 색상값 |
| fontbold | boolean | 자막 굵게 여부 |
| subtitlePosY | number | 자막 아래쪽 여백 비율, 0-90, 생략하면 하단 |
| subtitlePosX | number | 자막 가로 중심의 왼쪽 기준 비율, 5-95, 50이 가운데 |
| fontbordercolor | string | 자막 외곽선 색, #RRGGBB / #RRGGBBAA / ASS 색상값 |
| backgroundcolor | string | 자막 배경 상자 색, #RRGGBB / #RRGGBBAA / ASS 색상값 |
| outline | number | 외곽선 두께 0-10, 0이면 외곽선 없음 |
| shadow | number | 그림자 크기 0-10, 0이면 그림자 없음 |
| borderStyle | number | 테두리 스타일: 1 일반 외곽선/그림자, 3 줄별 사각 배경 |
| 필드 | 타입 | 설명 |
|---|
| videoTranslateOrderNo | string | 영상 작업 주문번호 |
| videoFileName | string | 원본 영상 파일명 |
| videoDuration | number | 영상 길이(초) |
| status | number | 작업 상태 — 위 범례 참고 |
| step | number | 현재 처리 단계 — 위 범례 참고 |
| stepStatus | number | 현재 단계의 상태 — 위 범례 참고 |
| targetFileUrl | string | 번역본 파일 URL |
| sourceSubtitlesUrl | string | 원문 자막 파일 URL |
| targetSubtitlesUrl | string | 번역 자막 파일 URL |
| freeTranslateQuota | number | 무료 사용량에서 차감된 페이지 |
| walletTranslateQuota | number | 유료 사용량에서 차감된 페이지 |
| errorMessage | string | 실패 시 사유 |
예시
요청
{
"sourceLanguage": "ja",
"targetLanguage": "zh-CN",
"sourceFileObjectKey": "video/10086/2026/lecture.mp4",
"videoFileName": "lecture.mp4",
"videoTaskParam": { "voiceRole": "clone", "subtitleType": 1 }
}
03
영상 비용 예상
POST/external/videoTranslate/videoTranslateQuotaCalculate
제출 전에 길이·음색·자막 유형으로 사용량을 미리 계산합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoDuration | number | 필수 | 영상 길이(초) |
| voiceRole | string | 필수 | 더빙 음색, clone은 원 화자 복제 |
| subtitleType | number | 필수 | 삽입할 자막 — 위 범례 참고 |
| 필드 | 타입 | 설명 |
|---|
| translateQuota | number | 이 작업의 총 소모 사용량 |
| videoDurationTranslateQuota | number | 길이로 환산한 사용량 |
| thirtySecondQuota | number | 30초당 사용량 |
| quotaCoefficient | number | 기준에 곱해지는 계수 |
04
영상 이력 조회
POST/external/videoTranslate/searchVideoTranslatePage
이 계정의 영상 번역 이력을 페이지 단위로 조회합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| pageNum | number | 필수 | 페이지 번호, 1부터 |
| pageSize | number | 필수 | 페이지당 건수 |
| status | number | — | 작업 상태 — 위 범례 참고 |
| 필드 | 타입 | 설명 |
|---|
| records | array | 현재 페이지 데이터 |
| total | number | 전체 건수 |
| current | number | 현재 페이지 |
| pages | number | 전체 페이지 수 |
05
작업 상세 조회
POST/external/videoTranslate/getVideoTranslateDetail
단일 영상 작업을 조회합니다(진행률과 결과물 URL 포함).
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateOrderNo | string | 필수 | 영상 작업 주문번호 |
| 필드 | 타입 | 설명 |
|---|
| videoTranslateOrderNo | string | 영상 작업 주문번호 |
| videoFileName | string | 원본 영상 파일명 |
| videoDuration | number | 영상 길이(초) |
| status | number | 작업 상태 — 위 범례 참고 |
| step | number | 현재 처리 단계 — 위 범례 참고 |
| stepStatus | number | 현재 단계의 상태 — 위 범례 참고 |
| targetFileUrl | string | 번역본 파일 URL |
| sourceSubtitlesUrl | string | 원문 자막 파일 URL |
| targetSubtitlesUrl | string | 번역 자막 파일 URL |
| freeTranslateQuota | number | 무료 사용량에서 차감된 페이지 |
| walletTranslateQuota | number | 유료 사용량에서 차감된 페이지 |
| errorMessage | string | 실패 시 사유 |
06
영상 작업 취소
POST/external/videoTranslate/cancelVideoTranslateHistory
아직 끝나지 않은 영상 작업을 취소합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateOrderNo | string | 필수 | 영상 작업 주문번호 |
07
자막 가져오기
POST/external/videoTranslate/getVideoTranslateSubtitles
편집용으로 원문·번역 자막을 가져옵니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateOrderNo | string | 필수 | 영상 작업 주문번호 |
| 필드 | 타입 | 설명 |
|---|
| sourceSubtitlesUrl | string | 원문 자막 파일 URL |
| targetSubtitlesUrl | string | 번역 자막 파일 URL |
08
편집한 자막 제출
POST/external/videoTranslate/submitVideoRewrite
편집한 자막을 보내 영상을 다시 생성합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateOrderNo | string | 필수 | 영상 작업 주문번호 |
| sourceSubtitlesTxt | string | 필수 | 편집한 원문 자막 |
| targetSubtitlesTxt | string | 필수 | 편집한 번역 자막 |
| videoTaskParam | object | — | 음성·자막·폰트 설정 |
videoTaskParam의 나머지 필드 (25개, 모두 생략 가능)
| 필드 | 타입 | 설명 |
|---|
| recognType | number | 음성 인식 엔진, 기본 12 — 그대로 두세요 |
| modelName | string | 인식 모델, 기본 tiny |
| splitType | string | 분할 방식, 기본 all |
| isCuda | boolean | GPU 가속 사용 여부, 기본 false |
| translateType | number | 자막 번역 엔진, 기본 14 — 그대로 두세요 |
| ttsType | number | 음성 합성 엔진, 기본 15 — 그대로 두세요 |
| voiceRate | string | 더빙 속도, 예 +10%, 기본 +0% |
| volume | string | 더빙 음량, 예 +10%, 기본 +0% |
| pitch | string | 더빙 음높이, 예 +5Hz, 기본 +0Hz |
| voiceAutorate | boolean | 더빙 길이를 원본에 자동 맞춤, 기본 true |
| videoAutorate | boolean | 영상 길이를 더빙에 자동 맞춤, 기본 true |
| appendVideo | boolean | 길이가 모자라면 영상을 반복해 채움, 기본 true |
| isSeparate | boolean | 음성과 배경음을 따로 출력, 기본 false |
| onlyVideo | boolean | 영상만 출력하고 자막 파일은 만들지 않음, 기본 false |
| fontsize | number | 자막 글자 크기, 기본 14 |
| fontname | string | 자막 글꼴 이름, 생략하면 서버 기본값 |
| fontcolor | string | 자막 글자 색, #RRGGBB 또는 ASS 색상값 |
| fontbold | boolean | 자막 굵게 여부 |
| subtitlePosY | number | 자막 아래쪽 여백 비율, 0-90, 생략하면 하단 |
| subtitlePosX | number | 자막 가로 중심의 왼쪽 기준 비율, 5-95, 50이 가운데 |
| fontbordercolor | string | 자막 외곽선 색, #RRGGBB / #RRGGBBAA / ASS 색상값 |
| backgroundcolor | string | 자막 배경 상자 색, #RRGGBB / #RRGGBBAA / ASS 색상값 |
| outline | number | 외곽선 두께 0-10, 0이면 외곽선 없음 |
| shadow | number | 그림자 크기 0-10, 0이면 그림자 없음 |
| borderStyle | number | 테두리 스타일: 1 일반 외곽선/그림자, 3 줄별 사각 배경 |
| 필드 | 타입 | 설명 |
|---|
| videoTranslateRewriteOrderNo | string | 자막 재생성 주문번호 |
| status | number | 작업 상태 — 위 범례 참고 |
| targetFileUrl | string | 번역본 파일 URL |
09
재생성 진행 상황 조회
POST/external/videoTranslate/getVideoTranslateRewriteDetail
자막 재생성 작업의 상태를 조회합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateRewriteOrderNo | string | 필수 | 자막 재생성 주문번호 |
| 필드 | 타입 | 설명 |
|---|
| status | number | 작업 상태 — 위 범례 참고 |
| targetFileUrl | string | 번역본 파일 URL |
| targetSubtitlesUrl | string | 번역 자막 파일 URL |
| errorMessage | string | 실패 시 사유 |
10
재생성 비용 예상
POST/external/videoTranslate/videoTranslateRewriteQuotaCalculate
자막 재생성에 드는 사용량을 미리 계산합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|
| videoTranslateRewriteOrderNo | string | 필수 | 자막 재생성 주문번호 |
| 필드 | 타입 | 설명 |
|---|
| translateQuota | number | 이 작업의 총 소모 사용량 |
| quotaCoefficient | number | 기준에 곱해지는 계수 |
- subscriptionStatus: 1 처리 대기 · 2 구독 중 · 3 구독 해지 · 4 취소됨
- interval: 1 일 · 2 주 · 3 월 · 4 년
01
잔여 사용량 조회
POST/external/user/getMyWalletInfo
이 키가 속한 계정의 지갑을 조회합니다. 페이지 사용량, OCR 사용량, 워터마크 제거 횟수, 추천 리워드 잔액.
파라미터 없음 — 빈 JSON 본문을 보내세요.
| 필드 | 타입 | 설명 |
|---|
| userId | number | 이 키가 속한 계정 ID |
| translateQuota | number | 남은 페이지 사용량 |
| advancedTranslateQuota | number | 남은 고급 모델 사용량 |
| ocrTranslateQuota | number | 남은 OCR 사용량 |
| accelerationCardNumber | number | 남은 가속 카드 수 |
| totalFreeTranslateQuota | number | 이번 주기에 지급된 무료 페이지 |
| useFreeTranslateQuota | number | 이번 주기에 사용한 무료 페이지 |
| totalFreeOcrTranslateQuota | number | 이번 주기에 지급된 무료 OCR 페이지 |
| useFreeOcrTranslateQuota | number | 이번 주기에 사용한 무료 OCR 페이지 |
| freeWatermarkQuota | number | 남은 워터마크 제거 횟수 |
| daysFreeWatermarkQuota | number | 하루에 지급되는 워터마크 제거 횟수 |
| usedDaysFreeWatermarkQuota | number | 오늘 사용한 워터마크 제거 횟수 |
| rewardBalance | number | 추천 리워드 잔액 |
| rewardTotal | number | 누적 추천 리워드 |
예시
응답
{
"code": "200",
"data": {
"userId": 10086,
"translateQuota": 12000,
"advancedTranslateQuota": 0,
"ocrTranslateQuota": 800,
"totalFreeTranslateQuota": 500,
"useFreeTranslateQuota": 132
}
}
02
요금제 조회
POST/external/user/getMySubscriptionInfo
이 키가 속한 계정의 요금제를 조회합니다. 등급과 현재 주기, 그리고 동시 작업 수·파일 크기·영상 길이 한도.
파라미터 없음 — 빈 JSON 본문을 보내세요.
| 필드 | 타입 | 설명 |
|---|
| vipName | string | 요금제 이름 |
| vipType | number | 요금제 등급 |
| subscriptionStatus | number | 구독 상태 — 위 범례 참고 |
| interval | number | 결제 주기 — 위 범례 참고 |
| startTime | number | 현재 주기 시작, epoch 밀리초 |
| endTime | number | 현재 주기 종료, epoch 밀리초 |
| translateQuota | number | 주기마다 지급되는 페이지 |
| advancedTranslateQuota | number | 주기마다 지급되는 고급 모델 페이지 |
| freeTranslateQuota | number | 주기마다 지급되는 무료 페이지 |
| freeTranslateQuotaInterval | number | 무료 페이지 재설정 주기: 1 일 · 2 주 · 3 월 |
| concurrenceTask | number | 동시에 실행 가능한 문서 작업 수 |
| uploadFileSize | number | 업로드 크기 한도(MB) |
| videoDurationLimit | number | 영상 길이 한도(분) |
| videoTranslateConcurrency | number | 동시에 실행 가능한 영상 작업 수 |
| videoFileSize | number | 영상 파일 크기 한도(MB) |
| 코드 | 의미 | 조치 |
|---|
| 30306 | 유효하지 않은 API 키 | ft_ 접두사를 포함해 키를 온전히 복사했는지 확인하세요. 삭제된 키도 같은 코드를 반환합니다. |
| 30307 | 비활성화된 키 | 개발자 센터에서 다시 활성화하거나 다른 키로 바꾸세요. |
| 30308 | 만료된 키 | 만료일을 뒤로 미루거나 새 키를 만드세요. |
| 30309 | 호출 IP가 허용 목록에 없음 | 서버의 아웃바운드 IP를 키의 허용 목록에 추가하거나 목록을 비우세요. |
| 30312 | 관리자가 차단한 키 | 고객지원에 문의하세요. 개발자 센터에서는 해제할 수 없습니다. |
번역 자체의 오류(사용량 부족, 미지원 파일, 중복 제출 등)는 별도 코드를 쓰며 msg는 language 헤더의 언어로 옵니다. 분기 처리는 msg가 아니라 code로 하세요.
- 같은 사용량, 별도 과금 없음
- API 호출은 웹과 같은 페이지·영상 사용량을 같은 모델 계수로 차감합니다. API 전용 요금은 없습니다.
- 워터마크 규칙 동일
- 무료 구간에서는 PDF 번역본에 워터마크가 들어갑니다. 브라우저에서 받은 것과 똑같으며 API로 받아도 사라지지 않습니다.
- 호출 횟수는 제출 계열만 집계
- 키의 호출 횟수는 batchSubmitTranslateTask, submitVideoTranslate, submitVideoRewrite에서만 늘어납니다. 조회 계열은 아무리 폴링해도 집계되지 않습니다.
- 계정당 제출은 순차 처리
- 제출은 계정 단위로 잠깁니다. 앞선 제출이 접수 중일 때 다시 보내면 중복 작업 오류가 돌아오니, 병렬로 던지지 말고 잠시 뒤 재시도하세요.
- OCR은 기본 꺼짐
- isOcr는 스캔 문서일 때만 켜세요. OCR은 페이지 사용량에 더해 OCR 하위 한도까지 차감하므로, 텍스트 PDF에 켜두면 두 배로 소모됩니다. 확실하지 않으면 isOcr 엔드포인트로 먼저 확인하세요.
HTTP를 직접 짜기 번거롭다면
같은 기능을 MCP 도구로도 제공합니다. AI 에이전트가 바로 호출할 수 있어 HTTP 코드를 한 줄도 쓰지 않아도 됩니다.