result.result_type: "parse". lane names the
parser. The text payload lives on result.document. Audio and video also
carry transcript_url and, on the single-job read, inline transcript.
Formats
document.markdown, document.text, and document.blocks are present only
when you asked for them in output.formats. Default is markdown + blocks.
text is a plaintext rendering: headings and images stripped, tables flattened.
blocks are layout elements with a Location:
Chunks
chunking.strategy:
none—chunksis emptypage— onepage_regionchunk per pagesection— chunks follow section headers
markdown for display.
Oversized results
Most Parse results keep every requested rendering inline. If the final result is too large to store safely, NDI keeps a bounded inline preview and publishes the complete parsed content through an authenticated URL instead of dropping it. Acontent_truncated disclosure explains what was previewed:
target: "document_content"meansdocument.markdownand/ordocument.textis a preview. Fetchdocument.content_urlfor the complete finalized content.target: "spreadsheet_region"means the workbook’s inline rendering is a preview. Fetch each affecteddocument.spreadsheet.sheets[].content_urlfor that sheet’s complete Markdown.
X-API-Key as the job
request. Blocks, chunks, OCR data, and transcripts are not silently removed to
make a result fit. If those remaining fields are themselves too large, the job
fails with file_too_large.
An oversized OOXML package can also use the reduced-layout structural-text
path before final result sizing. In that case document.content_url contains
the complete extracted text and parse_fidelity has
mode: "reduced_layout"; content_truncated is present only if the finalized
inline result also required a bounded preview.
Full Markdown downloads and Parquet browsing
Large Parquet files finish Parse once their complete row snapshot and small preview are ready. Full Markdown is generated only when requested. Small Parquet files keep their normal inline result. Binary cells are size placeholders; their bytes remain in the stored Parquet. After Parse succeeds, stream an authenticated GET ofdocument.content_url
(or the sheet’s content_url) to a file. For a deferred export, the first
request returns HTTP 202 with status: "pending" and a Retry-After
header. Wait that many seconds and repeat the same request. HTTP 200
returns the complete Markdown stream. Never save a 202 JSON response as Markdown,
and avoid loading the entire 200 response into memory.
For browser downloads, POST /v1/jobs/{job_id}/content-download with your
X-API-Key. Poll while it returns 202 and status: "pending". When ready,
the 200 response contains status: "ready", url, and expires_at (Unix
seconds). Open url to save the full .md. If status is failed, POST
with ?retry=true to try again. Add sheet_name=... to select a workbook
sheet. The signed URL temporarily grants access, so treat it as a credential.
It never outlives the job’s payload_expires_at.
Repeated requests to a job reuse its export. Repeating Parse with the same
uploaded bytes, filename, and settings can reuse the cached result and source
snapshot; a shortened preview no longer prevents that reuse.
Parquet sheets also provide rows_url, row_count, and column_count.
GET rows_url?start_row=...&limit=... with your API key to read a small page;
row numbers start at zero. Pages come from the exact Parquet snapshot parsed
by the job. The console uses this endpoint, including when jumping directly
to a row near the end. Its MD/JSON downloads remain previews; Download full
Markdown saves all the text.
Historical jobs are not rewritten. Run Parse again to produce the complete
artifact for a result created before this behavior was available.
Images
output.include_images=true attaches figure crops on PDF and
png / jpg / jpeg / webp uploads. figures.mode=describe captions
those blocks. diagrams.mode=mermaid keeps flowchart fences.
Spreadsheets
Workbook results may includedocument.spreadsheet.sheets[].cell_map_url —
an authenticated, job-scoped URL that maps rendered table axes to physical
rows and columns. Fetch it with the same X-API-Key. See
GET /v1/jobs/{job_id}/spreadsheet-cell-maps/{artifact_ref}.
When an XLSX/XLSM workbook uses the oversized-result path, each affected sheet
has content_url. Blocks do not claim coverage of rows omitted from the inline
preview. Classify, Split, and Extract continue to refuse this oversized lane
until their own consumers can process every part.
Converted-PDF artifacts (Office → PDF) are at
GET /v1/jobs/{job_id}/converted-pdf/{artifact_ref}.
Audio and video
lane is "audio" or "video". transcript_url is an authenticated,
job-scoped MediaTimeline. Fetch it with the same X-API-Key via
GET /v1/jobs/{job_id}/parse-transcript/{artifact_ref}.
It is null on document, spreadsheet, and image lanes, and when no timeline
was stored. Ground jobs keep a separate transcript_url on
GET /v1/jobs/{job_id}/ground-transcript/{artifact_ref}.
GET /v1/jobs/{job_id} also inlines the same object as result.transcript.
GET /v1/jobs keeps transcript_url and omits transcript.
All times are integer milliseconds on the source recording.
start_ms is
inclusive, end_ms exclusive. Segments are ordered, non-overlapping, satisfy
end_ms > start_ms, and tile 0..duration_ms with no holes.
frames is populated for video only.