Files
Upload files and inject them as context in a message
Upload a file once, then reference it by id in any chat request. The model reads the file content as context.
Supported files
| Type | Formats | Limit | What the model gets |
|---|---|---|---|
| Images | JPEG, PNG, WebP, HEIC, GIF, BMP, TIFF | 20 MB | the image (HEIC is converted first) |
application/pdf | 50 MB | extracted text, or page images (see below) | |
| Text and code | .txt .csv .md .json .py .ts .go .rs and similar | 50 MB, first 200,000 characters | the file content, truncated at that mark |
| Audio | MP3, WAV, WebM/Opus, OGG, FLAC, M4A | 25 MB | a transcript |
| Video | MP4, WebM, MOV, MKV, AVI | 5 minutes | a transcript and keyframes |
| Apple iWork | .pages .numbers .key | 50 MB | extracted text, or the preview rendered as pages |
Files expire 30 days after upload. A single upload body caps at 100 MB, so the 5-minute video limit binds long before any byte count does.
We reject .env, .pem, .p12, .pfx, .cer and .crt with a 422 so credentials do not land in a prompt by accident.
An .pages or .key file saved without a QuickLook preview comes back empty. Export it to PDF and upload that.
PDFs
Talos handles a PDF two ways and picks per file:
- Born-digital PDF, meaning anything with a text layer: an ERP invoice, a Word export, a generated report. Talos extracts the text, up to 200,000 characters, which is roughly 70 to 100 dense pages. Anything past that mark is cut.
- Scan or photo PDF with no text layer: Talos renders the pages to images and sends them to the vision model, which reads them the way it reads a photograph.
Send the same request either way. Talos checks for a text layer and takes the cheaper path when one exists.
Up to 20 pages per document. Talos picks the cheaper of PNG and JPEG for each rendered page, so a grainy flatbed scan costs about as much as a clean one; measured on 20-page A4 scans, both deliver all 20 pages. A size backstop stops the rendering early if the pages together would grow past roughly 32 MB, which realistic documents do not reach.
Very small type on a dense scan can still defeat the vision model. It answers that it found nothing rather than inventing a value.
The choice is per document, not per page. A PDF that mixes typed pages with a scanned annex takes the text path, and the scanned pages never reach the vision model. Split such a file if the scanned part matters.
Upload a file
POST /v1/files takes a multipart form with a single file field. The response is a FileOut object.
curl https://api.ablatic.ai/v1/files \
-H "Authorization: Bearer $ABLATIC_API_KEY" \
-F [email protected]A FileOut object has these fields:
{
"id": "file-...",
"object": "file",
"filename": "report.pdf",
"purpose": "...",
"mime_type": "application/pdf",
"size": 184320,
"status": "...",
"content_kind": "...",
"token_estimate": 4096,
"created_at": 1744588800,
"expires_at": 1747180800
}Use id as the file_id when you reference the file in a message.
Reference a file in a message
Add a content block of type file to a user message. The file_id is the id from the upload response.
curl https://api.ablatic.ai/v1/chat/completions \
-H "Authorization: Bearer $ABLATIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "talos",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Summarize this report." },
{ "type": "file", "file": { "file_id": "file-..." } }
]
}
]
}'Send a file without uploading
Put the file straight into the message and skip /v1/files. Talos processes it the same way and stores nothing.
curl https://api.ablatic.ai/v1/chat/completions \
-H "Authorization: Bearer $ABLATIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "talos",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "Summarize this report." },
{
"type": "file",
"file": {
"filename": "report.pdf",
"file_data": "data:application/pdf;base64,JVBERi0..."
}
}
]
}
]
}'The request body caps at 50 MB, and base64 adds about a third, so roughly 37 MB of PDF fits. Upload anything larger and reference it by id.
On /v1/responses the same file goes in as input_file with file_data. On /v1/messages use Anthropic's document block, described in Anthropic Compatibility.
Manage files
GET /v1/files list your files
GET /v1/files/{file_id} fetch one FileOut object
DELETE /v1/files/{file_id} delete a fileAll four endpoints use key auth.
Limits
- 30 uploads per hour per user.
- 100 files per user.
- Files expire 30 days after upload.
- Per-file limits are in the table above. An upload body caps at 100 MB; an inline file rides the 50 MB request-body cap instead.