Files and formats

What can be uploaded, what is expanded in the browser, and the ceilings on both.

What is accepted

PDF, DOCX, XLSX, PPTX, ODT, ODS, ODP, JPG, PNG, TIF or GIF are accepted, and nothing else is. A ZIP archive is expanded before upload so its contents arrive as individual sources, which is why the archive ceilings below are browser limits rather than server ones.

What each format preserves

FormatSupport tierWhat is preserved
.pdfBEST_EFFORTpage, paragraph_text, bbox1000
.docxBEST_EFFORTpage, paragraph_text, bbox1000
.xlsxBEST_EFFORTpage, paragraph_text, bbox1000
.pptxBEST_EFFORTpage, paragraph_text, bbox1000
.odtBEST_EFFORTpage, paragraph_text, bbox1000
.odsBEST_EFFORTpage, paragraph_text, bbox1000
.odpBEST_EFFORTpage, paragraph_text, bbox1000
.jpg .jpegBEST_EFFORTpage, paragraph_text, bbox1000
.pngBEST_EFFORTpage, paragraph_text, bbox1000
.tif .tiffBEST_EFFORTpage, paragraph_text, bbox1000
.gifBEST_EFFORTpage, paragraph_text, bbox1000
.zipUNSUPPORTEDnothing — not compiled

Note Every format above is read through the same sanitize-to-PDF and OCR path, and the table states exactly what each one preserves. A format moves above its tier only with a published qualification result and the date it was produced. The Sources page prints the same manifest with every limitation attached.

What is not extracted

Note Tables and formulas are not extracted. Every format in the table above is read through the same sanitize-to-PDF and OCR path, so a price table arrives as the paragraphs it was printed as and the grid that arranged them is not recovered. A spreadsheet's cells and formulas survive nothing today. The capability manifest carries no_table_or_formula_extraction on every entry; this is that token in a sentence, on the page a developer reads to decide whether their documents will work.

The ceilings, and why they are those numbers

LimitValueWhy it is that number
Bytes per source5 MBNo processor in the chain reads more, so nothing above it can ever be compiled. Refused at the capability call with 413 and SOURCE_EXCEEDS_PROCESSING_CEILING, before any byte is stored.
Pages per source80The most the rasterizer renders. It cannot be checked at intake, because intake deliberately never decodes the document, so it is disclosed here and refused after the bytes are read rather than at the door.
Files in one archive128The largest expansion a browser tab performs without becoming unresponsive.
Archive size, no worker25 MBExpansion on the main thread; larger would block the tab.
Archive size, with a worker200 MBExpansion off-thread, where the ceiling is memory rather than responsiveness. The manifest's at_most_128_files_and_500_mb_expanded is the expanded total, not the size of the archive you select.

Note TAVONEL processes sources up to 5 MB and 80 pages. Both numbers are in the capability manifest as at_most_5_mib_per_source and at_most_80_pages_per_source, so a client can read them before it uploads instead of learning them from a refusal.

Reading the manifest yourself

The support table above is this endpoint, rendered. It needs no key, and it is the same list the upload route validates against — a format absent from it is refused at upload rather than accepted and dropped.

GET/capabilities

Every source format TAVONEL can read, with its support tier, what survives into the compiled World, its known limitations and its qualification receipt when one exists. A verified tier without a receipt is not representable. Anything absent from the manifest is refused at upload. The two per-source ceilings TAVONEL enforces — bytes and pages — are published here as `knownLimitations` tokens.

curl -sS -X GET https://tavonel.com/api/v1/capabilities
StatusResponse
200The capability manifest and the sha256 of its serialized form. contentSha256 is taken over the manifest without that field: delete it, re-serialize with the key order unchanged, and hash.

Archives that are refused

Note Encrypted archives, nested archives and paths that escape the archive root are refused at expansion time, not after upload. A spreadsheet is billed on the pages of the sanitized PDF it is converted to, counted after that conversion — so before a compile there is no page number for one, and preflight shows its absence rather than a figure derived from the file size.

API version 2026-09-02.1 · reviewed 11 September 2026

Something here out of date or wrong? Report an issue with this page.