---
title: "List plugin registrations"
method: GET
path: "/v0/admin/plugins"
tags: ["Admin"]
---

# List plugin registrations

`GET /v0/admin/plugins`

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

Every plugin version this deployment has registered, oldest first, with its endpoint, manifest digest, the roles its manifest declares and its state. Quivr never starts a plugin; the operator runs it at its endpoint. Every start records the plugins pinned in the startup configuration. Deployment-wide and not paginated. Requires plugins:admin, an operator action that organization keys do not get.

## Response `200`

Successful response

- PluginRegistrationList
  - `items` PluginRegistration[], required
    - `registration_id` string, required
    - `plugin_id` string, required
    - `version` string, required
    - `endpoint` string, required: Base URL where the operator runs this plugin version.
    - `manifest_digest` string, required
    - `artifact_digest` string: Artifact digest the plugin reports, recorded as information. Absent when it reports none.
    - `contributions` string[], required
    - `roles` string[], required: Roles the manifest declares it can serve, such as normalizer:application/pdf, subscription:<plugin id> or connector:<kind>. The active plan says which it serves.
    - `state` 'registered' | 'validated' | 'active' | 'draining' | 'inactive' | 'rejected', required: registered while the Contract Runner checks it, then validated or rejected; active while the active plan names it. Once a later plan leaves it out it is draining while pinned_work or subscriptions is above zero, then inactive.
    - `pinned_work` integer, required: Unfinished work pinned to a Pipeline Plan that names this registration, such as the processing of a receipt, a connector run or a rebuild. Work finishes on the plan it started on, so a registration a plan change left out keeps being called until this reaches zero. For an alert-rule plugin it also counts the pending evaluations of Subscription Versions that pin its version.
    - `subscriptions` integer, required: For an alert-rule plugin, the Subscriptions of every Organization that are not deleted, enabled or disabled, whose current Version pins this plugin version. They keep it until migrateSubscriptionEvaluators moves them; 0 for other plugins.
    - `check` PluginCheckReport: What the Contract Runner reported on a registration; certified plugins are validated.
      - `certified` boolean, required
      - `checked_at` string, date-time, required
      - `passed` integer, required
      - `failed` integer, required
      - `skipped` integer, required
      - `checks` PluginCheck[], required
        - `id` string, required
        - `title` string, required
        - `contribution` string
        - `status` 'pass' | 'fail' | 'skip', required
        - `fixture` string: The fixture the check ran, such as fixtures/events.json, or a normative fixture prefixed with contracts:.
        - `issues` PluginIssue[], required
          - `code` string, required
          - `path` string
          - `message` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `default`: Structured error; 401 unauthenticated, 403 without plugins:admin, 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)
