Skip to content

API catalog

Static inventory of FastAPI route decorators and router registrations. Use the runtime OpenAPI schema for authoritative request and response bodies.

Regenerate with python pipeline/skills/technical_documentation/scripts/generate.py.

Summary

  • Registered routers: 36
  • Discovered operations: 552
  • Unregistered route modules: 0

Router registrations

Order Router Mount prefix Tags Registration
1 workspace_routes.router / Workspaces backend/app/routes.py:50
2 agent_routes.router /api backend/app/routes.py:52
3 notebook_routes.router / backend/app/routes.py:57
4 system_routes.router /api/system backend/app/routes.py:61
5 social_routes.router /api/social Social backend/app/routes.py:62
6 vault_routes.router /api/vault Vault backend/app/routes.py:69
7 planning_routes.router /api Project Planning backend/app/routes.py:70
8 literature_routes.router / backend/app/routes.py:76
9 handwriting_routes.router / Handwriting backend/app/routes.py:80
10 vault_graph_routes.router /api Vault Graph backend/app/routes.py:81
11 vault_views_routes.router /api Vault Views backend/app/routes.py:82
12 collab_routes.router /api/vault Collaboration backend/app/routes.py:83
13 share_routes.router /api Share backend/app/routes.py:84
14 calendar_routes.router / Calendar backend/app/routes.py:86
15 mail_routes.router / Mail backend/app/routes.py:91
16 reader.router / Reader backend/app/routes.py:96
17 meeting_routes.router / Meetings backend/app/routes.py:101
18 tools_routes.router / Tools backend/app/routes.py:106
19 analytics_routes.router / Analytics backend/app/routes.py:111
20 scheduler_routes.router / Scheduler backend/app/routes.py:112
21 contacts_routes.router /api Contacts backend/app/routes.py:117
22 public_routes.router /api Public API / PAT backend/app/routes.py:123
23 google_auth_routes.router / Auth backend/app/routes.py:125
24 microsoft_auth_routes.router / Auth backend/app/routes.py:126
25 integrations_routes.router / Integrations backend/app/routes.py:127
26 auth_routes.router / Auth backend/app/routes.py:128
27 config_routes.router /api Config backend/app/routes.py:129
28 env_routes.router /api Env backend/app/routes.py:130
29 credentials_routes.router /api Credentials backend/app/routes.py:131
30 ai_routes.router /api AI Settings backend/app/routes.py:132
31 agent_skills_routes.router /api AI Skills backend/app/routes.py:138
32 notion_routes.router /api Notion Import backend/app/routes.py:144
33 notion_oauth_routes.router /api Notion MCP OAuth backend/app/routes.py:150
34 vaults_routes.router /api Vaults backend/app/routes.py:156
35 vault_templates_routes.router /api Vault templates backend/app/routes.py:157
36 identity_routes.router / Identity backend/app/routes.py:162

Operations

Method Effective path Handler Tags Dependency guards Summary Source
GET /api/agent/context-sources list_context_sources Catalogue of large external sources an agent can attach to its context. backend/api/agent_routes.py:1812
GET /api/agent/internal-sources list_internal_context_sources Depends(require_role('viewer')) List scoped first-party Gnosi sources available in this workspace. backend/api/agent_routes.py:1823
GET /api/ai/agents/{agent_id}/memories get_agent_memories AI Skills Depends(get_workspace_context) Get agent memories backend/api/agent_skills_routes.py:370
POST /api/ai/agents/{agent_id}/memories create_agent_memory AI Skills Depends(require_role('editor')) Create agent memory backend/api/agent_skills_routes.py:383
DELETE /api/ai/agents/{agent_id}/memories/{memory_id} remove_agent_memory AI Skills Depends(require_role('editor')) Remove agent memory backend/api/agent_skills_routes.py:425
PUT /api/ai/agents/{agent_id}/memories/{memory_id} edit_agent_memory AI Skills Depends(require_role('editor')) Edit agent memory backend/api/agent_skills_routes.py:402
GET /api/ai/agents/{agent_id}/skills get_agent_skills AI Skills Depends(get_workspace_context) Get agent skills backend/api/agent_skills_routes.py:835
PUT /api/ai/agents/{agent_id}/skills assign_agent_skills AI Skills Depends(require_role('admin')) Assign agent skills backend/api/agent_skills_routes.py:854
GET /api/ai/approvals list_workspace_approvals AI Skills Depends(require_role('admin')) List pending automation approvals without exposing stored arguments. backend/api/agent_skills_routes.py:524
GET /api/ai/automations list_skill_automations AI Skills [Depends(require_plugins('automations'))], Depends(get_workspace_context) List automations visible in the exact workspace and vault scope. backend/api/agent_skills_routes.py:885
POST /api/ai/automations create_skill_automation AI Skills [Depends(require_plugins('automations'))], Depends(require_role('admin')) Create skill automation backend/api/agent_skills_routes.py:897
DELETE /api/ai/automations/{automation_id} remove_skill_automation AI Skills [Depends(require_plugins('automations'))], Depends(require_role('admin')) Remove skill automation backend/api/agent_skills_routes.py:955
GET /api/ai/automations/{automation_id} get_skill_automation AI Skills [Depends(require_plugins('automations'))], Depends(get_workspace_context) Get skill automation backend/api/agent_skills_routes.py:915
PUT /api/ai/automations/{automation_id} update_skill_automation AI Skills [Depends(require_plugins('automations'))], Depends(require_role('admin')) Update skill automation backend/api/agent_skills_routes.py:929
POST /api/ai/automations/{automation_id}/run run_skill_automation_now AI Skills [Depends(require_plugins('automations'))], Depends(require_role('admin')) Run skill automation now backend/api/agent_skills_routes.py:990
GET /api/ai/automations/{automation_id}/runs list_skill_automation_runs AI Skills [Depends(require_plugins('automations'))], Depends(get_workspace_context) List skill automation runs backend/api/agent_skills_routes.py:970
GET /api/ai/capability-audit list_workspace_capability_audit AI Skills Depends(require_role('admin')) List current-user metadata-only tool events across agents and sessions. backend/api/agent_skills_routes.py:278
GET /api/ai/catalog get_ai_catalog AI Settings Get ai catalog backend/api/ai_routes.py:137
POST /api/ai/correct correct_text AI Settings Corrects spelling and grammar of a fragment using AI. backend/api/ai_routes.py:742
GET /api/ai/evals/candidates list_agent_evaluation_candidates AI Skills Depends(require_role('admin')) List deduplicated metadata-only regression candidates. backend/api/agent_skills_routes.py:291
POST /api/ai/evals/candidates/run run_reviewed_agent_evaluation_candidates AI Skills Depends(require_role('admin')) Run accepted synthetic cases without constructing a model. backend/api/agent_skills_routes.py:502
POST /api/ai/evals/candidates/{candidate_id}/review review_agent_evaluation_candidate AI Skills Depends(require_role('admin')) Accept, reject, or reopen one synthetic evaluation case. backend/api/agent_skills_routes.py:483
GET /api/ai/evals/models get_model_evaluations AI Skills Depends(require_role('admin')) Get model evaluations backend/api/agent_skills_routes.py:441
POST /api/ai/evals/models/{agent_id}/run run_agent_model_evaluation AI Skills Depends(require_role('admin')) Run explicit synthetic model calls and persist metadata-only scores. backend/api/agent_skills_routes.py:451
POST /api/ai/generate generate_content AI Settings One-shot AI text generation to insert into Vault pages. backend/api/ai_routes.py:679
GET /api/ai/jobs list_governed_jobs AI Skills Depends(get_workspace_context) List namespaced durable capability jobs for the active Vault. backend/api/agent_skills_routes.py:214
GET /api/ai/jobs/{job_id} get_governed_job AI Skills Depends(get_workspace_context) Read one durable job's current provider-neutral status. backend/api/agent_skills_routes.py:222
POST /api/ai/jobs/{job_id}/cancel cancel_governed_job AI Skills Depends(require_role('editor')) Request cooperative cancellation of a cancellable durable job. backend/api/agent_skills_routes.py:264
GET /api/ai/jobs/{job_id}/result get_governed_job_result AI Skills Depends(get_workspace_context) Read the durable result when the owning provider exposes it. backend/api/agent_skills_routes.py:236
POST /api/ai/jobs/{job_id}/resume resume_governed_job AI Skills Depends(require_role('editor')) Resume a provider-owned failed or interrupted durable job. backend/api/agent_skills_routes.py:250
GET /api/ai/model-catalog get_model_catalog AI Settings Provider → model catalog (ids + cost/context/capabilities) feeding the backend/api/ai_routes.py:381
GET /api/ai/model-comparison get_model_comparison AI Settings Complete, freshly paginated Artificial Analysis language-model feed. backend/api/ai_routes.py:430
GET /api/ai/model-reliability model_reliability Depends(require_role('viewer')) Recorded failures per model, by reason. backend/api/agent_routes.py:1790
GET /api/ai/models get_model_registry AI Settings Returns the router's model registry (config ai.models, or the default) backend/api/ai_routes.py:346
PUT /api/ai/models set_model_registry AI Settings [Depends(require_role('admin'))] Saves the model registry and the budget policy to params.yaml. backend/api/ai_routes.py:530
DELETE /api/ai/providers/{provider_id} delete_provider AI Settings [Depends(require_role('admin'))] Disconnect a provider: config entry, its stored credential AND its backend/api/ai_routes.py:221
POST /api/ai/providers/{provider_id}/credentials set_provider_credentials AI Settings [Depends(require_role('admin'))] Set provider credentials backend/api/ai_routes.py:152
PATCH /api/ai/providers/{provider_id}/status update_provider_status AI Settings [Depends(require_role('admin'))] Update provider status backend/api/ai_routes.py:299
POST /api/ai/providers/{provider_id}/validate validate_provider AI Settings [Depends(require_role('admin'))] Attempts to validate the provider by making a simple 'ping' request. backend/api/ai_routes.py:41
GET /api/ai/quality/conformance get_agent_capability_conformance AI Skills Depends(require_role('admin')) Report versioned skill/tool contract coverage without granting access. backend/api/agent_skills_routes.py:315
GET /api/ai/quality/dashboard get_agent_quality_dashboard AI Skills Depends(require_role('admin')) Return privacy-safe agent service levels and persisted tool health. backend/api/agent_skills_routes.py:304
GET /api/ai/semantic-associations get_agent_semantic_associations AI Skills Depends(get_workspace_context) List reviewable vocabulary associations for the active Vault. backend/api/agent_skills_routes.py:332
POST /api/ai/semantic-associations create_agent_semantic_association AI Skills Depends(require_role('editor')) Store an explicit term correction without conversation content. backend/api/agent_skills_routes.py:341
DELETE /api/ai/semantic-associations/{association_id} remove_agent_semantic_association AI Skills Depends(require_role('editor')) Remove one exact vocabulary correction from the active Vault. backend/api/agent_skills_routes.py:359
GET /api/ai/skills list_skills AI Skills Depends(get_workspace_context) List the effective catalog and visible user-package validation issues. backend/api/agent_skills_routes.py:605
POST /api/ai/skills create_skill AI Skills Depends(require_role('admin')) Create skill backend/api/agent_skills_routes.py:637
DELETE /api/ai/skills/{skill_id} delete_skill AI Skills Depends(require_role('admin')) Delete skill backend/api/agent_skills_routes.py:759
GET /api/ai/skills/{skill_id} get_skill AI Skills Depends(get_workspace_context) Get skill backend/api/agent_skills_routes.py:626
PUT /api/ai/skills/{skill_id} update_skill AI Skills Depends(require_role('admin')) Update skill backend/api/agent_skills_routes.py:662
POST /api/ai/skills/{skill_id}/clone clone_skill AI Skills Depends(require_role('admin')) Clone skill backend/api/agent_skills_routes.py:730
POST /api/ai/skills/{skill_id}/validate validate_skill AI Skills Depends(require_role('admin')) Validate skill backend/api/agent_skills_routes.py:693
GET /api/ai/tools list_tools AI Skills Depends(get_workspace_context) List tools backend/api/agent_skills_routes.py:804
GET /api/ai/usage get_ai_usage AI Settings Current-period AI spend: USD + the Settings currency, cap, ratio and a backend/api/ai_routes.py:453
GET /api/ai/usage/history get_ai_usage_history AI Settings Returns all historical usage records grouped by period, provider, and model. backend/api/ai_routes.py:462
GET /api/analytics get_analytics Analytics, analytics Get complete analytics overview (with cache). backend/api/analytics_routes.py:125
DELETE /api/analytics/directives delete_directive Analytics, analytics [Depends(require_role('admin'))] Delete a directive file or an entire skill folder. backend/api/analytics_routes.py:331
GET /api/analytics/directives get_directive_analytics Analytics, analytics Get directive analytics from all sources (with cache). backend/api/analytics_routes.py:165
GET /api/analytics/directives/content get_directive_content Analytics, analytics Read directive content. Returns empty if it's a new SKILL.md. backend/api/analytics_routes.py:293
POST /api/analytics/directives/content save_directive_content Analytics, analytics [Depends(require_role('editor'))] Update directive content. backend/api/analytics_routes.py:315
GET /api/analytics/tools get_tool_analytics Analytics, analytics Get detailed tool analytics (Consolidated internally in registry). backend/api/analytics_routes.py:160
GET /api/analytics/traps get_traps Analytics, analytics Get all documented traps sorted by date (with cache). backend/api/analytics_routes.py:212
POST /api/auth/change-password change_password Auth, auth Depends(get_current_user_id), Depends(get_mgmt_db) Rotates the authenticated user's password. backend/api/auth_routes.py:306
GET /api/auth/google/callback callback Auth, auth Callback backend/api/google_auth_routes.py:153
GET /api/auth/google/health health Auth, auth OAuth2 diagnostics for the UI: config status, connected accounts, backend/api/google_auth_routes.py:70
GET /api/auth/google/login login Auth, auth Login backend/api/google_auth_routes.py:121
GET /api/auth/google/status status Auth, auth Status backend/api/google_auth_routes.py:61
POST /api/auth/login login Auth, auth Depends(get_mgmt_db) Login via email + password. 401 if credentials are incorrect. backend/api/auth_routes.py:234
POST /api/auth/logout logout Auth, auth Deletes the session cookie. Idempotent. backend/api/auth_routes.py:253
GET /api/auth/me me Auth, auth Depends(get_current_user_id), Depends(get_mgmt_db) Current authenticated user. 401 if there's no session. backend/api/auth_routes.py:260
PATCH /api/auth/me update_me Auth, auth Depends(get_current_user_id), Depends(get_mgmt_db) Updates the authenticated user's name and/or email. backend/api/auth_routes.py:332
GET /api/auth/microsoft/callback callback Auth, auth Callback backend/api/microsoft_auth_routes.py:85
GET /api/auth/microsoft/login login Auth, auth Login backend/api/microsoft_auth_routes.py:54
GET /api/auth/microsoft/status status Auth, auth Status backend/api/microsoft_auth_routes.py:48
POST /api/auth/register register Auth, auth Depends(get_mgmt_db) Creates a new user with email + password. backend/api/auth_routes.py:155
GET /api/calendar/attendees/search search_attendees Calendar [Depends(get_workspace_context)] Search Google contacts for autocomplete in the attendees form. backend/api/calendar_routes.py:532
GET /api/calendar/calendars get_calendars Calendar [Depends(get_workspace_context)] Returns the list of available calendars for an account or for all of them. backend/api/calendar_routes.py:108
GET /api/calendar/events get_events Calendar [Depends(get_workspace_context)] Returns Google Calendar / CalDAV events directly (without the vault). backend/api/calendar_routes.py:157
POST /api/calendar/events post_event Calendar [Depends(get_workspace_context)], [Depends(require_role('editor'))] Creates a new event in Google Calendar. backend/api/calendar_routes.py:365
DELETE /api/calendar/events/{event_id} delete_event Calendar [Depends(get_workspace_context)], [Depends(require_role('editor'))] Deletes an event from Google Calendar or the vault. backend/api/calendar_routes.py:423
GET /api/calendar/events/{event_id} get_event Calendar [Depends(get_workspace_context)] Return the details of an event (Google Calendar or CalDAV). backend/api/calendar_routes.py:349
PATCH /api/calendar/events/{event_id} patch_event Calendar [Depends(get_workspace_context)], [Depends(require_role('editor'))] Updates an existing event (Google Calendar or local vault). backend/api/calendar_routes.py:385
POST /api/calendar/events/{event_id}/hide hide_event Calendar [Depends(get_workspace_context)] Hides an event locally. backend/api/calendar_routes.py:737
POST /api/calendar/events/{event_id}/invite invite_to_event Calendar [Depends(get_workspace_context)] Adds guests to an event. backend/api/calendar_routes.py:683
POST /api/calendar/events/{event_id}/rsvp rsvp_event Calendar [Depends(get_workspace_context)], [Depends(require_role('editor'))] Accepts, declines, or marks as tentative a Google Calendar invitation. backend/api/calendar_routes.py:661
POST /api/calendar/events/{event_id}/unhide unhide_event Calendar [Depends(get_workspace_context)] Show a hidden event again. backend/api/calendar_routes.py:760
GET /api/calendar/feed.ics get_ics_feed Calendar [Depends(get_workspace_context)] Generate an .ics of all events (local vault + Google Calendar). backend/api/calendar_routes.py:482
POST /api/calendar/freebusy post_freebusy Calendar [Depends(get_workspace_context)] Post freebusy backend/api/calendar_routes.py:464
GET /api/calendar/geocode geocode_location Calendar [Depends(get_workspace_context)] Autocompletes/verifies addresses via Photon (OpenStreetMap). No API key needed. backend/api/calendar_routes.py:613
GET /api/calendar/reminders get_meeting_reminders Calendar [Depends(get_workspace_context)] Active reminders for the app banner (with the agenda already backend/api/calendar_routes.py:311
GET /api/calendar/reminders/settings get_meeting_reminder_settings Calendar [Depends(get_workspace_context)] Get meeting reminder settings backend/api/calendar_routes.py:326
PUT /api/calendar/reminders/settings update_meeting_reminder_settings Calendar [Depends(get_workspace_context)] Updates {enabled, lead_minutes} and keeps a SINGLE source of truth for backend/api/calendar_routes.py:332
POST /api/calendar/reminders/{reminder_id}/dismiss dismiss_meeting_reminder Calendar [Depends(get_workspace_context)] Dismiss meeting reminder backend/api/calendar_routes.py:319
POST /api/calendar/sync sync_calendar_accounts Calendar [Depends(get_workspace_context)], [Depends(require_role('editor'))] With the hybrid architecture, syncing to the vault is no longer necessary. backend/api/calendar_routes.py:519
POST /api/chat chat_endpoint Depends(require_role('editor')) Main endpoint for chatting with a specific agent. backend/api/agent_routes.py:1920
DELETE /api/chat/attachments delete_chat_attachment Depends(require_role('editor')) Delete an abandoned chat upload from the active Vault. backend/api/agent_routes.py:1070
POST /api/chat/attachments upload_chat_attachment Depends(require_role('editor')) Store one bounded chat attachment inside the active Vault. backend/api/agent_routes.py:1031
GET /api/chat/capability-audit list_agent_capability_audit Depends(require_role('editor')) Return metadata-only governed tool events for one exact chat scope. backend/api/agent_routes.py:1311
GET /api/chat/confirmations list_agent_confirmations Depends(require_role('editor')) Return resumable public confirmation cards for one exact chat scope. backend/api/agent_routes.py:1296
GET /api/chat/confirmations/{action_id} get_agent_confirmation Depends(require_role('editor')) Return one public confirmation status for transport reconciliation. backend/api/agent_routes.py:1351
POST /api/chat/confirmations/{action_id}/cancel cancel_agent_action Depends(require_role('editor')) Cancels one still-pending action in the exact same chat scope. backend/api/agent_routes.py:1546
POST /api/chat/confirmations/{action_id}/confirm confirm_agent_action Depends(require_role('editor')) Claims and executes one scope-bound pending agent action exactly once. backend/api/agent_routes.py:1374
POST /api/chat/feedback record_chat_feedback Depends(require_role('editor')) Persist assistant feedback without retaining prompts or responses. backend/api/agent_routes.py:1833
GET /api/chat/replays/{trace_id} get_agent_replay Depends(require_role('editor')) Return metadata-only replay events for one trace id. backend/api/agent_routes.py:1335
DELETE /api/chat/sessions/{agent_id}/{session_id} delete_chat_session Depends(require_role('editor')) Remove the persisted LangGraph checkpoints for one scoped chat thread. backend/api/agent_routes.py:1573
GET /api/chat/sessions/{agent_id}/{session_id} get_chat_session Depends(require_role('viewer')) Return the canonical persisted transcript for one scoped session. backend/api/agent_routes.py:1745
POST /api/chat/sessions/{agent_id}/{session_id}/rewind rewind_chat_session Depends(require_role('editor')) Remove one turn and its suffix from the scoped canonical checkpoint. backend/api/agent_routes.py:1626
GET /api/chat/streams/{stream_id} resume_agent_stream Depends(require_role('editor')) Replay encrypted short-lived events for the exact authenticated scope. backend/api/agent_routes.py:1870
POST /api/chat/streams/{stream_id}/cancel cancel_running_agent_stream Depends(require_role('editor')) Explicitly cancel one running stream in the exact authenticated scope. backend/api/agent_routes.py:1899
GET /api/config get_config Config [Depends(require_role('admin'))] Get config backend/domains/configuration/api/settings.py:22
POST /api/config update_config Config [Depends(require_role('admin'))] Update config backend/domains/configuration/api/settings.py:84
GET /api/contacts list_contacts Contacts Depends(get_workspace_context), Depends(get_mgmt_db) List contacts backend/api/contacts_routes.py:86
POST /api/contacts create_contact Contacts Depends(require_role('editor')), Depends(get_mgmt_db) Create contact backend/api/contacts_routes.py:139
POST /api/contacts/sync sync_contacts Contacts Depends(require_role('editor')), Depends(get_mgmt_db) Sync contacts backend/api/contacts_routes.py:230
GET /api/contacts/sync/status sync_status Contacts Depends(get_workspace_context), Depends(get_mgmt_db) Sync status backend/api/contacts_routes.py:276
DELETE /api/contacts/{contact_id} delete_contact Contacts Depends(require_role('editor')), Depends(get_mgmt_db) Delete contact backend/api/contacts_routes.py:197
GET /api/contacts/{contact_id} get_contact Contacts Depends(get_workspace_context), Depends(get_mgmt_db) Get contact backend/api/contacts_routes.py:118
PUT /api/contacts/{contact_id} update_contact Contacts Depends(require_role('editor')), Depends(get_mgmt_db) Update contact backend/api/contacts_routes.py:168
GET /api/credentials list_credentials Credentials [Depends(require_role('admin'))] List all credentials with their status (without exposing values). backend/domains/configuration/api/credentials.py:86
POST /api/credentials set_credential Credentials [Depends(require_role('admin'))] Set a credential value. backend/domains/configuration/api/credentials.py:127
POST /api/credentials/migrate migrate_from_env Credentials [Depends(require_role('admin'))] Import credentials from the explicitly configured shared env file. backend/domains/configuration/api/credentials.py:167
DELETE /api/credentials/{credential_key} delete_credential Credentials [Depends(require_role('admin'))] Delete a credential. backend/domains/configuration/api/credentials.py:147
GET /api/credentials/{credential_key} get_credential_status Credentials [Depends(require_role('admin'))] Check if a specific credential exists. backend/domains/configuration/api/credentials.py:107
GET /api/env get_env Env [Depends(require_role('admin'))] Get environment variables from .env file (tokens are masked). backend/domains/configuration/api/environment.py:96
POST /api/env update_env Env [Depends(require_role('admin'))] Update local settings and route credentials to secure storage. backend/domains/configuration/api/environment.py:121
GET /api/graph get_vault_graph Vault Graph Return the current Vault topology and the canonical Brain proposal overlay. backend/api/vault_graph_routes.py:13
GET /api/health health_check Health check backend/app/factory.py:46
GET /api/identity get_identity Identity [Depends(get_workspace_context)] Get identity backend/api/identity_routes.py:38
POST /api/identity save_identity Identity [Depends(get_workspace_context)], [Depends(require_role('editor'))] Save identity backend/api/identity_routes.py:51
GET /api/integrations get_integrations Integrations, integrations Returns safe masked integration configuration for the UI. backend/api/integrations_routes.py:105
POST /api/integrations/bulk bulk_update_integrations Integrations, integrations [Depends(require_role('editor'))] Updates multiple integrations at once. backend/api/integrations_routes.py:419
PUT /api/integrations/calendar_aliases update_calendar_aliases Integrations, integrations [Depends(require_role('editor'))] Saves custom names/aliases for specific calendar sources. backend/api/integrations_routes.py:360
PUT /api/integrations/calendar_colors update_calendar_colors Integrations, integrations [Depends(require_role('editor'))] Saves custom colors for specific calendar sources. backend/api/integrations_routes.py:349
PUT /api/integrations/calendar_selection update_calendar_selection Integrations, integrations [Depends(require_role('editor'))] Saves the list of visible/selected calendar sources. backend/api/integrations_routes.py:371
PUT /api/integrations/default_calendar update_default_calendar Integrations, integrations [Depends(require_role('editor'))] Save the default calendar for new appointments. backend/api/integrations_routes.py:386
PUT /api/integrations/default_contacts update_default_contacts Integrations, integrations [Depends(require_role('editor'))] Save the default contacts account. backend/api/integrations_routes.py:408
PUT /api/integrations/default_mail update_default_mail Integrations, integrations [Depends(require_role('editor'))] Save the default mail account. backend/api/integrations_routes.py:397
POST /api/integrations/test-calendar test_calendar_connection Integrations, integrations [Depends(require_role('editor')), Depends(require_plugins('calendar'))] Tests CalDAV connection for a calendar account. backend/api/integrations_routes.py:291
POST /api/integrations/test-contacts test_contacts_connection Integrations, integrations [Depends(require_role('editor')), Depends(require_plugins('contacts'))] Tests CardDAV connection for a contacts account. backend/api/integrations_routes.py:250
POST /api/integrations/test-email test_email_connection Integrations, integrations [Depends(require_role('editor')), Depends(require_plugins('mail'))] Tests IMAP/SMTP connection for an email account. backend/api/integrations_routes.py:172
PUT /api/integrations/{integration_id} update_integration Integrations, integrations [Depends(require_role('editor'))] Updates a specific integration (e.g. 'email', 'ai') backend/api/integrations_routes.py:335
PATCH /api/mail/accounts/{email:path}/enabled set_account_enabled Mail, mail [Depends(get_workspace_context)] Set account enabled backend/api/mail_routes.py:1819
POST /api/mail/ai/extract_entities extract_entities Mail, mail [Depends(get_workspace_context)] Extract entities backend/api/mail_routes.py:1402
POST /api/mail/ai/generate_draft generate_draft Mail, mail [Depends(get_workspace_context)] Generate draft backend/api/mail_routes.py:1391
POST /api/mail/batch batch_action Mail, mail [Depends(get_workspace_context)] Batch action backend/api/mail_routes.py:1254
GET /api/mail/counts get_mail_counts Mail, mail [Depends(get_workspace_context)] Returns unread and total counts per folder/category via IMAP or Microsoft Graph. backend/api/mail_routes.py:244
POST /api/mail/drafts save_draft Mail, mail [Depends(get_workspace_context)] Auto-saves a draft. backend/api/mail_routes.py:872
DELETE /api/mail/drafts/{draft_id} delete_draft Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete draft backend/api/mail_routes.py:941
POST /api/mail/empty_folder empty_folder Mail, mail [Depends(get_workspace_context)], [Depends(require_role('admin'))] Empty a folder (Trash or Spam). backend/api/mail_routes.py:781
GET /api/mail/events mail_events Mail, mail [Depends(get_workspace_context)] Server-Sent Events stream with IMAP IDLE push notifications. backend/api/mail_routes.py:516
GET /api/mail/folders get_folders Mail, mail [Depends(get_workspace_context)] Returns available IMAP folders for an account. backend/api/mail_routes.py:1164
GET /api/mail/messages get_messages Mail, mail [Depends(get_workspace_context)] Hybrid: query IMAP (Google and manual accounts) or Microsoft Graph directly. backend/api/mail_routes.py:311
GET /api/mail/messages/{message_id} get_message Mail, mail [Depends(get_workspace_context)] Hybrid: gets the detail of a message via IMAP or Microsoft Graph. backend/api/mail_routes.py:392
PATCH /api/mail/messages/{message_id} update_message Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Updates metadata fields in Vault and propagates flag changes to IMAP server. backend/api/mail_routes.py:635
POST /api/mail/messages/{message_id}/archive archive_msg Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Archive msg backend/api/mail_routes.py:716
GET /api/mail/messages/{message_id}/attachments/{att_id:path} get_attachment Mail, mail [Depends(get_workspace_context)] Downloads an attachment — works for Gmail (att_id=attachmentId) and IMAP (att_id=part_index). backend/api/mail_routes.py:1590
GET /api/mail/messages/{message_id}/cid/{cid:path} get_cid_image Mail, mail [Depends(get_workspace_context)] Serves an inline CID image — works for Gmail, IMAP and Microsoft. backend/api/mail_routes.py:1794
POST /api/mail/messages/{message_id}/move move_message Mail, mail [Depends(get_workspace_context)] Move a message to a different folder (IMAP) or apply label changes (Gmail). backend/api/mail_routes.py:1181
POST /api/mail/messages/{message_id}/read mark_as_read Mail, mail [Depends(get_workspace_context)] Marks a message as read (removes UNREAD in Gmail or sets \Seen in IMAP). backend/api/mail_routes.py:1282
POST /api/mail/messages/{message_id}/reply reply_message Mail, mail [Depends(get_workspace_context)] Reply message backend/api/mail_routes.py:1342
POST /api/mail/messages/{message_id}/snooze snooze_message Mail, mail [Depends(get_workspace_context)] Saves a snoozed_until timestamp in the message's Vault markdown file. backend/api/mail_routes.py:1318
POST /api/mail/messages/{message_id}/spam spam_msg Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Marks or unmarks a message as spam (junk mail). backend/api/mail_routes.py:755
POST /api/mail/messages/{message_id}/star star_msg Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Star msg backend/api/mail_routes.py:730
GET /api/mail/messages/{message_id}/tags get_message_tags Mail, mail [Depends(get_workspace_context)], Depends(get_db) Get message tags backend/api/mail_routes.py:1881
POST /api/mail/messages/{message_id}/tags set_message_tags Mail, mail [Depends(get_workspace_context)], Depends(get_db) Set message tags backend/api/mail_routes.py:1887
POST /api/mail/messages/{message_id}/trash trash_msg Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Trash msg backend/api/mail_routes.py:697
GET /api/mail/recipients/suggest suggest_recipients Mail, mail [Depends(get_workspace_context)], Depends(get_mgmt_db) Returns recipient suggestions combining: backend/api/mail_routes.py:954
POST /api/mail/send send_mail Mail, mail [Depends(get_workspace_context)] Send mail backend/api/mail_routes.py:1089
POST /api/mail/sync sync_mail_accounts Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))] Triggers a manual synchronization for one or all mail accounts. backend/api/mail_routes.py:571
GET /api/mail/tags list_tags Mail, mail [Depends(get_workspace_context)], Depends(get_db) List tags backend/api/mail_routes.py:1840
POST /api/mail/tags create_tag Mail, mail [Depends(get_workspace_context)], Depends(get_db) Create tag backend/api/mail_routes.py:1846
POST /api/mail/tags/messages/batch get_tags_for_messages Mail, mail [Depends(get_workspace_context)], Depends(get_db) Get tags for messages backend/api/mail_routes.py:1930
DELETE /api/mail/tags/{tag_id} delete_tag Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Delete tag backend/api/mail_routes.py:1869
PUT /api/mail/tags/{tag_id} update_tag Mail, mail [Depends(get_workspace_context)], Depends(get_db) Update tag backend/api/mail_routes.py:1855
GET /api/mail/tags/{tag_id}/messages get_tagged_messages Mail, mail [Depends(get_workspace_context)], Depends(get_db) Get tagged messages backend/api/mail_routes.py:1909
GET /api/mail/threads/{thread_id} get_thread Mail, mail [Depends(get_workspace_context)] Returns all messages in a thread. backend/api/mail_routes.py:457
GET /api/mail/views list_views Mail, mail [Depends(get_workspace_context)], Depends(get_db) List views backend/api/mail_routes.py:1488
POST /api/mail/views create_view Mail, mail [Depends(get_workspace_context)], Depends(get_db) Create view backend/api/mail_routes.py:1494
DELETE /api/mail/views/{view_id} delete_view Mail, mail [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Delete view backend/api/mail_routes.py:1533
PUT /api/mail/views/{view_id} update_view Mail, mail [Depends(get_workspace_context)], Depends(get_db) Update view backend/api/mail_routes.py:1512
POST /api/meetings/record record_meeting Meetings Receives the audio, saves it, and starts background processing. backend/api/meeting_routes.py:30
GET /api/meetings/status meeting_status Meetings Status of the in-flight job (polled from the frontend). backend/api/meeting_routes.py:56
GET /api/notebooks list_notebooks Notebooks Depends(require_role('viewer')) List notebooks backend/api/notebook_routes.py:39
POST /api/notebooks create_notebook Notebooks Depends(require_role('editor')) Create notebook backend/api/notebook_routes.py:51
GET /api/notebooks/resources list_reference_resources Notebooks Depends(require_role('viewer')) List reference resources backend/api/notebook_routes.py:65
DELETE /api/notebooks/{notebook_id} delete_notebook Notebooks Depends(require_role('viewer')) Delete notebook backend/api/notebook_routes.py:115
GET /api/notebooks/{notebook_id} get_notebook Notebooks Depends(require_role('viewer')) Get notebook backend/api/notebook_routes.py:88
PATCH /api/notebooks/{notebook_id} update_notebook Notebooks Depends(require_role('viewer')) Update notebook backend/api/notebook_routes.py:99
GET /api/notebooks/{notebook_id}/chat-sources list_chat_sources Notebooks Depends(require_role('viewer')) List chat sources backend/api/notebook_routes.py:165
GET /api/notebooks/{notebook_id}/conversation get_conversation Notebooks Depends(require_role('viewer')) Return the canonical shared or per-member notebook transcript. backend/api/notebook_routes.py:263
GET /api/notebooks/{notebook_id}/evidence/{chunk_id} read_evidence Notebooks Depends(require_role('viewer')) Read evidence backend/api/notebook_routes.py:245
POST /api/notebooks/{notebook_id}/refresh refresh_notebook Notebooks Depends(require_role('viewer')) Refresh notebook backend/api/notebook_routes.py:209
POST /api/notebooks/{notebook_id}/refresh/cancel cancel_notebook_refresh Notebooks Depends(require_role('viewer')) Cancel notebook refresh backend/api/notebook_routes.py:224
GET /api/notebooks/{notebook_id}/search search_notebook Notebooks Depends(require_role('viewer')) Search notebook backend/api/notebook_routes.py:232
GET /api/notebooks/{notebook_id}/sources list_sources Notebooks Depends(require_role('viewer')) List sources backend/api/notebook_routes.py:153
POST /api/notebooks/{notebook_id}/sources add_sources Notebooks Depends(require_role('viewer')) Add sources backend/api/notebook_routes.py:173
DELETE /api/notebooks/{notebook_id}/sources/{resource_id} remove_source Notebooks Depends(require_role('viewer')) Remove source backend/api/notebook_routes.py:184
POST /api/notebooks/{notebook_id}/sources/{resource_id}/refresh refresh_resource Notebooks Depends(require_role('viewer')) Refresh resource backend/api/notebook_routes.py:193
GET /api/notion-oauth/callback callback Notion MCP OAuth Callback backend/api/notion_oauth_routes.py:132
GET /api/notion-oauth/login login Notion MCP OAuth Login backend/api/notion_oauth_routes.py:106
GET /api/notion-oauth/status status Notion MCP OAuth Status backend/api/notion_oauth_routes.py:101
DELETE /api/notion-oauth/token disconnect Notion MCP OAuth [Depends(require_role('admin'))] Disconnect backend/api/notion_oauth_routes.py:173
POST /api/notion/clone run_clone Notion Import [Depends(require_role('editor'))] EXACT Notion clone into a NEW folder (views+columns via MCP). Doesn't touch the vault. backend/api/notion_routes.py:609
POST /api/notion/clone/abort clone_abort Notion Import [Depends(require_role('editor'))] Requests to abort the ongoing clone. Cooperative cancellation: it stops at the next backend/api/notion_routes.py:353
GET /api/notion/clone/progress clone_progress Notion Import [Depends(require_role('editor'))] Status of the ongoing clone (for the frontend's progress bar). Non-blocking. backend/api/notion_routes.py:347
GET /api/notion/databases list_databases Notion Import [Depends(require_role('editor'))] Lists the Notion DBs shared with the integration. backend/api/notion_routes.py:124
GET /api/notion/databases/{db_id}/schema database_schema Notion Import [Depends(require_role('editor'))] Schema of a Notion DB in SchemaConfigModal format (to configure it before backend/api/notion_routes.py:139
GET /api/notion/import-config get_import_config Notion Import [Depends(require_role('editor'))] Saved config of the import panel (databases, selected, schemaOverrides, backend/api/notion_routes.py:98
PUT /api/notion/import-config put_import_config Notion Import [Depends(require_role('editor'))] Saves the import panel config (free-form JSON, same shape as the frontend's backend/api/notion_routes.py:112
GET /api/notion/linked-databases list_linked_databases Notion Import [Depends(require_role('editor'))] Linked DBs (views) that show up in Notion but can't be imported via API. backend/api/notion_routes.py:239
GET /api/notion/loose-pages list_loose_pages Notion Import [Depends(require_role('editor'))] Notion pages OUTSIDE any DB → for choosing wiki/dashboard. backend/api/notion_routes.py:252
GET /api/notion/status notion_status Notion Import Notion status backend/api/notion_routes.py:69
DELETE /api/notion/token delete_token Notion Import [Depends(require_role('admin'))] Delete token backend/api/notion_routes.py:74
POST /api/notion/token set_token Notion Import [Depends(require_role('admin'))] Saves and validates the Notion integration token (tests it with /users/me). backend/api/notion_routes.py:54
POST /api/notion/verify-clone verify_clone_route Notion Import [Depends(require_role('editor'))] Checks the health of the clone (Notion ↔ clone): count parity per DB, empty bodies, backend/api/notion_routes.py:737
GET /api/pages/{page_id}/views get_page_views Vault Views Returns the views configured for a page. backend/api/vault_views_routes.py:150
POST /api/pages/{page_id}/views upsert_page_view Vault Views [Depends(require_role('editor'))] Adds or updates a view for a specific page. backend/api/vault_views_routes.py:205
DELETE /api/pages/{page_id}/views/{heading} delete_page_view Vault Views [Depends(require_role('editor'))] Deletes a view from a page and re-syncs the .md. backend/api/vault_views_routes.py:315
GET /api/planning/allocation get_allocation Project Planning [Depends(get_workspace_context)] Returns a rebuildable allocation/cost report without writing task data. backend/api/planning_routes.py:137
POST /api/planning/assignments create_assignment Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create assignment backend/api/planning_routes.py:468
DELETE /api/planning/assignments/{assignment_id} delete_assignment Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete assignment backend/api/planning_routes.py:503
PATCH /api/planning/assignments/{assignment_id} update_assignment Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Update assignment backend/api/planning_routes.py:482
POST /api/planning/calendars create_calendar Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create calendar backend/api/planning_routes.py:371
DELETE /api/planning/calendars/{calendar_id} delete_calendar Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete calendar backend/api/planning_routes.py:403
PATCH /api/planning/calendars/{calendar_id} update_calendar Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Update calendar backend/api/planning_routes.py:386
GET /api/planning/leveling/proposal get_leveling_proposal Project Planning [Depends(get_workspace_context)] Returns review-only delay suggestions; it never changes task dates. backend/api/planning_routes.py:144
POST /api/planning/leveling/proposals/{proposal_id}/apply apply_leveling_proposal Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Accepts a current proposal only after revision and ETag validation. backend/api/planning_routes.py:264
GET /api/planning/projects/{project_id}/baselines list_baselines Project Planning [Depends(get_workspace_context)] List baselines backend/api/planning_routes.py:196
POST /api/planning/projects/{project_id}/baselines create_baseline Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Captures an immutable named schedule snapshot in append-only history. backend/api/planning_routes.py:175
GET /api/planning/projects/{project_id}/baselines/{baseline_id}/variance get_baseline_variance Project Planning [Depends(get_workspace_context)] Compares the current derived schedule with an immutable baseline. backend/api/planning_routes.py:201
POST /api/planning/projects/{project_id}/leveling/proposals create_leveling_proposal Project Planning [Depends(get_workspace_context)] Create leveling proposal backend/api/planning_routes.py:251
POST /api/planning/projects/{project_id}/recalculate recalculate_project Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Rebuilds a project schedule from caller-provided Markdown task facts. backend/api/planning_routes.py:160
GET /api/planning/projects/{project_id}/schedule get_project_schedule Project Planning [Depends(get_workspace_context)] Returns the cached, reconstructible schedule for one project. backend/api/planning_routes.py:151
POST /api/planning/recurrences create_recurrence Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Stores an RRULE declaration; materialization always creates stable tasks. backend/api/planning_routes.py:303
POST /api/planning/recurrences/{recurrence_id}/materialize materialize_recurrence Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Materializes bounded RRULE occurrences as stable Markdown task pages. backend/api/planning_routes.py:315
POST /api/planning/resources create_resource Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create resource backend/api/planning_routes.py:419
DELETE /api/planning/resources/{resource_id} delete_resource Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete resource backend/api/planning_routes.py:454
PATCH /api/planning/resources/{resource_id} update_resource Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Update resource backend/api/planning_routes.py:433
GET /api/planning/state get_planning_state Project Planning [Depends(get_workspace_context)] Returns source entities plus a derived allocation snapshot. backend/api/planning_routes.py:130
GET /api/planning/worklogs list_worklogs Project Planning [Depends(get_workspace_context)] List worklogs backend/api/planning_routes.py:240
POST /api/planning/worklogs create_worklog Project Planning [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create worklog backend/api/planning_routes.py:231
POST /api/public/clip public_clip Public API / PAT Depends(require_pat_write), Depends(get_workspace_context) Web clipper endpoint: saves a web page (URL + selection) to the vault. backend/api/public_routes.py:284
GET /api/public/clip/config public_clip_config Public API / PAT Depends(require_pat), Depends(get_workspace_context) Destination and form schema for the browser extension. backend/api/public_routes.py:258
POST /api/public/pages public_create_page Public API / PAT Depends(require_pat_write) Creates a page in the vault via the public API (PAT). backend/api/public_routes.py:207
GET /api/public/ping public_ping Public API / PAT Depends(require_pat) Authentication check for public API clients. backend/api/public_routes.py:194
GET /api/reader/analysis list_reader_analyses Reader, reader [Depends(get_workspace_context)] List recent durable Reader analyses in the active vault. backend/api/reader.py:346
POST /api/reader/analysis start_reader_analysis Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('ai-platform'))] Snapshot the selected Reader corpus and start durable topic analysis. backend/api/reader.py:333
GET /api/reader/analysis/{job_id} get_reader_analysis_status Reader, reader [Depends(get_workspace_context)] Return progress for one analysis job in the active vault. backend/api/reader.py:354
POST /api/reader/analysis/{job_id}/cancel cancel_reader_analysis Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))] Request cooperative cancellation of a running analysis. backend/api/reader.py:395
GET /api/reader/analysis/{job_id}/result get_reader_analysis_result Reader, reader [Depends(get_workspace_context)] Return the structured cited result for one completed analysis. backend/api/reader.py:365
POST /api/reader/analysis/{job_id}/resume resume_reader_analysis Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('ai-platform'))] Resume a durable job from completed checkpoints. backend/api/reader.py:381
GET /api/reader/articles get_articles Reader, reader [Depends(get_workspace_context)], Depends(get_db) List articles. Filters: unread only, one or more source IDs. backend/api/reader.py:405
POST /api/reader/articles/backfill-extract trigger_backfill_extract Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))] Spin up a background pass that fills full_content on existing backend/api/reader.py:572
GET /api/reader/articles/backfill-extract/status get_backfill_extract_status Reader, reader [Depends(get_workspace_context)] Poll the backfill progress. Safe to call any time. backend/api/reader.py:595
GET /api/reader/articles/{article_id} get_article Reader, reader [Depends(get_workspace_context)], Depends(get_db) Read one exact Reader article for evidence links and deep linking. backend/api/reader.py:601
POST /api/reader/articles/{article_id}/extract extract_article_full_content Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Force a full-text extraction for an existing article. backend/api/reader.py:451
PATCH /api/reader/articles/{article_id}/read mark_article_read Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Mark an article as read or unread backend/api/reader.py:436
GET /api/reader/inventory get_reader_inventory Reader, reader [Depends(get_workspace_context)] Return exact Reader counts and source breakdown without fetching rows. backend/api/reader.py:309
GET /api/reader/newsletter-account get_newsletter_account Reader, reader [Depends(get_workspace_context)], Depends(get_db) Read POP3 newsletter account config. Side-effect-free: if no row exists, backend/api/reader.py:192
PUT /api/reader/newsletter-account update_newsletter_account Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Update POP3 newsletter account. Only fields provided are updated; password optional. backend/api/reader.py:203
POST /api/reader/newsletter-account/sync sync_newsletter_account Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))] Schedule a newsletter ingestion run. Returns immediately (202 Accepted-ish); backend/api/reader.py:295
POST /api/reader/newsletter-account/test test_newsletter_account Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Try to log in to the POP3 server and report number of messages waiting. backend/api/reader.py:233
POST /api/reader/podcast/generate trigger_podcast_generation Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('ai-platform'))] Launches podcast generation in the background backend/api/reader.py:624
GET /api/reader/podcast/info get_podcast_info Reader, reader [Depends(get_workspace_context)] Returns information about the last generated podcast backend/api/reader.py:649
GET /api/reader/podcast/latest get_latest_podcast Reader, reader [Depends(get_workspace_context)] Download/Stream the most recent podcast backend/api/reader.py:681
GET /api/reader/podcast/status get_podcast_status Reader, reader [Depends(get_workspace_context)] Returns the current status of podcast generation backend/api/reader.py:638
GET /api/reader/sources get_sources Reader, reader [Depends(get_workspace_context)], Depends(get_db) List all feed sources backend/api/reader.py:49
POST /api/reader/sources create_source Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Add a new feed source backend/api/reader.py:55
POST /api/reader/sources/opml upload_opml Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Upload an OPML file to import feeds backend/api/reader.py:79
DELETE /api/reader/sources/{source_id} delete_source Reader, reader [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_db) Delete a source and its articles backend/api/reader.py:68
GET /api/schedulers list_tasks Scheduler, schedulers Get all scheduled tasks. backend/api/scheduler_routes.py:20
DELETE /api/schedulers/history clear_history Scheduler, schedulers [Depends(require_role('admin'))] Clear execution history for all tasks. backend/api/scheduler_routes.py:27
GET /api/schedulers/history get_history Scheduler, schedulers Depends(get_mgmt_db) Get task execution history with pagination. backend/api/scheduler_routes.py:36
GET /api/schedulers/{name} get_task Scheduler, schedulers Get a specific task. backend/api/scheduler_routes.py:60
PUT /api/schedulers/{name} update_task Scheduler, schedulers [Depends(require_role('admin'))] Update a task's configuration. backend/api/scheduler_routes.py:69
POST /api/schedulers/{name}/run run_task Scheduler, schedulers [Depends(require_role('admin'))] Run a task immediately in the background. backend/api/scheduler_routes.py:82
GET /api/share/{token} read_shared_page Share Depends(get_mgmt_db) Anonymous read of a shared page. The ONLY unauthenticated endpoint. backend/api/share_routes.py:147
POST /api/social/compose compose_posts Social [Depends(require_role('editor'))] Generate (with AI) a text proposal adapted for each network. Does NOT publish. backend/api/social_routes.py:367
GET /api/social/feed/{stream_id} get_feed Social Returns posts for a specific stream. backend/api/social_routes.py:173
GET /api/social/history get_post_history Social Returns the history of published posts (most recent first). backend/api/social_routes.py:679
POST /api/social/interact interact_with_post Social [Depends(require_role('editor'))] Perform an interaction (like, reblog) on a post. backend/api/social_routes.py:320
GET /api/social/networks get_networks Social Returns the user-configured social networks, with live config status. backend/api/social_routes.py:140
PUT /api/social/networks update_networks Social [Depends(require_role('editor'))] Saves the enabled/disabled state and per-network settings. backend/api/social_routes.py:166
POST /api/social/post create_post Social [Depends(require_role('editor'))] Compat: publishes the SAME text to multiple networks. For a per-network message, backend/api/social_routes.py:578
POST /api/social/process-scheduled process_scheduled_posts Social [Depends(require_role('editor'))] Publish overdue scheduled posts. Called periodically by the scheduler. backend/api/social_routes.py:645
POST /api/social/publish publish_posts Social [Depends(require_role('editor'))] Publish a message (potentially different) per network and save the registry. backend/api/social_routes.py:561
POST /api/social/schedule schedule_post Social [Depends(require_role('editor'))] Schedule a future publication (saved to the Vault table, not in memory). backend/api/social_routes.py:590
GET /api/social/scheduled get_scheduled_posts Social Returns all pending scheduled posts. backend/api/social_routes.py:617
DELETE /api/social/scheduled/{post_id} cancel_scheduled_post Social [Depends(require_role('editor'))] Cancel a scheduled post (marks the status as cancelled). backend/api/social_routes.py:633
GET /api/social/streams get_streams Social Returns the user-configured streams/columns. backend/api/social_routes.py:126
PUT /api/social/streams update_streams Social [Depends(require_role('editor'))] Saves the user's stream configuration. backend/api/social_routes.py:133
POST /api/system/browse browse_directory [Depends(require_role('admin'))] Browse directory contents for the folder/file picker. backend/api/system_routes.py:150
GET /api/system/graph/visualization get_graph_viz Get graph viz backend/api/system_routes.py:145
POST /api/system/native-pick native_pick [Depends(require_role('admin'))] Open the host's native file/folder dialog and return the chosen path. backend/api/system_routes.py:372
GET /api/system/native-pick/available native_pick_available [Depends(require_role('admin'))] Whether the native OS file/folder dialog can be offered from here. backend/api/system_routes.py:358
DELETE /api/system/notifications clear_notifications [Depends(require_role('admin'))], Depends(get_mgmt_db) Deletes all system notifications. backend/api/system_routes.py:84
GET /api/system/notifications get_notifications Depends(get_mgmt_db) Returns system notifications with pagination. backend/api/system_routes.py:22
POST /api/system/notifications create_notification Depends(get_mgmt_db) Persist a notification to the central log. backend/api/system_routes.py:49
POST /api/system/search search_filesystem [Depends(require_role('admin'))] Search by name across the whole system (Vault + Library + host home). backend/api/system_routes.py:469
GET /api/system/stats get_system_stats Returns real system statistics. backend/api/system_routes.py:117
GET /api/tokens list_tokens Public API / PAT Depends(get_workspace_context), Depends(get_mgmt_db) List tokens backend/api/public_routes.py:122
POST /api/tokens create_token Public API / PAT Depends(get_workspace_context), Depends(get_mgmt_db) Creates a PAT. Returns the plaintext token ONCE (it won't be shown again). backend/api/public_routes.py:92
DELETE /api/tokens/{token_id} revoke_token Public API / PAT Depends(get_workspace_context), Depends(get_mgmt_db) Revoke token backend/api/public_routes.py:141
POST /api/tools/approve approve_tool Tools, tools [Depends(require_role('admin'))] Approve a pending tool. backend/api/tools_routes.py:94
GET /api/tools/approved get_approved_tools Tools, tools Get all approved tools. backend/api/tools_routes.py:73
GET /api/tools/pending get_pending_tools Tools, tools Get all tools pending approval. backend/api/tools_routes.py:52
POST /api/tools/reject reject_tool Tools, tools [Depends(require_role('admin'))] Reject a pending tool. backend/api/tools_routes.py:120
GET /api/tools/{name} get_tool Tools, tools Get a specific tool by name. backend/api/tools_routes.py:146
GET /api/vault/alias-index get_alias_index Vault [Depends(get_workspace_context)] Map of id → [aliases] for notes that declare aliases: in the frontmatter. backend/api/vault_routes.py:15243
POST /api/vault/assets/upload upload_asset Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Uploads an image or PDF to Assets/Inline or Assets/Files and returns the URL. backend/api/vault_routes.py:12314
GET /api/vault/assets/{asset_path:path} get_asset Vault [Depends(get_workspace_context)] Serves files from the Vault Assets directory. backend/api/vault_routes.py:12357
GET /api/vault/backlinks get_backlinks Vault [Depends(get_workspace_context)] Finds all notes linking to a specific ID (both in metadata and body). backend/api/vault_routes.py:15682
DELETE /api/vault/brain-table clear_brain_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Disable the Brain designation without deleting any table. backend/api/vault_routes.py:8400
GET /api/vault/brain-table get_brain_table Vault [Depends(get_workspace_context)] Return the designated Brain table status for Settings and UI gating. backend/api/vault_routes.py:8293
POST /api/vault/brain-table set_brain_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Designate an existing table as the Brain and guarantee its backend/api/vault_routes.py:8313
POST /api/vault/brain-table/create create_brain_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create and designate a new Brain table with the knowledge schema. backend/api/vault_routes.py:8348
POST /api/vault/bulk-apply-template bulk_apply_template Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Apply a table template body and declared properties to selected rows. backend/api/vault_routes.py:10039
POST /api/vault/bulk-update-metadata bulk_update_metadata Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Applies the same metadata patch to a collection of pages. backend/api/vault_routes.py:9920
WEBSOCKET /api/vault/collab/{page_id} collab_ws Collaboration Collab ws backend/api/collab_routes.py:194
GET /api/vault/csl/styles list_csl_styles Vault [Depends(get_workspace_context)] List of the CSL styles available in the catalog (frontend/public/csl/styles). backend/api/vault_routes.py:10143
POST /api/vault/csl/styles upload_csl_style Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Uploads a CSL (.csl) file to the catalog. backend/api/vault_routes.py:10158
GET /api/vault/custom-icons get_custom_icons Vault [Depends(get_workspace_context)] Returns the shared custom icon library for Vault icon picker. backend/api/vault_routes.py:13241
PUT /api/vault/custom-icons save_custom_icons Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Persists the shared custom icon library for Vault icon picker. backend/api/vault_routes.py:13253
GET /api/vault/daily list_daily_notes Vault [Depends(get_workspace_context)] Lists existing daily notes (one per day), newest first. backend/api/vault_routes.py:4647
POST /api/vault/daily get_or_create_daily_note Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('daily-notes'))] Gets (or atomically creates) the daily note for a given date. backend/api/vault_routes.py:4716
GET /api/vault/databases list_databases Vault [Depends(get_workspace_context)] List databases backend/api/vault_routes.py:17158
POST /api/vault/databases create_database Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create database backend/api/vault_routes.py:17165
DELETE /api/vault/databases/{database_id} delete_database Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Delete database backend/api/vault_routes.py:17191
POST /api/vault/delete-physical-file delete_physical_file Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Deletes the physical file referenced by target (does not touch any page). backend/api/vault_routes.py:13588
GET /api/vault/drawings list_drawings Vault [Depends(get_workspace_context)] Lists all drawings in the vault (tldraw and excalidraw). backend/api/vault_routes.py:18572
DELETE /api/vault/drawings/{drawing_id} delete_drawing Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Soft-delete: moves the drawing to the trash, like pages. backend/api/vault_routes.py:18721
GET /api/vault/drawings/{drawing_id} get_drawing Vault [Depends(get_workspace_context)] Returns the data of a Tldraw drawing. backend/api/vault_routes.py:18628
PUT /api/vault/drawings/{drawing_id} save_drawing Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Saves or updates a Tldraw drawing. backend/api/vault_routes.py:18694
GET /api/vault/drupal/content-types drupal_content_types Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Drupal content type for the table config dropdown. backend/api/vault_routes.py:20626
GET /api/vault/drupal/content-types/{bundle}/fields drupal_content_type_fields Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Fields of a Drupal content type for the mapping editor. backend/api/vault_routes.py:20640
GET /api/vault/export-references export_references Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Exports a table's references to BibTeX or RIS (download). backend/api/vault_routes.py:10177
GET /api/vault/export/{page_id} export_page Vault [Depends(get_workspace_context)] Exports a Vault page to the requested format with resolved citations. backend/api/vault_routes.py:6800
POST /api/vault/format-bibliography format_bibliography Vault [Depends(get_workspace_context)] Renders the bibliography (list of entries) for the given citation backend/api/vault_routes.py:6720
GET /api/vault/format-citation format_citation Vault [Depends(get_workspace_context)] Renders an inline citation (a single citation key) as plain text. backend/api/vault_routes.py:6538
POST /api/vault/format-citations format_citations Vault [Depends(get_workspace_context)] Renders a set of inline citations TOGETHER — necessary to backend/api/vault_routes.py:6598
POST /api/vault/generate-citation-key generate_citation_key_endpoint Vault [Depends(get_workspace_context)] Generates a unique Citation Key for a manual entry in Recursos. backend/api/vault_routes.py:9301
GET /api/vault/global-index get_global_index Vault [Depends(get_workspace_context)] Returns a global mapping id -> title for the entire Vault. backend/api/vault_routes.py:15231
POST /api/vault/handwriting/recognize recognize_handwriting Handwriting Receives a PNG of the strokes and returns {text, raw, lines, model, corrected}. backend/api/handwriting_routes.py:45
GET /api/vault/handwriting/status handwriting_status Handwriting Indicates whether the local engine (transformers + PIL) is available. backend/api/handwriting_routes.py:23
POST /api/vault/handwriting/warmup handwriting_warmup Handwriting Preloads the model in the background (idempotent, non-blocking). backend/api/handwriting_routes.py:33
GET /api/vault/images/{image_path:path} serve_vault_image Vault [Depends(get_workspace_context)] Serves images directly from VAULT/Images. backend/api/vault_routes.py:12599
POST /api/vault/import import_markdown Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Imports Markdown/Obsidian files into the vault (importer style with UI). backend/api/vault_routes.py:15388
POST /api/vault/import-icon-url import_icon_from_url Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Downloads an external icon URL and stores it in Assets/Icons. backend/api/vault_routes.py:12264
POST /api/vault/import-references import_references Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Imports a .bib/.ris file, creating pages in the table_id table. backend/api/vault_routes.py:9638
GET /api/vault/indexer-status get_indexer_status_endpoint Vault [Depends(get_workspace_context)] Expose the page-index warmup status so the UI can show 'indexing…'. backend/api/vault_routes.py:4185
GET /api/vault/library/{rel_path:path} serve_library_file Vault [Depends(get_workspace_context)] Serves Library with vault-first resolution and fallback to the legacy (sibling) one: backend/api/vault_routes.py:12787
POST /api/vault/link-existing-file link_existing_file Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Variant B: register an existing local file path without copying it. backend/api/vault_routes.py:13482
POST /api/vault/link-index/rebuild post_link_index_rebuild Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Forces a full rebuild of the reverse index in the background. backend/api/vault_routes.py:15670
GET /api/vault/link-index/stats get_link_index_stats Vault [Depends(get_workspace_context)] Status of the wikilinks reverse index (debug/observability). backend/api/vault_routes.py:15633
GET /api/vault/link-preview get_link_preview Vault [Depends(get_workspace_context)] Extracts Open Graph metadata from a URL for a preview card. backend/api/vault_routes.py:15269
POST /api/vault/link-unlinked-mentions link_unlinked_mentions Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Converts plain mentions of target title into internal links in one source note or all notes. backend/api/vault_routes.py:16096
POST /api/vault/literature/ai run_ai_operation Literature Depends(require_role('editor')) Run ai operation backend/api/literature_routes.py:365
GET /api/vault/literature/catalog get_catalog Literature Depends(require_role('viewer')) Get catalog backend/api/literature_routes.py:157
GET /api/vault/literature/configuration get_configuration Literature Depends(require_role('viewer')) Get configuration backend/api/literature_routes.py:146
PUT /api/vault/literature/configuration update_configuration Literature Depends(require_role('admin')) Update configuration backend/api/literature_routes.py:151
POST /api/vault/literature/imports import_results Literature Depends(require_role('editor')) Import results backend/api/literature_routes.py:256
POST /api/vault/literature/manual-capture manual_capture Literature Depends(require_role('viewer')) Manual capture backend/api/literature_routes.py:346
POST /api/vault/literature/repositories create_repository Literature Depends(require_role('admin')) Create repository backend/api/literature_routes.py:168
POST /api/vault/literature/repositories/test test_repository Literature Depends(require_role('admin')) Test repository backend/api/literature_routes.py:162
DELETE /api/vault/literature/repositories/{repository_id} delete_repository Literature Depends(require_role('admin')) Delete repository backend/api/literature_routes.py:178
PUT /api/vault/literature/repositories/{repository_id} update_repository Literature Depends(require_role('admin')) Update repository backend/api/literature_routes.py:173
GET /api/vault/literature/reviews list_reviews Literature Depends(require_role('viewer')) List reviews backend/api/literature_routes.py:267
POST /api/vault/literature/reviews create_review Literature Depends(require_role('editor')) Create review backend/api/literature_routes.py:273
POST /api/vault/literature/reviews/tables ensure_review_tables Literature Depends(require_role('editor')) Ensure review tables backend/api/literature_routes.py:261
GET /api/vault/literature/reviews/{review_id} get_review Literature Depends(require_role('viewer')) Get review backend/api/literature_routes.py:278
POST /api/vault/literature/reviews/{review_id}/activities create_activity Literature Depends(require_role('editor')) Create activity backend/api/literature_routes.py:284
GET /api/vault/literature/reviews/{review_id}/candidates list_candidates Literature Depends(require_role('viewer')) List candidates backend/api/literature_routes.py:301
POST /api/vault/literature/reviews/{review_id}/candidates add_candidates Literature Depends(require_role('editor')) Add candidates backend/api/literature_routes.py:296
POST /api/vault/literature/reviews/{review_id}/candidates/{candidate_id}/consensus resolve_conflict Literature Depends(require_role('editor')) Resolve conflict backend/api/literature_routes.py:311
POST /api/vault/literature/reviews/{review_id}/candidates/{candidate_id}/decisions submit_decision Literature Depends(require_role('editor')) Submit decision backend/api/literature_routes.py:306
PUT /api/vault/literature/reviews/{review_id}/candidates/{candidate_id}/full-text update_candidate_full_text Literature Depends(require_role('editor')) Update candidate full text backend/api/literature_routes.py:316
GET /api/vault/literature/reviews/{review_id}/exports/{export_format} export_review Literature Depends(require_role('editor')) Export review backend/api/literature_routes.py:375
PUT /api/vault/literature/reviews/{review_id}/schedule update_review_schedule Literature Depends(require_role('editor')) Update review schedule backend/api/literature_routes.py:289
POST /api/vault/literature/reviews/{review_id}/snowball discover_review_citations Literature Depends(require_role('editor')) Discover review citations backend/api/literature_routes.py:321
GET /api/vault/literature/searches list_searches Literature Depends(require_role('viewer')) List searches backend/api/literature_routes.py:205
POST /api/vault/literature/searches create_search Literature Depends(require_role('viewer')) Create search backend/api/literature_routes.py:210
DELETE /api/vault/literature/searches/{search_id} cancel_search Literature Depends(require_role('viewer')) Cancel search backend/api/literature_routes.py:222
GET /api/vault/literature/searches/{search_id} get_search Literature Depends(require_role('viewer')) Get search backend/api/literature_routes.py:215
GET /api/vault/literature/searches/{search_id}/events stream_search_events Literature Depends(require_role('viewer')) Stream search events backend/api/literature_routes.py:233
GET /api/vault/literature/searches/{search_id}/results/{result_id} get_result Literature Depends(require_role('viewer')) Get result backend/api/literature_routes.py:227
DELETE /api/vault/literature/synchronizations/{source_id} cancel_synchronization Literature Depends(require_role('admin')) Cancel synchronization backend/api/literature_routes.py:195
GET /api/vault/literature/synchronizations/{source_id} get_synchronization Literature Depends(require_role('viewer')) Get synchronization backend/api/literature_routes.py:190
POST /api/vault/literature/synchronizations/{source_id} start_synchronization Literature Depends(require_role('admin')) Start synchronization backend/api/literature_routes.py:185
POST /api/vault/literature/synchronizations/{source_id}/resume resume_synchronization Literature Depends(require_role('admin')) Resume synchronization backend/api/literature_routes.py:200
POST /api/vault/llm-wiki/brain/create create_standard_llm_wiki_brain Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Compatibility-namespaced alias used by the v2 Settings panel. backend/api/vault_routes.py:8681
GET /api/vault/llm-wiki/config get_llm_wiki_config Vault [Depends(get_workspace_context)] Return the migrated v2 per-vault LLM Wiki configuration. backend/api/vault_routes.py:8490
PUT /api/vault/llm-wiki/config put_llm_wiki_config Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Validate and atomically save Brain, sources, roles, and index fields. backend/api/vault_routes.py:8504
GET /api/vault/llm-wiki/evidence/{resource_id}/{snapshot_id}/{segment_id} llm_wiki_evidence Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Return one persisted normalized source segment for a citation drawer. backend/api/vault_routes.py:8841
POST /api/vault/llm-wiki/glossary llm_wiki_glossary_learn Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Stores a user-confirmed correction pair (heard → meant): the personal backend/api/vault_routes.py:8987
GET /api/vault/llm-wiki/lint llm_wiki_lint Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Run deterministic lint and optionally request a manual semantic pass. backend/api/vault_routes.py:8875
POST /api/vault/llm-wiki/maintenance llm_wiki_maintenance Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Rebuild managed indexes/cache and run deterministic lint. backend/api/vault_routes.py:8857
POST /api/vault/llm-wiki/process llm_wiki_process Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Start a durable ingest for one row of a configured source table. backend/api/vault_routes.py:8798
GET /api/vault/llm-wiki/status/{item_id} llm_wiki_status Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Non-blocking status of a resource's ongoing/last ingest (for polling). backend/api/vault_routes.py:8822
GET /api/vault/llm-wiki/suggestions llm_wiki_list_suggestions Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Return pending read-only connection proposals for the Brain inbox. backend/api/vault_routes.py:8893
POST /api/vault/llm-wiki/suggestions/{suggestion_id}/accept llm_wiki_accept_suggestion Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Permanent-note creation was removed; proposals are read-only. backend/api/vault_routes.py:8902
POST /api/vault/llm-wiki/suggestions/{suggestion_id}/dictate llm_wiki_dictate Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Dictated edit for a suggestion: transcribe (faster-whisper) and backend/api/vault_routes.py:8951
POST /api/vault/llm-wiki/suggestions/{suggestion_id}/dismiss llm_wiki_dismiss_suggestion Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Dismiss a read-only connection proposal. backend/api/vault_routes.py:8924
POST /api/vault/llm-wiki/suggestions/{suggestion_id}/reformulate llm_wiki_reformulate Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Labeled variants of a suggestion's draft, to pick with one click. backend/api/vault_routes.py:8934
POST /api/vault/llm-wiki/suggestions/{suggestion_id}/reject llm_wiki_reject_suggestion Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Discards a pending suggestion (no note is created). backend/api/vault_routes.py:8912
POST /api/vault/local-file/register register_local_file Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Registers an absolute path and returns a token + servable URL. backend/api/vault_routes.py:13087
GET /api/vault/local-file/{token} serve_local_file Vault [Depends(get_workspace_context)] Serves a file registered via /local-file/register. backend/api/vault_routes.py:13140
GET /api/vault/local-file/{token}/{filename:path} serve_local_file Vault [Depends(get_workspace_context)] Serves a file registered via /local-file/register. backend/api/vault_routes.py:13140
POST /api/vault/lookup-metadata lookup_metadata Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Resolves external metadata for a given identifier. backend/api/vault_routes.py:9190
GET /api/vault/media get_all_media Vault [Depends(get_workspace_context)] Lists media, optionally filtered by album and root folder. backend/api/vault_routes.py:12394
GET /api/vault/media/albums get_albums Vault [Depends(get_workspace_context)] Returns the list of top-level albums. Compat: the new frontend backend/api/vault_routes.py:12449
PATCH /api/vault/media/metadata update_media_metadata Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Updates tags and/or description of a MediaCenter file. backend/api/vault_routes.py:12482
GET /api/vault/media/roots get_media_roots Vault [Depends(get_workspace_context)] Returns the roots available for media search (Images, Assets, backend/api/vault_routes.py:12386
GET /api/vault/media/tree get_media_tree Vault [Depends(get_workspace_context)] Returns the immediate subfolders of <root>/path (lazy). Each node backend/api/vault_routes.py:12456
POST /api/vault/media/upload upload_media Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Uploads a media file to an album. backend/api/vault_routes.py:12471
GET /api/vault/media/views list_media_views Vault [Depends(get_workspace_context)] Returns the user's saved views (JSON sidecar in the vault). backend/api/vault_routes.py:12513
POST /api/vault/media/views create_media_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Creates a new view. Payload: {label, scope, filters, sort}. backend/api/vault_routes.py:12519
DELETE /api/vault/media/views/{view_id} delete_media_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Deletes a view. backend/api/vault_routes.py:12537
PATCH /api/vault/media/views/{view_id} update_media_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Updates an existing view. backend/api/vault_routes.py:12528
POST /api/vault/open-local-path open_local_path Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Opens a local path (file or folder) with the system's default app. backend/api/vault_routes.py:17100
POST /api/vault/open-resource open_resource Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Open a Zotero URI or local attachment path with the OS default handler. backend/api/vault_routes.py:16895
GET /api/vault/option-catalogs list_option_catalogs Vault [Depends(get_workspace_context)] List option catalogs backend/api/vault_routes.py:18213
DELETE /api/vault/option-catalogs/{name} delete_option_catalog Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Deletes a shared catalog. 409 if any field still references it. backend/api/vault_routes.py:18277
PUT /api/vault/option-catalogs/{name} put_option_catalog Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Creates or replaces a shared catalog. Body: {options: [...]}. backend/api/vault_routes.py:18261
GET /api/vault/outlinks get_outlinks Vault [Depends(get_workspace_context)] Outgoing references of a page, resolved and split by kind. backend/api/vault_routes.py:15850
GET /api/vault/pages list_pages Vault [Depends(get_workspace_context)] Lists all pages in the root flatly by iterating through UUID.md files. backend/api/vault_routes.py:4060
POST /api/vault/pages create_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_workspace_context) Creates a new page with a UUID ID. backend/api/vault_routes.py:4291
GET /api/vault/pages/by-table/{table_id} list_pages_by_table Vault [Depends(get_workspace_context)] Returns only pages from a specific table to avoid loading the entire Vault. backend/api/vault_routes.py:4117
GET /api/vault/pages/by-table/{table_id}/snapshot list_pages_by_table_snapshot Vault [Depends(get_workspace_context)] Returns canonical snapshot per table: raw + real visible. backend/api/vault_routes.py:4147
POST /api/vault/pages/preview/warm bulk_warm_previews Vault [Depends(get_workspace_context)] Parallel pre-warmup of previews for a list of ids. backend/api/vault_routes.py:10873
DELETE /api/vault/pages/{page_id} delete_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Soft-delete: moves the page to .trash/{page_id}/. backend/api/vault_routes.py:11935
GET /api/vault/pages/{page_id} get_page Vault [Depends(get_workspace_context)] Returns the full content of a page by ID. backend/api/vault_routes.py:6106
PATCH /api/vault/pages/{page_id} patch_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_workspace_context) Partial update of a page (e.g., metadata only). backend/api/vault_routes.py:11177
PUT /api/vault/pages/{page_id} save_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_workspace_context) Saves or updates a page existing or re-adapting its UUID. backend/api/vault_routes.py:10935
GET /api/vault/pages/{page_id}/comments list_page_comments Vault [Depends(get_workspace_context)], [Depends(require_plugins('page-comments'))] Returns the comment thread for a page (oldest first). backend/api/vault_routes.py:4901
POST /api/vault/pages/{page_id}/comments add_page_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('page-comments'))], Depends(get_workspace_context) Appends a comment to a page's thread. backend/api/vault_routes.py:4911
DELETE /api/vault/pages/{page_id}/comments/{comment_id} delete_page_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('page-comments'))] Removes a comment from a page's thread. backend/api/vault_routes.py:4970
PATCH /api/vault/pages/{page_id}/comments/{comment_id} update_page_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('page-comments'))] Edits a comment's body and/or toggles its resolved flag. backend/api/vault_routes.py:4942
POST /api/vault/pages/{page_id}/duplicate duplicate_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Duplicates an existing page and returns the new ID. backend/api/vault_routes.py:13799
DELETE /api/vault/pages/{page_id}/history purge_page_history Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Deletes all version history of a page. backend/api/vault_routes.py:18935
GET /api/vault/pages/{page_id}/history get_page_history Vault [Depends(get_workspace_context)] Returns the list of available versions for a page. backend/api/vault_routes.py:18849
POST /api/vault/pages/{page_id}/history/restore/{timestamp} restore_page_version Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Restores a page to a previous version. backend/api/vault_routes.py:18899
GET /api/vault/pages/{page_id}/history/{timestamp} get_page_version_content Vault [Depends(get_workspace_context)] Returns the content of a specific version. backend/api/vault_routes.py:18876
GET /api/vault/pages/{page_id}/inline-comments list_inline_comments Vault [Depends(get_workspace_context)] List inline comments backend/api/vault_routes.py:15479
POST /api/vault/pages/{page_id}/inline-comments create_inline_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(get_workspace_context) Create inline comment backend/api/vault_routes.py:15487
DELETE /api/vault/pages/{page_id}/inline-comments/{comment_id} delete_inline_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete inline comment backend/api/vault_routes.py:15534
PATCH /api/vault/pages/{page_id}/inline-comments/{comment_id} update_inline_comment Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Update inline comment backend/api/vault_routes.py:15512
GET /api/vault/pages/{page_id}/preview get_page_preview Vault [Depends(get_workspace_context)] Preview of a page (title + excerpt/body + icon/cover + images). backend/api/vault_routes.py:10771
POST /api/vault/pages/{page_id}/restore restore_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Restores a page from the trash to its original_path. backend/api/vault_routes.py:11989
POST /api/vault/pages/{page_id}/share create_share_link Share [Depends(require_role('editor')), Depends(require_plugins('share-links'))], Depends(get_workspace_context), Depends(get_mgmt_db) Creates a public share link for a page. backend/api/share_routes.py:84
GET /api/vault/pages/{page_id}/shares list_share_links Share [Depends(require_role('viewer')), Depends(require_plugins('share-links'))], Depends(get_mgmt_db) Lists the active (non-revoked, non-expired) share links for a page. backend/api/share_routes.py:122
GET /api/vault/pdf-annotations list_pdf_annotations Vault [Depends(get_workspace_context)], Depends(_ann_get_db) Lists all annotations associated with a PDF (by source_uri). backend/api/vault_routes.py:21204
POST /api/vault/pdf-annotations create_pdf_annotation Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(_ann_get_db) Create pdf annotation backend/api/vault_routes.py:21227
DELETE /api/vault/pdf-annotations/{ann_id} delete_pdf_annotation Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(_ann_get_db) Delete pdf annotation backend/api/vault_routes.py:21287
PATCH /api/vault/pdf-annotations/{ann_id} update_pdf_annotation Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))], Depends(_ann_get_db) Update pdf annotation backend/api/vault_routes.py:21260
POST /api/vault/pick-file pick_file Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Open a native macOS file-picker dialog and return the chosen file path. backend/api/vault_routes.py:13728
POST /api/vault/pick-folder pick_folder Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Open a native macOS folder-picker dialog and return the chosen path. backend/api/vault_routes.py:13697
GET /api/vault/plugins get_plugins_state Vault [Depends(get_workspace_context)] Return versioned plugin state and the built-in capability registry. backend/api/vault_routes.py:5047
PUT /api/vault/plugins set_plugins_state Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Persists which plugins are disabled and their per-plugin settings. backend/api/vault_routes.py:5079
GET /api/vault/plugins/catalog get_plugins_catalog Vault [Depends(get_workspace_context)] Catalog of available permissions (id → description) + host API version. backend/api/vault_routes.py:5298
POST /api/vault/plugins/catalog/install install_from_catalog Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Installs a plugin from the catalog (bundled by id, or remote by url). backend/api/vault_routes.py:5701
GET /api/vault/plugins/catalog/list list_plugin_catalog Vault [Depends(get_workspace_context)] Lists the plugin catalog entries (gallery), marking their status. backend/api/vault_routes.py:5666
POST /api/vault/plugins/install install_plugin Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Installs a third-party plugin from an uploaded .zip (with its manifest.json). backend/api/vault_routes.py:5550
GET /api/vault/plugins/installed get_installed_plugins Vault [Depends(get_workspace_context)] Lists the installed third-party plugins with manifest + status + permissions. backend/api/vault_routes.py:5305
POST /api/vault/plugins/llm-wiki/lifecycle set_llm_wiki_lifecycle Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Backward-compatible alias for the general lifecycle endpoint. backend/api/vault_routes.py:5279
GET /api/vault/plugins/registry-url get_registry_url Vault [Depends(get_workspace_context)] URL of the configured remote plugin index, or the official default. backend/api/vault_routes.py:5794
PUT /api/vault/plugins/registry-url set_registry_url Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Configures (or clears) the URL of the remote plugin index. backend/api/vault_routes.py:5804
GET /api/vault/plugins/trust list_trusted_keys Vault [Depends(get_workspace_context)] Lists the NAMES of the trusted keys (doesn't expose the full key material). backend/api/vault_routes.py:5752
POST /api/vault/plugins/trust add_trusted_key Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Adds a trusted Ed25519 public key (base64). Admin action. backend/api/vault_routes.py:5765
DELETE /api/vault/plugins/trust/{name} remove_trusted_key Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Removes a trusted key by its name. backend/api/vault_routes.py:5781
POST /api/vault/plugins/vault-summary/summarize summarize_with_vault_plugin Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('vault-summary', 'ai-platform'))] Create a concise summary using the explicitly configured active model. backend/api/vault_routes.py:5463
DELETE /api/vault/plugins/{plugin_id} uninstall_plugin Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Uninstall a third-party plugin: delete its folder and clean up its state. backend/api/vault_routes.py:5576
GET /api/vault/plugins/{plugin_id}/asset/{asset_path:path} get_plugin_asset Vault [Depends(get_workspace_context)] Serves a static file from the plugin's directory (UI entry, etc.). backend/api/vault_routes.py:5510
POST /api/vault/plugins/{plugin_id}/export export_plugin_package Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Download a deterministic package for an installed third-party plugin. backend/api/vault_routes.py:5608
POST /api/vault/plugins/{plugin_id}/lifecycle set_plugin_lifecycle Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Enable or disable a plugin and its confirmed dependency changes. backend/api/vault_routes.py:5266
POST /api/vault/plugins/{plugin_id}/network/fetch fetch_for_ui_plugin Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Proxy UI plugin networking through the backend SSRF and size guard. backend/api/vault_routes.py:5429
POST /api/vault/plugins/{plugin_id}/permissions set_plugin_permissions Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Grants (or revokes) permissions to a third-party plugin. backend/api/vault_routes.py:5331
GET /api/vault/plugins/{plugin_id}/settings get_plugin_settings Vault [Depends(get_workspace_context)] Returns a plugin's own configuration (settings[plugin_id]). backend/api/vault_routes.py:5402
PUT /api/vault/plugins/{plugin_id}/settings set_plugin_settings Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Merges a patch into a plugin's own configuration. backend/api/vault_routes.py:5411
POST /api/vault/plugins/{plugin_id}/submissions submit_plugin_package Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Upload an installed plugin to the configured moderation broker. backend/api/vault_routes.py:5631
POST /api/vault/promote-zotero-extra promote_zotero_extra Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Promotes a Zotero Extras field to its own registry column. backend/api/vault_routes.py:9780
GET /api/vault/raw/{rel_path:path} serve_vault_raw_file Vault [Depends(get_workspace_context)] Serves any file under VAULT/ with containment check. backend/api/vault_routes.py:12803
POST /api/vault/recognize-pdf recognize_pdf Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Detects a PDF's reference, with a metadata fallback for id-less sources. backend/api/vault_routes.py:9453
DELETE /api/vault/reference-table clear_reference_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Disable references without deleting any table. backend/api/vault_routes.py:7485
GET /api/vault/reference-table get_reference_table Vault [Depends(get_workspace_context)] Status of the designated references table (for Settings and the frontend's backend/api/vault_routes.py:7438
POST /api/vault/reference-table set_reference_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Designates an existing table as the references table and guarantees backend/api/vault_routes.py:7449
POST /api/vault/reference-table/create create_reference_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Creates a new, already-citable table and designates it as the references table. backend/api/vault_routes.py:7466
GET /api/vault/registry get_registry Vault [Depends(get_workspace_context)] Returns the full registry of databases, tables, and views (sorted alphabetically). backend/api/vault_routes.py:16845
POST /api/vault/registry update_registry Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Updates the entire registry (use with care). backend/api/vault_routes.py:16879
GET /api/vault/resolve-by-citation-key resolve_by_citation_key Vault [Depends(get_workspace_context)] Resolves a citation key (like smith2020) to UUID + title by querying backend/api/vault_routes.py:10390
GET /api/vault/resolve-by-title resolve_by_title Vault [Depends(get_workspace_context)] Resolve a literal title (or a note alias) to a UUID via _page_index_entries. backend/api/vault_routes.py:10570
GET /api/vault/schema get_schema Vault [Depends(get_workspace_context)] Get schema backend/api/vault_routes.py:18552
POST /api/vault/schema save_schema Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Legacy route to save schemas per folder. backend/api/vault_routes.py:18540
GET /api/vault/search-citations search_citations Vault [Depends(get_workspace_context)] Searches Recursos pages for the CitePicker (Cmd+Shift+I). backend/api/vault_routes.py:10214
DELETE /api/vault/share/{token} revoke_share_link Share [Depends(require_role('editor')), Depends(require_plugins('share-links'))], Depends(get_mgmt_db) Revokes a share link (soft-delete: keeps the row for audit). backend/api/share_routes.py:136
GET /api/vault/sidebar/summary list_sidebar_summary Vault [Depends(get_workspace_context)] Returns a lightweight summary of pages for the sidebar. backend/api/vault_routes.py:4207
POST /api/vault/skills/execute-button-action execute_button_action Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Executes a custom AI prompt or Skill button action on a note/row. backend/api/vault_routes.py:20941
POST /api/vault/skills/generate-button-action generate_button_action Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Generates structured button action configuration using LLM based on user prompt. backend/api/vault_routes.py:20885
POST /api/vault/skills/match-drupal-rows match_drupal_rows Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Links rows to existing Drupal nodes by title, without creating anything. backend/api/vault_routes.py:20705
POST /api/vault/skills/sync-drupal-row sync_drupal_row Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Creates or updates a row's Drupal node (and its translations). backend/api/vault_routes.py:20651
POST /api/vault/skills/sync-drupal-rows sync_drupal_rows Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Bulk variant of sync-drupal-row. Each row is independent; per-row errors backend/api/vault_routes.py:20678
POST /api/vault/skills/translate-page translate_page Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('translation'))] Translate a Vault page (title + markdown body) into one child page per language. backend/api/vault_routes.py:20995
POST /api/vault/skills/translate-row translate_row Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('translation'))] Translate the translatable fields of a row to one subitem per language. backend/api/vault_routes.py:20783
POST /api/vault/skills/translate-rows translate_rows Vault [Depends(get_workspace_context)], [Depends(require_role('editor')), Depends(require_plugins('translation'))] Bulk variant of translate-row: translate many selected rows at once. backend/api/vault_routes.py:20829
GET /api/vault/synced-events synced_events Vault [Depends(get_workspace_context)] SSE: notifies REAL-TIME changes of synced blocks to all connected backend/api/vault_routes.py:15579
GET /api/vault/synced/{sync_id} get_synced_block Vault [Depends(get_workspace_context)] Content of a synced block (source shared across instances). backend/api/vault_routes.py:15611
PUT /api/vault/synced/{sync_id} save_synced_block Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Saves the source of a synced block. All instances (on any backend/api/vault_routes.py:15623
GET /api/vault/tables list_tables Vault [Depends(get_workspace_context)] List tables backend/api/vault_routes.py:17212
POST /api/vault/tables create_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create table backend/api/vault_routes.py:17271
DELETE /api/vault/tables/{table_id} delete_table Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Delete a table. backend/api/vault_routes.py:17434
PUT /api/vault/tables/{table_id} rename_table Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Rename table backend/api/vault_routes.py:17550
POST /api/vault/tables/{table_id}/options/remove remove_table_option Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Deletes an option from the catalog and from ALL rows that use it, clearing backend/api/vault_routes.py:18152
POST /api/vault/tables/{table_id}/options/rename rename_table_option Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Renames an option in the catalog AND in all rows that use it (the backend/api/vault_routes.py:18084
GET /api/vault/tables/{table_id}/options/usage table_option_usage Vault [Depends(get_workspace_context)] Usage counter per option (how many rows use each value) — feeds backend/api/vault_routes.py:18058
PATCH /api/vault/tables/{table_id}/properties/{field_id} patch_table_property Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Renames or updates non-structural attributes of a property identified backend/api/vault_routes.py:17828
GET /api/vault/tags list_vault_tags Vault [Depends(get_workspace_context)] Aggregates all tags across the vault with their page counts. backend/api/vault_routes.py:4785
GET /api/vault/thumb/{rel_url:path} serve_thumb Vault [Depends(get_workspace_context)] Serves a PNG thumbnail generated by QuickLook (macOS) for backend/api/vault_routes.py:12934
POST /api/vault/translate-url translate_url Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Captures a reference from a URL via Zotero translation-server. backend/api/vault_routes.py:9525
DELETE /api/vault/trash empty_trash Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Empties the whole trash in ONE single request (definitive purge). backend/api/vault_routes.py:12059
GET /api/vault/trash list_trash Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Lists the trash entries, ordered by deleted_at desc. backend/api/vault_routes.py:12030
DELETE /api/vault/trash/{page_id} purge_trash_entry Vault [Depends(get_workspace_context)], [Depends(require_role('admin'))] Immediately purge a trash entry (irreversible). backend/api/vault_routes.py:12114
GET /api/vault/unlinked-mentions get_unlinked_mentions Vault [Depends(get_workspace_context)] Finds notes mentioning target title in plain text without an actual link. backend/api/vault_routes.py:16011
GET /api/vault/unsplash/search unsplash_search Vault [Depends(get_workspace_context)] Searches images on Unsplash acting as a proxy. backend/api/vault_routes.py:13757
POST /api/vault/upload-cover upload_cover Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Uploads an image to the Assets/Covers folder and returns the URL. backend/api/vault_routes.py:12174
POST /api/vault/upload-icon upload_icon Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Uploads an image to the Assets/Icons folder and returns the URL. backend/api/vault_routes.py:12182
POST /api/vault/upload-property-file upload_property_file Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Upload a file for a property. Routes to Assets/, Library/ or a free path backend/api/vault_routes.py:13375
GET /api/vault/views list_views Vault [Depends(get_workspace_context)] List views backend/api/vault_routes.py:18301
POST /api/vault/views create_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Create view backend/api/vault_routes.py:18338
PUT /api/vault/views/order reorder_views Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Reorders a table's views according to the received order. backend/api/vault_routes.py:18359
DELETE /api/vault/views/{view_id} delete_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Delete view backend/api/vault_routes.py:18446
GET /api/vault/views/{view_id} get_view Vault [Depends(get_workspace_context)] Get view backend/api/vault_routes.py:18398
PUT /api/vault/views/{view_id} update_view Vault [Depends(get_workspace_context)], [Depends(require_role('editor'))] Update view backend/api/vault_routes.py:18492
GET /api/vault/views/{view_id}/usage get_view_usage Vault [Depends(get_workspace_context)] Find all pages/notes in the vault where this view_id is embedded or referenced. backend/api/vault_routes.py:18414
GET /api/vault/virtual-fields list_virtual_fields Vault [Depends(get_workspace_context)] Catalogue of virtual field computers available for the schema config UI. backend/api/vault_routes.py:4179
GET /api/vaults list_vaults Vaults Depends(get_workspace_context), Depends(get_mgmt_db) Workspace vaults + which one is active (the one resolved by X-Vault-Id or the main one). backend/api/vaults_routes.py:118
POST /api/vaults create_vault Vaults [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Creates a new vault (folder + row). Defaults to a sibling of the main vault. backend/api/vaults_routes.py:132
POST /api/vaults/from-template create_vault_from_template Vault templates [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Download, verify, stage, and register a Vault from the official catalog. backend/api/vault_templates_routes.py:101
GET /api/vaults/templates/catalog list_template_catalog Vault templates Depends(get_workspace_context) Return the verified official template catalog without breaking offline use. backend/api/vault_templates_routes.py:84
DELETE /api/vaults/{vault_id} delete_vault Vaults [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Deletes a vault's ROW from the registry. With delete_files=true it also DELETES the backend/api/vaults_routes.py:202
PATCH /api/vaults/{vault_id} rename_vault Vaults [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Change a vault's LOGICAL name (the DB row, not the disk folder). backend/api/vaults_routes.py:175
POST /api/vaults/{vault_id}/template-export export_vault_template Vault templates [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Download a deterministic privacy-filtered Vault template package. backend/api/vault_templates_routes.py:201
GET /api/vaults/{vault_id}/template-export/preview preview_template_export Vault templates [Depends(require_role('editor'))], Depends(get_workspace_context), Depends(get_mgmt_db) Show the exact export allowlist, exclusions, and privacy findings. backend/api/vault_templates_routes.py:166
POST /api/vaults/{vault_id}/template-submissions submit_vault_template Vault templates [Depends(require_role('admin'))], Depends(get_workspace_context), Depends(get_mgmt_db) Upload a template package to the configured moderation broker. backend/api/vault_templates_routes.py:220
GET /api/workspaces list_workspaces Workspaces, workspaces Depends(get_effective_user_id), Depends(get_mgmt_db) List workspaces backend/domains/workspace/api/routes.py:99
POST /api/workspaces create_workspace Workspaces, workspaces Depends(get_effective_user_id), Depends(get_mgmt_db) Create workspace backend/domains/workspace/api/routes.py:39
GET /api/workspaces/{workspace_id} get_workspace Workspaces, workspaces Depends(get_effective_user_id), Depends(get_mgmt_db) Get workspace backend/domains/workspace/api/routes.py:281
GET /api/workspaces/{workspace_id}/members list_workspace_members Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) List workspace members backend/domains/workspace/api/routes.py:121
POST /api/workspaces/{workspace_id}/members add_workspace_member Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) Add workspace member backend/domains/workspace/api/routes.py:200
DELETE /api/workspaces/{workspace_id}/members/{target_user_id} remove_workspace_member Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) Remove workspace member backend/domains/workspace/api/routes.py:254
PUT /api/workspaces/{workspace_id}/members/{target_user_id}/role update_member_role Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) Update member role backend/domains/workspace/api/routes.py:166
GET /api/workspaces/{workspace_id}/members/{user_id}/vaults list_member_vault_access Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) List member vault access backend/domains/workspace/api/routes.py:326
POST /api/workspaces/{workspace_id}/members/{user_id}/vaults grant_vault_access Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) Grant vault access backend/domains/workspace/api/routes.py:359
DELETE /api/workspaces/{workspace_id}/members/{user_id}/vaults/{vault_id} revoke_vault_access Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) Revoke vault access backend/domains/workspace/api/routes.py:405
GET /api/workspaces/{workspace_id}/vaults list_workspace_vaults Workspaces, workspaces Depends(get_mgmt_db), Depends(require_role('admin')) List workspace vaults backend/domains/workspace/api/routes.py:310

Unregistered modules

Every route module is registered.