Skip to main content
Granular document operations (parse, split, classify, extract, and ground) all accept a source field in the request body. The source is a discriminated union on type:

URL source ("type": "url")

Point an operation at any https:// or s3:// URL:
Fields:
  • urlhttps:// or s3:// only. NDI verifies the resolved hostname.
  • file_name — Used to choose the processing lane and appears in result metadata.

Upload source ("type": "upload")

Upload a file via POST /v1/uploads, then reference it by upload_id:
Upload response:
Upload lifecycle:
  • TTL is set at upload time via ttl_seconds form field. The default is 7 days; the maximum is also 7 days. The expires_at field in the response shows the exact expiry.
  • Uploads are not single-use — the same upload_id can be used in multiple operations until it expires.
  • Upload IDs are scoped to your API key.
Source discriminator:

Workspace file source ("type": "workspace_file")

Reference a file already stored in a workspace. Granular operations read the raw source bytes — the file does not need to be ingested first.
This is the bridge between the two integration patterns: you can use granular operations (parse, extract, …) on files already in a workspace.

Parse result source ("type": "parse_result")

Reuse the retained result of a successful Parse job without downloading and uploading the document again:
The referenced job must belong to the same API key, have kind: "parse" and status: "succeeded", and still have an available result. Support varies by operation:

Workspace file uploads

Uploading files into a workspace is a separate endpoint — not POST /v1/uploads.
This returns a Job with kind: "upload_file", not an upload object. The file persists in the workspace after the job completes. See Files for full documentation.

Which upload to use?