---
title: "Reprocess quarantine"
method: POST
path: "/v0/admin/quarantine/reprocess"
tags: ["Admin"]
---

# Reprocess quarantine

`POST /v0/admin/quarantine/reprocess`

## Request

- Base URL: `https://docs.quivr.thevibecompany.co` (the document declares no server; this is the origin it was published from)
- URL: `https://docs.quivr.thevibecompany.co/v0/admin/quarantine/reprocess`
- Auth: HTTP bearer

Rerun, with the Pipeline Plan active now, the step a Corpus's stuck Versions failed at, typically after a plugin was fixed and activated or a plan rolled back. A Version quarantined at normalization is normalized again, published with its new Manifest and processed; one quarantined at ingestion is segmented, embedded and indexed again. A Version that succeeds goes through the normal path, as for a first success. It becomes current if its Record still desires it, searchable, its alerts are evaluated, and the change feed announces it (record.materialized when its content changed, record.retrieval_ready, record.enrichment_available). A Version that fails again stays quarantined with its new reason. The scope is the Corpus's stuck Versions (see listQuarantinedVersions), kept by the optional filters, taken when the reprocess is accepted. Set from_stage to normalization to normalize its stored source Blob again before ingestion; omit it to retry the failed step. A dry run is required. dry_run true answers 200 with the count and records it under the idempotency key. The same body with dry_run false then accepts the reprocess as a queued Operation (202, Location). Without a dry run recorded under that key and Corpus, the answer is 409 dry_run_required. The same key with another filter scope or restart stage is 409 idempotency_conflict, and an accepted key replays its Operation. A Corpus whose previous reprocess has not finished is 409 reprocess_in_progress. The reprocess runs on the backfills' task queue at the deployment's backfill.rate, pinned to the plan active when it is accepted. It can be paused, resumed, canceled and rerun. Its counters are versions_in_scope, versions_recovered, versions_quarantined (failed again) and versions_skipped (with skipped_<reason>). Requires plugins:admin, on a key of the Corpus's Organization that grants the Corpus.

## Request body

- QuarantineReprocessRequest
  - `idempotency_key` string, required
  - `corpus_id` string, required
  - `plugin` string: Only Versions whose quarantine reason names this plugin id.
  - `code` string: Only Versions quarantined with this reason code.
  - `quarantined_after` string, date-time: Only Versions quarantined at or after this time.
  - `quarantined_before` string, date-time: Only Versions quarantined before this time.
  - `from_stage` 'normalization': Restart from the stored source Blob through normalization, then ingestion. Omit to retry the step that failed. Inputs that cannot be republished stay quarantined and are skipped.
  - `dry_run` boolean, required: true reports the count and records it; false starts the reprocess a dry run with the same key and scope preceded.

## Response `200`

The dry run's count, recorded under the key.

- QuarantineReprocessEstimate
  - `versions` integer, required: Stuck Versions in scope.
  - `stages` object, required: Of them, how many failed at each step.
    - `normalization` integer, required
    - `ingestion` integer, required
  - `codes` object, required: Of them, how many by reason code.

## Other responses

- `202`: The accepted reprocess Operation; read it at the Location.
- `default`: Structured error; 400 malformed, 401 unauthenticated, 403 without plugins:admin, 404 unknown Corpus, 409 dry_run_required, idempotency_conflict or reprocess_in_progress, 422 invalid_schema or invalid_reprocess (an empty window), 503 storage unavailable.

---

[API](https://skmtc.dev/thevibecompany/apis/quivr-http-api.md) - [All operations](https://skmtc.dev/thevibecompany/apis/quivr-http-api/llms.txt) - [OpenAPI document](https://skmtc.dev/thevibecompany/apis/quivr-http-api/revisions/4f4e30ba8f4e?raw)
