Upload File
upload_fileUploads a source file and returns a fileId to translate it with.
Free. Never charged: pages are spent when a translation finishes, not on upload or retrieval, so a file you never translate costs nothing.
Authentication: a vq_key_ key holding translate:write. A wildcard (*)
key does not hold it: grant it by name in the dashboard.
Why this route exists
POST /translation/documents does not accept a URL. It accepts the fileId
returned here, which refers to a file this API stored for your account. That is
deliberate: the API never fetches an address you name, so it cannot be pointed
at an internal service or at someone else's document. A fileId from another
account is a 404.
Limits
Types:
pdf,docx,txt,jpg,jpeg,png,tif,tiff,webp,bmp.Size: at most 150 MB, and not empty.
A
fileIdis valid for 24 hours. You can translate one file into several languages by posting/documentsmore than once with the samefileId.
pageCount
Physical pages for pdf and docx, which is what you will be charged. For
images and plain text it is null: their page count is only known when the job
runs, and POST /documents can then only check you hold at least one page.
Example
curl -X POST https://api.vaquill.ai/api/v1/translation/files \
-H "Authorization: Bearer $VAQUILL_API_KEY" \
-F "file=@petition.pdf"{
"fileId": "3f2c9a52-8d2e-4a43-9e0b-5b6a1c7d9f10",
"filename": "petition.pdf",
"sizeBytes": 482113,
"pageCount": 12,
"expiresAt": "2026-11-02T12:34:56Z"
}Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"file": "<file>"
},
"name": "upload_file"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The document to translate. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||