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 |
/ |
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.