> For clean Markdown of any page, append `.md` to the page URL. > For a complete documentation index, see https://docs.sarvam.ai/llms.txt. > For full documentation content in one file, see https://docs.sarvam.ai/llms-full.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.sarvam.ai/_mcp/server. # FAQs > Frequently asked questions about the Sarvam AI Document Translation API. Get answers about file formats, languages, style guidelines, and job status. Common questions about the [Document Translation API](/api/api-guides-tutorials/doc-translation/overview). If yours isn't here, reach out on [Discord](https://discord.com/invite/5rAsykttcs). ## Getting started #### Is there a single call that takes a file and returns a translated file? No. Document translation is asynchronous, split across five calls: create the job, `PUT` the file to the signed `upload_url`, `POST /start`, poll `live-status`, then trigger `POST /export` and poll `GET /export/status` once per target language. See the [Overview](/api/api-guides-tutorials/doc-translation/overview#how-it-works) for the flow. #### Which file formats are supported? PDF (`.pdf`), Word (`.doc`, `.docx`, `.odt`), spreadsheets (`.xls`, `.xlsx`, `.ods`), presentations (`.ppt`, `.pptx`, `.odp`), and web pages (`.html`, `.xhtml`, `.mhtml`). #### What keeps a job in Accepted? `Accepted` is returned by both job creation and a successful `start` call. If the job never moves past it, either the document was never uploaded to `upload_url`, or `POST /translate/document/jobs/{job_id}/start` was never called. ## Languages #### Which languages are supported? 23: English plus 22 Indic languages, including Assamese, Bengali, Bodo, Dogri, Gujarati, Hindi, Kannada, Kashmiri, Konkani, Maithili, Malayalam, Manipuri, Marathi, Nepali, Odia, Punjabi, Sanskrit, Santali, Sindhi, Tamil, Telugu, and Urdu. See the [Overview](/api/api-guides-tutorials/doc-translation/overview#supported-languages) for the full code table. #### Can I translate into more than one language in a single job? Yes, but capped: `target_language_codes` is an array of 1 to 12 entries per job (out of 23 total supported languages), from one upload. Split into multiple jobs if you need more than 12 target languages from the same document. ## Translation quality #### How do I control terminology and tone? Use `style_guidelines` for instructions that apply to the whole job, and `language_specific_guidelines` for per-language overrides. See [Set Style Guidelines](/api/api-guides-tutorials/doc-translation/how-to/style-guidelines). #### How do I control numeral formatting? Use `use_native_numerals`. Set `true` for language-specific native numerals (e.g. ९८४०९५०९५०), `false` for international digits (0-9), or omit for the application default. See [Use Native Numerals](/api/api-guides-tutorials/doc-translation/how-to/native-numerals). ## Uploads and results #### How is Document Translation billed? **₹5 per 1,000 billable characters**, per target language, after parsing. The service counts translated text characters (not file bytes), rounds charges up, with a minimum of **₹1** when any billable text is present. Each language in `target_language_codes` is billed separately. See [Pricing](/api/getting-started/pricing#document-translation). #### How long is the upload URL valid for? Check `expires_in_hours` on the create-job response (24 hours). Upload promptly after creating the job. #### Does the translated file keep the original layout? Yes: `export` returns the translated document in the same file format as the source; `format` on the export response always matches the original upload. #### Do I export the whole job in one call? No: export is per language. Call `POST /translate/document/jobs/{job_id}/export?lang={code}` once for each of your `target_language_codes`, once that language's own `state` in `live-status` reads `Completed`. The export uses the uploaded file's format by default. Then poll `GET /translate/document/jobs/{job_id}/export/status` until `export_state` is `Completed`. #### What causes a 409 on export? The requested language's translation isn't `Completed` yet, or an export is already in progress for that language and format. Check the per-language `state` inside `live-status`'s `translations` array; a `job_state` of `Running` or `PartiallyCompleted` can still have individual languages ready to export. #### How often should I poll live-status? Every 10-15 seconds is the documented guidance. Poll from a background worker rather than an HTTP request handler, and cap total wait time. #### What is PartiallyCompleted? Some target languages finished translating and others failed. Treat it as a terminal state alongside `Completed`; check each language's own `state` in `translations` to see which succeeded, and export those. #### Why don't I see page\_metrics in the response? `live-status` returns one of two shapes depending on which pipeline processed your file. PDF uploads get the page-granular shape (`page_metrics`, per-language `pages_completed`/`pages_failed`). Word, spreadsheet, and presentation uploads get the document-granular shape instead (`translation_metrics`, per-language `segments_completed`/`segments_total`), with no `page_metrics` field in that shape at all, rather than a null value. See the [Overview](/api/api-guides-tutorials/doc-translation/overview#page-granular-vs-document-granular-responses) for both response examples. ## Related * [Document Translation Overview](/api/api-guides-tutorials/doc-translation/overview) * [Credits & Rate Limits](/api/getting-started/ratelimits) > Frequently asked questions about the Sarvam AI Document Translation API. Get answers about file formats, languages, style guidelines, and job status.