What is live today
Text translation, file translation and document jobs are coming.
Their request and response shapes are not published yet, so this page does not document them.
The sections on billing below already apply to them.
Authentication
Send your API key as a bearer token, the same as every other Vaquill endpoint.
A key without the scope receives a
403 that names the scope it is missing.
Pages, not characters or tokens
Translation is billed in pages. Nothing is counted in tokens.- Text: one page is 2,000 characters. A request is charged
ceil(characters / 2000)pages. - Documents: one page of the document is one page.
Your account’s monthly free page allowance does apply to API calls.
Pages are pooled per account, not per credential, and a charge spends free pages before paid ones.
So the
free figure on your balance is usually not 0, and the first few pages of a month may cost you nothing.
Budget from pagesRemaining, which is free plus paid.
What a page costs
Pages are bought in packs, priced in Indian rupees with GST, and the pack list is live:priceInr, baseInr and gstInr are in paise (1/100 of a rupee), the unit the payment is charged in.
priceInr is GST-inclusive and is what you pay.
pricePerPageInr is in rupees and is a display figure.
This route is free and needs translate:read.
Larger packs are cheaper per page, and both pools have their own packs.
Read the list rather than hardcoding a price.
Translation pages are sold in INR only.
They are not bought with API credits and there is no USD price for a page.
The pricing matrix at
GET /api/v1/api-credits/pricing lists the translation routes with unit: "page" and a usdCost of 0.
That 0 means “not priced in dollars”, not “free”: the credits figure on those rows counts pages, and one page is what the call spends.Two pools, and which one this API spends
Your balance holds two separate pools of pages.translationpays for translating text, and is the only pool these endpoints spend.ocrpays for standalone text extraction, which this API surface does not currently expose.
translation pool.
The ocr figure is reported so it is visible to an account that holds OCR pages, not because a translation call will draw on it.
Pages are also separate from API credits.
GET /api/v1/credits/balance reports credits and says nothing about pages.
GET /api/v1/translation/balance reports pages and says nothing about credits.
Neither pays for the other.
Pages are pooled at the organization
If your key belongs to an organization, the balance is the organization’s pooled balance, not a personal one. Every member spends from the same pool, so a colleague’s large job changes the number you see.List the languages
Read the list instead of hard-coding it. A language code you invent is refused with a422 before any page is charged, and the error names what is supported.
Regional tags are narrowed to the language, so hi-IN is read as hi.
auto, English and the 22 scheduled languages.
autois a source only. Sending it as the target language is a422.directionisrtlfor Urdu, Sindhi and Kashmiri. Honour it when you display translated output.- This route is free and rate limited like every key-authenticated route.
Check your balance
pagesRemaining, which is free plus paid.
A charge spends free first, so a job can run while paid stays untouched.
Retries and Idempotency-Key
Routes that charge pages accept an Idempotency-Key header.
Send a fresh unique value for each logical request and reuse it on a retry.
A retry with the same key returns the original response and does not charge again.
When you run out of pages
A request your balance cannot cover returns402.
Nothing is translated and nothing is charged.
pagesNeededis what the request costs.pagesAvailableis what the pool holds.shortfallis how many pages you are short.
Coming next
- Translate a block of text, up to 50,000 characters per request.
- Translate an uploaded file.
- Start a document job, poll its status and fetch the translated content.

