Docs
Capabilities

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

TypeFormatsLimitWhat the model gets
ImagesJPEG, PNG, WebP, HEIC, GIF, BMP, TIFF20 MBthe image (HEIC is converted first)
PDFapplication/pdf50 MBextracted text, or page images (see below)
Text and code.txt .csv .md .json .py .ts .go .rs and similar50 MB, first 200,000 charactersthe file content, truncated at that mark
AudioMP3, WAV, WebM/Opus, OGG, FLAC, M4A25 MBa transcript
VideoMP4, WebM, MOV, MKV, AVI5 minutesa transcript and keyframes
Apple iWork.pages .numbers .key50 MBextracted 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 file

All 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.

Next