Files
pablan/frontend/src/lib/api/schema.d.ts
T
ProfessorNovaandClaude Opus 5 97dbff309c Pablan, as it stands
Self-hosted knowledge management for SMEs: a split-screen Markdown editor
whose sections an LLM refines while you write, and RAG question answering
over the documents that result. FastAPI + Postgres/pgvector on the back,
SvelteKit on the front, everything OpenAI-compatible and self-hostable.

Squashed into a single commit; the development history stays local.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CA43ZJda8Rbp2hKXNy8f6b
2026-09-04 08:36:17 +02:00

3582 lines
106 KiB
TypeScript

/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/api/auth/login": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Login */
post: operations["login_api_auth_login_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/auth/logout": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Logout */
post: operations["logout_api_auth_logout_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/auth/me": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Me */
get: operations["me_api_auth_me_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/account/password": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Change Password
* @description Change your own password, proving the current one first.
*
* Every other session of this user is revoked — a
* password change is how someone reacts to a suspected compromise, so
* other devices must lose access. The session doing the change survives,
* otherwise the user is thrown out of the app they are standing in.
*/
post: operations["change_password_api_account_password_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/account/locale": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/**
* Set Locale
* @description Pin the interface language, or clear it to follow the browser again.
*
* The backend only stores the choice — it never renders UI-language
* strings (see docs/architecture.md); the frontend does the translating.
*/
put: operations["set_locale_api_account_locale_put"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/account/document": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Personal Document
* @description What the profile page needs to show: your document about yourself, or
* the way to start it. Self-scoped, and authorship is the whole rule — a
* document someone else wrote about you is not this.
*/
get: operations["personal_document_api_account_document_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/llm/test": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Llm Test
* @description First-line support tool: pings all three roles, or one candidate
* configuration without persisting anything.
*/
post: operations["llm_test_api_admin_llm_test_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/llm/settings": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Llm Settings */
get: operations["llm_settings_api_admin_llm_settings_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/llm/settings/{role}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/**
* Update Llm Setting
* @description Change a role's stored config and apply it without a restart.
*
* Writing a field marks it as changed here; resetting it writes back what
* `.env` currently says and marks it as coming from the environment
* again.
*/
put: operations["update_llm_setting_api_admin_llm_settings__role__put"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/llm/models/{role}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Llm Models
* @description List what the endpoint serves, so the model field can be a dropdown.
*/
post: operations["llm_models_api_admin_llm_models__role__post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/prompts": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Prompt Settings
* @description Every editable system prompt with its effective text and whether it is
* still the shipped default.
*/
get: operations["prompt_settings_api_admin_prompts_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/prompts/{key}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/**
* Update Prompt Setting
* @description Override a system prompt (applied without a restart) or reset it to the
* shipped default. Resetting deletes the override row.
*/
put: operations["update_prompt_setting_api_admin_prompts__key__put"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/users": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Users
* @description Paged, because the admin screen is the one place that scales with
* headcount: a company with two hundred employees would otherwise get two
* hundred rows and no way to find anyone.
*
* Departments deliberately stay unpaged: an SME has a handful, and a
* pager over five rows is furniture.
*/
get: operations["list_users_api_admin_users_get"];
put?: never;
/** Create User */
post: operations["create_user_api_admin_users_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/users/{user_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/**
* Delete User
* @description Offboarding: sessions and conversations cascade, documents survive
* with author set to NULL.
*/
delete: operations["delete_user_api_admin_users__user_id__delete"];
options?: never;
head?: never;
/** Update User */
patch: operations["update_user_api_admin_users__user_id__patch"];
trace?: never;
};
"/api/admin/departments": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Create Department */
post: operations["create_department_api_admin_departments_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/departments/{department_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/**
* Delete Department
* @description Delete a department. Members and owned documents survive with their
* `department_id` set to NULL, but this department's `doc_permissions` grants
* CASCADE away — silently dropping the shared read access they gave. Because
* that access loss is invisible, deleting a department that still has members,
* owned documents or grants requires `?confirm=true` (409 `department_in_use`
* otherwise).
*/
delete: operations["delete_department_api_admin_departments__department_id__delete"];
options?: never;
head?: never;
/** Rename Department */
patch: operations["rename_department_api_admin_departments__department_id__patch"];
trace?: never;
};
"/api/admin/metrics": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Metrics Snapshot
* @description The in-process metrics registry as JSON.
*
* Per process by design (the app runs one worker), and admin-only: the
* counters name models and durations, which is operational detail rather
* than something to expose publicly.
*/
get: operations["metrics_snapshot_api_admin_metrics_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/conversations": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Conversations
* @description The sidebar list, newest activity first. The title is the first message,
* fetched as a correlated subquery so one statement answers the whole list.
*/
get: operations["list_conversations_api_conversations_get"];
put?: never;
/** Create Conversation */
post: operations["create_conversation_api_conversations_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/conversations/{conversation_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get Conversation */
get: operations["get_conversation_api_conversations__conversation_id__get"];
put?: never;
post?: never;
/**
* Delete Conversation
* @description GDPR: users delete their own conversations; messages cascade.
*/
delete: operations["delete_conversation_api_conversations__conversation_id__delete"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/conversations/{conversation_id}/messages": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Send Message */
post: operations["send_message_api_conversations__conversation_id__messages_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/departments": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Departments
* @description Department names for filters and pickers — not secret, any user.
*/
get: operations["list_departments_api_departments_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Documents
* @description Browse readable documents.
*
* Paginated server-side: the list is the one screen that grows without
* bound as a knowledge base fills up. Search has its own endpoint and is
* ranked rather than paged.
*/
get: operations["list_documents_api_documents_get"];
put?: never;
/**
* Create Document
* @description Open a new document to write in.
*
* A `draft` is the author's private working copy: `readable_documents_filter`
* shows it to no one else (bar a colleague asked to check it) and only
* `published` documents are indexed, so a draft never reaches another user
* or an LLM prompt.
*/
post: operations["create_document_api_documents_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/search": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Search Documents
* @description Find documents through the same hybrid retrieval the chat uses.
*
* Permission-safe by construction: `search()` requires a user and applies
* the shared filter. Drafts and pending documents are readable
* but never indexed, so a title fallback covers them — the one asymmetry
* between this endpoint and chat retrieval.
*/
get: operations["search_documents_api_documents_search_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/export": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Export Documents
* @description The readable knowledge base as a ZIP of Markdown files with YAML
* frontmatter. Permission-filtered by construction (`readable_documents_filter`
* — an admin exports what they can read, anyone else the same); built-in help
* pages are excluded (product content, not the company's knowledge). stdlib
* only, streamed, no temp files.
*/
get: operations["export_documents_api_documents_export_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/stats": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Document Stats
* @description Is this a fresh install or a filled one? Read by the landing page's
* first-run guide.
*/
get: operations["document_stats_api_documents_stats_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get Document */
get: operations["get_document_api_documents__document_id__get"];
put?: never;
post?: never;
/** Delete Document */
delete: operations["delete_document_api_documents__document_id__delete"];
options?: never;
head?: never;
/** Update Document */
patch: operations["update_document_api_documents__document_id__patch"];
trace?: never;
};
"/api/documents/{document_id}/history": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Document History
* @description The document's audit trail, newest first: who changed or reviewed it,
* when, and whether a content snapshot exists to diff against. Same read gate
* as the document itself, so history never leaks to a user who cannot read the
* document.
*/
get: operations["document_history_api_documents__document_id__history_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/versions/{event_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Document Version
* @description A single past version's frozen content plus the content it replaced, so
* the caller can show what this event changed. Same read gate as the
* document.
*/
get: operations["document_version_api_documents__document_id__versions__event_id__get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/publish": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Publish Document
* @description Make a draft readable and searchable for everyone its visibility allows.
*
* The author's own call — an open question about the content does not block
* it, it travels with the document instead (`open_reviews`), which is what
* lets a colleague read it AND know it is not settled.
*
* Author or admin, deliberately not every editor: a colleague asked to check
* a draft may fix what is wrong in it, but whether the company gets to read
* it at all is not their call.
*/
post: operations["publish_document_api_documents__document_id__publish_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/reviewers": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Reviewers
* @description Who can be asked: everyone who could read this document once published,
* minus the author. Permission-safe and non-admin (unlike /admin/users), and
* only id + name leave the server.
*/
get: operations["list_reviewers_api_documents__document_id__reviewers_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/reviews": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Request Review
* @description Ask a colleague to check this document, optionally about something
* specific. The request grants them the right to read and edit it until it
* is answered.
*/
post: operations["request_review_api_documents__document_id__reviews_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/reviews/{review_id}/resolve": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Resolve Review
* @description Answer a request: the content was checked.
*
* The reviewer answers their own request; the author (or an admin) can close
* one that has become moot, because a question nobody will answer should not
* mark a document forever.
*/
post: operations["resolve_review_api_documents__document_id__reviews__review_id__resolve_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/departments": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/**
* Set Shared Departments
* @description Replace the full set of ADDITIONAL departments this document is shared
* with. Author or admin only.
*/
put: operations["set_shared_departments_api_documents__document_id__departments_put"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/suggest-title": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Suggest Title
* @description Suggest a concise title from the document's content (review step for a
* new document). Owner-scoped; content in, title out, nothing logged.
*/
post: operations["suggest_title_api_documents__document_id__suggest_title_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/suggest-similar": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Suggest Similar
* @description Existing documents that match the conversation a capture is starting
* from — found over an LLM TOPIC SUMMARY of the chat (not the raw last
* message), permission-filtered, help pages excluded. Empty list when the
* conversation is unknown, empty, or nothing is close enough.
*/
post: operations["suggest_similar_api_documents_suggest_similar_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/documents/{document_id}/refine": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Refine Section
* @description Stream a matured version of the section at the cursor.
*
* SSE frames: one `section` frame with the exact line range the suggestion
* replaces, then `token` frames, then `done` (or `error`).
*/
post: operations["refine_section_api_documents__document_id__refine_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/people": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List People
* @description Every colleague, ordered by name. Visible to any authenticated user.
*/
get: operations["list_people_api_people_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/people/{person_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get Person
* @description One colleague's profile.
*/
get: operations["get_person_api_people__person_id__get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates/catalog": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Catalog
* @description The blueprints shipped with Pablan, each marked with whether this
* instance has already added it.
*/
get: operations["list_catalog_api_templates_catalog_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates/catalog/{catalog_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get Catalog Blueprint
* @description Read a blueprint before adding it — the whole point of "view" is that
* an admin can see its structure before committing to it.
*/
get: operations["get_catalog_blueprint_api_templates_catalog__catalog_id__get"];
put?: never;
/**
* Add From Catalog
* @description Copy a blueprint into this instance. The result is an ordinary
* template row: editable, and never touched by the catalog again.
*/
post: operations["add_from_catalog_api_templates_catalog__catalog_id__post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates/build": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Build Template
* @description Save a template from the structured form builder. Creates a new row
* (template_id null) or updates one in place.
*/
post: operations["build_template_api_templates_build_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates/{template_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get Template */
get: operations["get_template_api_templates__template_id__get"];
/**
* Update Template
* @description Replace a template's YAML. Validated against the schema on save.
*/
put: operations["update_template_api_templates__template_id__put"];
post?: never;
/**
* Delete Template
* @description Remove a template. Documents created from it are independent and
* survive (a template is only a starting point). If it came from the
* catalog it can always be added back.
*/
delete: operations["delete_template_api_templates__template_id__delete"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates/{template_id}/duplicate": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* Duplicate Template
* @description Fork a template — for trying a variant without losing the original.
* The copy gets a fresh config id so the two never collide.
*/
post: operations["duplicate_template_api_templates__template_id__duplicate_post"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/templates": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Templates
* @description Templates the picker offers. Templates in the reader's language come
* first — they are customer content, so a mismatched one is still listed
* rather than hidden.
*/
get: operations["list_templates_api_templates_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/health": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Health */
get: operations["health_api_health_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: {
/**
* AccessReason
* @description Why a document is visible to the requesting user.
*
* API-only (never stored): computed per request so the UI can explain
* access instead of leaving visibility rules implicit.
* @enum {string}
*/
AccessReason: "author" | "public" | "department" | "granted" | "review";
/** AdminDepartmentOut */
AdminDepartmentOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Name */
name: string;
};
/** AdminUserOut */
AdminUserOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Email */
email: string;
/** Name */
name: string;
role: components["schemas"]["UserRole"];
/** Department Id */
department_id: string | null;
};
/** AdminUserPage */
AdminUserPage: {
/** Items */
items: components["schemas"]["AdminUserOut"][];
/** Total */
total: number;
/** Per Page */
per_page: number;
};
/** AuthoringTemplate */
AuthoringTemplate: {
/** Id */
id: string;
/** Name */
name: string;
/** Version */
version: string;
/**
* Kind
* @default authoring
* @constant
*/
kind: "authoring";
/** Locale */
locale?: ("de" | "en") | null;
/**
* Description
* @default
*/
description: string;
/**
* @default {
* "temperature": 0.4
* }
*/
model: components["schemas"]["TemplateModelHints"];
/** Persona */
persona: string;
/** Skeleton */
skeleton: string;
/**
* Sections
* @default []
*/
sections: components["schemas"]["SectionHint"][];
/** Title Template */
title_template: string;
/**
* @default {
* "visibility": "department"
* }
*/
metadata: components["schemas"]["TemplateMetadata"];
};
/** CatalogDetail */
CatalogDetail: {
/** Id */
id: string;
/** Name */
name: string;
/** Description */
description: string;
/** Sections */
sections: number;
/** Added */
added: boolean;
/** Yaml */
yaml: string;
};
/**
* CatalogSummary
* @description A blueprint on disk. `id` is the config id, NOT a row id — a catalog
* entry has no row until someone adds it.
*/
CatalogSummary: {
/** Id */
id: string;
/** Name */
name: string;
/** Description */
description: string;
/** Sections */
sections: number;
/** Added */
added: boolean;
};
/** ConversationCreate */
ConversationCreate: {
mode: components["schemas"]["ConversationMode"];
};
/** ConversationDetail */
ConversationDetail: {
/**
* Id
* Format: uuid
*/
id: string;
/** Title */
title?: string | null;
/**
* Messages
* @default []
*/
messages: components["schemas"]["MessageOut"][];
};
/**
* ConversationMode
* @enum {string}
*/
ConversationMode: "query" | "insight";
/** ConversationSummary */
ConversationSummary: {
/**
* Id
* Format: uuid
*/
id: string;
/** Title */
title?: string | null;
};
/** DepartmentCreate */
DepartmentCreate: {
/** Name */
name: string;
};
/** DepartmentOut */
DepartmentOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Name */
name: string;
};
/** DepartmentRef */
DepartmentRef: {
/**
* Id
* Format: uuid
*/
id: string;
/** Name */
name: string;
};
/**
* DocumentCreate
* @description Start a new document the user will write in the editor.
*
* With a `template_id` the draft opens on that template's Markdown skeleton
* and title; without one it starts blank and `title` is required. The result
* is a `draft` — author-only and never indexed until it is published.
*/
DocumentCreate: {
/** Template Id */
template_id?: string | null;
/** Title */
title?: string | null;
visibility?: components["schemas"]["DocumentVisibility"] | null;
/** Conversation Id */
conversation_id?: string | null;
};
/**
* DocumentDepartments
* @description The full set of ADDITIONAL departments the document is shared with (on
* top of the owning department) — replaces the existing grants.
*/
DocumentDepartments: {
/** Department Ids */
department_ids: string[];
/** Confirm Lockout */
confirm_lockout?: boolean | null;
};
/** DocumentDetail */
DocumentDetail: {
/**
* Id
* Format: uuid
*/
id: string;
/** Title */
title: string;
status: components["schemas"]["DocumentStatus"];
visibility: components["schemas"]["DocumentVisibility"];
/** Department Id */
department_id: string | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/**
* Updated At
* Format: date-time
*/
updated_at: string;
access_reason: components["schemas"]["AccessReason"];
/** Can Edit */
can_edit: boolean;
/** Open Reviews */
open_reviews: number;
/** Is Builtin */
is_builtin: boolean;
/** Content Md */
content_md: string;
/**
* Reviews
* @default []
*/
reviews: components["schemas"]["ReviewOut"][];
/**
* Shared Departments
* @default []
*/
shared_departments: components["schemas"]["DepartmentRef"][];
};
/**
* DocumentEventAction
* @description A recorded step in a document's audit history.
*
* Content-bearing actions (created / edited) snapshot the Markdown source of
* truth; the rest record only who did what and when.
* @enum {string}
*/
DocumentEventAction: "created" | "edited" | "published" | "archived" | "visibility_changed" | "review_requested" | "review_resolved";
/**
* DocumentEventOut
* @description One entry in a document's history timeline — metadata only.
*/
DocumentEventOut: {
/**
* Id
* Format: uuid
*/
id: string;
action: components["schemas"]["DocumentEventAction"];
/** Actor Id */
actor_id: string | null;
/** Actor Name */
actor_name: string | null;
visibility: components["schemas"]["DocumentVisibility"] | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/** Has Snapshot */
has_snapshot: boolean;
};
/** DocumentPage */
DocumentPage: {
/** Items */
items: components["schemas"]["DocumentSummary"][];
/** Total */
total: number;
/** Per Page */
per_page: number;
};
/**
* DocumentSearchHit
* @description A search result: the document plus the section that matched.
*
* Empty `heading_path` means the match was on the title, not a section.
*/
DocumentSearchHit: {
/**
* Id
* Format: uuid
*/
id: string;
/** Title */
title: string;
status: components["schemas"]["DocumentStatus"];
visibility: components["schemas"]["DocumentVisibility"];
/** Department Id */
department_id: string | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/**
* Updated At
* Format: date-time
*/
updated_at: string;
access_reason: components["schemas"]["AccessReason"];
/** Can Edit */
can_edit: boolean;
/** Open Reviews */
open_reviews: number;
/** Is Builtin */
is_builtin: boolean;
/**
* Heading Path
* @default
*/
heading_path: string;
};
/**
* DocumentSort
* @description How the browse list is ordered. Deliberately two options: "what
* changed" and "what is new" are the two questions people actually ask of
* a document list.
* @enum {string}
*/
DocumentSort: "updated" | "created";
/**
* DocumentStats
* @description Company-wide counts, read by the landing page's first-run guide.
*
* Aggregates only — no titles, no per-user data. Deliberately not
* permission-filtered: a bare count reveals nothing about content.
*/
DocumentStats: {
/** Documents Total */
documents_total: number;
/** Departments Total */
departments_total: number;
};
/**
* DocumentStatus
* @description Where a document stands.
*
* Three states, because publishing is the author's own decision: a draft is
* private, a published document is visible and indexed, an archived one is
* neither. Uncertainty about CONTENT is not a status — it is an open review
* request (`ReviewRequest`), which can sit on a published document too.
* @enum {string}
*/
DocumentStatus: "draft" | "published" | "archived";
/** DocumentSummary */
DocumentSummary: {
/**
* Id
* Format: uuid
*/
id: string;
/** Title */
title: string;
status: components["schemas"]["DocumentStatus"];
visibility: components["schemas"]["DocumentVisibility"];
/** Department Id */
department_id: string | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/**
* Updated At
* Format: date-time
*/
updated_at: string;
access_reason: components["schemas"]["AccessReason"];
/** Can Edit */
can_edit: boolean;
/** Open Reviews */
open_reviews: number;
/** Is Builtin */
is_builtin: boolean;
};
/** DocumentUpdate */
DocumentUpdate: {
/** Title */
title?: string | null;
/** Content Md */
content_md?: string | null;
visibility?: components["schemas"]["DocumentVisibility"] | null;
status?: components["schemas"]["DocumentStatus"] | null;
/** Confirm Lockout */
confirm_lockout?: boolean | null;
/** Conversation Id */
conversation_id?: string | null;
};
/**
* DocumentVersion
* @description A past version's frozen content, for viewing or diffing.
*
* A snapshot is taken *after* its event, so `content_md` is the state this
* event produced and `previous_content_md` the state it started from — the
* pair is what "what did this change do?" needs. `previous_content_md` is
* null for the first snapshot, where everything was added.
*/
DocumentVersion: {
/**
* Id
* Format: uuid
*/
id: string;
action: components["schemas"]["DocumentEventAction"];
/** Actor Id */
actor_id: string | null;
/** Actor Name */
actor_name: string | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/** Title */
title: string | null;
/** Content Md */
content_md: string | null;
/** Previous Content Md */
previous_content_md: string | null;
visibility: components["schemas"]["DocumentVisibility"] | null;
};
/**
* DocumentVisibility
* @enum {string}
*/
DocumentVisibility: "public" | "department" | "restricted";
/** HTTPValidationError */
HTTPValidationError: {
/** Detail */
detail?: components["schemas"]["ValidationError"][];
};
/**
* LLMModelsRequest
* @description Optional candidate endpoint, so an admin can list the models of a
* URL they have typed but not saved.
*/
LLMModelsRequest: {
/** Base Url */
base_url?: string | null;
/** Api Key */
api_key?: string | null;
};
/** LLMModelsResponse */
LLMModelsResponse: {
/** Models */
models: string[];
/** Supported */
supported: boolean;
/** Error */
error?: string | null;
};
/** LLMRoleStatus */
LLMRoleStatus: {
/**
* Role
* @enum {string}
*/
role: "chat" | "utility" | "embedding";
/** Ok */
ok: boolean;
/** Base Url */
base_url: string;
/** Model */
model: string;
/** Latency Ms */
latency_ms: number | null;
/** Code */
code: string | null;
/** Error */
error: string | null;
};
/**
* LLMSettingOut
* @description Stored config for one role.
*
* The api_key is NEVER returned — only whether one is set, and where each
* field's value came from. `*_from_env` drives the per-field
* "taken from .env" / "changed here" label and the reset action; it is
* provenance, not a fallback.
*/
LLMSettingOut: {
/**
* Role
* @enum {string}
*/
role: "chat" | "utility" | "embedding";
/** Base Url */
base_url: string;
/** Model */
model: string;
/** Base Url From Env */
base_url_from_env: boolean;
/** Model From Env */
model_from_env: boolean;
/** Api Key Set */
api_key_set: boolean;
/** Api Key From Env */
api_key_from_env: boolean;
};
/** LLMSettingUpdate */
LLMSettingUpdate: {
/** Base Url */
base_url?: string | null;
/** Model */
model?: string | null;
/** Api Key */
api_key?: string | null;
/** Reset Base Url */
reset_base_url?: boolean | null;
/** Reset Model */
reset_model?: boolean | null;
/** Reset Api Key */
reset_api_key?: boolean | null;
};
/**
* LLMTestRequest
* @description Optional candidate config: test an endpoint BEFORE saving it.
*/
LLMTestRequest: {
/** Role */
role?: ("chat" | "utility" | "embedding") | null;
/** Base Url */
base_url?: string | null;
/** Model */
model?: string | null;
/** Api Key */
api_key?: string | null;
};
/** LLMTestResponse */
LLMTestResponse: {
/** Roles */
roles: components["schemas"]["LLMRoleStatus"][];
};
/**
* LocalePreference
* @description The languages the interface ships in — the frontend bundles must
* cover exactly these.
*/
LocalePreference: {
/** Locale */
locale?: ("de" | "en") | null;
};
/** LoginRequest */
LoginRequest: {
/** Email */
email: string;
/** Password */
password: string;
};
/** MessageOut */
MessageOut: {
/**
* Id
* Format: uuid
*/
id: string;
role: components["schemas"]["MessageRole"];
/** Content */
content: string;
/**
* Created At
* Format: date-time
*/
created_at: string;
/**
* Sources
* @default []
*/
sources: components["schemas"]["MessageSource"][];
/** Fallback */
fallback?: string | null;
};
/**
* MessageRole
* @enum {string}
*/
MessageRole: "user" | "assistant" | "system";
/** MessageSource */
MessageSource: {
/**
* Document Id
* Format: uuid
*/
document_id: string;
/** Title */
title: string;
/** Heading Path */
heading_path: string;
/**
* Excerpt
* @default
*/
excerpt: string;
/**
* Used
* @default true
*/
used: boolean;
/**
* Review Pending
* @default false
*/
review_pending: boolean;
};
/** PasswordChange */
PasswordChange: {
/** Current Password */
current_password: string;
/** New Password */
new_password: string;
};
/**
* PersonOut
* @description A colleague as the directory shows them — never email or credentials.
*/
PersonOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Name */
name: string;
role: components["schemas"]["UserRole"];
/** Department */
department: string | null;
};
/**
* PersonalDocument
* @description The caller's own document about themselves.
*
* Either they wrote one — then it is opened and edited like any other
* document — or they have not, and `template_id` says what to start it from.
* Both are null when the blueprint is not in this instance and nothing was
* written yet; the frontend falls back to the ordinary template picker.
*/
PersonalDocument: {
/** Document Id */
document_id?: string | null;
/** Title */
title?: string | null;
status?: components["schemas"]["DocumentStatus"] | null;
/** Template Id */
template_id?: string | null;
};
/** PromptSettingOut */
PromptSettingOut: {
/** Key */
key: string;
/** Content */
content: string;
/** Is Default */
is_default: boolean;
};
/** PromptSettingUpdate */
PromptSettingUpdate: {
/** Content */
content?: string | null;
/** Reset */
reset?: boolean | null;
};
/** RefineRequest */
RefineRequest: {
/** Content Md */
content_md: string;
/** Cursor Line */
cursor_line: number;
};
/**
* ReviewOut
* @description One request to check this document. Open while `resolved_at` is null.
*/
ReviewOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Question */
question: string | null;
/** Requester Name */
requester_name: string | null;
/** Reviewer Id */
reviewer_id: string | null;
/** Reviewer Name */
reviewer_name: string | null;
/**
* Created At
* Format: date-time
*/
created_at: string;
/** Resolved At */
resolved_at: string | null;
/** Resolved By Name */
resolved_by_name: string | null;
/** Is Mine */
is_mine: boolean;
};
/**
* ReviewRequestBody
* @description Ask someone to check this document, optionally about something specific
* ("do the holiday numbers still hold?").
*/
ReviewRequestBody: {
/**
* Reviewer Id
* Format: uuid
*/
reviewer_id: string;
/** Question */
question?: string | null;
};
/**
* ReviewerCandidate
* @description A user the author may ask to check a document — id + name only.
*/
ReviewerCandidate: {
/**
* Id
* Format: uuid
*/
id: string;
/** Name */
name: string;
};
/**
* SectionHint
* @description Steers what the refinement model should draw out of one section.
*
* `heading` is matched to a skeleton heading by its exact text, so the hint
* only reaches the model while the author is writing under that heading.
*/
SectionHint: {
/** Heading */
heading: string;
/** Hint */
hint: string;
};
/** SendMessage */
SendMessage: {
/** Content */
content: string;
};
/** SimilarDocumentOut */
SimilarDocumentOut: {
/**
* Document Id
* Format: uuid
*/
document_id: string;
/** Title */
title: string;
};
/** SuggestSimilarRequest */
SuggestSimilarRequest: {
/**
* Conversation Id
* Format: uuid
*/
conversation_id: string;
};
/**
* TemplateBuildRequest
* @description A template assembled by the form builder. The config is the same schema
* a pasted YAML parses into, so both paths get one validation guarantee —
* the frontend has no YAML library and must not gain one, so it sends the
* structured config instead of serializing it.
*/
TemplateBuildRequest: {
/** Template Id */
template_id?: string | null;
config: components["schemas"]["AuthoringTemplate"];
};
/** TemplateDetail */
TemplateDetail: {
/**
* Id
* Format: uuid
*/
id: string;
/** Config Id */
config_id: string;
/** Name */
name: string;
/** Version */
version: string;
/**
* Description
* @default
*/
description: string;
/** Config */
config: {
[key: string]: unknown;
};
/** Yaml */
yaml: string;
};
/** TemplateImportRequest */
TemplateImportRequest: {
/** Yaml */
yaml: string;
};
/** TemplateMetadata */
TemplateMetadata: {
/**
* Visibility
* @default department
* @enum {string}
*/
visibility: "public" | "department" | "restricted";
};
/** TemplateModelHints */
TemplateModelHints: {
/**
* Temperature
* @default 0.4
*/
temperature: number;
/** Min Class Hint */
min_class_hint?: string | null;
};
/** TemplateSummary */
TemplateSummary: {
/**
* Id
* Format: uuid
*/
id: string;
/** Config Id */
config_id: string;
/** Name */
name: string;
/** Version */
version: string;
/**
* Description
* @default
*/
description: string;
};
/** TitleSuggestion */
TitleSuggestion: {
/** Title */
title: string;
};
/** UserCreate */
UserCreate: {
/** Email */
email: string;
/** Name */
name: string;
/** @default member */
role: components["schemas"]["UserRole"];
/** Department Id */
department_id?: string | null;
/** Password */
password: string;
};
/** UserOut */
UserOut: {
/**
* Id
* Format: uuid
*/
id: string;
/** Email */
email: string;
/** Name */
name: string;
role: components["schemas"]["UserRole"];
/** Department Id */
department_id: string | null;
/** Locale */
locale?: ("de" | "en") | null;
};
/**
* UserRole
* @enum {string}
*/
UserRole: "member" | "admin";
/** UserUpdate */
UserUpdate: {
/** Name */
name?: string | null;
/** Email */
email?: string | null;
role?: components["schemas"]["UserRole"] | null;
/** Department Id */
department_id?: string | null;
/** Clear Department */
clear_department?: boolean | null;
/** Password */
password?: string | null;
};
/** ValidationError */
ValidationError: {
/** Location */
loc: (string | number)[];
/** Message */
msg: string;
/** Error Type */
type: string;
/** Input */
input?: unknown;
/** Context */
ctx?: Record<string, never>;
};
};
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
login_api_auth_login_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LoginRequest"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["UserOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
logout_api_auth_logout_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
me_api_auth_me_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["UserOut"];
};
};
};
};
change_password_api_account_password_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PasswordChange"];
};
};
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
set_locale_api_account_locale_put: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LocalePreference"];
};
};
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
personal_document_api_account_document_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PersonalDocument"];
};
};
};
};
llm_test_api_admin_llm_test_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: {
content: {
"application/json": components["schemas"]["LLMTestRequest"] | null;
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LLMTestResponse"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
llm_settings_api_admin_llm_settings_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LLMSettingOut"][];
};
};
};
};
update_llm_setting_api_admin_llm_settings__role__put: {
parameters: {
query?: never;
header?: never;
path: {
role: "chat" | "utility" | "embedding";
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LLMSettingUpdate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LLMSettingOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
llm_models_api_admin_llm_models__role__post: {
parameters: {
query?: never;
header?: never;
path: {
role: "chat" | "utility" | "embedding";
};
cookie?: never;
};
requestBody?: {
content: {
"application/json": components["schemas"]["LLMModelsRequest"] | null;
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LLMModelsResponse"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
prompt_settings_api_admin_prompts_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PromptSettingOut"][];
};
};
};
};
update_prompt_setting_api_admin_prompts__key__put: {
parameters: {
query?: never;
header?: never;
path: {
key: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["PromptSettingUpdate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PromptSettingOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_users_api_admin_users_get: {
parameters: {
query?: {
search?: string | null;
page?: number;
per_page?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["AdminUserPage"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
create_user_api_admin_users_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["UserCreate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["AdminUserOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
delete_user_api_admin_users__user_id__delete: {
parameters: {
query?: never;
header?: never;
path: {
user_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
update_user_api_admin_users__user_id__patch: {
parameters: {
query?: never;
header?: never;
path: {
user_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["UserUpdate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["AdminUserOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
create_department_api_admin_departments_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DepartmentCreate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["AdminDepartmentOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
delete_department_api_admin_departments__department_id__delete: {
parameters: {
query?: {
confirm?: boolean;
};
header?: never;
path: {
department_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
rename_department_api_admin_departments__department_id__patch: {
parameters: {
query?: never;
header?: never;
path: {
department_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DepartmentCreate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["AdminDepartmentOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
metrics_snapshot_api_admin_metrics_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
[key: string]: unknown;
};
};
};
};
};
list_conversations_api_conversations_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ConversationSummary"][];
};
};
};
};
create_conversation_api_conversations_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ConversationCreate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ConversationSummary"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
get_conversation_api_conversations__conversation_id__get: {
parameters: {
query?: never;
header?: never;
path: {
conversation_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ConversationDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
delete_conversation_api_conversations__conversation_id__delete: {
parameters: {
query?: never;
header?: never;
path: {
conversation_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
send_message_api_conversations__conversation_id__messages_post: {
parameters: {
query?: never;
header?: never;
path: {
conversation_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["SendMessage"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": unknown;
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_departments_api_departments_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DepartmentOut"][];
};
};
};
};
list_documents_api_documents_get: {
parameters: {
query?: {
department?: string | null;
status?: components["schemas"]["DocumentStatus"] | null;
assigned_to_me?: boolean;
search?: string | null;
sort?: components["schemas"]["DocumentSort"];
page?: number;
per_page?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentPage"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
create_document_api_documents_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DocumentCreate"];
};
};
responses: {
/** @description Successful Response */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
search_documents_api_documents_search_get: {
parameters: {
query: {
q: string;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentSearchHit"][];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
export_documents_api_documents_export_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": unknown;
};
};
};
};
document_stats_api_documents_stats_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentStats"];
};
};
};
};
get_document_api_documents__document_id__get: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
delete_document_api_documents__document_id__delete: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
update_document_api_documents__document_id__patch: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DocumentUpdate"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
document_history_api_documents__document_id__history_get: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentEventOut"][];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
document_version_api_documents__document_id__versions__event_id__get: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
event_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentVersion"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
publish_document_api_documents__document_id__publish_post: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_reviewers_api_documents__document_id__reviewers_get: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ReviewerCandidate"][];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
request_review_api_documents__document_id__reviews_post: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ReviewRequestBody"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
resolve_review_api_documents__document_id__reviews__review_id__resolve_post: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
review_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
set_shared_departments_api_documents__document_id__departments_put: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DocumentDepartments"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DocumentDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
suggest_title_api_documents__document_id__suggest_title_post: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TitleSuggestion"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
suggest_similar_api_documents_suggest_similar_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["SuggestSimilarRequest"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["SimilarDocumentOut"][];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
refine_section_api_documents__document_id__refine_post: {
parameters: {
query?: never;
header?: never;
path: {
document_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["RefineRequest"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": unknown;
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_people_api_people_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PersonOut"][];
};
};
};
};
get_person_api_people__person_id__get: {
parameters: {
query?: never;
header?: never;
path: {
person_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["PersonOut"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_catalog_api_templates_catalog_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CatalogSummary"][];
};
};
};
};
get_catalog_blueprint_api_templates_catalog__catalog_id__get: {
parameters: {
query?: never;
header?: never;
path: {
catalog_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CatalogDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
add_from_catalog_api_templates_catalog__catalog_id__post: {
parameters: {
query?: never;
header?: never;
path: {
catalog_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
build_template_api_templates_build_post: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["TemplateBuildRequest"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
get_template_api_templates__template_id__get: {
parameters: {
query?: never;
header?: never;
path: {
template_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
update_template_api_templates__template_id__put: {
parameters: {
query?: never;
header?: never;
path: {
template_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["TemplateImportRequest"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
delete_template_api_templates__template_id__delete: {
parameters: {
query?: never;
header?: never;
path: {
template_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
duplicate_template_api_templates__template_id__duplicate_post: {
parameters: {
query?: never;
header?: never;
path: {
template_id: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateDetail"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
list_templates_api_templates_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["TemplateSummary"][];
};
};
};
};
health_api_health_get: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
[key: string]: string;
};
};
};
};
};
}