Proofread

For AI agents →2 calls free, no credit card required.
Transcribe a video and translate the transcript into your target languages, returning one editable subtitle file per language plus the source-language transcript. Review or correct the wording, then send the files to Video translation as subtitles[language] so the dub speaks exactly what you approved. Returns 202 Accepted with a task_id; poll GET /v1/tasks/:task_id until the task reaches a terminal status.
POST/v1/proofreadmultipart/form-data
API URLhttps://api.sonilo.com/v1/proofread

Send API requests to https://api.sonilo.com. The platform.sonilo.com/docs pages are documentation only and are not API endpoints.

curl -X POST https://api.sonilo.com/v1/proofread \
  -H "Authorization: Bearer sk_your_api_key" \
  -F "[email protected]" \
  -F 'languages=["ja","zh_cn"]'
# => {"task_id": "5dfca023-...", "status": "processing"}

curl https://api.sonilo.com/v1/tasks/5dfca023-... \
  -H "Authorization: Bearer sk_your_api_key"
# poll until "status" is "succeeded" or "failed"
{
  "task_id": "5dfca023-…",
  "status": "processing"
}

Authorization

Authenticate via Bearer token. Generate keys at the API Keys page and pass them in the Authorization header on every request. Keep keys server-side, for example in SONILO_API_KEY.

Authorization: Bearer sk_your_api_key

Store the key server-side, commonly as SONILO_API_KEY. A 401 means the key is missing, invalid, or revoked. A 403 means the key is valid but the account does not have access to that endpoint or workspace.

Body Parameters

videofile
Video file upload. Provide either video or video_url, not both. The video must contain an audio track. Max file size: default 300MB. Max duration: 300 sec.
video_urlstring
URL to a video file. Provide either video or video_url, not both. Must be a public URL — private/internal addresses are rejected. The video must contain an audio track. Max file size: default 300MB. Max duration: 300 sec.
languagesstring
Optional JSON array of target language codes, for example ["ja","zh_cn"]. The supported codes are listed below; they are the same ones Video translation accepts, so a proofread script can go straight into a dub. Omit it, or send [], to get the source-language transcript only. Billed per language: two languages cost twice a transcript-only request.
en
English
zh_cn
Chinese (Simplified)
ja
Japanese
ko
Korean
pt
Portuguese
pt_br
Portuguese (Brazil)
es
Spanish
es_419
Spanish (Latin America)
de
German
fr
French
it
Italian
ru
Russian
th
Thai
ar
Arabic
tr
Turkish
vi
Vietnamese
id
Indonesian
ta
Tamil
ml
Malayalam
kn
Kannada
gu
Gujarati
pa_in
Punjabi (India)
sd_in
Sindhi (India)
hi
Hindi

pt and es are unqualified Portuguese and Spanish. Request pt_br or es_419 when the region matters — they are additional targets, not replacements. Punjabi and Sindhi are available in their Indian variants only — that is what pa_in and sd_in say.

source_languagestring
Optional. Tells transcription which language to expect, which helps on short, noisy or mixed-language audio. Omit it to have the language detected. Either way, the response's source_language reports the language the transcript is in, and the source-language subtitle file is keyed by that code. Accepts the same codes as languages; an unsupported code is rejected with 422 before anything is charged.

Response

task_idstring
The task identifier. Poll the Get Task endpoint (GET /v1/tasks/:task_id) until the task reaches a terminal status.
statusstring
Always processing on submission — transcription and translation run asynchronously.

Next steps