---
title: "List quarantined versions"
method: GET
path: "/v0/admin/quarantine"
tags: ["Admin"]
---

# List quarantined versions

`GET /v0/admin/quarantine`

## 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`
- Auth: HTTP bearer

The Record Versions stuck in quarantine, in Version id order, with the step each failed at (normalization or ingestion), its reason and when it was quarantined. Stuck means the Version can still become current; a Version its Record no longer desires (a newer revision was accepted) or whose Record was withdrawn is not listed. A reason recorded before quarantine reasons were structured has only its code and names no plugin, and its quarantined_at is when its revision was accepted. Every filter narrows the list; plugin matches the plugin id the reason names. Requires plugins:admin; a key limited to some Corpora lists theirs only. The cursor is bound to the key's scope and filters.

## Query parameters

- `corpus_id` string
- `plugin` string
- `code` string
- `quarantined_after` string, date-time
- `quarantined_before` string, date-time
- `page_cursor` string
- `limit` integer

## Response `200`

Successful response

- QuarantinePage
  - `items` QuarantinedVersion[], required
    - `version_id` string, required
    - `record_id` string, required
    - `corpus_id` string, required
    - `receipt_id` string, required
    - `stage` 'normalization' | 'ingestion', required: The step it failed at, which a reprocess reruns. normalization - its normalizer failed or its route was removed, and it was published with its submitted input; ingestion - its segmentation through the ingestion plugin was refused or stopped.
    - `reason` Diagnostic, required: A structured processing diagnostic. plugin, contribution and invocation_id name the external invocation a normalization diagnostic concerns. Codes of external normalization: - normalizer_failed: the normalizer answered a terminal error. The Version is quarantined. - normalizer_invalid_output: the output broke the Plugin Protocol or the Manifest rules (schema, malformed or duplicate Part, a Blob Part that is not the input Blob or has another checksum, an undeclared extension namespace, too many Parts, a response over the size bound). Nothing from it is published; the Version is quarantined. - normalizer_timeout: the invocations kept exceeding the timeout until the retry budget (the manifest's retry.max_attempts, capped by the engine at 5) was spent. The Version is quarantined. - normalizer_retries_exhausted: the normalizer kept answering retryable errors until the retry budget was spent. The Version is quarantined. - input_unverified: the input Blob was no longer the verified accepted input. The Version is quarantined. - normalizer_unrouted: the media type's route was removed after acceptance and the built-in text path cannot read it (a text/* Blob takes the built-in text path instead). The Version is quarantined. - normalization_superseded: a newer revision of the Record was accepted before this Version was normalized, so the normalizer was not invoked. The Version is quarantined and never current. - normalizer_conflict: a later invocation with the same idempotency key returned a different output. The first recorded output is kept and published; nothing is overwritten. On an optional route every quarantining code above that comes from the normalizer is instead listed on a searchable Version published through the built-in text path. A plugin that is unavailable (connection failure, 5xx without an error envelope, discovery that does not match the pinned manifest) is retried with backoff. Live imports, including normalization, produce no diagnostic for these outages even after the plugin leaves the active Pipeline Plan; the Receipt shows plugin_unavailable while it retries. - pinned_plugin_unavailable: an older plan's plugin exhausted the deployment's attempt budget during an Operation or after ingestion invocation deadlines, or its ingestion owner could no longer serve the work. Live imports and normalization now retain their pin and retry reachability outages until the exact build returns; they never silently move to its replacement. A Version with this diagnostic is quarantined, or keeps its searchable text while enrichment stops. plan, plugin and plugin_version name the original plan and plugin. - pinned_plan_stopped: the processing of this Version started on a Pipeline Plan that an operator rolled back with pinned_work=stop. At its next call to a plugin that left the active plan, the work stopped instead of calling it, with the same outcome and fields as pinned_plugin_unavailable. Quarantined Versions keep their input reference and reason. An operator lists them and reprocesses them with the active plan (listQuarantinedVersions, reprocessQuarantine); a reprocess that fails again replaces the reason.
      - `code` string, required
      - `message` string, required
      - `retryable` boolean, required: Whether the same input may succeed if processed again.
      - `plugin` string: Plugin id of the invocation.
      - `plugin_version` string: Plugin version of a pinned_plugin_unavailable or pinned_plan_stopped diagnostic.
      - `plan` string: Pipeline Plan the stopped work was pinned to, in a pinned_plugin_unavailable or pinned_plan_stopped diagnostic.
      - `contribution` string
      - `invocation_id` string
    - `quarantined_at` string, date-time, required
  - `next_page_cursor` string: Present while more Versions may follow.

## Other responses

- `default`: Structured error; 401 unauthenticated, 403 without plugins:admin, 404 a corpus_id outside the key's Corpora, 409 cursor_scope_changed, 422 invalid query, limit, cursor or 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)
