States you will see
- Uploaded, not ingested —
list_filesshows the row; search and QA will miss it or report it as not ingested. - Ingested — tools can read it.
workspaces.statsreports counts by ingestion status. - Stale — the source bytes or labels changed after the last ingest. Call
ingestion.ingest(..., stale_only=True)orreconcile. - Replaced —
files.replaceoron_conflict=new_versionwrites a new version and retires prior derived outputs. - Deleted — the file’s record is soft-deleted: it is kept with its metadata de-identified and no longer lists or resolves. The source bytes and all derived content are removed.
Retention
Workspaceretention_policy sets TTLs for:
- derived material (anchored on
ingested_at) - source bytes (anchored on
created_at) - job inputs, outputs and processing files (removed 48 hours after the job completes on a paid account, 7 days on a free account;
job_ttl_dayscan only shorten this. A failed or cancelled job counts from the failure or cancel)
workspaces.update. The console’s per-person Perception Playground workspace keeps files and job payloads for 7 days: files uploaded through the perception tools are deleted from platform-managed storage 7 days after upload. A playground’s source and job TTLs are capped at 7 days: workspaces.update stores a longer or unset TTL as 7 days, and a playground created under a longer policy is brought down the next time you sign in. Create your own workspace to choose a different policy.
When a job result expires, GET /v1/jobs/{id} still exists but result is gone and reads raise result_expired.
Granular POST /v1/uploads handles are separate: 24-hour default TTL, 7-day cap, deleted when the consuming job finishes. See Sources and uploads.
For everything NDI keeps, where, and for how long, including zero retention and processing by model providers, see Data retention.