Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest’s digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.
API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.
Body
application/json
idempotency_key
string
required
Required string length: 1 - 200
endpoint
string
required
Base URL where the operator runs the plugin, such as http://127.0.0.1:9900. A connector plugin needs https unless it is on loopback.
Required string length: 1 - 2048
manifest
string
required
The exact text of the quivr-plugin.yaml the plugin was built from; its sha256 must be the manifest digest the plugin's discovery reports.
Required string length: 1 - 262144
configuration
object
Plugin configuration, validated against the manifest's configuration schema.
routes
object[]
Media types routed to the plugin's normalizer.
Maximum array length: 100
Show child attributes
kinds
string[]
Alert kinds offered, a subset of those the manifest declares; absent offers them all.
Maximum array length: 100
Minimum string length: 1
spaces
object
Vector spaces of an ingestion plugin by space id, served or evaluation; absent serves the only declared space.
Show child attributes
fixtures
object
The plugin's own test files, by path inside its fixtures folder (such as events.json or inputs/events.csv), each base64-encoded; at most 4 MiB decoded in total. The check runs them as quivr plugin test runs that folder, so a connector, or a normalizer for a media type without a normative fixture, can be certified. They are stored with the registration; a new idempotency key for a rejected registration checks it again with that request's fixtures.
Show child attributes
Response
Successful response
registration_id
string
required
Minimum string length: 1
plugin_id
string
required
Minimum string length: 1
version
string
required
Minimum string length: 1
endpoint
string
required
Base URL where the operator runs this plugin version.
Minimum string length: 1
manifest_digest
string
required
Minimum string length: 1
contributions
string[]
required
roles
string[]
required
Roles the manifest declares it can serve, such as normalizer:application/pdf, subscription: or connector:. The active plan says which it serves.
state
enum<string>
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.
Available options:
registered,
validated,
active,
draining,
inactive,
rejected
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.
Required range: x >= 0
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.
Required range: x >= 0
created_at
string<date-time>
required
updated_at
string<date-time>
required
artifact_digest
string
Artifact digest the plugin reports, recorded as information. Absent when it reports none.
Minimum string length: 1
check
object
What the Contract Runner reported on a registration; certified plugins are validated.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Quivr","description":"An open-source engine that turns continuous content streams into search and alerts.","colors":{"primary":"#5b3fd6","light":"#b29aff","dark":"#4b31be"},"api":{"playground":{"display":"interactive"}},"integrations":{"posthog":{"apiKey":"phc_pSFWFc94275asrYSX5PQffv7wE6vUsGDdUnBaDobgtMN","apiHost":"https://us.i.posthog.com","sessionRecording":false}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"thevibecompany","hasAudioNarration":false,"actualSubdomain":"thevibecompany","customDomains":["docs.quivr.thevibecompany.co"],"gitSource":{"type":"github","owner":"the-vibe-company","repo":"quivr","deployBranch":"main","contentDirectory":"docs-site","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae36952217e82a3b9255c43","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Reference","count":108},{"language":"default","tag":"Endpoints","count":100},{"language":"default","tag":"Documentation","count":52},{"language":"default","tag":"Admin","count":28},{"language":"default","tag":"Run Quivr","count":27},{"language":"default","tag":"Connectors","count":15},{"language":"default","tag":"Use Quivr","count":12},{"language":"default","tag":"Corpora","count":10},{"language":"default","tag":"Subscriptions","count":9},{"language":"default","tag":"Extend Quivr","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/admin/register-plugin","slug":"/api-reference/admin/register-plugin","pageMetadata":{"title":"Register plugin","description":"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest's digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/plugins","href":"/api-reference/admin/register-plugin","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest’s digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Register plugin","description":"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest's digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/plugins","href":"/api-reference/admin/register-plugin","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"registerPlugin","description":"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest's digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.","x-required-permissions":["plugins:admin"],"requestBody":"e9db1456-332e-40a5-8575-7598851a20ea","responses":{"202":"0c81a25d-aa8c-4e2a-9ba0-49ba5df9304b","default":"8d65d260-8567-496e-9117-3e6e8c1a74ce"},"tags":["Admin"],"summary":"Register plugin","method":"post","type":"path","servers":[],"security":["da9c3b19-c354-4069-aa95-1130425613d3"],"path":"/v0/admin/plugins","baseUrlOptions":[],"title":"Register plugin","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"idempotency_key":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"idempotency_key","typeLabel":"string"},"endpoint":{"type":"string","minLength":1,"maxLength":2048,"description":"Base URL where the operator runs the plugin, such as http://127.0.0.1:9900. A connector plugin needs https unless it is on loopback.","isRequired":true,"uniqueKey":"endpoint","typeLabel":"string"},"manifest":{"type":"string","minLength":1,"maxLength":262144,"description":"The exact text of the quivr-plugin.yaml the plugin was built from; its sha256 must be the manifest digest the plugin's discovery reports.","isRequired":true,"uniqueKey":"manifest","typeLabel":"string"},"configuration":{"type":"object","description":"Plugin configuration, validated against the manifest's configuration schema.","uniqueKey":"configuration","typeLabel":"object"},"routes":{"type":"array","maxItems":100,"description":"Media types routed to the plugin's normalizer.","items":{"type":"object","additionalProperties":false,"properties":{"media_type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"routes.items.[INDEX].media_type","typeLabel":"string"},"mode":{"type":"string","enum":["required","optional"],"uniqueKey":"routes.items.[INDEX].mode","typeLabel":"enum\u003cstring>"}},"required":["media_type"],"uniqueKey":"routes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"routes","typeLabel":"object[]"},"kinds":{"type":"array","maxItems":100,"description":"Alert kinds offered, a subset of those the manifest declares; absent offers them all.","items":{"type":"string","minLength":1,"uniqueKey":"kinds.items.[INDEX]","typeLabel":"string"},"uniqueKey":"kinds","typeLabel":"string[]"},"spaces":{"type":"object","description":"Vector spaces of an ingestion plugin by space id, served or evaluation; absent serves the only declared space.","additionalProperties":{"type":"string","enum":["served","evaluation"],"uniqueKey":"spaces.additionalProperties","typeLabel":"enum\u003cstring>"},"uniqueKey":"spaces","typeLabel":"object"},"fixtures":{"type":"object","maxProperties":100,"description":"The plugin's own test files, by path inside its fixtures folder (such as events.json or inputs/events.csv), each base64-encoded; at most 4 MiB decoded in total. The check runs them as quivr plugin test runs that folder, so a connector, or a normalizer for a media type without a normative fixture, can be certified. They are stored with the registration; a new idempotency key for a rejected registration checks it again with that request's fixtures.","propertyNames":{"minLength":1,"maxLength":255},"additionalProperties":{"type":"string","contentEncoding":"base64","maxLength":5592408,"uniqueKey":"fixtures.additionalProperties","typeLabel":"string"},"uniqueKey":"fixtures","typeLabel":"object"}},"required":["idempotency_key","endpoint","manifest"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"idempotency_key":"\u003cstring>","endpoint":"\u003cstring>","manifest":"\u003cstring>","configuration":{},"routes":[{"media_type":"\u003cstring>"}],"kinds":["\u003cstring>"],"spaces":{},"fixtures":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0c81a25d-aa8c-4e2a-9ba0-49ba5df9304b":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"registration_id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"registration_id","typeLabel":"string"},"plugin_id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"plugin_id","typeLabel":"string"},"version":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"version","typeLabel":"string"},"endpoint":{"type":"string","minLength":1,"description":"Base URL where the operator runs this plugin version.","isRequired":true,"uniqueKey":"endpoint","typeLabel":"string"},"manifest_digest":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"manifest_digest","typeLabel":"string"},"contributions":{"type":"array","items":{"type":"string","uniqueKey":"contributions.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"contributions","typeLabel":"string[]"},"roles":{"type":"array","items":{"type":"string","uniqueKey":"roles.items.[INDEX]","typeLabel":"string"},"description":"Roles the manifest declares it can serve, such as normalizer:application/pdf, subscription:\u003cplugin id> or connector:\u003ckind>. The active plan says which it serves.","isRequired":true,"uniqueKey":"roles","typeLabel":"string[]"},"state":{"type":"string","enum":["registered","validated","active","draining","inactive","rejected"],"description":"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.","isRequired":true,"uniqueKey":"state","typeLabel":"enum\u003cstring>"},"pinned_work":{"type":"integer","minimum":0,"description":"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.","isRequired":true,"uniqueKey":"pinned_work","typeLabel":"integer"},"subscriptions":{"type":"integer","minimum":0,"description":"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.","isRequired":true,"uniqueKey":"subscriptions","typeLabel":"integer"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"artifact_digest":{"type":"string","minLength":1,"description":"Artifact digest the plugin reports, recorded as information. Absent when it reports none.","uniqueKey":"artifact_digest","typeLabel":"string"},"check":{"type":"object","additionalProperties":false,"description":"What the Contract Runner reported on a registration; certified plugins are validated.","properties":{"certified":{"type":"boolean","isRequired":true,"uniqueKey":"check.certified","typeLabel":"boolean"},"checked_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"check.checked_at","typeLabel":"string\u003cdate-time>"},"passed":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"check.passed","typeLabel":"integer"},"failed":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"check.failed","typeLabel":"integer"},"skipped":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"check.skipped","typeLabel":"integer"},"checks":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].id","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].title","typeLabel":"string"},"status":{"type":"string","enum":["pass","fail","skip"],"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"issues":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].issues.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","uniqueKey":"check.checks.items.[INDEX].issues.items.[INDEX].path","typeLabel":"string"}},"required":["code","message"],"uniqueKey":"check.checks.items.[INDEX].issues.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"check.checks.items.[INDEX].issues","typeLabel":"object[]"},"contribution":{"type":"string","minLength":1,"uniqueKey":"check.checks.items.[INDEX].contribution","typeLabel":"string"},"fixture":{"type":"string","minLength":1,"description":"The fixture the check ran, such as fixtures/events.json, or a normative fixture prefixed with contracts:.","uniqueKey":"check.checks.items.[INDEX].fixture","typeLabel":"string"}},"required":["id","title","status","issues"],"uniqueKey":"check.checks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"check.checks","typeLabel":"object[]"}},"required":["certified","checked_at","passed","failed","skipped","checks"],"uniqueKey":"check","typeLabel":"object"}},"required":["registration_id","plugin_id","version","endpoint","manifest_digest","contributions","roles","state","pinned_work","subscriptions","created_at","updated_at"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"registration_id":"\u003cstring>","plugin_id":"\u003cstring>","version":"\u003cstring>","endpoint":"\u003cstring>","manifest_digest":"\u003cstring>","contributions":["\u003cstring>"],"roles":["\u003cstring>"],"state":"registered","pinned_work":1,"subscriptions":1,"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","artifact_digest":"\u003cstring>","check":{"certified":true,"checked_at":"2023-11-07T05:31:56Z","passed":1,"failed":1,"skipped":1,"checks":[{"id":"\u003cstring>","title":"\u003cstring>","status":"pass","issues":[{"code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>"}],"contribution":"\u003cstring>","fixture":"\u003cstring>"}]}}}},"exampleType":"generated"}},"headers":{"Location":{"description":"The registration's read URL, which reports the check once it ran.","schema":{"type":"string","format":"uri-reference"}}},"exampleType":"generated"},"8d65d260-8567-496e-9117-3e6e8c1a74ce":{"description":"Structured error; 400 malformed, 401 unauthenticated, 403 without plugins:admin, 409 idempotency_conflict, 413 request_too_large, 422 invalid_schema or invalid_plugin, 503 storage unavailable.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"message","typeLabel":"string"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"retryable","typeLabel":"boolean"},"request_id":{"type":"string","description":"Bounded caller X-Request-ID, or an engine-generated correlation ID.","uniqueKey":"request_id","typeLabel":"string"},"trace_id":{"type":"string","description":"W3C trace ID when a trace context is present.","uniqueKey":"trace_id","typeLabel":"string"},"span_id":{"type":"string","description":"W3C span ID of the API handler when a trace context is present.","uniqueKey":"span_id","typeLabel":"string"},"field":{"type":"string","minLength":1,"description":"JSON Pointer (RFC 6901) to the request member that caused a 422, when known (for example /config/url or /credential/secret/token on connector commands).","uniqueKey":"field","typeLabel":"string"},"resync_url":{"type":"string","format":"uri-reference","uniqueKey":"resync_url","typeLabel":"string\u003curi-reference>"}},"required":["code","message","retryable"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","message":"\u003cstring>","retryable":true,"request_id":"\u003cstring>","trace_id":"\u003cstring>","span_id":"\u003cstring>","field":"\u003cstring>","resync_url":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"da9c3b19-c354-4069-aa95-1130425613d3":{"ApiKey":{"type":"http","scheme":"bearer","description":"API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.","scopes":[],"schemeName":"ApiKey"}}},"servers":{},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKey","name":"Authorization"}],"title":"ApiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"thevibecompany","siteName":"Quivr","title":"Register plugin - Quivr","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-13T09:57:32.883Z","originalFileLocation":"api-reference/admin/register-plugin.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest\u0026#x27;s digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Quivr\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thevibecompany/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thevibecompany/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thevibecompany/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/thevibecompany/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Register plugin - Quivr\">\u003cmeta data-mint-head property=\"og:description\" content=\"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest\u0026#x27;s digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Quivr\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://thevibecompany.mintlify.site/_mintlify/api/og/v2?division=Admin\u0026amp;title=Register+plugin\u0026amp;description=Register+a+plugin+version+the+operator+runs+at+an+address.+The+request+carries+the+exact+quivr-plugin.yaml+the+plugin+was+built+from%2C+its+endpoint+and+the+setti\u0026amp;theme=023e5d222c667e5b3829d1ff\u0026amp;signature=f28a2a160362de83a1ec771d43473f006dad71ab18d609e19d48a6886e3ee56c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Register plugin - Quivr\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest\u0026#x27;s digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://thevibecompany.mintlify.site/_mintlify/api/og/v2?division=Admin\u0026amp;title=Register+plugin\u0026amp;description=Register+a+plugin+version+the+operator+runs+at+an+address.+The+request+carries+the+exact+quivr-plugin.yaml+the+plugin+was+built+from%2C+its+endpoint+and+the+setti\u0026amp;theme=023e5d222c667e5b3829d1ff\u0026amp;signature=f28a2a160362de83a1ec771d43473f006dad71ab18d609e19d48a6886e3ee56c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/thevibecompany/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Quivr\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5b3fd6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/admin/register-plugin.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.quivr.thevibecompany.co/#organization\",\"name\":\"Quivr\",\"url\":\"https://docs.quivr.thevibecompany.co\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.quivr.thevibecompany.co#website\",\"name\":\"Quivr\",\"url\":\"https://docs.quivr.thevibecompany.co\",\"publisher\":{\"@id\":\"https://docs.quivr.thevibecompany.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin#webpage\",\"url\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin\",\"name\":\"Register plugin\",\"description\":\"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest's digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\",\"dateModified\":\"2026-10-13T09:57:32.883Z\",\"isPartOf\":{\"@id\":\"https://docs.quivr.thevibecompany.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.quivr.thevibecompany.co/api-reference/version/read-the-running-quivr-build\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Admin\",\"item\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/list-audit-events\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Register plugin\",\"item\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin#apireference\",\"headline\":\"Register plugin\",\"name\":\"Register plugin\",\"description\":\"Register a plugin version the operator runs at an address. The request carries the exact quivr-plugin.yaml the plugin was built from, its endpoint and the settings it is installed with, with the shape and rules of a pin in the startup configuration (configuration, routes, kinds, spaces); plugin id and version come from the manifest. Quivr then checks it in the background with the Contract Runner against the endpoint, whose discovery must report the manifest's digest, using the normative fixtures and the fixtures the request carries. The registration is registered while its check runs, then validated or rejected with the report. The same idempotency key returns the same registration; a key already used for another registration or other fixtures is 409 idempotency_conflict; a new key for a rejected registration checks it again. 422 invalid_plugin lists what the engine refuses in the manifest, settings or fixture paths. The body is at most 8 MiB (413 request_too_large). Requires plugins:admin.\",\"url\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin\",\"mainEntityOfPage\":{\"@id\":\"https://docs.quivr.thevibecompany.co/api-reference/admin/register-plugin#webpage\"},\"dateModified\":\"2026-10-13T09:57:32.883Z\",\"publisher\":{\"@id\":\"https://docs.quivr.thevibecompany.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.quivr.thevibecompany.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Quivr\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Quivr\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/admin/register-plugin.md","siteName":"Quivr","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Reference","groups":[{"group":"Quivr 2","pages":[{"title":"Versions and compatibility","href":"/reference/compatibility"},{"title":"Known limits","href":"/reference/known-limits"}]},{"group":"HTTP API","pages":[{"title":"API overview","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"group":"Version","pages":[{"title":"Read the running Quivr build","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/version","href":"/api-reference/version/read-the-running-quivr-build"}]},{"group":"Records","pages":[{"title":"List records","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/records","href":"/api-reference/records/list-records"},{"title":"Ingest record","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/records","href":"/api-reference/records/ingest-record"},{"title":"Count records","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/records/count","href":"/api-reference/records/count-records"},{"title":"Ingest batch","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/records/batch","href":"/api-reference/records/ingest-batch"},{"title":"Withdraw record","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/records/withdrawals","href":"/api-reference/records/withdraw-record"},{"title":"Get record","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/records/{record_id}","href":"/api-reference/records/get-record"},{"title":"Get version","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/records/{record_id}/versions/{version_id}","href":"/api-reference/records/get-version"}]},{"group":"Facets","pages":[{"title":"Count facets","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/facets","href":"/api-reference/facets/count-facets"}]},{"group":"Corpora","pages":[{"title":"Get corpus stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/corpora/{corpus_id}/stats","href":"/api-reference/corpora/get-corpus-stats"},{"title":"List corpora","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/corpora","href":"/api-reference/corpora/list-corpora"},{"title":"Create corpus","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/corpora","href":"/api-reference/corpora/create-corpus"},{"title":"Get corpus","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/corpora/{corpus_id}","href":"/api-reference/corpora/get-corpus"},{"title":"Rename corpus","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v0/corpora/{corpus_id}","href":"/api-reference/corpora/rename-corpus"},{"title":"Archive corpus","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/corpora/{corpus_id}/archive","href":"/api-reference/corpora/archive-corpus"},{"title":"Unarchive corpus","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/corpora/{corpus_id}/unarchive","href":"/api-reference/corpora/unarchive-corpus"},{"title":"Configure retrieval","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v0/corpora/{corpus_id}/retrieval","href":"/api-reference/corpora/configure-retrieval"},{"title":"List vector spaces","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/corpora/{corpus_id}/vector-spaces","href":"/api-reference/corpora/list-vector-spaces"},{"title":"Rebuild corpus projection","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/corpora/{corpus_id}/rebuilds","href":"/api-reference/corpora/rebuild-corpus-projection"}]},{"group":"Ingestion receipts","pages":[{"title":"Get receipt","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/ingestion-receipts/{receipt_id}","href":"/api-reference/ingestion-receipts/get-receipt"}]},{"group":"Uploads","pages":[{"title":"Create upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/uploads","href":"/api-reference/uploads/create-upload"},{"title":"Confirm upload","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/uploads/{upload_id}/confirm","href":"/api-reference/uploads/confirm-upload"},{"title":"Get upload","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/uploads/{upload_id}","href":"/api-reference/uploads/get-upload"}]},{"group":"Blobs","pages":[{"title":"Get blob","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/blobs/{blob_id}","href":"/api-reference/blobs/get-blob"}]},{"group":"Operations","pages":[{"title":"Get operation","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/operations/{operation_id}","href":"/api-reference/operations/get-operation"},{"title":"Cancel operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/operations/{operation_id}/cancel","href":"/api-reference/operations/cancel-operation"},{"title":"Rerun operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/operations/{operation_id}/rerun","href":"/api-reference/operations/rerun-operation"},{"title":"Pause operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/operations/{operation_id}/pause","href":"/api-reference/operations/pause-operation"},{"title":"Resume operation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/operations/{operation_id}/resume","href":"/api-reference/operations/resume-operation"}]},{"group":"Changes","pages":[{"title":"Poll changes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/changes","href":"/api-reference/changes/poll-changes"},{"title":"Stream changes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/changes/stream","href":"/api-reference/changes/stream-changes"}]},{"group":"Saved queries","pages":[{"title":"Create saved query","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/saved-queries","href":"/api-reference/saved-queries/create-saved-query"},{"title":"Get saved query","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/saved-queries/{saved_query_id}","href":"/api-reference/saved-queries/get-saved-query"},{"title":"Get saved query version","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/saved-queries/{saved_query_id}/versions/{version_id}","href":"/api-reference/saved-queries/get-saved-query-version"},{"title":"Create saved query version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/saved-queries/{saved_query_id}/versions","href":"/api-reference/saved-queries/create-saved-query-version"},{"title":"Delete saved query","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/saved-queries/{saved_query_id}/delete","href":"/api-reference/saved-queries/delete-saved-query"},{"title":"Rename saved query","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/saved-queries/{saved_query_id}/rename","href":"/api-reference/saved-queries/rename-saved-query"}]},{"group":"Subscriptions","pages":[{"title":"List subscriptions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/subscriptions","href":"/api-reference/subscriptions/list-subscriptions"},{"title":"Create subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions","href":"/api-reference/subscriptions/create-subscription"},{"title":"Get subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/get-subscription"},{"title":"Get subscription version","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/subscriptions/{subscription_id}/versions/{version_id}","href":"/api-reference/subscriptions/get-subscription-version"},{"title":"Create subscription version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions/{subscription_id}/versions","href":"/api-reference/subscriptions/create-subscription-version"},{"title":"Delete subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions/{subscription_id}/delete","href":"/api-reference/subscriptions/delete-subscription"},{"title":"Disable subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions/{subscription_id}/disable","href":"/api-reference/subscriptions/disable-subscription"},{"title":"Enable subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions/{subscription_id}/enable","href":"/api-reference/subscriptions/enable-subscription"},{"title":"Rename subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscriptions/{subscription_id}/rename","href":"/api-reference/subscriptions/rename-subscription"}]},{"group":"Subscription previews","pages":[{"title":"Preview subscription","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/subscription-previews","href":"/api-reference/subscription-previews/preview-subscription"}]},{"group":"Matches","pages":[{"title":"List matches","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/matches","href":"/api-reference/matches/list-matches"},{"title":"Get match","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/matches/{match_id}","href":"/api-reference/matches/get-match"}]},{"group":"Deliveries","pages":[{"title":"Get delivery","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/deliveries/{delivery_id}","href":"/api-reference/deliveries/get-delivery"},{"title":"List delivery attempts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/deliveries/{delivery_id}/attempts","href":"/api-reference/deliveries/list-delivery-attempts"}]},{"group":"Connectors","pages":[{"title":"List connectors","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connectors","href":"/api-reference/connectors/list-connectors"},{"title":"Create connector","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors","href":"/api-reference/connectors/create-connector"},{"title":"List push token metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connectors/{connector_id}/tokens","href":"/api-reference/connectors/list-push-token-metadata"},{"title":"Issue a source-scoped push token","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/tokens","href":"/api-reference/connectors/issue-a-source-scoped-push-token"},{"title":"Replace a push token with five minutes of overlap","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/tokens/{token_id}/rotate","href":"/api-reference/connectors/replace-a-push-token-with-five-minutes-of-overlap"},{"title":"Revoke a push token immediately","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v0/connectors/{connector_id}/tokens/{token_id}","href":"/api-reference/connectors/revoke-a-push-token-immediately"},{"title":"Answer a declared source challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connectors/{connector_id}/api/{path}","href":"/api-reference/connectors/answer-a-declared-source-challenge"},{"title":"Push data to a declared source route","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/api/{path}","href":"/api-reference/connectors/push-data-to-a-declared-source-route"},{"title":"Get connector","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connectors/{connector_id}","href":"/api-reference/connectors/get-connector"},{"title":"Disable connector","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/disable","href":"/api-reference/connectors/disable-connector"},{"title":"Pause connector","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/pause","href":"/api-reference/connectors/pause-connector"},{"title":"Resume connector","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/resume","href":"/api-reference/connectors/resume-connector"},{"title":"Replace connector credential","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v0/connectors/{connector_id}/credential","href":"/api-reference/connectors/replace-connector-credential"},{"title":"Change connector schedule","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v0/connectors/{connector_id}/schedule","href":"/api-reference/connectors/change-connector-schedule"},{"title":"Request connector run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connectors/{connector_id}/runs","href":"/api-reference/connectors/request-connector-run"}]},{"group":"Connector webhooks","pages":[{"title":"Relay connector challenge","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connector-webhooks/{connector_id}","href":"/api-reference/connector-webhooks/relay-connector-challenge"},{"title":"Relay connector delivery","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/connector-webhooks/{connector_id}","href":"/api-reference/connector-webhooks/relay-connector-delivery"}]},{"group":"Connector kinds","pages":[{"title":"List connector kinds","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/connector-kinds","href":"/api-reference/connector-kinds/list-connector-kinds"}]},{"group":"Admin","pages":[{"title":"List audit events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/audit","href":"/api-reference/admin/list-audit-events"},{"title":"List plugin registrations","description":"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.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/plugins","href":"/api-reference/admin/list-plugin-registrations"},{"title":"Register plugin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/plugins","href":"/api-reference/admin/register-plugin"},{"title":"Get plugin registration","description":"One registration with the Contract Runner's report once its check ran. Requires plugins:admin.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/plugins/{registration_id}","href":"/api-reference/admin/get-plugin-registration"},{"title":"Activate plugin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/plugins/{registration_id}/activate","href":"/api-reference/admin/activate-plugin"},{"title":"Get pipeline plan","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/plugins/plans/{plan_id}","href":"/api-reference/admin/get-pipeline-plan"},{"title":"List pipeline plans","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/plugins/plans","href":"/api-reference/admin/list-pipeline-plans"},{"title":"Request backfill","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/backfills","href":"/api-reference/admin/request-backfill"},{"title":"Promote vector space","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/spaces/{vector_space_id}/promote","href":"/api-reference/admin/promote-vector-space"},{"title":"Get queue backlog","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/queues","href":"/api-reference/admin/get-queue-backlog"},{"title":"List quarantined versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/quarantine","href":"/api-reference/admin/list-quarantined-versions"},{"title":"Reprocess quarantine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/quarantine/reprocess","href":"/api-reference/admin/reprocess-quarantine"},{"title":"Migrate subscription evaluators","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/subscriptions/evaluator-migrations","href":"/api-reference/admin/migrate-subscription-evaluators"},{"title":"List evaluation backlog","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/subscriptions/evaluation-backlog","href":"/api-reference/admin/list-evaluation-backlog"},{"title":"Retire evaluations","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/subscriptions/evaluation-retirements","href":"/api-reference/admin/retire-evaluations"},{"title":"Get evaluation retirement","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/subscriptions/evaluation-retirements/{retirement_id}","href":"/api-reference/admin/get-evaluation-retirement"},{"title":"Rollback pipeline plan","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/admin/plugins/plan/rollback","href":"/api-reference/admin/rollback-pipeline-plan"},{"title":"Get active pipeline plan","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/plugins/plan","href":"/api-reference/admin/get-active-pipeline-plan"},{"title":"List active plugins","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/active-plugins","href":"/api-reference/admin/list-active-plugins"},{"title":"List admin documents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/documents","href":"/api-reference/admin/list-admin-documents"},{"title":"Get document timeline","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/documents/{version_id}/timeline","href":"/api-reference/admin/get-document-timeline"},{"title":"Count accepted and refused pushes per source instance","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/connector-pushes","href":"/api-reference/admin/count-accepted-and-refused-pushes-per-source-instance"},{"title":"Get plugin call stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/plugins","href":"/api-reference/admin/get-plugin-call-stats"},{"title":"Get search stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/searches","href":"/api-reference/admin/get-search-stats"},{"title":"Get step stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/steps","href":"/api-reference/admin/get-step-stats"},{"title":"Get received stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/received","href":"/api-reference/admin/get-received-stats"},{"title":"Get match stats","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/matches","href":"/api-reference/admin/get-match-stats"},{"title":"Get top queries","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/admin/stats/top-queries","href":"/api-reference/admin/get-top-queries"}]},{"group":"Search","pages":[{"title":"Search records","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v0/search","href":"/api-reference/search/search-records"},{"title":"List search profiles","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v0/search/profiles","href":"/api-reference/search/list-search-profiles"}]},{"group":"Webhooks","pages":[{"title":"Receive monitoring notification","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook monitoringNotification","href":"/api-reference/webhooks/receive-monitoring-notification"}]}]},{"group":"Command line","pages":[{"title":"Command-line reference","href":"/reference/cli"},{"title":"MCP reference","href":"/reference/mcp"}]},{"group":"Plugins","pages":[{"title":"Plugin manifest","href":"/reference/plugin-manifest"},{"title":"Plugin protocol","href":"/reference/plugin-protocol"}]},{"group":"Deployment","pages":[{"title":"Configuration","href":"/reference/configuration"}]}]}]},"basePath":"","title":"Register plugin - Quivr","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}