Skip to main content
Ingestion status is surfaced through the data job that triggered it. GET /v1/flow/data-jobs/{id} returns a canonical view of your job — including nested ingestion jobs, per-file records, timeline events, and the derived status that tells you whether you’re ready to start alignment.

Understand data job status

A data job runs in two phases:
  1. Ingestion – files are converted and, for a vector database job, chunked and embedded. This begins when you attach files.
  2. Alignment – training pairs are generated from the ingested content. This begins when you call /start, and only after ingestion has completed.
The phase a job is in determines which operations apply. Cancelling targets the alignment job, so a job still in ingestion has nothing to cancel. Timeline events name the phase they belong to, which is why alignment events appear on a data job. While ingestion is in progress, the data job moves through these states: Once you call /start, the status mirrors the alignment job (running, completed, failed, etc.).

Pre-generation validation

Before a data job begins generating data, SeekrFlow validates the job and stops it early when it can’t produce useful results. Stopping early avoids spending tokens on a job that wouldn’t succeed. A job is stopped when:
  • The instructions are empty or contain only whitespace.
  • The instructions can’t be interpreted as a data-generation task.
  • The uploaded documents don’t match the instructions.
  • No content in the uploaded documents is relevant enough to the instructions.
When a job stops for one of these reasons, its status_message names the specific cause and the adjustment to make. Review the message, revise the instructions or documents, and resubmit the job. SeekrFlow also sends an email when a job is stopped this way. The email includes the job ID, the source file, the reason the job stopped, and the steps to resubmit.

Check job status

List all data jobs: Endpoint: GET /v1/flow/data-jobs
Retrieve a specific data job: Endpoint: GET /v1/flow/data-jobs/{id}
Sample response:

Inspect ingestion jobs and file records

The ingestion_jobs array contains one entry per ingestion run. Each entry includes a records array with independent status and timestamps for every file processed.

File record fields

progress is not a completion signal. A finished record does not necessarily reach 1, and all four progress fields are null for records processed before progress reporting shipped. Use status to determine whether a file is complete.

Track per-file progress

Every file reports its own progress through both document conversion and vector database ingestion, so a job with one slow file is distinguishable from a job that has stalled. Two values work together:
  • progress is confirmed. It only moves when a step actually completes, so it never goes backwards, and it reaches 1 only when the file is genuinely finished.
  • projected_progress estimates where the file has reached between confirmations. It advances during long steps, such as table extraction on a large PDF, when progress would otherwise appear frozen.
Confirmed progress catches up to the earlier projection as steps complete. Reading a single file across a run:
Use progress when you need a value you can trust, and projected_progress to drive a progress indicator that keeps moving.

File list

The files array in the data job detail provides a unified view of ingestion outputs and manually uploaded Markdown files:
  • Entries with a record_id came from ingestion and include per-file processing metadata.
  • Markdown uploads have record_id: null because they skip ingestion and are immediately alignment-ready.

Read the timeline

The timeline array contains ordered milestone events for the job lifecycle.
Events are pre-sorted by timestamp. The timeline reports every milestone a job reached, so a job that ended early still shows the steps it completed.

Event types

Terminal events carry the reason in metadata.status_message. Read it to find out why a job failed, stopped, or was cancelled, rather than inferring from status alone.

Resolve ingestion failures

When a file fails, its record includes error_message and suggested_fix. The data job remains in needs_review until every failed record is resolved — either fixed and retried, or removed.
To retry, re-upload the corrected file and attach it to the job again via POST /v1/flow/data-jobs/{id}/add-files. To skip the file, remove it via POST /v1/flow/data-jobs/{id}/remove-files. At least one viable file must remain before alignment can start.

Troubleshoot common errors

Document processing issues

File ingestion issues

Last modified on August 26, 2026