- Upload inspection — NDI inspects a bounded prefix of the bytes on upload. A conclusive signature must agree with the filename extension. If the extension is missing or unknown, a recognized signature supplies the effective format. Formats without a reliable prefix signature continue to use the extension.
- Operation-level gates — each workflow declares the file types it handles.
audio,video, andjsonlare not accepted bysplit,classify, orextract, for example. - Extension exceptions within a type — a few types have sub-extension restrictions.
parseaccepts most image formats but not.bmp;splitandextractaccept spreadsheets but not.parquet.
EXTENSION_MAP alone overstates
support, and a workflow’s file-type gate alone misses the extension exceptions.
The multipart Content-Type is advisory and does not decide admission. NDI does not read
the full file to identify its format; it uses a bounded prefix, then streams the upload.
The original filename is preserved for display and downloads, while the effective format
controls routing, stored object metadata, and the media type used for previews and downloads.
Per-operation matrix
yes — the file type is accepted and processed.
no — the operation rejects this type (returns unsupported_file_type).
note — accepted with a qualification described below the table.
Notes
spreadsheet_parquet — .parquet maps to the spreadsheet file type but is handled
by a separate columnar path. split and extract reject it explicitly; parse,
classify, and ground process it via their parquet paths.
image_bmp — .bmp maps to the image file type. parse validates the extension
against its supported image set (.png, .jpg, .jpeg, .tiff, .tif, .webp) and
rejects .bmp. All other operations accept image files by type only and do not check the
extension further.
markdown — parse UTF-8-decodes .md/.mdx and uploads the source as the
markdown artifact (identity pass-through). The other operations resolve the
source URL directly as markdown without reparsing.
Large plaintext — workspace .txt upload, ingestion, search/read, and
Parse support sources up to 1 GiB. Large Parse results expose complete text at
document.content_url and keep only a representative preview inline. Split,
Extract, and Ground still require .txt sources to be at most 256 MiB. .log,
.xml, .md, and .mdx keep their existing source limits.
video and audio — parse transcribes audio and video. It validates the
extension: accepted video extensions are .mp4, .mov, .avi, .mkv; accepted audio
extensions are .mp3, .wav, .m4a, .flac, .mpga, .oga, .ogg. An extension
that maps to video or audio but is not on the respective list is rejected by parse.
Ground semantics — ground accepts every file type in the table above and returns a
structured response for each target. A type it cannot search returns found=false for
every target rather than an error; today no type falls into that case.