Skip to main content
A succeeded parse job has 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 — chunks is empty
  • page — one page_region chunk per page
  • section — chunks follow section headers
Use chunks for RAG. Use 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. A content_truncated disclosure explains what was previewed:
  • target: "document_content" means document.markdown and/or document.text is a preview. Fetch document.content_url for the complete finalized content.
  • target: "spreadsheet_region" means the workbook’s inline rendering is a preview. Fetch each affected document.spreadsheet.sheets[].content_url for that sheet’s complete Markdown.
Both URL forms are job-scoped and require the same 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 of document.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 include document.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.