{"openapi":"3.1.0","info":{"title":"Notebook Control Plane","description":"Notebook-driven coding agent control plane with MCP support","version":"0.1.0"},"paths":{"/api/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Register a new user account.","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Login with email and password.","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh Token","description":"Get new access token using refresh token.","operationId":"refresh_token_api_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Current User Info","description":"Get current authenticated user's information.","operationId":"get_current_user_info_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/chat-logging":{"put":{"tags":["auth"],"summary":"Toggle Chat Logging","description":"Toggle global chat logging for the current user.","operationId":"toggle_chat_logging_api_auth_chat_logging_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","description":"Logout endpoint.\nNote: JWT tokens are stateless, so this is a client-side operation.\nThe client should discard the tokens.","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/request-password-change-otp":{"post":{"tags":["auth"],"summary":"Request Password Change Otp","description":"Request OTP for password change. Sends a 6-digit code to user's email.","operationId":"request_password_change_otp_api_auth_request_password_change_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Password","description":"Change current user's password with OTP verification.","operationId":"change_password_api_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/verify-email":{"post":{"tags":["auth"],"summary":"Verify Email","description":"Verify user's email address using token from email.","operationId":"verify_email_api_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/resend-verification":{"post":{"tags":["auth"],"summary":"Resend Verification","description":"Resend verification email.","operationId":"resend_verification_api_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","description":"Request password reset email.","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","description":"Reset password using token from email.","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/pair-device":{"post":{"tags":["auth"],"summary":"Pair Device","description":"Issue an API key for a desktop app that redirected the user here.\n\nThe desktop app starts a localhost HTTP server, then opens the browser to\nctlsurf's /pair-device page. After the user approves, the frontend POSTs\nhere and redirects the browser to redirect_uri?key=...\n\nkind=\"sidekick\" mints a first-party app key (cak_): one credential that does\nnotebook/MCP access AND the managed Supporting Services (transcription + LLM),\nbound to the user's Business org. Any other kind mints a regular cpk_ MCP key.","operationId":"pair_device_api_auth_pair_device_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairDeviceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/google/login":{"get":{"tags":["oauth"],"summary":"Google Login","description":"Redirect to Google OAuth consent screen.","operationId":"google_login_api_auth_google_login_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"type":"string","description":"'mobile' to finish in the native app, otherwise web","default":"web","title":"Client"},"description":"'mobile' to finish in the native app, otherwise web"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google/callback":{"get":{"tags":["oauth"],"summary":"Google Callback","description":"Handle Google OAuth callback.","operationId":"google_callback_api_auth_google_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/microsoft/login":{"get":{"tags":["oauth"],"summary":"Microsoft Login","description":"Redirect to Microsoft OAuth consent screen.","operationId":"microsoft_login_api_auth_microsoft_login_get","parameters":[{"name":"client","in":"query","required":false,"schema":{"type":"string","description":"'mobile' to finish in the native app, otherwise web","default":"web","title":"Client"},"description":"'mobile' to finish in the native app, otherwise web"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/microsoft/callback":{"get":{"tags":["oauth"],"summary":"Microsoft Callback","description":"Handle Microsoft OAuth callback.","operationId":"microsoft_callback_api_auth_microsoft_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/oauth/status":{"get":{"tags":["oauth"],"summary":"Oauth Status","description":"Check which OAuth providers are configured.","operationId":"oauth_status_api_auth_oauth_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pages":{"get":{"tags":["pages"],"summary":"List Pages","description":"List all non-deleted pages for the current user (flat list).","operationId":"list_pages_api_pages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter pages by folder","title":"Folder Id"},"description":"Filter pages by folder"},{"name":"slim","in":"query","required":false,"schema":{"type":"boolean","description":"Return minimal metadata only (id, title, folder_id, parent_id, tags, type)","default":false,"title":"Slim"},"description":"Return minimal metadata only (id, title, folder_id, parent_id, tags, type)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pages"],"summary":"Create Page","operationId":"create_page_api_pages_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/search":{"get":{"tags":["pages"],"summary":"Search Pages","operationId":"search_pages_api_pages_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/tags/suggestions":{"get":{"tags":["pages"],"summary":"Get Tag Suggestions","description":"Get tag suggestions including preset tags, user-defined tags, and tags used in pages.\n\nReturns:\n- preset_tags: The standard preset tags with their colors\n- custom_tags: User-defined tags with metadata (name, color, icon)\n- all_tags: Combined list of tag names\n- tag_metadata: Dict mapping tag names to their metadata","operationId":"get_tag_suggestions_api_pages_tags_suggestions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/tags":{"post":{"tags":["pages"],"summary":"Create Tag","description":"Create a custom tag definition with optional color and icon.\n\n- tag_name: The tag name to create\n- color: Tag color (gray, red, orange, yellow, green, cyan, blue, purple, pink)\n- icon: Optional emoji icon for the tag\n\nReturns the created tag.","operationId":"create_tag_api_pages_tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_name","in":"query","required":true,"schema":{"type":"string","title":"Tag Name"}},{"name":"color","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"gray","title":"Color"}},{"name":"icon","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/tags/{tag_name}":{"put":{"tags":["pages"],"summary":"Update Tag","description":"Update a custom tag's color, icon, or name.\n\n- tag_name: The tag to update\n- color: New color (gray, red, orange, yellow, green, cyan, blue, purple, pink)\n- icon: New emoji icon (or empty string to remove)\n- new_name: Rename the tag (also updates all pages)\n\nReturns the updated tag.","operationId":"update_tag_api_pages_tags__tag_name__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_name","in":"path","required":true,"schema":{"type":"string","title":"Tag Name"}},{"name":"color","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},{"name":"icon","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},{"name":"new_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pages"],"summary":"Delete Tag","description":"Delete a tag from all pages and from custom tag definitions.\n\n- tag_name: The tag to delete\n- folder_id: Optional folder to limit the scope of page deletion\n\nNote: Preset tags can be deleted from pages but will still appear in suggestions.\n\nReturns the number of pages updated.","operationId":"delete_tag_api_pages_tags__tag_name__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_name","in":"path","required":true,"schema":{"type":"string","title":"Tag Name"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/tags/rename":{"post":{"tags":["pages"],"summary":"Rename Tag","description":"Rename a tag across all pages and in custom tags.\n\n- old_name: The current tag name to rename\n- new_name: The new tag name\n- folder_id: Optional folder to limit the scope of page renaming\n\nReturns the number of pages updated.","operationId":"rename_tag_api_pages_tags_rename_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"old_name","in":"query","required":true,"schema":{"type":"string","title":"Old Name"}},{"name":"new_name","in":"query","required":true,"schema":{"type":"string","title":"New Name"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/tree":{"get":{"tags":["pages"],"summary":"Get Page Tree","description":"Get non-deleted pages for the current user as a hierarchical tree structure.","operationId":"get_page_tree_api_pages_tree_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PageTreeNode"},"type":"array","title":"Response Get Page Tree Api Pages Tree Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pages/recent":{"get":{"tags":["pages"],"summary":"List Recent Pages","description":"Most recently edited (or created) pages across everything the user can\naccess. Agents create and edit pages anywhere in the tree; this is the\nshortcut for finding what just changed without hunting the hierarchy.","operationId":"list_recent_pages_api_pages_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"'edited' (updated_at) or 'created' (created_at)","default":"edited","title":"Sort"},"description":"'edited' (updated_at) or 'created' (created_at)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RecentPageItem"},"title":"Response List Recent Pages Api Pages Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/trash":{"get":{"tags":["pages"],"summary":"List Trash","description":"List all deleted pages for the current user (trash).","operationId":"list_trash_api_pages_trash_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PageResponse"},"type":"array","title":"Response List Trash Api Pages Trash Get"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["pages"],"summary":"Empty Trash","description":"Permanently delete all pages in trash. Cannot be undone.","operationId":"empty_trash_api_pages_trash_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/pages/{page_id}":{"get":{"tags":["pages"],"summary":"Get Page","operationId":"get_page_api_pages__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageWithBlocks"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["pages"],"summary":"Update Page","operationId":"update_page_api_pages__page_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pages"],"summary":"Delete Page","description":"Soft delete a page (move to trash). Requires owner or admin permission.","operationId":"delete_page_api_pages__page_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page_id}/move":{"post":{"tags":["pages"],"summary":"Move Page","description":"Move a page to a new parent or reorder within siblings.\n\nSupports merge (moving root page under another project) and split\n(promoting child page to root with a new folder).","operationId":"move_page_api_pages__page_id__move_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"new_parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"New Parent Id"}},{"name":"new_order","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"New Order"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageMoveRequest"},{"type":"null"}],"title":"Move Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page_id}/restore":{"post":{"tags":["pages"],"summary":"Restore Page","description":"Restore a deleted page from trash.","operationId":"restore_page_api_pages__page_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page_id}/permanent":{"delete":{"tags":["pages"],"summary":"Permanent Delete Page","description":"Permanently delete a page and all its blocks. Cannot be undone.","operationId":"permanent_delete_page_api_pages__page_id__permanent_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/find-by-path":{"post":{"tags":["folders"],"summary":"Find Folder By Path","description":"Find a folder by its root_path.","operationId":"find_folder_by_path_api_folders_find_by_path_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/folders":{"get":{"tags":["folders"],"summary":"List Folders","description":"List all folders for the current user, optionally with their pages.","operationId":"list_folders_api_folders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived folders","default":false,"title":"Include Archived"},"description":"Include archived folders"},{"name":"slim","in":"query","required":false,"schema":{"type":"boolean","description":"Return folders without pages (much faster)","default":false,"title":"Slim"},"description":"Return folders without pages (much faster)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["folders"],"summary":"Create Folder","description":"Create a new folder.","operationId":"create_folder_api_folders_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/search":{"get":{"tags":["folders"],"summary":"Search Folder","description":"Find a folder by path, git URL, or name.\n\nArgs:\n    query: The search value\n    type: One of:\n        - 'path': Search by local filesystem root_path\n        - 'url': Search by git remote URL (e.g., https://github.com/user/repo)\n        - 'name': Search by folder name (partial match)","operationId":"search_folder_api_folders_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"The search value","title":"Query"},"description":"The search value"},{"name":"type","in":"query","required":true,"schema":{"type":"string","description":"Search type: 'path' (local filesystem), 'url' (git remote URL), or 'name' (folder name text search)","title":"Type"},"description":"Search type: 'path' (local filesystem), 'url' (git remote URL), or 'name' (folder name text search)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/by-path":{"get":{"tags":["folders"],"summary":"Get Folder By Path","description":"Find a folder by its root_path (legacy endpoint, use /search instead).","operationId":"get_folder_by_path_api_folders_by_path_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"root_path","in":"query","required":true,"schema":{"type":"string","description":"The root path to search for","title":"Root Path"},"description":"The root path to search for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/groups/archive":{"post":{"tags":["folders"],"summary":"Archive Group","description":"Archive every active project in a group. Nothing is deleted; the projects keep\ntheir group so the whole group can be restored together.","operationId":"archive_group_api_folders_groups_archive_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupAction"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/folders/groups/restore":{"post":{"tags":["folders"],"summary":"Restore Group","description":"Restore every archived project in a group.","operationId":"restore_group_api_folders_groups_restore_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupAction"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/folders/{folder_id}":{"get":{"tags":["folders"],"summary":"Get Folder","description":"Get a folder with its pages.","operationId":"get_folder_api_folders__folder_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderWithPages"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["folders"],"summary":"Update Folder","description":"Update a folder.","operationId":"update_folder_api_folders__folder_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["folders"],"summary":"Delete Folder","description":"Delete a folder. Pages in the folder will be moved to root (no folder).","operationId":"delete_folder_api_folders__folder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/{folder_id}/archive":{"post":{"tags":["folders"],"summary":"Archive Folder","description":"Archive a folder. Archived folders don't count toward the project quota.","operationId":"archive_folder_api_folders__folder_id__archive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/folders/{folder_id}/restore":{"post":{"tags":["folders"],"summary":"Restore Folder","description":"Restore an archived folder.","operationId":"restore_folder_api_folders__folder_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/search":{"get":{"tags":["blocks"],"summary":"Search Blocks","description":"Search over block content using PostgreSQL full-text search with trigram fuzzy matching fallback.\nReturns snippets only; fetch full text via /blocks/{block_id}/slice.\n\nFeatures:\n- Full-text search with stemming (run/running/ran all match)\n- Trigram fuzzy matching for typo tolerance (threshold 0.3)\n- Results ranked by relevance","operationId":"search_blocks_api_blocks_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"page_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/page/{page_id}":{"get":{"tags":["blocks"],"summary":"List Blocks For Page","operationId":"list_blocks_for_page_api_blocks_page__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockResponse"},"title":"Response List Blocks For Page Api Blocks Page  Page Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blocks"],"summary":"Create Block","operationId":"create_block_api_blocks_page__page_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/page/{page_id}/summary":{"get":{"tags":["blocks"],"summary":"List Block Summaries","description":"Lightweight block listing without heavy props; includes size hints.","operationId":"list_block_summaries_api_blocks_page__page_id__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockSummary"},"title":"Response List Block Summaries Api Blocks Page  Page Id  Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/{block_id}":{"get":{"tags":["blocks"],"summary":"Get Block","operationId":"get_block_api_blocks__block_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blocks"],"summary":"Update Block","operationId":"update_block_api_blocks__block_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blocks"],"summary":"Delete Block","operationId":"delete_block_api_blocks__block_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/{block_id}/slice":{"get":{"tags":["blocks"],"summary":"Get Block Slice","description":"Fetch a slice of a block's content for large payloads.","operationId":"get_block_slice_api_blocks__block_id__slice_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":8000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockContentSlice"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/{block_id}/history":{"get":{"tags":["blocks"],"summary":"Get Block History","description":"Get version history for a block. Requires Pro tier.","operationId":"get_block_history_api_blocks__block_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockVersionResponse"},"title":"Response Get Block History Api Blocks  Block Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/{block_id}/restore/{version_number}":{"post":{"tags":["blocks"],"summary":"Restore Block Version","description":"Restore a block to a specific version. Requires Pro tier.","operationId":"restore_block_version_api_blocks__block_id__restore__version_number__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"version_number","in":"path","required":true,"schema":{"type":"integer","title":"Version Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blocks/page/{page_id}/reorder":{"post":{"tags":["blocks"],"summary":"Reorder Blocks","operationId":"reorder_blocks_api_blocks_page__page_id__reorder_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockReorder"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockResponse"},"title":"Response Reorder Blocks Api Blocks Page  Page Id  Reorder Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/graphs":{"get":{"tags":["graphs"],"summary":"List Graphs","description":"List graphs owned by the current user.","operationId":"list_graphs_api_graphs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GraphResponse"},"type":"array","title":"Response List Graphs Api Graphs Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["graphs"],"summary":"Create Graph","description":"Create a new graph owned by the current user.","operationId":"create_graph_api_graphs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/graphs/{graph_id}":{"get":{"tags":["graphs"],"summary":"Get Graph","description":"Get a specific graph if user has access.","operationId":"get_graph_api_graphs__graph_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["graphs"],"summary":"Update Graph","description":"Update a graph if user has write access (owner or share with edit/admin).","operationId":"update_graph_api_graphs__graph_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Graph Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["graphs"],"summary":"Delete Graph","description":"Delete a graph if user has write access (owner or share with edit/admin).","operationId":"delete_graph_api_graphs__graph_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Graph Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks":{"get":{"tags":["tasks"],"summary":"List Tasks","description":"List tasks from checklist blocks across user's pages.","operationId":"list_tasks_api_tasks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: todo, done","title":"Status"},"description":"Filter by status: todo, done"},{"name":"assigned_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by assignment: agent, human","title":"Assigned To"},"description":"Filter by assignment: agent, human"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TaskResponse"},"title":"Response List Tasks Api Tasks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/page/{page_id}":{"post":{"tags":["tasks"],"summary":"Create Task","description":"Create a new agent task on a page. Finds or creates a ctlsurf_task block.","operationId":"create_task_api_tasks_page__page_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/{block_id}/{task_id}":{"patch":{"tags":["tasks"],"summary":"Update Task","description":"Update a specific task within a checklist or ctlsurf_task block.","operationId":"update_task_api_tasks__block_id___task_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tasks"],"summary":"Delete Task","description":"Delete a specific task from a checklist or ctlsurf_task block.","operationId":"delete_task_api_tasks__block_id___task_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tasks/folder/{folder_id}":{"get":{"tags":["tasks"],"summary":"Get Folder Agent Tasks","description":"Get all agent tasks (ctlsurf_task) in a folder, grouped by page.","operationId":"get_folder_agent_tasks_api_tasks_folder__folder_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"include_done","in":"query","required":false,"schema":{"type":"boolean","description":"Include completed tasks","default":true,"title":"Include Done"},"description":"Include completed tasks"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderAgentTasks"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/api-keys":{"get":{"tags":["api-keys"],"summary":"List Api Keys","description":"List all API keys for the current user (without the actual key values).","operationId":"list_api_keys_api_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Response List Api Keys Api Api Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["api-keys"],"summary":"Create Api Key","description":"Create a new API key. The full key is only returned once.","operationId":"create_api_key_api_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/api-keys/{key_id}":{"get":{"tags":["api-keys"],"summary":"Get Api Key","description":"Get details about a specific API key.","operationId":"get_api_key_api_api_keys__key_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["api-keys"],"summary":"Update Api Key","description":"Update an API key (e.g., deactivate it).","operationId":"update_api_key_api_api_keys__key_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["api-keys"],"summary":"Delete Api Key","description":"Delete an API key.","operationId":"delete_api_key_api_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/export/page/{page_id}/pdf":{"get":{"tags":["export"],"summary":"Export Page Pdf Endpoint","description":"Export a page to PDF.\n\n- **page_id**: UUID of the page to export\n- **include_children**: If true, includes all sub-pages the caller can read","operationId":"export_page_pdf_endpoint_api_export_page__page_id__pdf_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"include_children","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Children"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/export/graph/{graph_id}/png":{"get":{"tags":["export"],"summary":"Export Graph Png","description":"Export a graph as PNG image.\n\n- **graph_id**: UUID of the graph to export","operationId":"export_graph_png_api_export_graph__graph_id__png_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/export/page/{page_id}/docx":{"get":{"tags":["export"],"summary":"Export Page Docx Endpoint","description":"Export a page to Word document (.docx).\n\n- **page_id**: UUID of the page to export\n- **include_children**: If true, includes all sub-pages the caller can read","operationId":"export_page_docx_endpoint_api_export_page__page_id__docx_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"include_children","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Children"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/selection-tasks":{"post":{"tags":["selection-tasks"],"summary":"Create Selection Task","description":"Create a new selection task from a notebook selection.","operationId":"create_selection_task_api_selection_tasks_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["selection-tasks"],"summary":"List Selection Tasks","description":"List selection tasks with optional filtering.","operationId":"list_selection_tasks_api_selection_tasks_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: pending, in_progress, completed, cancelled","title":"Status"},"description":"Filter by status: pending, in_progress, completed, cancelled"},{"name":"root_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by codebase root path","title":"Root Path"},"description":"Filter by codebase root path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SelectionTaskResponse"},"title":"Response List Selection Tasks Api Selection Tasks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/selection-tasks/{task_id}":{"get":{"tags":["selection-tasks"],"summary":"Get Selection Task","description":"Get a specific selection task.","operationId":"get_selection_task_api_selection_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["selection-tasks"],"summary":"Update Selection Task","description":"Update a selection task (status, add note, complete).","operationId":"update_selection_task_api_selection_tasks__task_id__patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["selection-tasks"],"summary":"Delete Selection Task","description":"Delete a selection task.","operationId":"delete_selection_task_api_selection_tasks__task_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/selection-tasks/{task_id}/claim":{"post":{"tags":["selection-tasks"],"summary":"Claim Selection Task","description":"Claim a task (mark as in_progress). For agents to indicate they're working on it.","operationId":"claim_selection_task_api_selection_tasks__task_id__claim_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/selection-tasks/{task_id}/complete":{"post":{"tags":["selection-tasks"],"summary":"Complete Selection Task","description":"Mark a task as completed with summary.","operationId":"complete_selection_task_api_selection_tasks__task_id__complete_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"summary","in":"query","required":true,"schema":{"type":"string","description":"Summary of work completed","title":"Summary"},"description":"Summary of work completed"},{"name":"result_page_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Optional page created as result","title":"Result Page Id"},"description":"Optional page created as result"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectionTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search":{"get":{"tags":["search"],"summary":"Unified Search","description":"Unified search across pages (by title/root_path) and blocks (by title/content).\n\nReturns both page matches and block matches, ranked by relevance.\nUses PostgreSQL full-text search with trigram fuzzy matching fallback.","operationId":"unified_search_api_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max results per category","default":20,"title":"Limit"},"description":"Max results per category"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/upload":{"post":{"tags":["files"],"summary":"Upload File","description":"Upload a file to storage.\n\nSupports images (PNG, JPG, GIF, WebP), PDFs, and Office documents.\nMax file size: 10 MB.","operationId":"upload_file_api_files_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Associate with a page","title":"Page Id"},"description":"Associate with a page"},{"name":"block_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Associate with a block","title":"Block Id"},"description":"Associate with a block"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_files_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/request-upload":{"post":{"tags":["files"],"summary":"Request Upload Url","description":"Get a presigned URL for direct file upload.\n\nThis allows clients to upload files directly to S3/MinIO without\npassing the file data through the API server, saving bandwidth and tokens.\n\nFlow:\n1. Call this endpoint to get upload_url and file_id\n2. PUT the file directly to upload_url using curl or similar\n3. Call /files/confirm-upload to create the database record","operationId":"request_upload_url_api_files_request_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/files/confirm-upload":{"post":{"tags":["files"],"summary":"Confirm Upload","description":"Confirm a completed upload and create the database record.\n\nCall this after successfully uploading a file to the presigned URL.\nVerifies the file exists in storage before creating the record.\nOptionally creates a file block on the specified page.","operationId":"confirm_upload_api_files_confirm_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmUploadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/files/{file_id}":{"get":{"tags":["files"],"summary":"Get File","description":"Get file metadata by ID.","operationId":"get_file_api_files__file_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["files"],"summary":"Delete File","description":"Delete a file.","operationId":"delete_file_api_files__file_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/{file_id}/content":{"get":{"tags":["files"],"summary":"Get File Content","description":"Get raw file content. Accepts token via header or query param for img/iframe tags.","operationId":"get_file_content_api_files__file_id__content_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"JWT token for img/iframe requests","title":"Token"},"description":"JWT token for img/iframe requests"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/{file_id}/download":{"get":{"tags":["files"],"summary":"Download File","description":"Get a presigned URL for file download.","operationId":"download_file_api_files__file_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/{file_id}/text":{"get":{"tags":["files"],"summary":"Get File Text","description":"Get extracted text content from a file.","operationId":"get_file_text_api_files__file_id__text_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileTextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/page/{page_id}":{"get":{"tags":["files"],"summary":"List Page Files","description":"List all files associated with a page.","operationId":"list_page_files_api_files_page__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/files/block/{block_id}":{"get":{"tags":["files"],"summary":"List Block Files","description":"List all files associated with a block.","operationId":"list_block_files_api_files_block__block_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/pages/{page_id}":{"post":{"tags":["shares"],"summary":"Share Page","description":"Share a page with another user. Supports different scopes:\n- single: Just this page\n- with_children: This page and all sub-pages\n- folder: Share the entire folder (if page belongs to one)","operationId":"share_page_api_shares_pages__page_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageShareCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["shares"],"summary":"List Page Shares","description":"List all shares for a page. Only the owner can see this.","operationId":"list_page_shares_api_shares_pages__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageShareListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/pages/{page_id}/{share_id}":{"patch":{"tags":["shares"],"summary":"Update Page Share","description":"Update a page share's permission. Only the owner can do this.","operationId":"update_page_share_api_shares_pages__page_id___share_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageShareUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["shares"],"summary":"Revoke Page Share","description":"Revoke a page share. Owner or the shared user can do this.","operationId":"revoke_page_share_api_shares_pages__page_id___share_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/folders/{folder_id}":{"post":{"tags":["shares"],"summary":"Share Folder","description":"Share a folder with another user.","operationId":"share_folder_api_shares_folders__folder_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderShareCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["shares"],"summary":"List Folder Shares","description":"List all shares for a folder. Only the owner can see this.","operationId":"list_folder_shares_api_shares_folders__folder_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderShareListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/folders/{folder_id}/{share_id}":{"patch":{"tags":["shares"],"summary":"Update Folder Share","description":"Update a folder share. Only the owner can do this.","operationId":"update_folder_share_api_shares_folders__folder_id___share_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderShareUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["shares"],"summary":"Revoke Folder Share","description":"Revoke a folder share. Owner or the shared user can do this.","operationId":"revoke_folder_share_api_shares_folders__folder_id___share_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/shares/shared-with-me":{"get":{"tags":["shares"],"summary":"Get Shared With Me","description":"Get all pages and folders shared with the current user.","operationId":"get_shared_with_me_api_shares_shared_with_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedWithMeResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/shares/my-shares":{"get":{"tags":["shares"],"summary":"Get My Shares","description":"Get all pages and folders the current user has shared with others.","operationId":"get_my_shares_api_shares_my_shares_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MySharesResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/skills":{"get":{"tags":["skills"],"summary":"List Skills","description":"List skills accessible to the current user.\n\n- Personal skills: only your own\n- Project skills: yours in the specified folder\n- Public skills: everyone's public skills\n\nBy default, only active skills are returned. Pass include_inactive=true to see all.","operationId":"list_skills_api_skills_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scope: personal, project, public","title":"Scope"},"description":"Filter by scope: personal, project, public"},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by folder (for project skills)","title":"Folder Id"},"description":"Filter by folder (for project skills)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive skills (for management UI)","default":false,"title":"Include Inactive"},"description":"Include inactive skills (for management UI)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["skills"],"summary":"Create Skill","description":"Create a new skill.","operationId":"create_skill_api_skills_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/my":{"get":{"tags":["skills"],"summary":"List My Skills","description":"List all skills owned by the current user (personal + project + linked).\n\nBy default includes inactive skills (for management). Pass include_inactive=false for agent use.\nExcludes verified/official skills as those belong to the marketplace.\n\nWhen folder_id is specified, returns skills that are either:\n- Owned by that folder (folder_id = specified folder)\n- Linked to that folder via skill_folders junction table","operationId":"list_my_skills_api_skills_my_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by folder for project skills (includes linked skills)","title":"Folder Id"},"description":"Filter by folder for project skills (includes linked skills)"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive skills (default true for management)","default":true,"title":"Include Inactive"},"description":"Include inactive skills (default true for management)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/folder/{folder_id}":{"get":{"tags":["skills"],"summary":"List Folder Skills","description":"List skills for a specific folder (project skills + linked skills + optionally personal skills).\n\nReturns:\n- Project-scoped skills owned by this folder\n- Skills linked to this folder via skill_folders junction table\n- User's personal skills (if include_personal=true)\n\nBy default, only active skills are returned.","operationId":"list_folder_skills_api_skills_folder__folder_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"include_personal","in":"query","required":false,"schema":{"type":"boolean","description":"Include user's personal skills","default":true,"title":"Include Personal"},"description":"Include user's personal skills"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive skills","default":false,"title":"Include Inactive"},"description":"Include inactive skills"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/marketplace":{"get":{"tags":["skills"],"summary":"List Marketplace Skills","description":"List all public skills in the marketplace.\n\nReturns public skills sorted by:\n1. Verified/official skills first\n2. Then by most recently updated\n\nOnly active skills are returned.","operationId":"list_marketplace_skills_api_skills_marketplace_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/search":{"get":{"tags":["skills"],"summary":"Search Skills","description":"Search skills by name and description.\n\nBy default, only active skills are returned.","operationId":"search_skills_api_skills_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Search query","title":"Q"},"description":"Search query"},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scope","title":"Scope"},"description":"Filter by scope"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive skills","default":false,"title":"Include Inactive"},"description":"Include inactive skills"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/shared-with-me":{"get":{"tags":["skills"],"summary":"Get Skills Shared With Me","description":"Get all skills shared with the current user (direct shares only).","operationId":"get_skills_shared_with_me_api_skills_shared_with_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/skills/{skill_id}":{"get":{"tags":["skills"],"summary":"Get Skill","description":"Get a skill by ID.\n\nAccess is granted if user has any access level (owner, admin, edit, view).\nThis includes direct shares and folder inheritance.","operationId":"get_skill_api_skills__skill_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["skills"],"summary":"Update Skill","description":"Update a skill.\n\nRequires edit or higher permission (owner, admin, edit).","operationId":"update_skill_api_skills__skill_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["skills"],"summary":"Delete Skill","description":"Delete a skill.\n\nOnly the owner can delete a skill. This also removes all shares.","operationId":"delete_skill_api_skills__skill_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/toggle-active":{"post":{"tags":["skills"],"summary":"Toggle Skill Active","description":"Toggle a skill's active state.\n\nOnly the owner can toggle the active state.\nInactive skills are hidden from agents but still visible in the management UI.","operationId":"toggle_skill_active_api_skills__skill_id__toggle_active_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/fork":{"post":{"tags":["skills"],"summary":"Fork Skill","description":"Fork a skill to your library.\n\nCreates a copy of the skill in your personal or project library.\nThe original skill is tracked via forked_from_id.\n\nYou can fork any skill you have view access to (including shared skills).","operationId":"fork_skill_api_skills__skill_id__fork_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillFork"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/shares":{"post":{"tags":["skills"],"summary":"Share Skill","description":"Share a skill with another user.\n\nOnly the skill owner or users with admin permission can share.","operationId":"share_skill_api_skills__skill_id__shares_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillShareCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["skills"],"summary":"List Skill Shares","description":"List all shares for a skill.\n\nOnly owner or users with admin permission can view shares.","operationId":"list_skill_shares_api_skills__skill_id__shares_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillShareListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/shares/{share_id}":{"put":{"tags":["skills"],"summary":"Update Skill Share","description":"Update a skill share's permission level.","operationId":"update_skill_share_api_skills__skill_id__shares__share_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillShareUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["skills"],"summary":"Revoke Skill Share","description":"Revoke a skill share.","operationId":"revoke_skill_share_api_skills__skill_id__shares__share_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/link":{"post":{"tags":["skills"],"summary":"Link Skill To Folder","description":"Link a skill to an additional project folder.\n\nThis makes the skill available in the target folder without moving it.\nThe skill can be linked to multiple folders.\n\nOnly the skill owner can link their skills to projects they own.","operationId":"link_skill_to_folder_api_skills__skill_id__link_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/link/{folder_id}":{"delete":{"tags":["skills"],"summary":"Unlink Skill From Folder","description":"Unlink a skill from a project folder.\n\nRemoves the skill from the folder without deleting the skill.\nOnly the skill owner can unlink their skills.","operationId":"unlink_skill_from_folder_api_skills__skill_id__link__folder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/skills/{skill_id}/links":{"get":{"tags":["skills"],"summary":"List Skill Links","description":"List all folder links for a skill.\n\nOnly the skill owner can view links.","operationId":"list_skill_links_api_skills__skill_id__links_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillLinkResponse"},"title":"Response List Skill Links Api Skills  Skill Id  Links Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/links/backlinks/{page_id}":{"get":{"tags":["links"],"summary":"Get Backlinks","description":"Get all pages/blocks that link to this page.\n\nReturns a list of source pages, blocks, and link text for each incoming link.","operationId":"get_backlinks_api_links_backlinks__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacklinksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/links/outlinks/{page_id}":{"get":{"tags":["links"],"summary":"Get Outlinks","description":"Get all pages this page links to.\n\nReturns a list of target pages and the link text used for each outgoing link.","operationId":"get_outlinks_api_links_outlinks__page_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutlinksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/schema":{"get":{"tags":["datastore"],"summary":"Get Schema","description":"Get the column schema for a datastore block.","operationId":"get_schema_api_datastore__block_id__schema_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["datastore"],"summary":"Update Schema","description":"Update the column schema for a datastore block.","operationId":"update_schema_api_datastore__block_id__schema_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/rows":{"post":{"tags":["datastore"],"summary":"Add Row","description":"Add a row to a datastore block.","operationId":"add_row_api_datastore__block_id__rows_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["datastore"],"summary":"Query Rows","description":"Query rows from a datastore block with optional filtering, sorting, and pagination.","operationId":"query_rows_api_datastore__block_id__rows_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"where","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"JSON-encoded filter object, e.g. {\"Status\": \"scouted\"} or {\"Score\": {\"$gt\": 50}}","title":"Where"},"description":"JSON-encoded filter object, e.g. {\"Status\": \"scouted\"} or {\"Score\": {\"$gt\": 50}}"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Column name to sort by","title":"Order By"},"description":"Column name to sort by"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort direction: asc or desc","default":"asc","title":"Order"},"description":"Sort direction: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"select","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated column names to return","title":"Select"},"description":"Comma-separated column names to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["datastore"],"summary":"Update Rows","description":"Bulk-update rows matching a filter. Body: {where: {...}, data: {Column: value, ...}}.\n\nOnly the provided fields are merged into each matched row (like update_row). An empty/omitted\n`where` matches all rows in the datastore.","operationId":"update_rows_api_datastore__block_id__rows_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/rows/{row_id}":{"put":{"tags":["datastore"],"summary":"Update Row","description":"Update a row in a datastore block. Merges provided data with existing.","operationId":"update_row_api_datastore__block_id__rows__row_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"row_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Row Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["datastore"],"summary":"Delete Row","description":"Delete a row from a datastore block.","operationId":"delete_row_api_datastore__block_id__rows__row_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"row_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Row Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/export":{"get":{"tags":["datastore"],"summary":"Export Rows","description":"Every matching row as an Excel workbook, CSV, or tab-separated text (for pasting into Excel).","operationId":"export_rows_api_datastore__block_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(xlsx|csv|tsv)$","default":"xlsx","title":"Format"}},{"name":"where","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Same JSON filter as GET /rows","title":"Where"},"description":"Same JSON filter as GET /rows"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By"}},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"asc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/ingest-url":{"post":{"tags":["datastore"],"summary":"Create Ingest Url","description":"Mint a short-lived signed token for a bulk-ingest operation on this datastore.\n\nThe caller embeds the token in the ingest URL and curls row data directly to\nPOST /datastore/ingest, avoiding the token cost of sending rows through MCP.","operationId":"create_ingest_url_api_datastore__block_id__ingest_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/ingest":{"post":{"tags":["datastore"],"summary":"Ingest","description":"Bulk-ingest rows via a signed token (see POST /{block_id}/ingest-url).\n\nBody is NDJSON (one JSON object per line) or a JSON array; the operation mode\n(insert/upsert/replace/delete) is fixed by the token. For delete, the body is a list of\nrow ids (or key-column values when the token carries a key_column).\nReturns {inserted, updated, deleted, errors:[{line, reason}]}.","operationId":"ingest_api_datastore_ingest_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed datastore ingest token (alternative to Authorization header)","title":"T"},"description":"Signed datastore ingest token (alternative to Authorization header)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datastore/{block_id}/rows/delete":{"post":{"tags":["datastore"],"summary":"Delete Rows","description":"Bulk-delete rows by filter or explicit ids. Body: {where: {...}} or {row_ids: [...]}.\n\nRequires one of `where` or `row_ids` (no empty-body \"delete everything\" footgun).","operationId":"delete_rows_api_datastore__block_id__rows_delete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/activity/folder/{folder_id}":{"get":{"tags":["activity"],"summary":"Get Folder Activity","description":"Get activity log for a folder. Returns task lifecycle events.","operationId":"get_folder_activity_api_activity_folder__folder_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by action type","title":"Action"},"description":"Filter by action type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/metrics":{"get":{"tags":["admin"],"summary":"Get Admin Metrics","description":"Get comprehensive system metrics for admin dashboard.\nRequires admin privileges.","operationId":"get_admin_metrics_api_admin_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/activation-funnel":{"get":{"tags":["admin"],"summary":"Get Activation Funnel","description":"Activation funnel: signup -> email verified -> API key created -> first MCP call.\n\nComputed from existing timestamps (users, api_keys, mcp_tool_calls), so it\ncovers all historical users with no new event logging required.\nTime-to-first-call is the north-star onboarding metric.","operationId":"get_activation_funnel_api_admin_activation_funnel_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":365,"minimum":1},{"type":"null"}],"description":"Only include users who signed up in the last N days","title":"Days"},"description":"Only include users who signed up in the last N days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"List Users","description":"List all users with pagination and basic stats.\nRequires admin privileges.","operationId":"list_users_api_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"get":{"tags":["admin"],"summary":"Get User Details","description":"Get detailed stats for a specific user.\nRequires admin privileges.","operationId":"get_user_details_api_admin_users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete User","description":"Delete a user and all their data.\nCannot delete self or other admins.","operationId":"delete_user_api_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/toggle-admin":{"post":{"tags":["admin"],"summary":"Toggle User Admin","description":"Toggle admin status for a user.\nCannot remove admin from self or last admin.","operationId":"toggle_user_admin_api_admin_users__user_id__toggle_admin_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/suspend":{"post":{"tags":["admin"],"summary":"Suspend User","description":"Suspend a user account.\nCannot suspend self or other admins.","operationId":"suspend_user_api_admin_users__user_id__suspend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/unsuspend":{"post":{"tags":["admin"],"summary":"Unsuspend User","description":"Unsuspend a user account.","operationId":"unsuspend_user_api_admin_users__user_id__unsuspend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/upgrade":{"post":{"tags":["admin"],"summary":"Upgrade User To Pro","description":"Upgrade a user to Pro tier.\nRequires billing_admin or super_admin role.","operationId":"upgrade_user_to_pro_api_admin_users__user_id__upgrade_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/downgrade":{"post":{"tags":["admin"],"summary":"Downgrade User To Free","description":"Downgrade a user to Free tier.\nRequires billing_admin or super_admin role.","operationId":"downgrade_user_to_free_api_admin_users__user_id__downgrade_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/upgrade-history":{"get":{"tags":["admin"],"summary":"Get User Upgrade History","description":"Get upgrade/downgrade history for a user.\nRequires billing_admin or super_admin role.","operationId":"get_user_upgrade_history_api_admin_users__user_id__upgrade_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/set-admin-role":{"post":{"tags":["admin"],"summary":"Set User Admin Role","description":"Set admin role for a user.\nRequires super_admin role.","operationId":"set_user_admin_role_api_admin_users__user_id__set_admin_role_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Role: super_admin, billing_admin, support_admin, or null to remove","title":"Role"},"description":"Role: super_admin, billing_admin, support_admin, or null to remove"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/organizations":{"get":{"tags":["admin"],"summary":"List Organizations Admin","description":"List organizations for the promote-to-Business picker. Super admin only.","operationId":"list_organizations_admin_api_admin_organizations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/users/{user_id}/promote-business":{"post":{"tags":["admin"],"summary":"Promote User To Business","description":"Promote a user to a Business organization. Super admin only.\n\nmode=\"create\" -> create a new Business org with the user as owner.\nmode=\"add\"    -> add the user to an existing org (default role: member).\nSuper admins bypass the seat cap here by design.","operationId":"promote_user_to_business_api_admin_users__user_id__promote_business_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteBusinessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orgs/{org_id}/billing/attach":{"post":{"tags":["admin"],"summary":"Attach Org Billing","description":"Attach seat billing to an existing organization.\n\nOrgs are created by promote-business, which is deliberate: the billing\nrelationship is established afterwards rather than at signup. This is that\nsecond step.\n\nTwo modes, because both are real:\n\n- manual_only sets seats_purchased with no provider involved. Comped orgs,\n  self-hosted deployments, and anyone invoiced outside Stripe live here, and\n  they are a supported configuration rather than a broken one.\n- Otherwise a Stripe customer and a quantity-N subscription are created. The\n  subscription may come back `incomplete` when the customer has no payment\n  method yet; that is expected, not a failure. The response carries the\n  status so the operator knows to send the owner a payment link.\n\nNever lowers seats below what is already assigned: doing so would put the\norg over its own limit the instant billing was attached.","operationId":"attach_org_billing_api_admin_orgs__org_id__billing_attach_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachBillingRequest","default":{"manual_only":false,"comped":true}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orgs/{org_id}/billing":{"get":{"tags":["admin"],"summary":"Get Org Billing","description":"Show an org's seat and billing state, for support.","operationId":"get_org_billing_api_admin_orgs__org_id__billing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/llm-config":{"get":{"tags":["admin"],"summary":"Llm Config","operationId":"llm_config_api_admin_services_llm_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin"],"summary":"Update Llm Config","operationId":"update_llm_config_api_admin_services_llm_config_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/llm-config/validate":{"post":{"tags":["admin"],"summary":"Validate Llm Config","operationId":"validate_llm_config_api_admin_services_llm_config_validate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/speech-config":{"get":{"tags":["admin"],"summary":"Speech Config","operationId":"speech_config_api_admin_services_speech_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin"],"summary":"Update Speech Config","operationId":"update_speech_config_api_admin_services_speech_config_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/speech-config/validate/{kind}":{"post":{"tags":["admin"],"summary":"Validate Speech Config","operationId":"validate_speech_config_api_admin_services_speech_config_validate__kind__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kind","in":"path","required":true,"schema":{"enum":["listen","speak"],"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/page-agent-config":{"get":{"tags":["admin"],"summary":"Agent Config","operationId":"agent_config_api_admin_services_page_agent_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin"],"summary":"Update Agent Config","operationId":"update_agent_config_api_admin_services_page_agent_config_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/page-agent-pilot":{"get":{"tags":["admin"],"summary":"Agent Pilot","operationId":"agent_pilot_api_admin_services_page_agent_pilot_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["admin"],"summary":"Save Agent Pilot","operationId":"save_agent_pilot_api_admin_services_page_agent_pilot_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/page-agent-pilot/organizations":{"get":{"tags":["admin"],"summary":"Agent Pilot Organizations","operationId":"agent_pilot_organizations_api_admin_services_page_agent_pilot_organizations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Q"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/page-agent-config/validate":{"post":{"tags":["admin"],"summary":"Validate Agent Config","operationId":"validate_agent_config_api_admin_services_page_agent_config_validate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/services/page-agent-reservations":{"get":{"tags":["admin"],"summary":"Agent Reservations","operationId":"agent_reservations_api_admin_services_page_agent_reservations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"}},{"name":"state","in":"query","required":false,"schema":{"enum":["unresolved","reconciled","overrun"],"type":"string","default":"unresolved","title":"State"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/page-agent-reservations/{reservation_id}":{"get":{"tags":["admin"],"summary":"Agent Reservation","operationId":"agent_reservation_api_admin_services_page_agent_reservations__reservation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reservation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/page-agent-reservations/{reservation_id}/preview":{"post":{"tags":["admin"],"summary":"Preview Agent Receipt","operationId":"preview_agent_receipt_api_admin_services_page_agent_reservations__reservation_id__preview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reservation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/page-agent-reservations/{reservation_id}/reconcile":{"post":{"tags":["admin"],"summary":"Reconcile Agent Receipt","operationId":"reconcile_agent_receipt_api_admin_services_page_agent_reservations__reservation_id__reconcile_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Reservation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/metrics":{"get":{"tags":["admin"],"summary":"Services Metrics","description":"Platform managed-services totals, cost split, trend, and top orgs by spend.","operationId":"services_metrics_api_admin_services_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/orgs":{"get":{"tags":["admin"],"summary":"Services Orgs","description":"Per-org managed-services table: seats, minutes vs included, cost, cap usage.","operationId":"services_orgs_api_admin_services_orgs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/events":{"get":{"tags":["admin"],"summary":"Services Events","description":"Platform operational-event feed: counts by kind + recent failures across all orgs.\n\nOperational (no cost data), so visible to support_admin and up.","operationId":"services_events_api_admin_services_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/sse":{"get":{"tags":["mcp-sse"],"summary":"Sse Endpoint","description":"SSE endpoint for MCP connections.\n\nThe client connects here to establish an SSE stream.\nAfter connection, server sends endpoint URL for posting messages.","operationId":"sse_endpoint_api_mcp_sse_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mcp/messages/{session_id}":{"post":{"tags":["mcp-sse"],"summary":"Post Message","description":"Endpoint for clients to send MCP messages.\n\nHandles JSON-RPC style messages for MCP protocol.","operationId":"post_message_api_mcp_messages__session_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/sse-health":{"get":{"tags":["mcp-sse"],"summary":"Sse Health Check","description":"Health check endpoint for the SSE service.","operationId":"sse_health_check_api_mcp_sse_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/mcp/":{"post":{"tags":["mcp"],"summary":"Handle Mcp Message","description":"Handle MCP protocol messages via HTTP transport.\n\nThis endpoint implements the MCP Streamable HTTP transport.\nClients send JSON-RPC 2.0 messages and receive responses.\n\nSupported methods:\n- initialize: Protocol handshake\n- notifications/initialized: Client acknowledgment (notification, no response)\n- tools/list: List available tools\n- tools/call: Execute a tool","operationId":"handle_mcp_message_api_mcp__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mcp":{"post":{"tags":["mcp"],"summary":"Handle Mcp Message","description":"Handle MCP protocol messages via HTTP transport.\n\nThis endpoint implements the MCP Streamable HTTP transport.\nClients send JSON-RPC 2.0 messages and receive responses.\n\nSupported methods:\n- initialize: Protocol handshake\n- notifications/initialized: Client acknowledgment (notification, no response)\n- tools/list: List available tools\n- tools/call: Execute a tool","operationId":"handle_mcp_message_api_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/api/mcp/health":{"get":{"tags":["mcp"],"summary":"Mcp Health","description":"Health check for MCP server.","operationId":"mcp_health_api_mcp_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/mcp/log-tool-call":{"post":{"tags":["mcp"],"summary":"Log Tool Call","description":"Log an MCP tool call for analytics.\n\nThis endpoint is called by the ctlsurf-client to track tool usage.","operationId":"log_tool_call_api_mcp_log_tool_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogToolCallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/usage":{"get":{"tags":["usage"],"summary":"Get Usage","description":"Get current usage stats for the authenticated user.","operationId":"get_usage_api_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/usage/limits":{"get":{"tags":["usage"],"summary":"Get Limits","description":"Get limits for the user's current tier.","operationId":"get_limits_api_usage_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierLimitsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/usage/check/{limit_type}":{"get":{"tags":["usage"],"summary":"Check Usage Limit","description":"Check if user is at or over a specific limit.\n\nArgs:\n    limit_type: One of 'api_calls', 'storage', 'folders'","operationId":"check_usage_limit_api_usage_check__limit_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit_type","in":"path","required":true,"schema":{"type":"string","title":"Limit Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LimitCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/status":{"get":{"tags":["billing"],"summary":"Get Billing Status","description":"Get billing status for the current user.","operationId":"get_billing_status_api_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout session for upgrading to Pro.","operationId":"create_checkout_api_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/portal":{"post":{"tags":["billing"],"summary":"Create Portal","description":"Create a Stripe Customer Portal session for managing subscription.","operationId":"create_portal_api_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.","operationId":"stripe_webhook_api_billing_webhook_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/admin/config":{"get":{"tags":["billing"],"summary":"Get Stripe Config","description":"Get Stripe configuration status (admin only).","operationId":"get_stripe_config_api_billing_admin_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/workers/token-exchange":{"post":{"tags":["workers"],"summary":"Exchange Api Key For Jwt","description":"Exchange an API key for a short-lived auth code (for webview auth).","operationId":"exchange_api_key_for_jwt_api_workers_token_exchange_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/workers/redeem-code":{"post":{"tags":["workers"],"summary":"Redeem Auth Code","description":"Redeem a one-time auth code for JWT tokens. No auth required.","operationId":"redeem_auth_code_api_workers_redeem_code_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workers":{"get":{"tags":["workers"],"summary":"List Workers","description":"List workers for the current user.","operationId":"list_workers_api_workers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workers/{worker_id}":{"get":{"tags":["workers"],"summary":"Get Worker","description":"Get worker details.","operationId":"get_worker_api_workers__worker_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"worker_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Worker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workers"],"summary":"Deregister Worker","description":"Force deregister a worker.","operationId":"deregister_worker_api_workers__worker_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"worker_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Worker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workers/{worker_id}/approve":{"put":{"tags":["workers"],"summary":"Approve Worker","description":"Approve a pending worker.","operationId":"approve_worker_api_workers__worker_id__approve_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"worker_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Worker Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages":{"post":{"tags":["messages"],"summary":"Create Message","description":"Create a message (triggers WS push if worker online).","operationId":"create_message_api_messages_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["messages"],"summary":"List Messages","description":"List messages.","operationId":"list_messages_api_messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages/clear/{folder_id}":{"delete":{"tags":["messages"],"summary":"Clear Messages","description":"Delete all messages for a folder.","operationId":"clear_messages_api_messages_clear__folder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages/{message_id}":{"get":{"tags":["messages"],"summary":"Get Message","description":"Get a message with its children (thread).","operationId":"get_message_api_messages__message_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["messages"],"summary":"Update Message","description":"Update message status.","operationId":"update_message_api_messages__message_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-sessions":{"get":{"tags":["agent-sessions"],"summary":"List Sessions","description":"List agent sessions for the current user.","operationId":"list_sessions_api_agent_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"worker_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Worker Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-sessions"],"summary":"Delete All Sessions","description":"Delete all agent sessions for the user (optionally filtered by folder).","operationId":"delete_all_sessions_api_agent_sessions_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-sessions/{session_id}":{"get":{"tags":["agent-sessions"],"summary":"Get Session","description":"Get agent session details.","operationId":"get_session_api_agent_sessions__session_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-sessions"],"summary":"Delete Session","description":"Delete a single agent session and its S3 log.","operationId":"delete_session_api_agent_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-sessions/{session_id}/log":{"get":{"tags":["agent-sessions"],"summary":"Get Session Log","description":"Fetch the full chat log for a session from S3.","operationId":"get_session_log_api_agent_sessions__session_id__log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent-sessions/delete-bulk":{"post":{"tags":["agent-sessions"],"summary":"Delete Sessions Bulk","description":"Delete multiple agent sessions and their S3 logs.","operationId":"delete_sessions_bulk_api_agent_sessions_delete_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_delete_sessions_bulk_api_agent_sessions_delete_bulk_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/reports/time-tracking":{"get":{"tags":["reports"],"summary":"Time Tracking Report","description":"Aggregate active time across each project's 'Time Tracking' datastore.\n\nRows are read from `datastore_rows` belonging to a `datastore` block titled\n'Time Tracking' on an 'Agent Datastore' dataspace page in a non-archived\nfolder owned by the requesting user.","operationId":"time_tracking_report_api_reports_time_tracking_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive lower bound on row created_at","title":"Start"},"description":"Inclusive lower bound on row created_at"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Exclusive upper bound on row created_at","title":"End"},"description":"Exclusive upper bound on row created_at"},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string","format":"uuid"}},{"type":"null"}],"description":"Filter by one or more folder ids","title":"Folder Id"},"description":"Filter by one or more folder ids"},{"name":"group_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(folder|day|folder_day)$","default":"folder","title":"Group By"}},{"name":"tz","in":"query","required":false,"schema":{"type":"string","description":"IANA timezone for day bucketing (e.g. 'America/Los_Angeles'). Defaults to UTC.","default":"UTC","title":"Tz"},"description":"IANA timezone for day bucketing (e.g. 'America/Los_Angeles'). Defaults to UTC."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/tickets":{"get":{"tags":["reports"],"summary":"Tickets Report","description":"List every ticket across the user's projects.\n\nTickets live in a per-project `Tickets` datastore block (created by\nctlsurf-worker) on the project's `Agent Datastore` dataspace page. Each row\nis one ticket; values are keyed by column id (col_X), so we map ids back to\nnames via the block's `props.columns`.","operationId":"tickets_report_api_reports_tickets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/reports/provenance":{"get":{"tags":["reports"],"summary":"Provenance Report","description":"Provenance report for a project and period, as JSON.","operationId":"provenance_report_api_reports_provenance_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Project (folder) to report on","title":"Folder Id"},"description":"Project (folder) to report on"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive lower bound","title":"Start"},"description":"Inclusive lower bound"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Exclusive upper bound","title":"End"},"description":"Exclusive upper bound"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/provenance/pdf":{"get":{"tags":["reports"],"summary":"Provenance Report Pdf","description":"Provenance report rendered as a client-shareable PDF.","operationId":"provenance_report_pdf_api_reports_provenance_pdf_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs":{"get":{"tags":["organizations"],"summary":"List My Organizations","description":"List organizations the current user is a member of.","operationId":"list_my_organizations_api_v1_orgs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrganizationResponse"},"type":"array","title":"Response List My Organizations Api V1 Orgs Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["organizations"],"summary":"Create Organization","description":"Create a Business organization. The creator becomes the owner seat.","operationId":"create_organization_api_v1_orgs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/orgs/accept-invite":{"post":{"tags":["organizations"],"summary":"Accept Invite","description":"Accept a pending invite by its token, creating an active seat.","operationId":"accept_invite_api_v1_orgs_accept_invite_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteAcceptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/orgs/{org_id}":{"get":{"tags":["organizations"],"summary":"Get Organization","description":"Get organization details (members only).","operationId":"get_organization_api_v1_orgs__org_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/usage":{"get":{"tags":["organizations"],"summary":"Get Org Usage","description":"Supporting Services usage: org totals, per-seat breakdown, and daily trend.\n\n`range` selects the window (defaults to the current calendar month, which\nmatches the historical behaviour of this endpoint).","operationId":"get_org_usage_api_v1_orgs__org_id__usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/events":{"get":{"tags":["organizations"],"summary":"Get Org Events","description":"Operational health feed for the org: counts by kind + recent failures.","operationId":"get_org_events_api_v1_orgs__org_id__events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Max recent events to return","default":50,"title":"Limit"},"description":"Max recent events to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/members":{"get":{"tags":["organizations"],"summary":"List Members","description":"List the organization's members (members only).","operationId":"list_members_api_v1_orgs__org_id__members_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationMemberResponse"},"title":"Response List Members Api V1 Orgs  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/members/{user_id}":{"patch":{"tags":["organizations"],"summary":"Update Member","description":"Change a member's role or seat status (owner/admin only).","operationId":"update_member_api_v1_orgs__org_id__members__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organizations"],"summary":"Remove Member","description":"Remove a member from the organization (owner/admin only).","operationId":"remove_member_api_v1_orgs__org_id__members__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/invites":{"post":{"tags":["organizations"],"summary":"Create Invite","description":"Invite someone by email to a seat (owner/admin only).","operationId":"create_invite_api_v1_orgs__org_id__invites_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["organizations"],"summary":"List Invites","description":"List pending invites (owner/admin only).","operationId":"list_invites_api_v1_orgs__org_id__invites_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InviteResponse"},"title":"Response List Invites Api V1 Orgs  Org Id  Invites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/invites/{invite_id}":{"delete":{"tags":["organizations"],"summary":"Revoke Invite","description":"Withdraw a pending invite, freeing its seat (owner/admin only).\n\nINVITE_STATUS_REVOKED existed in the model from the start but nothing ever\nset it, so an invite sent to the wrong address held a seat for its full\nseven days and stayed redeemable by whoever received the token.\n\nThe seat is freed for reassignment immediately. The *purchased* count is\nuntouched: seats release at period end, and an admin who wants to stop\npaying for it reduces the seat count explicitly.","operationId":"revoke_invite_api_v1_orgs__org_id__invites__invite_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/invites/{invite_id}/resend":{"post":{"tags":["organizations"],"summary":"Resend Invite","description":"Reissue and resend a pending invite (owner/admin only).\n\nThe token is regenerated rather than resent. The old link may be sitting in\na mistyped inbox or a forwarded thread, and a resend is exactly the moment\nan admin expects the previous one to stop working.\n\nNo seat check: the invite already occupies its seat, so this is not growth.","operationId":"resend_invite_api_v1_orgs__org_id__invites__invite_id__resend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/seats":{"post":{"tags":["organizations"],"summary":"Purchase Seats","description":"Buy seats, charged immediately and prorated (owner only).\n\n`seats` is the absolute target, not a delta, so a double-submitted request\ncannot buy twice.\n\nRestricted to the owner rather than all admins: this spends money, and the\nowner is who the billing relationship belongs to.","operationId":"purchase_seats_api_v1_orgs__org_id__seats_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatPurchase"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatChangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/seats/scheduled":{"delete":{"tags":["organizations"],"summary":"Cancel Scheduled Seat Change","description":"Cancel a pending seat reduction (owner only).","operationId":"cancel_scheduled_seat_change_api_v1_orgs__org_id__seats_scheduled_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatChangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/checkout":{"post":{"tags":["organizations"],"summary":"Start Seat Checkout","description":"Open Stripe Checkout to start this org's seat subscription (owner only).\n\nThe self-serve counterpart to the admin attach-billing endpoint. Owner-only\nfor the same reason buying seats is: it commits the org to a recurring\ncharge, and the owner is who the billing relationship belongs to.","operationId":"start_seat_checkout_api_v1_orgs__org_id__checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/checkout/confirm":{"post":{"tags":["organizations"],"summary":"Confirm Seat Checkout","description":"Reconcile a returning buyer against Stripe without waiting for the webhook.\n\ncheckout.session.completed remains the authority, and this endpoint applies\nexactly the same idempotent function it does. It exists because a customer\nwho has just paid must not be staring at an unprovisioned org while a\ndelivery is slow, retrying, or - as happened here on 2026-08-29 - pointed\nsomewhere that could never accept it. Whichever path arrives first wins and\nthe other becomes a no-op.","operationId":"confirm_seat_checkout_api_v1_orgs__org_id__checkout_confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCheckoutConfirm"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/settings":{"patch":{"tags":["organizations"],"summary":"Update Org Settings","description":"Change org-level policy (owner or admin).\n\nAdmins and not just the owner, unlike seat purchasing: this spends no money\nand an org whose owner is away should still be able to unblock a member who\nneeds to share a skill with a client.","operationId":"update_org_settings_api_v1_orgs__org_id__settings_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/transfer-ownership":{"post":{"tags":["organizations"],"summary":"Transfer Ownership","description":"Hand the organization to another active member (owner only).\n\nWithout this an org is unrepairable from the product once its owner leaves:\nthe owner cannot be edited or removed, and no other path rewrites\nowner_user_id. The previous owner is demoted to admin rather than removed,\nsince losing the seat is a separate decision from losing the title.","operationId":"transfer_ownership_api_v1_orgs__org_id__transfer_ownership_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOwnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/service-keys":{"post":{"tags":["organizations"],"summary":"Create Service Key","description":"Mint a scoped service key (csk_) for the org (owner/admin only).","operationId":"create_service_key_api_v1_orgs__org_id__service_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["organizations"],"summary":"List Service Keys","description":"List the org's service keys without secrets (owner/admin only).","operationId":"list_service_keys_api_v1_orgs__org_id__service_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceKeyResponse"},"title":"Response List Service Keys Api V1 Orgs  Org Id  Service Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/orgs/{org_id}/service-keys/{key_id}":{"delete":{"tags":["organizations"],"summary":"Revoke Service Key","description":"Revoke (deactivate) a service key, keeping the row for usage history.","operationId":"revoke_service_key_api_v1_orgs__org_id__service_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Org Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/identity":{"get":{"tags":["services"],"summary":"Service Identity","description":"Who is this app/service key signed in as.\n\nUsed by the CtlSurf Sidekick to show the signed-in user + organization in\nits header. Any valid Business app/service key (or member JWT) may call it;\n`resolve_service_context` already enforces the Business entitlement.","operationId":"service_identity_api_v1_services_identity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/me/usage":{"get":{"tags":["services"],"summary":"My Service Usage","description":"The signed-in member's own managed-services usage (Settings -> My Usage).\n\nAggregates across every org the user holds a seat in. Returns\nhas_managed_services=false for users with no Business seat, so the Settings\npanel can hide itself for Free/Pro accounts.","operationId":"my_service_usage_api_v1_services_me_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Window: current | 30d | 90d","default":"current","title":"Range"},"description":"Window: current | 30d | 90d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyServiceUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/llm/v1/messages":{"post":{"tags":["services"],"summary":"Llm Messages","description":"Proxy an LLM completion. Model is server-selected; tokens are metered.","operationId":"llm_messages_api_v1_services_llm_v1_messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schema","in":"query","required":false,"schema":{"type":"string","pattern":"^(anthropic|openai)$","default":"anthropic","title":"Schema"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/llm/messages":{"post":{"tags":["services"],"summary":"Llm Messages","description":"Proxy an LLM completion. Model is server-selected; tokens are metered.","operationId":"llm_messages_api_v1_services_llm_messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"schema","in":"query","required":false,"schema":{"type":"string","pattern":"^(anthropic|openai)$","default":"anthropic","title":"Schema"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/transcription/session":{"post":{"tags":["services"],"summary":"Transcription Session","description":"Mint a short-lived Deepgram grant token so the client streams audio\ndirectly to Deepgram (audio never transits ctlsurf). Usage is reconciled\npost-hoc from Deepgram by the returned tags (Phase 2b).","operationId":"transcription_session_api_v1_services_transcription_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/services/transcription/reconcile":{"post":{"tags":["services"],"summary":"Trigger Transcription Reconcile","description":"Super-admin: run transcription usage reconciliation now.\n\nPulls Deepgram per-request usage and writes idempotent ServiceUsage rows.\nAlso runs automatically on a schedule (see the lifespan background task);\nthis endpoint is for on-demand runs and backfills. Returns the run stats.","operationId":"trigger_transcription_reconcile_api_v1_services_transcription_reconcile_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/page-agent/mcp":{"post":{"tags":["page-agent"],"summary":"Read Mcp Boundary","operationId":"read_mcp_boundary_api_v1_page_agent_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/page-agent/pages/{page_id}/read":{"post":{"tags":["page-agent"],"summary":"Read With Mcp","operationId":"read_with_mcp_api_v1_page_agent_pages__page_id__read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/pages/{page_id}/assist":{"post":{"tags":["page-agent"],"summary":"Assist With Mcp","operationId":"assist_with_mcp_api_v1_page_agent_pages__page_id__assist_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/capabilities":{"get":{"tags":["page-agent"],"summary":"Capabilities","operationId":"capabilities_api_v1_page_agent_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/page-agent/pages/{page_id}/actions":{"get":{"tags":["page-agent"],"summary":"Recent Actions","operationId":"recent_actions_api_v1_page_agent_pages__page_id__actions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/actions/{action_id}":{"get":{"tags":["page-agent"],"summary":"Action Receipt","operationId":"action_receipt_api_v1_page_agent_actions__action_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/actions/{action_id}/approve":{"post":{"tags":["page-agent"],"summary":"Approve Action","operationId":"approve_action_api_v1_page_agent_actions__action_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/actions/{action_id}/dismiss":{"post":{"tags":["page-agent"],"summary":"Dismiss Action","operationId":"dismiss_action_api_v1_page_agent_actions__action_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/actions/{action_id}/undo":{"post":{"tags":["page-agent"],"summary":"Undo Action","operationId":"undo_action_api_v1_page_agent_actions__action_id__undo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/voice-session":{"post":{"tags":["page-agent"],"summary":"Voice Session","operationId":"voice_session_api_v1_page_agent_voice_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/pages/{page_id}/speech":{"post":{"tags":["page-agent"],"summary":"Page Speech","operationId":"page_speech_api_v1_page_agent_pages__page_id__speech_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeechRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/pages/{page_id}/turn":{"post":{"tags":["page-agent"],"summary":"Turn","operationId":"turn_api_v1_page_agent_pages__page_id__turn_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Turn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/pages/{page_id}/edits":{"get":{"tags":["page-agent"],"summary":"Recent Edits","operationId":"recent_edits_api_v1_page_agent_pages__page_id__edits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/edits/{edit_id}/apply":{"post":{"tags":["page-agent"],"summary":"Apply Edit","operationId":"apply_edit_api_v1_page_agent_edits__edit_id__apply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"edit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Edit Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/edits/{edit_id}/undo":{"post":{"tags":["page-agent"],"summary":"Undo Edit","operationId":"undo_edit_api_v1_page_agent_edits__edit_id__undo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"edit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Edit Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/page-agent/edits/{edit_id}/dismiss":{"post":{"tags":["page-agent"],"summary":"Dismiss Edit","operationId":"dismiss_edit_api_v1_page_agent_edits__edit_id__dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"edit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Edit Id"}},{"name":"X-Org-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Org-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards":{"get":{"tags":["dashboards"],"summary":"List Dashboards","description":"The caller's groups, whether each has a dashboard, and Business entitlement.","operationId":"list_dashboards_api_dashboards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["dashboards"],"summary":"Create Dashboard","description":"Get-or-create the dashboard for one of the caller's groups.","operationId":"create_dashboard_api_dashboards_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/dashboards/resolve":{"post":{"tags":["dashboards"],"summary":"Resolve Dashboard","description":"Find (or create) the dashboard for a project folder's group, for agents working in a repo.","operationId":"resolve_dashboard_api_dashboards_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardResolve"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/dashboards/{dashboard_id}":{"get":{"tags":["dashboards"],"summary":"Get Dashboard","operationId":"get_dashboard_api_dashboards__dashboard_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dashboards"],"summary":"Update Dashboard","operationId":"update_dashboard_api_dashboards__dashboard_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/summary":{"get":{"tags":["dashboards"],"summary":"Dashboard Summary","operationId":"dashboard_summary_api_dashboards__dashboard_id__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/cards":{"get":{"tags":["dashboards"],"summary":"List Cards","operationId":"list_cards_api_dashboards__dashboard_id__cards_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"open_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Open Only"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"include_virtual","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Virtual"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboards"],"summary":"Create Card","operationId":"create_card_api_dashboards__dashboard_id__cards_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}":{"get":{"tags":["dashboards"],"summary":"Get Card","operationId":"get_card_api_cards__card_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dashboards"],"summary":"Update Card","operationId":"update_card_api_cards__card_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboards"],"summary":"Archive Card","description":"Archive (soft delete). Restore with PATCH {archived: false}.","operationId":"archive_card_api_cards__card_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/cards/by-ref/{ref}":{"get":{"tags":["dashboards"],"summary":"Get Card By Ref","operationId":"get_card_by_ref_api_dashboards__dashboard_id__cards_by_ref__ref__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"ref","in":"path","required":true,"schema":{"type":"string","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/move":{"post":{"tags":["dashboards"],"summary":"Move Card","operationId":"move_card_api_cards__card_id__move_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardMove"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/links":{"post":{"tags":["dashboards"],"summary":"Add Link","operationId":"add_link_api_cards__card_id__links_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/links/{link_id}":{"delete":{"tags":["dashboards"],"summary":"Remove Link","operationId":"remove_link_api_cards__card_id__links__link_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/events":{"get":{"tags":["dashboards"],"summary":"List Events","operationId":"list_events_api_cards__card_id__events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboards"],"summary":"Add Comment","operationId":"add_comment_api_cards__card_id__events_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/attachments":{"get":{"tags":["dashboards"],"summary":"List Attachments","operationId":"list_attachments_api_cards__card_id__attachments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboards"],"summary":"Add Attachment","operationId":"add_attachment_api_cards__card_id__attachments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/attachments/snapshot":{"post":{"tags":["dashboards"],"summary":"Snapshot Attachment","description":"Export the body page and attach the file as a new version, freezing what was sent.","operationId":"snapshot_attachment_api_cards__card_id__attachments_snapshot_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cards/{card_id}/attachments/{attachment_id}":{"patch":{"tags":["dashboards"],"summary":"Update Attachment","operationId":"update_attachment_api_cards__card_id__attachments__attachment_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboards"],"summary":"Detach","description":"Detach a document from the card. The file itself is kept.","operationId":"detach_api_cards__card_id__attachments__attachment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Card Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/files":{"get":{"tags":["dashboards"],"summary":"Dashboard Files","description":"Every card attachment and page file in scope, with the cards each file belongs to.","operationId":"dashboard_files_api_dashboards__dashboard_id__files_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"mime","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/pins":{"get":{"tags":["dashboards"],"summary":"List Pins","operationId":"list_pins_api_dashboards__dashboard_id__pins_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dashboards"],"summary":"Create Pin","operationId":"create_pin_api_dashboards__dashboard_id__pins_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/pins/batch":{"post":{"tags":["dashboards"],"summary":"Create Pins","description":"Pin several blocks at once (e.g. every table on a page), in the order given.\n\nBlocks already pinned or not pinnable are skipped and reported, not errors.","operationId":"create_pins_api_dashboards__dashboard_id__pins_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinBatch"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/pins/{pin_id}":{"patch":{"tags":["dashboards"],"summary":"Update Pin","operationId":"update_pin_api_dashboards_pins__pin_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pin_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pin Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dashboards"],"summary":"Delete Pin","description":"Unpin only; the block and its page are untouched.","operationId":"delete_pin_api_dashboards_pins__pin_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pin_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pin Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/blocks":{"get":{"tags":["dashboards"],"summary":"Pinnable Blocks","description":"Blocks on the group's pages, for the pin and card-link pickers.","operationId":"pinnable_blocks_api_dashboards__dashboard_id__blocks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"page_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/virtual-tickets/{block_id}/{item_id}":{"patch":{"tags":["dashboards"],"summary":"Update Virtual Ticket","description":"Write a board move or edit back to the source ctlsurf_task / checklist item.","operationId":"update_virtual_ticket_api_dashboards__dashboard_id__virtual_tickets__block_id___item_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VirtualTicketUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page_id}/cards":{"get":{"tags":["dashboards"],"summary":"Cards For Page","description":"Cards whose body is this page, for the 'tracked on dashboard' badge.","operationId":"cards_for_page_api_pages__page_id__cards_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pages/{page_id}/promote-to-card":{"post":{"tags":["dashboards"],"summary":"Promote Page","description":"Create a card whose body is this page, on the dashboard for the page's group.","operationId":"promote_page_api_pages__page_id__promote_to_card_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Page Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotePage"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/backfill":{"post":{"tags":["dashboards"],"summary":"Backfill","description":"Import change-order tables and proposal pages as cards. Dry run by default.","operationId":"backfill_api_dashboards__dashboard_id__backfill_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashboards/{dashboard_id}/export":{"get":{"tags":["dashboards"],"summary":"Export Cards","description":"Export one card type as a table with computed totals (e.g. a CO billing statement).","operationId":"export_cards_api_dashboards__dashboard_id__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Dashboard Id"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"change_order","title":"Type"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["xlsx","docx"],"type":"string","default":"xlsx","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docs/tools":{"get":{"tags":["docs"],"summary":"List Mcp Tools","description":"MCP tool reference grouped by toolset, generated from the registry.","operationId":"list_mcp_tools_api_docs_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/mcp/server-card.json":{"get":{"tags":["docs"],"summary":"Mcp Server Card","description":"Static MCP server card (Smithery et al. read this when the endpoint\nitself requires auth and cannot be scanned anonymously).","operationId":"mcp_server_card__well_known_mcp_server_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/install.sh":{"get":{"summary":"Get Install Script","description":"Serve the MCP client install script for curl | bash installation.","operationId":"get_install_script_install_sh_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"ActivityLogItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"action":{"type":"string","title":"Action"},"task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Id"},"task_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Text"},"page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"},"block_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Id"},"block_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Title"},"details":{"additionalProperties":true,"type":"object","title":"Details","default":{}},"actor_type":{"type":"string","title":"Actor Type","default":"user"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","action","created_at"],"title":"ActivityLogItem","description":"A single activity log entry."},"ActivityLogResponse":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"items":{"items":{"$ref":"#/components/schemas/ActivityLogItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["folder_id","items","total","limit","offset","has_more"],"title":"ActivityLogResponse","description":"Paginated activity log response."},"AgentTaskItem":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"done":{"type":"boolean","title":"Done","default":false},"notes":{"items":{"type":"string"},"type":"array","title":"Notes","default":[]},"skill_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Id"},"block_id":{"type":"string","format":"uuid","title":"Block Id"},"block_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Title"}},"type":"object","required":["id","text","block_id"],"title":"AgentTaskItem","description":"A single agent task item with context."},"ApiKeyCreate":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"ApiKeyCreate","description":"Schema for creating a new API key."},"ApiKeyCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","key_prefix","is_active","created_at","key"],"title":"ApiKeyCreatedResponse","description":"Schema returned when a new API key is created (includes the full key once)."},"ApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix","is_active","created_at"],"title":"ApiKeyResponse","description":"Schema for API key response (without the actual key)."},"ApiKeyUpdate":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ApiKeyUpdate","description":"Schema for updating an API key."},"AttachBillingRequest":{"properties":{"seats":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats"},"manual_only":{"type":"boolean","title":"Manual Only","default":false},"comped":{"type":"boolean","title":"Comped","default":true}},"type":"object","title":"AttachBillingRequest","description":"Start an org's per-seat subscription, or set its seats manually."},"AttachmentCreate":{"properties":{"file_id":{"type":"string","format":"uuid","title":"File Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"role":{"type":"string","enum":["draft","sent","client_redline","signed","amendment","backup","other"],"title":"Role","default":"other"},"source":{"anyOf":[{"type":"string","enum":["upload","page_file","agent"]},{"type":"null"}],"title":"Source"}},"type":"object","required":["file_id"],"title":"AttachmentCreate"},"AttachmentUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Label"},"role":{"anyOf":[{"type":"string","enum":["draft","sent","client_redline","signed","amendment","backup","other"]},{"type":"null"}],"title":"Role"}},"type":"object","title":"AttachmentUpdate"},"BackfillRequest":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","default":true},"exclude":{"items":{"type":"string"},"type":"array","maxItems":5000,"title":"Exclude"}},"type":"object","title":"BackfillRequest"},"BacklinkItem":{"properties":{"source_page_id":{"type":"string","title":"Source Page Id"},"source_page_title":{"type":"string","title":"Source Page Title"},"source_block_id":{"type":"string","title":"Source Block Id"},"link_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Text"}},"type":"object","required":["source_page_id","source_page_title","source_block_id","link_text"],"title":"BacklinkItem","description":"A single backlink entry."},"BacklinksResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"page_title":{"type":"string","title":"Page Title"},"links":{"items":{"$ref":"#/components/schemas/BacklinkItem"},"type":"array","title":"Links"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["page_id","page_title","links","count"],"title":"BacklinksResponse","description":"Response for backlinks query."},"BillingStatusResponse":{"properties":{"stripe_enabled":{"type":"boolean","title":"Stripe Enabled"},"publishable_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishable Key"},"current_tier":{"type":"string","title":"Current Tier"},"has_subscription":{"type":"boolean","title":"Has Subscription"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"subscription_ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Ends At"},"can_manage_subscription":{"type":"boolean","title":"Can Manage Subscription"}},"type":"object","required":["stripe_enabled","current_tier","has_subscription","can_manage_subscription"],"title":"BillingStatusResponse","description":"Response for billing status check."},"BlockContentSlice":{"properties":{"block_id":{"type":"string","format":"uuid","title":"Block Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"type":{"$ref":"#/components/schemas/BlockType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"},"total_size":{"type":"integer","title":"Total Size"},"has_more":{"type":"boolean","title":"Has More"},"next_offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Offset"},"content_type":{"type":"string","title":"Content Type"},"content_slice":{"type":"string","title":"Content Slice"}},"type":"object","required":["block_id","page_id","type","title","offset","limit","total_size","has_more","next_offset","content_type","content_slice"],"title":"BlockContentSlice"},"BlockCreate":{"properties":{"type":{"$ref":"#/components/schemas/BlockType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"props":{"additionalProperties":true,"type":"object","title":"Props","default":{}},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"}},"type":"object","required":["type"],"title":"BlockCreate"},"BlockReorder":{"properties":{"block_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Block Ids"}},"type":"object","required":["block_ids"],"title":"BlockReorder"},"BlockResponse":{"properties":{"type":{"$ref":"#/components/schemas/BlockType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"props":{"additionalProperties":true,"type":"object","title":"Props","default":{}},"id":{"type":"string","format":"uuid","title":"Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"order":{"type":"integer","title":"Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["type","id","page_id","order","created_at","updated_at"],"title":"BlockResponse"},"BlockSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BlockSearchResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["results","total","limit","offset","has_more"],"title":"BlockSearchResponse"},"BlockSearchResult":{"properties":{"block_id":{"type":"string","format":"uuid","title":"Block Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"$ref":"#/components/schemas/BlockType"},"match_start":{"type":"integer","title":"Match Start"},"match_end":{"type":"integer","title":"Match End"},"snippet":{"type":"string","title":"Snippet"},"size_bytes":{"type":"integer","title":"Size Bytes"},"content_type":{"type":"string","title":"Content Type"}},"type":"object","required":["block_id","page_id","page_title","title","type","match_start","match_end","snippet","size_bytes","content_type"],"title":"BlockSearchResult"},"BlockSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"type":{"$ref":"#/components/schemas/BlockType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"order":{"type":"integer","title":"Order"},"size_bytes":{"type":"integer","title":"Size Bytes"},"content_type":{"type":"string","title":"Content Type"},"has_large_content":{"type":"boolean","title":"Has Large Content"}},"type":"object","required":["id","page_id","type","title","order","size_bytes","content_type","has_large_content"],"title":"BlockSummary"},"BlockType":{"type":"string","enum":["text","checklist","table","react_flow","agent_control","tree","ctlsurf_task","page_summary","file","mindmap","datastore","state","log","presentation"],"title":"BlockType"},"BlockUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"props":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Props"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"}},"type":"object","title":"BlockUpdate"},"BlockVersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"block_id":{"type":"string","format":"uuid","title":"Block Id"},"version_number":{"type":"integer","title":"Version Number"},"type":{"$ref":"#/components/schemas/BlockType"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"props":{"additionalProperties":true,"type":"object","title":"Props"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","block_id","version_number","type","props","created_at"],"title":"BlockVersionResponse"},"Body_delete_sessions_bulk_api_agent_sessions_delete_bulk_post":{"properties":{"session_ids":{"items":{"type":"string"},"type":"array","title":"Session Ids"}},"type":"object","required":["session_ids"],"title":"Body_delete_sessions_bulk_api_agent_sessions_delete_bulk_post"},"Body_upload_file_api_files_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_api_files_upload_post"},"BreadcrumbCrumb":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"accessible":{"type":"boolean","title":"Accessible"}},"type":"object","required":["id","title","accessible"],"title":"BreadcrumbCrumb","description":"One ancestor in a page's breadcrumb path. `accessible` is False when\nthe requesting user cannot read this ancestor (e.g. share recipient\nviewing a shared page whose parent isn't shared with them)."},"CardCreate":{"properties":{"type":{"type":"string","title":"Type"},"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"ref":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Ref"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"body_page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Body Page Id"},"owner_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"amount_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Low"},"amount_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount High"},"hours_agent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours Agent"},"hours_unaided":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours Unaided"},"rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate"},"fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Fields"}},"type":"object","required":["type","title"],"title":"CardCreate"},"CardMove":{"properties":{"stage":{"type":"string","title":"Stage"},"position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Position"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"}},"type":"object","required":["stage"],"title":"CardMove"},"CardUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Title"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"ref":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Ref"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"body_page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Body Page Id"},"owner_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner Id"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"amount_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Low"},"amount_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount High"},"hours_agent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours Agent"},"hours_unaided":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours Unaided"},"rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate"},"fields":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Fields"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"}},"type":"object","title":"CardUpdate"},"CheckoutRequest":{"properties":{"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"}},"type":"object","required":["success_url","cancel_url"],"title":"CheckoutRequest","description":"Request to create a checkout session."},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CheckoutResponse","description":"Response with checkout URL."},"CommentCreate":{"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"title":"Text"}},"type":"object","required":["text"],"title":"CommentCreate"},"ConfirmUploadRequest":{"properties":{"file_id":{"type":"string","format":"uuid","title":"File Id"},"s3_key":{"type":"string","title":"S3 Key"},"filename":{"type":"string","title":"Filename"},"mime_type":{"type":"string","title":"Mime Type"},"page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"create_block":{"type":"boolean","title":"Create Block","default":true}},"type":"object","required":["file_id","s3_key","filename","mime_type"],"title":"ConfirmUploadRequest","description":"Request to confirm a completed upload."},"ConfirmUploadResponse":{"properties":{"file":{"$ref":"#/components/schemas/FileResponse"},"block":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Block"},"message":{"type":"string","title":"Message","default":"Upload confirmed successfully"}},"type":"object","required":["file"],"title":"ConfirmUploadResponse","description":"Response after confirming upload."},"DailyUsage":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"transcription_seconds":{"type":"integer","title":"Transcription Seconds"},"llm_input_tokens":{"type":"integer","title":"Llm Input Tokens"},"llm_output_tokens":{"type":"integer","title":"Llm Output Tokens"},"estimated_cost_usd":{"type":"number","title":"Estimated Cost Usd"}},"type":"object","required":["date","transcription_seconds","llm_input_tokens","llm_output_tokens","estimated_cost_usd"],"title":"DailyUsage","description":"One day of managed-services usage, for the trend charts."},"DashboardCreate":{"properties":{"group_name":{"type":"string","maxLength":255,"minLength":1,"title":"Group Name"}},"type":"object","required":["group_name"],"title":"DashboardCreate"},"DashboardResolve":{"properties":{"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name"}},"type":"object","title":"DashboardResolve"},"DashboardUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"group_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Group Name"}},"type":"object","title":"DashboardUpdate"},"FileListResponse":{"properties":{"files":{"items":{"$ref":"#/components/schemas/FileResponse"},"type":"array","title":"Files"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["files","total"],"title":"FileListResponse","description":"List of files response."},"FileResponse":{"properties":{"original_filename":{"type":"string","title":"Original Filename"},"mime_type":{"type":"string","title":"Mime Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"},"block_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Id"},"filename":{"type":"string","title":"Filename"},"s3_key":{"type":"string","title":"S3 Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"has_extracted_text":{"type":"boolean","title":"Has Extracted Text","default":false}},"type":"object","required":["original_filename","mime_type","size_bytes","id","user_id","filename","s3_key","created_at"],"title":"FileResponse","description":"Schema for file response."},"FileTextResponse":{"properties":{"file_id":{"type":"string","format":"uuid","title":"File Id"},"filename":{"type":"string","title":"Filename"},"mime_type":{"type":"string","title":"Mime Type"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"size_bytes":{"type":"integer","title":"Size Bytes"},"has_text":{"type":"boolean","title":"Has Text","default":false}},"type":"object","required":["file_id","filename","mime_type","size_bytes"],"title":"FileTextResponse","description":"Response for extracted text content."},"FileUploadResponse":{"properties":{"file":{"$ref":"#/components/schemas/FileResponse"},"message":{"type":"string","title":"Message","default":"File uploaded successfully"}},"type":"object","required":["file"],"title":"FileUploadResponse","description":"Response after successful file upload."},"FolderAgentTasks":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"folder_name":{"type":"string","title":"Folder Name"},"pages":{"items":{"$ref":"#/components/schemas/PageTasks"},"type":"array","title":"Pages"},"total_pending":{"type":"integer","title":"Total Pending"},"total_done":{"type":"integer","title":"Total Done"}},"type":"object","required":["folder_id","folder_name","pages","total_pending","total_done"],"title":"FolderAgentTasks","description":"All agent tasks in a folder, grouped by page."},"FolderCreate":{"properties":{"name":{"type":"string","title":"Name"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Remote"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},"type":"object","required":["name"],"title":"FolderCreate"},"FolderResponse":{"properties":{"name":{"type":"string","title":"Name"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Remote"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"chat_logging_enabled":{"type":"boolean","title":"Chat Logging Enabled","default":true},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","id","user_id","created_at","updated_at"],"title":"FolderResponse"},"FolderShareCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission","default":"view"},"include_pages":{"type":"boolean","title":"Include Pages","default":true}},"type":"object","required":["email"],"title":"FolderShareCreate","description":"Create a folder share by email."},"FolderShareListResponse":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"owner":{"$ref":"#/components/schemas/UserSummary"},"shares":{"items":{"$ref":"#/components/schemas/FolderShareResponse"},"type":"array","title":"Shares"}},"type":"object","required":["folder_id","owner","shares"],"title":"FolderShareListResponse","description":"List of shares for a folder."},"FolderShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"shared_with":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"include_pages":{"type":"boolean","title":"Include Pages"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","folder_id","shared_with","permission","include_pages","created_by","created_at"],"title":"FolderShareResponse","description":"Folder share response with user details."},"FolderShareUpdate":{"properties":{"permission":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},{"type":"null"}]},"include_pages":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Pages"}},"type":"object","title":"FolderShareUpdate","description":"Update a folder share."},"FolderUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Remote"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"chat_logging_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Chat Logging Enabled"}},"type":"object","title":"FolderUpdate"},"FolderWithPages":{"properties":{"name":{"type":"string","title":"Name"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Remote"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"chat_logging_enabled":{"type":"boolean","title":"Chat Logging Enabled","default":true},"archived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Archived At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"pages":{"items":{"$ref":"#/components/schemas/PageTreeNode"},"type":"array","title":"Pages","default":[]}},"type":"object","required":["name","id","user_id","created_at","updated_at"],"title":"FolderWithPages"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest","description":"Schema for forgot password request."},"GraphCreate":{"properties":{"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges","default":[]},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","title":"GraphCreate"},"GraphResponse":{"properties":{"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges","default":[]},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}},"id":{"type":"string","format":"uuid","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","created_at","updated_at"],"title":"GraphResponse"},"GraphUpdate":{"properties":{"nodes":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Nodes"},"edges":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Edges"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","title":"GraphUpdate"},"GroupAction":{"properties":{"group":{"type":"string","maxLength":255,"minLength":1,"title":"Group"}},"type":"object","required":["group"],"title":"GroupAction"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InviteAcceptRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"InviteAcceptRequest"},"InviteCreate":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InviteCreate"},"InviteCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"token":{"type":"string","title":"Token"},"accept_url":{"type":"string","title":"Accept Url"},"email_sent":{"type":"boolean","title":"Email Sent","default":false}},"type":"object","required":["id","email","role","status","expires_at","created_at","token","accept_url"],"title":"InviteCreatedResponse","description":"Returned on invite creation or resend.\n\nThe token is still returned even when the email went out, so an admin can\nhand-deliver the link when mail is slow, filtered, or disabled. `email_sent`\ntells the UI whether to lead with \"invite sent\" or with the copy-link box."},"InviteResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"status":{"type":"string","title":"Status"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","role","status","expires_at","created_at"],"title":"InviteResponse"},"LimitCheckResponse":{"properties":{"allowed":{"type":"boolean","title":"Allowed"},"current":{"type":"integer","title":"Current"},"limit":{"type":"integer","title":"Limit"},"limit_type":{"type":"string","title":"Limit Type"},"usage_percent":{"type":"number","title":"Usage Percent"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["allowed","current","limit","limit_type","usage_percent"],"title":"LimitCheckResponse","description":"Result of a limit check."},"LinkCreate":{"properties":{"relation":{"type":"string","enum":["evidence","related","follow_up","parent","supersedes"],"title":"Relation","default":"related"},"target_kind":{"type":"string","enum":["page","block","task_item","card","commit","url"],"title":"Target Kind"},"target_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Id"},"target_ref":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Target Ref"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"}},"type":"object","required":["target_kind"],"title":"LinkCreate"},"LogToolCallRequest":{"properties":{"tool_name":{"type":"string","title":"Tool Name"}},"type":"object","required":["tool_name"],"title":"LogToolCallRequest","description":"Request to log a tool call."},"MemberUpdate":{"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"seat_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seat Status"}},"type":"object","title":"MemberUpdate"},"Message":{"properties":{"role":{"type":"string","enum":["user","assistant"],"title":"Role"},"content":{"type":"string","maxLength":6000,"minLength":1,"title":"Content"}},"additionalProperties":false,"type":"object","required":["role","content"],"title":"Message"},"MyFolderShareInfo":{"properties":{"share_id":{"type":"string","format":"uuid","title":"Share Id"},"shared_with":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"include_pages":{"type":"boolean","title":"Include Pages"},"shared_at":{"type":"string","format":"date-time","title":"Shared At"}},"type":"object","required":["share_id","shared_with","permission","include_pages","shared_at"],"title":"MyFolderShareInfo","description":"A share I created for one of my folders."},"MyPageShareInfo":{"properties":{"share_id":{"type":"string","format":"uuid","title":"Share Id"},"shared_with":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"shared_at":{"type":"string","format":"date-time","title":"Shared At"}},"type":"object","required":["share_id","shared_with","permission","shared_at"],"title":"MyPageShareInfo","description":"A share I created for one of my pages."},"MyServiceUsageResponse":{"properties":{"has_managed_services":{"type":"boolean","title":"Has Managed Services"},"range":{"type":"string","title":"Range","default":"current"},"transcription_seconds":{"type":"integer","title":"Transcription Seconds","default":0},"transcription_minutes_used":{"type":"number","title":"Transcription Minutes Used","default":0},"included_minutes_per_seat":{"type":"integer","title":"Included Minutes Per Seat","default":0},"llm_input_tokens":{"type":"integer","title":"Llm Input Tokens","default":0},"llm_output_tokens":{"type":"integer","title":"Llm Output Tokens","default":0},"estimated_cost_usd":{"type":"number","title":"Estimated Cost Usd","default":0},"sessions":{"type":"integer","title":"Sessions","default":0},"series":{"items":{"$ref":"#/components/schemas/DailyUsage"},"type":"array","title":"Series","default":[]}},"type":"object","required":["has_managed_services"],"title":"MyServiceUsageResponse","description":"A single member's own managed-services usage (Settings -> My Usage)."},"MySharedFolder":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"folder_name":{"type":"string","title":"Folder Name"},"shares":{"items":{"$ref":"#/components/schemas/MyFolderShareInfo"},"type":"array","title":"Shares"}},"type":"object","required":["folder_id","folder_name","shares"],"title":"MySharedFolder","description":"A folder I own that is shared with others."},"MySharedPage":{"properties":{"page_id":{"type":"string","format":"uuid","title":"Page Id"},"page_title":{"type":"string","title":"Page Title"},"shares":{"items":{"$ref":"#/components/schemas/MyPageShareInfo"},"type":"array","title":"Shares"}},"type":"object","required":["page_id","page_title","shares"],"title":"MySharedPage","description":"A page I own that is shared with others."},"MySharesResponse":{"properties":{"pages":{"items":{"$ref":"#/components/schemas/MySharedPage"},"type":"array","title":"Pages"},"folders":{"items":{"$ref":"#/components/schemas/MySharedFolder"},"type":"array","title":"Folders"},"total_page_shares":{"type":"integer","title":"Total Page Shares"},"total_folder_shares":{"type":"integer","title":"Total Folder Shares"}},"type":"object","required":["pages","folders","total_page_shares","total_folder_shares"],"title":"MySharesResponse","description":"All resources I've shared with others."},"OrgCheckoutConfirm":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["session_id"],"title":"OrgCheckoutConfirm","description":"Reconcile a returning buyer without waiting for the webhook."},"OrgCheckoutRequest":{"properties":{"seats":{"type":"integer","title":"Seats","default":1},"success_url":{"type":"string","title":"Success Url"},"cancel_url":{"type":"string","title":"Cancel Url"}},"type":"object","required":["success_url","cancel_url"],"title":"OrgCheckoutRequest","description":"Start self-serve seat checkout. `seats` is the opening quantity."},"OrgCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"},"seats":{"type":"integer","title":"Seats"}},"type":"object","required":["checkout_url","session_id","seats"],"title":"OrgCheckoutResponse"},"OrgSettingsUpdate":{"properties":{"allow_external_skill_sharing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow External Skill Sharing"}},"type":"object","title":"OrgSettingsUpdate","description":"Org-level policy. Only fields present in the request are changed."},"OrganizationCreate":{"properties":{"name":{"type":"string","title":"Name"},"hard_cap_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hard Cap Cents"}},"type":"object","required":["name"],"title":"OrganizationCreate"},"OrganizationMemberResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"role":{"type":"string","title":"Role"},"seat_status":{"type":"string","title":"Seat Status"},"joined_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Joined At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","role","seat_status","created_at"],"title":"OrganizationMemberResponse"},"OrganizationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"plan":{"type":"string","title":"Plan"},"owner_user_id":{"type":"string","format":"uuid","title":"Owner User Id"},"hard_cap_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hard Cap Cents"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"seats_used":{"type":"integer","title":"Seats Used"},"seat_limit":{"type":"integer","title":"Seat Limit"},"seats_purchased":{"type":"integer","title":"Seats Purchased"},"seats_scheduled":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Scheduled"},"seat_price_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seat Price Usd"},"billing_enabled":{"type":"boolean","title":"Billing Enabled","default":false},"max_purchasable_seats":{"type":"integer","title":"Max Purchasable Seats"},"included_minutes_per_seat":{"type":"integer","title":"Included Minutes Per Seat"},"billing_mode":{"type":"string","title":"Billing Mode","default":"unpaid"},"allow_external_skill_sharing":{"type":"boolean","title":"Allow External Skill Sharing","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","plan","owner_user_id","seats_used","seat_limit","seats_purchased","max_purchasable_seats","included_minutes_per_seat","created_at"],"title":"OrganizationResponse"},"OutlinkItem":{"properties":{"target_page_id":{"type":"string","title":"Target Page Id"},"target_page_title":{"type":"string","title":"Target Page Title"},"source_block_id":{"type":"string","title":"Source Block Id"},"link_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Text"}},"type":"object","required":["target_page_id","target_page_title","source_block_id","link_text"],"title":"OutlinkItem","description":"A single outlink entry."},"OutlinksResponse":{"properties":{"page_id":{"type":"string","title":"Page Id"},"page_title":{"type":"string","title":"Page Title"},"links":{"items":{"$ref":"#/components/schemas/OutlinkItem"},"type":"array","title":"Links"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["page_id","page_title","links","count"],"title":"OutlinksResponse","description":"Response for outlinks query."},"PageCreate":{"properties":{"title":{"type":"string","title":"Title","default":"Untitled"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","default":"page"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"cwd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwd"}},"type":"object","title":"PageCreate"},"PageMoveRequest":{"properties":{"new_parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"New Parent Id"},"new_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"New Order"},"merge_folder":{"type":"boolean","title":"Merge Folder","default":false},"split_folder":{"type":"boolean","title":"Split Folder","default":false},"split_folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Folder Name"},"split_folder_root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Folder Root Path"},"split_folder_git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Split Folder Git Remote"}},"type":"object","title":"PageMoveRequest"},"PageOwnerInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["id","email"],"title":"PageOwnerInfo","description":"Minimal owner info for shared pages."},"PageResponse":{"properties":{"title":{"type":"string","title":"Title","default":"Untitled"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"type":{"type":"string","title":"Type","default":"page"},"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"order":{"type":"integer","title":"Order","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"is_project":{"type":"boolean","title":"Is Project","default":false}},"type":"object","required":["id","user_id","created_at","updated_at"],"title":"PageResponse"},"PageSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/PageSearchResult"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["results","total","limit","offset","has_more"],"title":"PageSearchResponse","description":"Paginated search results for pages."},"PageSearchResult":{"properties":{"page_id":{"type":"string","format":"uuid","title":"Page Id"},"title":{"type":"string","title":"Title"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"is_project":{"type":"boolean","title":"Is Project","default":false},"rank":{"type":"number","title":"Rank"},"match_type":{"type":"string","title":"Match Type"}},"type":"object","required":["page_id","title","rank","match_type"],"title":"PageSearchResult","description":"Search result for a single page."},"PageShareCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission","default":"view"},"scope":{"$ref":"#/components/schemas/ShareScope","default":"single"}},"type":"object","required":["email"],"title":"PageShareCreate","description":"Create a page share by email."},"PageShareListResponse":{"properties":{"page_id":{"type":"string","format":"uuid","title":"Page Id"},"owner":{"$ref":"#/components/schemas/UserSummary"},"shares":{"items":{"$ref":"#/components/schemas/PageShareResponse"},"type":"array","title":"Shares"}},"type":"object","required":["page_id","owner","shares"],"title":"PageShareListResponse","description":"List of shares for a page."},"PageShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"shared_with":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","page_id","shared_with","permission","created_by","created_at"],"title":"PageShareResponse","description":"Page share response with user details."},"PageShareUpdate":{"properties":{"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"}},"type":"object","required":["permission"],"title":"PageShareUpdate","description":"Update a page share permission."},"PageTasks":{"properties":{"page_id":{"type":"string","format":"uuid","title":"Page Id"},"page_title":{"type":"string","title":"Page Title"},"tasks":{"items":{"$ref":"#/components/schemas/AgentTaskItem"},"type":"array","title":"Tasks"}},"type":"object","required":["page_id","page_title","tasks"],"title":"PageTasks","description":"Tasks grouped by page."},"PageTreeNode":{"properties":{"title":{"type":"string","title":"Title","default":"Untitled"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"type":{"type":"string","title":"Type","default":"page"},"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"order":{"type":"integer","title":"Order","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"is_project":{"type":"boolean","title":"Is Project","default":false},"children":{"items":{"$ref":"#/components/schemas/PageTreeNode"},"type":"array","title":"Children","default":[]}},"type":"object","required":["id","user_id","created_at","updated_at"],"title":"PageTreeNode"},"PageUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","title":"PageUpdate"},"PageWithBlocks":{"properties":{"title":{"type":"string","title":"Title","default":"Untitled"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"type":{"type":"string","title":"Type","default":"page"},"id":{"type":"string","format":"uuid","title":"Id"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"order":{"type":"integer","title":"Order","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"is_project":{"type":"boolean","title":"Is Project","default":false},"blocks":{"items":{"$ref":"#/components/schemas/BlockResponse"},"type":"array","title":"Blocks","default":[]},"access_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Level"},"owner_info":{"anyOf":[{"$ref":"#/components/schemas/PageOwnerInfo"},{"type":"null"}]},"breadcrumb_path":{"items":{"$ref":"#/components/schemas/BreadcrumbCrumb"},"type":"array","title":"Breadcrumb Path","default":[]}},"type":"object","required":["id","user_id","created_at","updated_at"],"title":"PageWithBlocks"},"PairDeviceRequest":{"properties":{"name":{"type":"string","title":"Name"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},"type":"object","required":["name","redirect_uri"],"title":"PairDeviceRequest"},"PasswordChangeOTPRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"}},"type":"object","required":["current_password"],"title":"PasswordChangeOTPRequest","description":"Schema for requesting password change OTP."},"PasswordChangeRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"},"otp":{"type":"string","title":"Otp"}},"type":"object","required":["current_password","new_password","otp"],"title":"PasswordChangeRequest","description":"Schema for password change request with OTP verification."},"PinBatch":{"properties":{"block_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Block Ids"},"width":{"type":"string","enum":["full","half"],"title":"Width","default":"full"}},"type":"object","required":["block_ids"],"title":"PinBatch"},"PinCreate":{"properties":{"block_id":{"type":"string","format":"uuid","title":"Block Id"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"width":{"type":"string","enum":["full","half"],"title":"Width","default":"full"}},"type":"object","required":["block_id"],"title":"PinCreate"},"PinUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"width":{"anyOf":[{"type":"string","enum":["full","half"]},{"type":"null"}],"title":"Width"},"layout":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Layout"},"position":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Position"}},"type":"object","title":"PinUpdate"},"PortalRequest":{"properties":{"return_url":{"type":"string","title":"Return Url"}},"type":"object","required":["return_url"],"title":"PortalRequest","description":"Request to create a customer portal session."},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse","description":"Response with portal URL."},"PromoteBusinessRequest":{"properties":{"mode":{"type":"string","title":"Mode"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["mode"],"title":"PromoteBusinessRequest"},"PromotePage":{"properties":{"type":{"type":"string","title":"Type","default":"proposal"},"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Title"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"}},"type":"object","title":"PromotePage"},"RecentPageItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"type":{"type":"string","title":"Type","default":"page"},"is_project":{"type":"boolean","title":"Is Project","default":false},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Name"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"shared":{"type":"boolean","title":"Shared","default":false}},"type":"object","required":["id","title","created_at","updated_at"],"title":"RecentPageItem","description":"A page in the recently edited / recently created list."},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest","description":"Schema for refresh token request."},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest","description":"Schema for resending verification email."},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest","description":"Schema for password reset with token."},"SeatChangeResponse":{"properties":{"seats_purchased":{"type":"integer","title":"Seats Purchased"},"seats_assigned":{"type":"integer","title":"Seats Assigned"},"seats_scheduled":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Scheduled"},"effective":{"type":"string","title":"Effective"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["seats_purchased","seats_assigned","effective"],"title":"SeatChangeResponse"},"SeatPurchase":{"properties":{"seats":{"type":"integer","title":"Seats"}},"type":"object","required":["seats"],"title":"SeatPurchase","description":"Buy or release seats. `seats` is the absolute target, not a delta."},"SeatUsage":{"properties":{"member_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Member Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"transcription_seconds":{"type":"integer","title":"Transcription Seconds"},"llm_input_tokens":{"type":"integer","title":"Llm Input Tokens"},"llm_output_tokens":{"type":"integer","title":"Llm Output Tokens"},"estimated_cost_usd":{"type":"number","title":"Estimated Cost Usd"}},"type":"object","required":["transcription_seconds","llm_input_tokens","llm_output_tokens","estimated_cost_usd"],"title":"SeatUsage"},"SelectionSource":{"properties":{"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id"},"block_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Title"}},"type":"object","title":"SelectionSource","description":"Source location of a selection task."},"SelectionTaskCreate":{"properties":{"page_id":{"type":"string","format":"uuid","title":"Page Id"},"block_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Block Id"},"selection_type":{"type":"string","title":"Selection Type"},"selection_data":{"additionalProperties":true,"type":"object","title":"Selection Data"},"selection_display":{"type":"string","title":"Selection Display"},"prompt":{"type":"string","title":"Prompt"}},"type":"object","required":["page_id","selection_type","selection_data","selection_display","prompt"],"title":"SelectionTaskCreate","description":"Create a new selection task."},"SelectionTaskResponse":{"properties":{"id":{"type":"string","title":"Id"},"page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Id"},"block_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Id"},"selection_type":{"type":"string","title":"Selection Type"},"selection_data":{"additionalProperties":true,"type":"object","title":"Selection Data"},"selection_display":{"type":"string","title":"Selection Display"},"prompt":{"type":"string","title":"Prompt"},"status":{"type":"string","title":"Status"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"completed_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed Summary"},"result_page_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Result Page Id"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"source":{"anyOf":[{"$ref":"#/components/schemas/SelectionSource"},{"type":"null"}]}},"type":"object","required":["id","selection_type","selection_data","selection_display","prompt","status","notes"],"title":"SelectionTaskResponse","description":"Selection task response."},"SelectionTaskUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"completed_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed Summary"},"result_page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Result Page Id"}},"type":"object","title":"SelectionTaskUpdate","description":"Update a selection task."},"ServiceEventItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"member_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Member Email"}},"type":"object","required":["id","kind","occurred_at"],"title":"ServiceEventItem","description":"One operational event for the health feed."},"ServiceEventsResponse":{"properties":{"range":{"type":"string","title":"Range"},"total":{"type":"integer","title":"Total"},"counts":{"additionalProperties":true,"type":"object","title":"Counts"},"events":{"items":{"$ref":"#/components/schemas/ServiceEventItem"},"type":"array","title":"Events"}},"type":"object","required":["range","total","counts","events"],"title":"ServiceEventsResponse"},"ServiceKeyCreate":{"properties":{"name":{"type":"string","title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["name","scopes"],"title":"ServiceKeyCreate"},"ServiceKeyCreatedResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","key_prefix","is_active","created_at","key"],"title":"ServiceKeyCreatedResponse","description":"Returned when a service key is minted; includes the full key once."},"ServiceKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix","is_active","created_at"],"title":"ServiceKeyResponse"},"ServiceUsageResponse":{"properties":{"period_start":{"type":"string","format":"date","title":"Period Start"},"range":{"type":"string","title":"Range","default":"current"},"active_seats":{"type":"integer","title":"Active Seats"},"transcription_seconds":{"type":"integer","title":"Transcription Seconds"},"transcription_minutes_used":{"type":"number","title":"Transcription Minutes Used"},"included_minutes":{"type":"integer","title":"Included Minutes"},"minutes_remaining":{"type":"number","title":"Minutes Remaining"},"llm_input_tokens":{"type":"integer","title":"Llm Input Tokens"},"llm_output_tokens":{"type":"integer","title":"Llm Output Tokens"},"estimated_cost_usd":{"type":"number","title":"Estimated Cost Usd"},"sessions":{"type":"integer","title":"Sessions","default":0},"per_seat":{"items":{"$ref":"#/components/schemas/SeatUsage"},"type":"array","title":"Per Seat"},"series":{"items":{"$ref":"#/components/schemas/DailyUsage"},"type":"array","title":"Series","default":[]}},"type":"object","required":["period_start","active_seats","transcription_seconds","transcription_minutes_used","included_minutes","minutes_remaining","llm_input_tokens","llm_output_tokens","estimated_cost_usd","per_seat"],"title":"ServiceUsageResponse"},"ShareScope":{"type":"string","enum":["single","with_children","folder"],"title":"ShareScope","description":"Scope of sharing for pages."},"SharedFolderSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"git_remote":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Remote"},"owner":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"include_pages":{"type":"boolean","title":"Include Pages"},"shared_at":{"type":"string","format":"date-time","title":"Shared At"}},"type":"object","required":["id","name","owner","permission","include_pages","shared_at"],"title":"SharedFolderSummary","description":"Folder shared with current user."},"SharedPageSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"order":{"type":"integer","title":"Order","default":0},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"owner":{"$ref":"#/components/schemas/UserSummary"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermission"},"shared_at":{"type":"string","format":"date-time","title":"Shared At"}},"type":"object","required":["id","title","owner","permission","shared_at"],"title":"SharedPageSummary","description":"Page shared with current user."},"SharedWithMeResponse":{"properties":{"pages":{"items":{"$ref":"#/components/schemas/SharedPageSummary"},"type":"array","title":"Pages"},"folders":{"items":{"$ref":"#/components/schemas/SharedFolderSummary"},"type":"array","title":"Folders"}},"type":"object","required":["pages","folders"],"title":"SharedWithMeResponse","description":"All resources shared with current user."},"SkillCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"scope":{"$ref":"#/components/schemas/SkillScope","default":"personal"},"definition":{"$ref":"#/components/schemas/SkillDefinition-Input"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},"type":"object","required":["name","definition"],"title":"SkillCreate","description":"Create a new skill."},"SkillDefinition-Input":{"properties":{"version":{"type":"string","title":"Version","default":"1.0"},"inputs":{"items":{"$ref":"#/components/schemas/SkillInput"},"type":"array","title":"Inputs","default":[]},"workflow":{"items":{"$ref":"#/components/schemas/WorkflowStep"},"type":"array","title":"Workflow","default":[]},"guards":{"items":{"type":"string"},"type":"array","title":"Guards","default":[]}},"type":"object","title":"SkillDefinition","description":"The full skill definition stored as JSONB."},"SkillDefinition-Output":{"properties":{"version":{"type":"string","title":"Version","default":"1.0"},"inputs":{"items":{"$ref":"#/components/schemas/SkillInput"},"type":"array","title":"Inputs","default":[]},"workflow":{"items":{"$ref":"#/components/schemas/WorkflowStep"},"type":"array","title":"Workflow","default":[]},"guards":{"items":{"type":"string"},"type":"array","title":"Guards","default":[]}},"type":"object","title":"SkillDefinition","description":"The full skill definition stored as JSONB."},"SkillFork":{"properties":{"target_scope":{"$ref":"#/components/schemas/SkillScope","default":"personal"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"new_name":{"type":"string","title":"New Name"}},"type":"object","required":["new_name"],"title":"SkillFork","description":"Fork a skill to your library."},"SkillInput":{"properties":{"name":{"type":"string","title":"Name"},"type":{"$ref":"#/components/schemas/SkillInputType"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"required":{"type":"boolean","title":"Required","default":true},"default":{"anyOf":[{},{"type":"null"}],"title":"Default"},"options":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Options"}},"type":"object","required":["name","type"],"title":"SkillInput","description":"Definition of a skill input variable."},"SkillInputType":{"type":"string","enum":["text","number","boolean","file","select"],"title":"SkillInputType","description":"Input types for skill variables."},"SkillLinkRequest":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"}},"type":"object","required":["folder_id"],"title":"SkillLinkRequest","description":"Request to link a skill to a project."},"SkillLinkResponse":{"properties":{"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["skill_id","folder_id","created_at"],"title":"SkillLinkResponse","description":"Response for skill link operation."},"SkillListResponse":{"properties":{"skills":{"items":{"$ref":"#/components/schemas/SkillSummary"},"type":"array","title":"Skills"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["skills","total"],"title":"SkillListResponse","description":"Response for listing skills."},"SkillResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"scope":{"$ref":"#/components/schemas/SkillScope","default":"personal"},"definition":{"$ref":"#/components/schemas/SkillDefinition-Output"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"forked_from_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Forked From Id"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_verified":{"type":"boolean","title":"Is Verified","default":false},"linked_folder_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Linked Folder Ids","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","definition","id","user_id","created_at","updated_at"],"title":"SkillResponse","description":"Skill response."},"SkillScope":{"type":"string","enum":["personal","project","organization","public"],"title":"SkillScope","description":"Skill visibility scope."},"SkillShareCreate":{"properties":{"email":{"type":"string","title":"Email","description":"Email of user to share with"},"permission":{"$ref":"#/components/schemas/app__schemas__skill__SharePermission","default":"view"}},"type":"object","required":["email"],"title":"SkillShareCreate","description":"Create a skill share."},"SkillShareListResponse":{"properties":{"shares":{"items":{"$ref":"#/components/schemas/SkillShareResponse"},"type":"array","title":"Shares"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["shares","total"],"title":"SkillShareListResponse","description":"List of skill shares."},"SkillShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"skill_id":{"type":"string","format":"uuid","title":"Skill Id"},"shared_with_user_id":{"type":"string","format":"uuid","title":"Shared With User Id"},"shared_with_email":{"type":"string","title":"Shared With Email"},"permission":{"$ref":"#/components/schemas/app__schemas__skill__SharePermission"},"created_by":{"type":"string","format":"uuid","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","skill_id","shared_with_user_id","shared_with_email","permission","created_by","created_at"],"title":"SkillShareResponse","description":"Skill share response."},"SkillShareUpdate":{"properties":{"permission":{"$ref":"#/components/schemas/app__schemas__skill__SharePermission"}},"type":"object","required":["permission"],"title":"SkillShareUpdate","description":"Update a skill share permission."},"SkillSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"scope":{"$ref":"#/components/schemas/SkillScope"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"forked_from_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Forked From Id"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_verified":{"type":"boolean","title":"Is Verified","default":false},"linked_folder_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Linked Folder Ids","default":[]},"is_linked":{"type":"boolean","title":"Is Linked","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","scope","created_at"],"title":"SkillSummary","description":"Minimal skill info for listings."},"SkillUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"scope":{"anyOf":[{"$ref":"#/components/schemas/SkillScope"},{"type":"null"}]},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"definition":{"anyOf":[{"$ref":"#/components/schemas/SkillDefinition-Input"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified"}},"type":"object","title":"SkillUpdate","description":"Update a skill."},"SnapshotCreate":{"properties":{"format":{"type":"string","enum":["docx","pdf"],"title":"Format","default":"docx"},"label":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Label"},"role":{"type":"string","enum":["draft","sent","client_redline","signed","amendment","backup","other"],"title":"Role","default":"sent"}},"type":"object","title":"SnapshotCreate"},"SpeechRequest":{"properties":{"text":{"type":"string","maxLength":2000,"minLength":1,"title":"Text"}},"additionalProperties":false,"type":"object","required":["text"],"title":"SpeechRequest"},"TaskCompletion":{"properties":{"summary":{"type":"string","title":"Summary"},"assumptions":{"items":{"type":"string"},"type":"array","title":"Assumptions"},"attempted_but_failed":{"items":{"type":"string"},"type":"array","title":"Attempted But Failed"},"simplified_or_skipped":{"items":{"type":"string"},"type":"array","title":"Simplified Or Skipped"},"caveats":{"items":{"type":"string"},"type":"array","title":"Caveats","default":[]},"follow_ups":{"items":{"type":"string"},"type":"array","title":"Follow Ups","default":[]}},"type":"object","required":["summary","assumptions","attempted_but_failed","simplified_or_skipped"],"title":"TaskCompletion","description":"Structured completion data required when marking a task as done.\n\nForces agents to document assumptions, failed attempts, and simplifications."},"TaskCreate":{"properties":{"text":{"type":"string","title":"Text"},"skill_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Id"}},"type":"object","required":["text"],"title":"TaskCreate"},"TaskItem":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"done":{"type":"boolean","title":"Done","default":false},"assigned_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned To"},"status":{"anyOf":[{"type":"string","enum":["todo","in_progress","blocked","done"]},{"type":"null"}],"title":"Status"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes","default":[]}},"type":"object","required":["id","text"],"title":"TaskItem"},"TaskResponse":{"properties":{"block_id":{"type":"string","format":"uuid","title":"Block Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"item":{"$ref":"#/components/schemas/TaskItem"}},"type":"object","required":["block_id","page_id","item"],"title":"TaskResponse"},"TaskUpdate":{"properties":{"done":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Done"},"status":{"anyOf":[{"type":"string","enum":["todo","in_progress","blocked","done"]},{"type":"null"}],"title":"Status"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"skill_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Skill Id"},"completion":{"anyOf":[{"$ref":"#/components/schemas/TaskCompletion"},{"type":"null"}]},"reopen_feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reopen Feedback"}},"type":"object","title":"TaskUpdate"},"TierLimitsResponse":{"properties":{"api_calls":{"type":"integer","title":"Api Calls"},"storage_bytes":{"type":"integer","title":"Storage Bytes"},"folders":{"type":"integer","title":"Folders"},"project_skills":{"type":"integer","title":"Project Skills"},"workers":{"type":"integer","title":"Workers"}},"type":"object","required":["api_calls","storage_bytes","folders","project_skills","workers"],"title":"TierLimitsResponse","description":"Limits for a tier."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","refresh_token","user"],"title":"TokenResponse","description":"Schema for token response."},"TransferOwnershipRequest":{"properties":{"new_owner_user_id":{"type":"string","format":"uuid","title":"New Owner User Id"}},"type":"object","required":["new_owner_user_id"],"title":"TransferOwnershipRequest"},"Turn":{"properties":{"message":{"type":"string","maxLength":4000,"minLength":1,"title":"Message"},"history":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","maxItems":12,"title":"History"},"selected_block_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Selected Block Id"}},"additionalProperties":false,"type":"object","required":["message"],"title":"Turn"},"UnifiedBlockResult":{"properties":{"result_type":{"type":"string","const":"block","title":"Result Type","default":"block"},"block_id":{"type":"string","format":"uuid","title":"Block Id"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"page_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Title"},"block_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Title"},"block_type":{"$ref":"#/components/schemas/BlockType"},"snippet":{"type":"string","title":"Snippet"},"match_start":{"type":"integer","title":"Match Start"},"match_end":{"type":"integer","title":"Match End"},"size_bytes":{"type":"integer","title":"Size Bytes"},"content_type":{"type":"string","title":"Content Type"},"rank":{"type":"number","title":"Rank"}},"type":"object","required":["block_id","page_id","page_title","block_title","block_type","snippet","match_start","match_end","size_bytes","content_type","rank"],"title":"UnifiedBlockResult","description":"Block match in unified search."},"UnifiedPageResult":{"properties":{"result_type":{"type":"string","const":"page","title":"Result Type","default":"page"},"page_id":{"type":"string","format":"uuid","title":"Page Id"},"page_title":{"type":"string","title":"Page Title"},"root_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Path"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"rank":{"type":"number","title":"Rank"},"match_type":{"type":"string","title":"Match Type"}},"type":"object","required":["page_id","page_title","rank","match_type"],"title":"UnifiedPageResult","description":"Page match in unified search."},"UnifiedSearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"pages":{"items":{"$ref":"#/components/schemas/UnifiedPageResult"},"type":"array","title":"Pages"},"blocks":{"items":{"$ref":"#/components/schemas/UnifiedBlockResult"},"type":"array","title":"Blocks"},"total_pages":{"type":"integer","title":"Total Pages"},"total_blocks":{"type":"integer","title":"Total Blocks"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["query","pages","blocks","total_pages","total_blocks","limit","offset"],"title":"UnifiedSearchResponse","description":"Combined search results from pages and blocks."},"UpgradeRequest":{"properties":{"duration_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Days","default":90},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"UpgradeRequest"},"UploadUrlRequest":{"properties":{"filename":{"type":"string","title":"Filename"},"mime_type":{"type":"string","title":"Mime Type"},"page_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Page Id"}},"type":"object","required":["filename","mime_type"],"title":"UploadUrlRequest","description":"Request for presigned upload URL."},"UploadUrlResponse":{"properties":{"file_id":{"type":"string","format":"uuid","title":"File Id"},"upload_url":{"type":"string","title":"Upload Url"},"s3_key":{"type":"string","title":"S3 Key"},"expires_in":{"type":"integer","title":"Expires In","default":900},"mime_type":{"type":"string","title":"Mime Type"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["file_id","upload_url","s3_key","mime_type","filename"],"title":"UploadUrlResponse","description":"Response with presigned upload URL."},"UsageResponse":{"properties":{"api_calls":{"type":"integer","title":"Api Calls"},"storage_bytes":{"type":"integer","title":"Storage Bytes"},"folders":{"type":"integer","title":"Folders"},"project_skills":{"type":"integer","title":"Project Skills"},"period_start":{"type":"string","format":"date","title":"Period Start"},"limits":{"$ref":"#/components/schemas/TierLimitsResponse"},"api_calls_percent":{"type":"number","title":"Api Calls Percent"},"storage_percent":{"type":"number","title":"Storage Percent"},"folders_percent":{"type":"number","title":"Folders Percent"},"project_skills_percent":{"type":"number","title":"Project Skills Percent"},"tier":{"type":"string","title":"Tier"},"in_grace_period":{"type":"boolean","title":"In Grace Period","default":false},"grace_period_ends":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Grace Period Ends"},"over_api_calls_limit":{"type":"boolean","title":"Over Api Calls Limit","default":false},"over_storage_limit":{"type":"boolean","title":"Over Storage Limit","default":false},"over_folders_limit":{"type":"boolean","title":"Over Folders Limit","default":false},"over_project_skills_limit":{"type":"boolean","title":"Over Project Skills Limit","default":false}},"type":"object","required":["api_calls","storage_bytes","folders","project_skills","period_start","limits","api_calls_percent","storage_percent","folders_percent","project_skills_percent","tier"],"title":"UsageResponse","description":"Current usage stats."},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserCreate","description":"Schema for user registration."},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin","description":"Schema for user login."},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"is_admin":{"type":"boolean","title":"Is Admin"},"admin_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Role"},"must_change_password":{"type":"boolean","title":"Must Change Password"},"email_verified":{"type":"boolean","title":"Email Verified"},"tier":{"type":"string","title":"Tier","default":"free"},"chat_logging_enabled":{"type":"boolean","title":"Chat Logging Enabled","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","email","is_admin","must_change_password","email_verified","created_at","updated_at"],"title":"UserResponse","description":"Schema for user response (excludes password)."},"UserSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["id","email"],"title":"UserSummary","description":"Minimal user info for display in shares."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyEmailRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailRequest","description":"Schema for email verification."},"VirtualTicketUpdate":{"properties":{"stage":{"anyOf":[{"type":"string","enum":["todo","in_progress","blocked","done"]},{"type":"null"}],"title":"Stage"},"text":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Text"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"completion":{"anyOf":[{"$ref":"#/components/schemas/TaskCompletion"},{"type":"null"}]}},"type":"object","title":"VirtualTicketUpdate"},"WorkflowStep":{"properties":{"type":{"type":"string","title":"Type","default":"step"},"name":{"type":"string","title":"Name"},"title":{"type":"string","title":"Title"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","title"],"title":"WorkflowStep","description":"A step in the skill workflow."},"app__schemas__share__SharePermission":{"type":"string","enum":["view","edit","admin"],"title":"SharePermission","description":"Permission levels for shared resources."},"app__schemas__skill__SharePermission":{"type":"string","enum":["view","edit","admin"],"title":"SharePermission","description":"Permission levels for shared skills."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}