{"openapi":"3.1.0","info":{"title":"Gnosari API","description":"Gnosari API with JWT and API Key authentication","version":"1.0.0"},"paths":{"/api/v1/login/access-token":{"post":{"tags":["login"],"summary":"Login Access Token","operationId":"login_access_token_api_v1_login_access_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/":{"get":{"tags":["users"],"summary":"Read Users","description":"Retrieve users scoped to the current user's account.","operationId":"read_users_api_v1_users__get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of users to skip","default":0,"title":"Skip"},"description":"Number of users to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of users to return","default":100,"title":"Limit"},"description":"Number of users to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserPublic"},"title":"Response Read Users Api V1 Users  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create User","description":"Create new user and return an access token.\n\nReturns both the created user profile and a JWT access token so the\nclient can authenticate immediately without a separate login call.\n\nThe signup locale is negotiated from the ``Accept-Language`` header (the\nNuxt proxy forwards the active UI locale) and persisted on the new user.\nThe service mints the email-verification token and emits the enriched\n``user.registered`` (A1) event -- A1 IS the verify-email automation, so the\npayload carries the verification link -- in this same transaction, BEFORE\nthe endpoint-owned commit.\n\nOn success, schedules an onboarding task in ConvOps as a background task —\nfailure-isolated and disabled by default (see ``integrations.convops``).","operationId":"create_user_api_v1_users__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/users/me":{"get":{"tags":["users"],"summary":"Read User Me","description":"Get current user profile.","operationId":"read_user_me_api_v1_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["users"],"summary":"Update User Me","description":"Update current user.","operationId":"update_user_me_api_v1_users_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/users/{user_id}":{"get":{"tags":["users"],"summary":"Read User","description":"Get user by ID.\nUsers can access their own data or data within the same account.","operationId":"read_user_api_v1_users__user_id__get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update User","description":"Update user.\nUsers can update their own data or data within the same account.","operationId":"update_user_api_v1_users__user_id__put","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete user.\nSelf-delete only — no cross-user deletion.","operationId":"delete_user_api_v1_users__user_id__delete","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents":{"get":{"tags":["agents"],"summary":"Read Agents","description":"Retrieve agents for current user's account.\n\nArgs:\n    sort_by: Field to sort by (updated_at, created_at, name). Default: updated_at\n    sort_order: Sort order (asc, desc). Default: desc","operationId":"read_agents_api_v1_agents_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"updated_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Order"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_Agent_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["agents"],"summary":"Create Agent","description":"Create new agent.\nSupports both IDs and identifiers for traits, knowledge sources, and tools.\nAuto-generates identifier from name if not provided.","operationId":"create_agent_api_v1_agents_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agents/directory":{"get":{"tags":["agents"],"summary":"Read Agent Directory","description":"Lean, alphabetical agent rows for pickers (id, name, uri, avatar, access, accent).","operationId":"read_agent_directory_api_v1_agents_directory_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_AgentDirectoryItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agents/{agent_id_or_identifier}":{"get":{"tags":["agents"],"summary":"Read Agent","description":"Get agent by ID or identifier.\n\nRequires authentication (JWT or API key). Returns the full agent\nfor the authenticated user's account only.\n\nSupports both numeric IDs (e.g., 123) and string identifiers\n(e.g., \"customer-support-agent\").","operationId":"read_agent_api_v1_agents__agent_id_or_identifier__get","parameters":[{"name":"agent_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Agent Id Or Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["agents"],"summary":"Update Agent","description":"Update an agent.\nSupports both numeric IDs and string identifiers for the agent.\nAlso supports both IDs and identifiers for traits, knowledge sources, and tools.","operationId":"update_agent_api_v1_agents__agent_id_or_identifier__put","parameters":[{"name":"agent_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Agent Id Or Identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["agents"],"summary":"Delete Agent","description":"Delete an agent.\nSupports both numeric IDs and string identifiers.\n\nIf the agent has collected data and ``force`` is not set, returns 409 with\n``{\"detail\": ..., \"collected_count\": N}``. Retry with ``?force=true`` to\ncascade-delete the collected rows (returns 204).","operationId":"delete_agent_api_v1_agents__agent_id_or_identifier__delete","parameters":[{"name":"agent_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Agent Id Or Identifier"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Cascade-delete the agent's collected data (extracted entities)","default":false,"title":"Force"},"description":"Cascade-delete the agent's collected data (extracted entities)"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agents/{agent_id_or_identifier}/traits":{"put":{"tags":["agents"],"summary":"Update Agent Traits","description":"Update agent traits specifically.\nSupports both numeric IDs and string identifiers for the agent.\n\nRequest body:\n    {\"trait_ids\": [1, 2, 3]}","operationId":"update_agent_traits_api_v1_agents__agent_id_or_identifier__traits_put","parameters":[{"name":"agent_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Agent Id Or Identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_update_agent_traits_api_v1_agents__agent_id_or_identifier__traits_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Agent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"get":{"tags":["agents"],"summary":"Get Agent Traits","description":"Get traits associated with an agent.\nSupports both numeric IDs and string identifiers for the agent.","operationId":"get_agent_traits_api_v1_agents__agent_id_or_identifier__traits_get","parameters":[{"name":"agent_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Agent Id Or Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Trait"},"title":"Response Get Agent Traits Api V1 Agents  Agent Id Or Identifier  Traits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/teams":{"get":{"tags":["teams"],"summary":"Read Teams","description":"Retrieve teams for current user's account.\n\nArgs:\n    sort_by: Field to sort by (updated_at, created_at, name). Default: updated_at\n    sort_order: Sort order (asc, desc). Default: desc","operationId":"read_teams_api_v1_teams_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"updated_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Order"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_Team_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["teams"],"summary":"Create Team","description":"Create new team.\nAuto-generates identifier from name if not provided.","operationId":"create_team_api_v1_teams_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamApiCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/teams/{team_id_or_identifier}":{"get":{"tags":["teams"],"summary":"Read Team","description":"Get team by ID or identifier.\n\nRequires authentication (JWT or API key). Returns the full team\nfor the authenticated user's account only.\n\nSupports both numeric IDs (e.g., 123) and string identifiers\n(e.g., \"dev-team\").","operationId":"read_team_api_v1_teams__team_id_or_identifier__get","parameters":[{"name":"team_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Team Id Or Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["teams"],"summary":"Update Team","description":"Update a team.\nSupports both numeric IDs and string identifiers.","operationId":"update_team_api_v1_teams__team_id_or_identifier__put","parameters":[{"name":"team_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Team Id Or Identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamApiUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["teams"],"summary":"Delete Team","description":"Delete a team.\nSupports both numeric IDs and string identifiers.","operationId":"delete_team_api_v1_teams__team_id_or_identifier__delete","parameters":[{"name":"team_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Team Id Or Identifier"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/teams/config":{"post":{"tags":["teams"],"summary":"Push Team Config","description":"Create a team from comprehensive JSON configuration.\n\nAccepts JSON with complete modular team configuration including:\n- Agents with events, traits, delegations\n- Tools with MCP server configurations\n- Knowledge sources with processing configurations\n- Traits with categories and tags\n- Hierarchical overrides\n- Component inclusion/exclusion filters\n\nAuthentication:\n- JWT Token: Authorization: Bearer <jwt_token>\n- API Key: X-AUTH-TOKEN: <api_key>\n\nNote: Master API keys cannot create teams. Use an account-specific API key or JWT token.","operationId":"push_team_config_api_v1_teams_config_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamConfigSchema-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/teams/{identifier}/config":{"get":{"tags":["teams"],"summary":"Pull Team Config","description":"Get comprehensive team configuration as JSON.\n\nReturns complete modular team configuration including:\n- All agents with event listeners, traits, delegations\n- All tools with MCP configurations\n- All knowledge sources with processing configurations\n- All traits with metadata\n- Component overrides\n- Full component relationship mapping\n\nAuthentication:\n- JWT Token: Authorization: Bearer <jwt_token>\n- API Key: X-AUTH-TOKEN: <api_key>","operationId":"pull_team_config_api_v1_teams__identifier__config_get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamConfigSchema-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/documents":{"get":{"tags":["knowledge-documents"],"summary":"List Documents","description":"List indexed knowledge documents with pagination and filtering.\n\nReturns documents from the user's account with optional filtering\nby source. Documents are retrieved from OpenSearch.\n\n**Filters:**\n- `source_id`: Filter to documents from a specific knowledge source\n\n**Pagination:**\n- `limit`: Number of documents per page (default: 50, max: 100)\n- `offset`: Number of documents to skip\n\n**Security:**\nThe index is determined by the authenticated user's account ID.\nUsers can only access documents from their own account.","operationId":"list_documents_api_v1_knowledge_documents_get","parameters":[{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source ID","title":"Source Id"},"description":"Filter by source ID"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_DocumentSummary_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/documents/search":{"post":{"tags":["knowledge-documents"],"summary":"Search Documents","description":"Search indexed knowledge documents with mode selection.\n\nSupports three search modes:\n- `semantic`: Vector similarity search using embeddings (best for conceptual queries)\n- `keyword`: Traditional text-based search (best for exact matches)\n- `hybrid`: Combination of both (recommended, default)\n\n**Request Body:**\n- `query`: Search query text (required, 1-1000 characters)\n- `mode`: Search mode (semantic, keyword, hybrid). Default: hybrid\n- `source_ids`: Optional list of source IDs to filter by\n- `limit`: Maximum results (1-100). Default: 20\n- `offset`: Number of results to skip. Default: 0\n\n**Response:**\n- `results`: List of search results with relevance scores\n- `total`: Total matching documents\n- `mode_used`: The search mode that was used\n\n**Scores:**\nEach result includes:\n- `score`: Raw relevance score from search engine\n- `normalized_score`: Score normalized to 0-100 range (100 = best match)\n\n**Security:**\nSearch is scoped to the authenticated user's account index.","operationId":"search_documents_api_v1_knowledge_documents_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/documents/stats":{"get":{"tags":["knowledge-documents"],"summary":"Get Index Stats","description":"Get statistics about the user's knowledge index.\n\nReturns information about the total number of documents\nand index status.\n\n**Security:**\nStatistics are scoped to the authenticated user's account.","operationId":"get_index_stats_api_v1_knowledge_documents_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexStats"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/documents/{document_id}":{"get":{"tags":["knowledge-documents"],"summary":"Get Document","description":"Get a single document by ID.\n\nReturns the full document content and metadata. The document\nmust belong to the authenticated user's account.\n\n**Path Parameters:**\n- `document_id`: OpenSearch document ID\n\n**Security:**\nDocuments are retrieved from the user's account-specific index.\nUsers can only access documents from their own account.","operationId":"get_document_api_v1_knowledge_documents__document_id__get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["knowledge-documents"],"summary":"Delete Document","description":"Queue document deletion (async).\n\nReturns immediately with job_id. Actual deletion happens in background.\nThe document will be removed from OpenSearch.\n\n**Path Parameters:**\n- `document_id`: OpenSearch document ID to delete\n\n**Security:**\nDocuments are deleted from the user's account-specific index.\nUsers can only delete documents from their own account.\n\n**Tracking:**\nPoll the document endpoint - if it returns 404, deletion is complete.","operationId":"delete_document_api_v1_knowledge_documents__document_id__delete","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge":{"get":{"tags":["knowledge"],"summary":"Read Knowledge Sources","description":"Retrieve knowledge sources for current user's account.\n\nFilters:\n- status: Filter by active/inactive status","operationId":"read_knowledge_sources_api_v1_knowledge_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by (updated_at, created_at, name)","default":"updated_at","title":"Sort By"},"description":"Field to sort by (updated_at, created_at, name)"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc, desc)","default":"desc","title":"Sort Order"},"description":"Sort order (asc, desc)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_KnowledgeSource_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["knowledge"],"summary":"Create Knowledge Source","description":"Create new knowledge source.\n\nIf auto_load=True (default), the knowledge source will be automatically\nloaded asynchronously via the neoqueue outbox. The loading status can be\ntracked by polling GET /knowledge/{id}.","operationId":"create_knowledge_source_api_v1_knowledge_post","parameters":[{"name":"auto_load","in":"query","required":false,"schema":{"type":"boolean","description":"Automatically load knowledge source after creation","default":true,"title":"Auto Load"},"description":"Automatically load knowledge source after creation"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSourceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSource"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/{knowledge_source_id}":{"get":{"tags":["knowledge"],"summary":"Read Knowledge Source","description":"Get knowledge source by ID.","operationId":"read_knowledge_source_api_v1_knowledge__knowledge_source_id__get","parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"integer","title":"Knowledge Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSource"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["knowledge"],"summary":"Update Knowledge Source","description":"Update a knowledge source.","operationId":"update_knowledge_source_api_v1_knowledge__knowledge_source_id__put","parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"integer","title":"Knowledge Source Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSourceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSource"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["knowledge"],"summary":"Delete Knowledge Source","description":"Queue knowledge source deletion (async).\n\nReturns immediately with job_id. Actual deletion happens in background.\nAll documents indexed from this source will be deleted from OpenSearch,\nthen the PostgreSQL record will be removed.\n\n**Deletion Flow:**\n1. All documents in OpenSearch are deleted asynchronously\n2. PostgreSQL source record is deleted\n\n**Tracking:**\nPoll the source endpoint - if it returns 404, deletion is complete.","operationId":"delete_knowledge_source_api_v1_knowledge__knowledge_source_id__delete","parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"integer","title":"Knowledge Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/knowledge/{knowledge_source_id}/preload":{"post":{"tags":["knowledge"],"summary":"Preload Knowledge Source","description":"Trigger asynchronous preload of a knowledge source.\n\nThis endpoint records a domain event via the neoqueue outbox pattern.\nThe actual loading happens asynchronously via the outbox dispatcher.\n\nTo track progress, poll GET /knowledge/{id} and check the loading_status field:\n- unloaded: Not yet loaded\n- loading: Currently being loaded\n- loaded: Successfully loaded\n- failed: Loading failed","operationId":"preload_knowledge_source_api_v1_knowledge__knowledge_source_id__preload_post","parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"integer","title":"Knowledge Source Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"string","description":"Force reload even if already loaded","default":"true","title":"Force"},"description":"Force reload even if already loaded"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreloadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/tasks":{"get":{"tags":["tasks"],"summary":"Read Tasks","description":"Retrieve tasks for current user's account with filtering options.","operationId":"read_tasks_api_v1_tasks_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by assigned team","title":"Team Id"},"description":"Filter by assigned team"},{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by assigned agent","title":"Agent Id"},"description":"Filter by assigned agent"},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by parent task (subtasks)","title":"Parent Id"},"description":"Filter by parent task (subtasks)"},{"name":"task_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by task type","title":"Task Type"},"description":"Filter by task type"},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by session","title":"Session Id"},"description":"Filter by session"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Task"},"title":"Response Read Tasks Api V1 Tasks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["tasks"],"summary":"Create Task","description":"Create new task with all relationships and dependencies.","operationId":"create_task_api_v1_tasks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/tasks/{task_id}":{"get":{"tags":["tasks"],"summary":"Read Task","description":"Get task by ID with all resolved relations.","operationId":"read_task_api_v1_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["tasks"],"summary":"Update Task","description":"Update a task with dependencies and relationships.","operationId":"update_task_api_v1_tasks__task_id__put","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","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/Task"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["tasks"],"summary":"Delete Task","description":"Delete a task and its dependencies.","operationId":"delete_task_api_v1_tasks__task_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/tasks/{task_id}/subtasks":{"get":{"tags":["tasks"],"summary":"Read Subtasks","description":"Get all subtasks for a given task.","operationId":"read_subtasks_api_v1_tasks__task_id__subtasks_get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Task"},"title":"Response Read Subtasks Api V1 Tasks  Task Id  Subtasks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/tasks/{task_id}/dependencies/{dependency_id}":{"post":{"tags":["tasks"],"summary":"Add Dependency","description":"Add a dependency to a task.","operationId":"add_dependency_api_v1_tasks__task_id__dependencies__dependency_id__post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"dependency_id","in":"path","required":true,"schema":{"type":"integer","title":"Dependency Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["tasks"],"summary":"Remove Dependency","description":"Remove a dependency from a task.","operationId":"remove_dependency_api_v1_tasks__task_id__dependencies__dependency_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"dependency_id","in":"path","required":true,"schema":{"type":"integer","title":"Dependency Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/scheduled-tasks":{"get":{"tags":["scheduled-tasks"],"summary":"Read Scheduled Tasks","description":"Retrieve scheduled tasks for current user's account.","operationId":"read_scheduled_tasks_api_v1_scheduled_tasks_get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ScheduledTask_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["scheduled-tasks"],"summary":"Create Scheduled Task","description":"Create new scheduled task.","operationId":"create_scheduled_task_api_v1_scheduled_tasks_post","security":[{"Bearer":[]},{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTaskCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTask"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scheduled-tasks/{scheduled_task_id}":{"get":{"tags":["scheduled-tasks"],"summary":"Read Scheduled Task","description":"Get scheduled task by ID.","operationId":"read_scheduled_task_api_v1_scheduled_tasks__scheduled_task_id__get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"scheduled_task_id","in":"path","required":true,"schema":{"type":"integer","title":"Scheduled Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTask"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["scheduled-tasks"],"summary":"Update Scheduled Task","description":"Update a scheduled task.","operationId":"update_scheduled_task_api_v1_scheduled_tasks__scheduled_task_id__put","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"scheduled_task_id","in":"path","required":true,"schema":{"type":"integer","title":"Scheduled Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTaskUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledTask"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["scheduled-tasks"],"summary":"Delete Scheduled Task","description":"Delete a scheduled task.","operationId":"delete_scheduled_task_api_v1_scheduled_tasks__scheduled_task_id__delete","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"scheduled_task_id","in":"path","required":true,"schema":{"type":"integer","title":"Scheduled Task Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account-api-keys":{"get":{"tags":["account-api-keys"],"summary":"Read Api Keys","description":"Retrieve API keys for current user's account.","operationId":"read_api_keys_api_v1_account_api_keys_get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AccountApiKey"},"title":"Response Read Api Keys Api V1 Account Api Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["account-api-keys"],"summary":"Create Api Key","description":"Create new API key.","operationId":"create_api_key_api_v1_account_api_keys_post","security":[{"Bearer":[]},{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountApiKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountApiKeyCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account-api-keys/{api_key_id}":{"get":{"tags":["account-api-keys"],"summary":"Read Api Key","description":"Get API key by ID.","operationId":"read_api_key_api_v1_account_api_keys__api_key_id__get","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountApiKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["account-api-keys"],"summary":"Update Api Key","description":"Update API key (only name and status can be updated).","operationId":"update_api_key_api_v1_account_api_keys__api_key_id__put","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountApiKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountApiKey"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["account-api-keys"],"summary":"Delete Api Key","description":"Delete an API key.","operationId":"delete_api_key_api_v1_account_api_keys__api_key_id__delete","security":[{"Bearer":[]},{"ApiKey":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"integer","title":"Api Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tools":{"get":{"tags":["tools"],"summary":"Read Tools","description":"Retrieve tools for current user's account.","operationId":"read_tools_api_v1_tools_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_Tool_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["tools"],"summary":"Create Tool","description":"Create new tool.","operationId":"create_tool_api_v1_tools_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tool"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/tools/{tool_id}":{"get":{"tags":["tools"],"summary":"Read Tool","description":"Get tool by ID.","operationId":"read_tool_api_v1_tools__tool_id__get","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"integer","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tool"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["tools"],"summary":"Update Tool","description":"Update a tool.","operationId":"update_tool_api_v1_tools__tool_id__put","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"integer","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tool"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["tools"],"summary":"Delete Tool","description":"Delete a tool.","operationId":"delete_tool_api_v1_tools__tool_id__delete","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"integer","title":"Tool Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/traits":{"get":{"tags":["traits"],"summary":"Read Traits","description":"Retrieve traits for current user's account.","operationId":"read_traits_api_v1_traits_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by (updated_at, created_at, name)","default":"updated_at","title":"Sort By"},"description":"Field to sort by (updated_at, created_at, name)"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc, desc)","default":"desc","title":"Sort Order"},"description":"Sort order (asc, desc)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_TraitRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["traits"],"summary":"Create Trait Endpoint","description":"Create new trait.","operationId":"create_trait_endpoint_api_v1_traits_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/traits/categories":{"get":{"tags":["traits"],"summary":"Read Trait Categories","description":"Retrieve trait categories.","operationId":"read_trait_categories_api_v1_traits_categories_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_TraitCategoryRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["traits"],"summary":"Create Trait Category","description":"Create new trait category.","operationId":"create_trait_category_api_v1_traits_categories_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitCategoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitCategoryRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/traits/tags":{"get":{"tags":["traits"],"summary":"Read Trait Tags","description":"Retrieve trait tags.","operationId":"read_trait_tags_api_v1_traits_tags_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_TraitTagRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["traits"],"summary":"Create Trait Tag","description":"Create new trait tag.","operationId":"create_trait_tag_api_v1_traits_tags_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitTagCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitTagRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/traits/{trait_id}":{"get":{"tags":["traits"],"summary":"Read Trait","description":"Get trait by ID.","operationId":"read_trait_api_v1_traits__trait_id__get","parameters":[{"name":"trait_id","in":"path","required":true,"schema":{"type":"integer","title":"Trait Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["traits"],"summary":"Update Trait Endpoint","description":"Update a trait.","operationId":"update_trait_endpoint_api_v1_traits__trait_id__put","parameters":[{"name":"trait_id","in":"path","required":true,"schema":{"type":"integer","title":"Trait Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraitRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["traits"],"summary":"Delete Trait Endpoint","description":"Delete a trait.","operationId":"delete_trait_endpoint_api_v1_traits__trait_id__delete","parameters":[{"name":"trait_id","in":"path","required":true,"schema":{"type":"integer","title":"Trait Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes":{"get":{"tags":["chat-themes"],"summary":"Read Chat Themes","description":"Retrieve chat themes for current user's account.\n\nReturns themes with agent_count showing how many agents use each theme.","operationId":"read_chat_themes_api_v1_chat_themes_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by (updated_at, created_at, name)","default":"updated_at","title":"Sort By"},"description":"Field to sort by (updated_at, created_at, name)"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc, desc)","default":"desc","title":"Sort Order"},"description":"Sort order (asc, desc)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ChatThemeList_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["chat-themes"],"summary":"Create Chat Theme","description":"Create a new chat theme.\n\nIf no identifier is provided, one will be generated from the name.\n\nThe ``configuration`` blob is normalized + validated on write (the single\nfunnel shared with MCP). It must be a canonical v2 document\n(``{version, branding, defaults}``); a legacy-shaped blob (top-level\n``ui``/``appearance``/``content``/``features``, or missing ``branding``) or an\ninvalid token (bad hex, non-allowlisted font, bad enum) yields a **400**\n(RFC 9457) whose detail names the exact offending key. An omitted/empty\nconfiguration defaults to the canonical v2 bundle.","operationId":"create_chat_theme_api_v1_chat_themes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatThemeCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes/{theme_id}":{"get":{"tags":["chat-themes"],"summary":"Read Chat Theme","description":"Get a specific chat theme by ID.","operationId":"read_chat_theme_api_v1_chat_themes__theme_id__get","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["chat-themes"],"summary":"Update Chat Theme","description":"Update a chat theme (partial update — only sent fields change).\n\nNOTE: Sending ``is_default: true`` via PUT DOES cascade here (it unsets other\ndefaults for the account before applying the update); the dedicated\n``POST /{theme_id}/set-default`` endpoint is the explicit way to do the same.\n\nThe ``configuration`` blob is normalized + validated on write ONLY when it is\npresent in the payload (full-replace of the blob — senders must ship a\ncomplete v2 ``configuration``). A PUT that omits ``configuration`` updates the\nother fields without touching/validating the blob. A legacy-shaped or\ninvalid-token ``configuration`` yields a **400** (RFC 9457) naming the\noffending key (the same normalize-on-write funnel used by MCP).","operationId":"update_chat_theme_api_v1_chat_themes__theme_id__put","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatThemeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["chat-themes"],"summary":"Delete Chat Theme","description":"Delete a chat theme.\n\nCannot delete a theme that is being used by agents.","operationId":"delete_chat_theme_api_v1_chat_themes__theme_id__delete","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes/{theme_id}/set-default":{"post":{"tags":["chat-themes"],"summary":"Set Default Theme","description":"Set a chat theme as the default for new agents.\n\nOnly one theme can be default at a time - setting a new default\nwill automatically unset the previous default.","operationId":"set_default_theme_api_v1_chat_themes__theme_id__set_default_post","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes/{theme_id}/clear-default":{"post":{"tags":["chat-themes"],"summary":"Clear Default Theme","description":"Remove default status from a chat theme.","operationId":"clear_default_theme_api_v1_chat_themes__theme_id__clear_default_post","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes/{theme_id}/duplicate":{"post":{"tags":["chat-themes"],"summary":"Duplicate Chat Theme","description":"Duplicate a chat theme with a new name.\n\nCreates an exact copy of the theme's configuration with a new name and identifier.\nThe duplicated theme will not be marked as default.","operationId":"duplicate_chat_theme_api_v1_chat_themes__theme_id__duplicate_post","parameters":[{"name":"theme_id","in":"path","required":true,"schema":{"type":"integer","title":"Theme Id"}},{"name":"new_name","in":"query","required":true,"schema":{"type":"string","description":"Name for the duplicated theme","title":"New Name"},"description":"Name for the duplicated theme"}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/chat-themes/identifier/{identifier}":{"get":{"tags":["chat-themes"],"summary":"Read Chat Theme By Identifier","description":"Get a chat theme by its identifier.","operationId":"read_chat_theme_by_identifier_api_v1_chat_themes_identifier__identifier__get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTheme"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/domains":{"get":{"tags":["domains"],"summary":"Read Domains","description":"Retrieve available domains for current user's account.\n\nReturns system domains (available to all) plus any account-specific domains.\nEach domain includes an agent_count showing how many agents use it.","operationId":"read_domains_api_v1_domains_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_DomainListRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["domains"],"summary":"Create Domain","description":"Create a new domain (admin only for system domains).\n\nRegular users can only create account-specific domains.","operationId":"create_domain_api_v1_domains_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/domains/default":{"get":{"tags":["domains"],"summary":"Get Default Domain","description":"Get the default domain for agent publication.\n\nReturns account-specific default first, then falls back to system default.","operationId":"get_default_domain_api_v1_domains_default_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRead"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/domains/{domain_id}":{"get":{"tags":["domains"],"summary":"Read Domain","description":"Get a specific domain by ID.","operationId":"read_domain_api_v1_domains__domain_id__get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"integer","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["domains"],"summary":"Update Domain","description":"Update a domain (admin only for system domains).","operationId":"update_domain_api_v1_domains__domain_id__put","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"integer","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["domains"],"summary":"Delete Domain","description":"Delete a domain.\n\nCannot delete a domain that is being used by agents.\nCannot delete system domains.","operationId":"delete_domain_api_v1_domains__domain_id__delete","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"integer","title":"Domain Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/domains/{domain_id}/check-uri":{"get":{"tags":["domains"],"summary":"Check Uri Availability","description":"Check if a URI is available within a domain.\n\nReturns availability status and the full URL if available.\nUse exclude_agent_id when updating an agent to exclude its own URI.","operationId":"check_uri_availability_api_v1_domains__domain_id__check_uri_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"integer","title":"Domain Id"}},{"name":"uri","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":255,"description":"URI to check","title":"Uri"},"description":"URI to check"},{"name":"exclude_agent_id","in":"query","required":false,"schema":{"type":"integer","description":"Agent ID to exclude from check (for updates)","title":"Exclude Agent Id"},"description":"Agent ID to exclude from check (for updates)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UriAvailabilityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/resolve":{"get":{"tags":["resolve"],"summary":"Resolve Uri","description":"Resolve a URI to its corresponding agent.\n\n**URI Format:** The agent's URI path (e.g., `my-assistant`)\n\n**Example:** `/api/v1/resolve?uri=my-assistant`\n\n**Access Control:**\n- PUBLIC agents: No authentication required\n- PASSWORD_PROTECTED agents: Requires `X-Access-Password` header\n- PRIVATE agents: Requires user authentication (Bearer token or API key)\n\n**Authentication Methods:**\n- Bearer token: `Authorization: Bearer <jwt_token>`\n- API key: `X-AUTH-TOKEN: <api_key>`\n\n**Password-Protected Access:**\n- Header: `X-Access-Password: <password>`\n\n**Theme resolution:** an agent with no explicitly-assigned theme inherits\nthe account's default chat theme (the one marked \"Set as default\"). The\ninherited theme is returned in `chat_theme`; the agent's own\n`chat_theme_id` stays `null` (it is inheriting, not owning). With no\naccount default, `chat_theme` is `null` and the client uses its built-in\ndefault.\n\nReturns:\n    Agent object if found and access is granted\n\nRaises:\n    404: Agent not found\n    401: Authentication required (for password-protected or private agents)\n    403: Access denied (wrong password or insufficient permissions)","operationId":"resolve_uri_api_v1_resolve_get","parameters":[{"name":"uri","in":"query","required":true,"schema":{"type":"string","description":"Agent URI path to resolve (e.g., 'my-assistant')","title":"Uri"},"description":"Agent URI path to resolve (e.g., 'my-assistant')"},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPublicResolve"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/resolve/l/{slug}":{"get":{"tags":["resolve"],"summary":"Resolve Link Slug","description":"Resolve an agent-link slug to its public presentation payload.\n\n**Public endpoint -- no authentication required.**\n\nReturns the ``LinkResolveResponse`` the embed page renders directly:\nagent public data, ``presentation``, ``topic``, a server-resolved\n``greeting``, and the effective theme. Atomically increments the link's\nvisit counter (sole increment site).\n\nRaises:\n    404: Unknown slug (anti-enumeration).\n    410: Link expired, or its agent was deleted.\n    422: Malformed slug (boundary guard, before any DB lookup).","operationId":"resolve_link_slug_api_v1_resolve_l__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":50,"pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/resolve/qr/{slug}":{"get":{"tags":["resolve"],"summary":"Resolve Qr Slug","description":"Legacy alias for printed QR codes -- resolves from ``agent_link``.\n\n**Public endpoint -- no authentication required.**\n\nPhysical QR artifacts encode ``/q/{slug}`` -> ``/resolve/qr/{slug}`` and\ncannot be reprinted, so this alias keeps them working by resolving the\nbackfilled slug from ``agent_link`` with the SAME response shape and the\nsame boundary guard as ``/resolve/l/{slug}``.","operationId":"resolve_qr_slug_api_v1_resolve_qr__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":50,"pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/sessions":{"get":{"tags":["sessions"],"summary":"Read Sessions","description":"Retrieve sessions for current user's account.\n\nBy default, only USER sessions are returned. Use include_internal=true to see all sessions.\n\nSupports filtering by:\n- session_type: Filter by specific session type (USER, INTERNAL, DEBUG)\n- include_internal: Include all session types (overrides session_type filter)\n- team_id: Filter by team ID\n- agent_id: Filter by agent ID\n- team_identifier: Filter by team identifier string (e.g., \"sales-team\")\n- agent_identifier: Filter by agent identifier string (e.g., \"support-agent\")\n- search: Search keyword in session message content\n- from_date: Sessions created on or after this date (ISO format: 2024-01-01T00:00:00Z)\n- to_date: Sessions created on or before this date (ISO format)\n\nSupports sorting by any session field and pagination.","operationId":"read_sessions_api_v1_sessions_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(created_at|updated_at|session_id|account_id|team_id|agent_id)$","description":"Field to sort by","default":"created_at","title":"Sort By"},"description":"Field to sort by"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"Sort order: ascending or descending","default":"desc","title":"Sort Order"},"description":"Sort order: ascending or descending"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by team ID","title":"Team Id"},"description":"Filter by team ID"},{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by agent ID","title":"Agent Id"},"description":"Filter by agent ID"},{"name":"team_identifier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by team identifier string","title":"Team Identifier"},"description":"Filter by team identifier string"},{"name":"agent_identifier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by agent identifier string","title":"Agent Identifier"},"description":"Filter by agent identifier string"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search keyword in session messages","title":"Search"},"description":"Search keyword in session messages"},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter sessions created on or after this date (ISO format)","title":"From Date"},"description":"Filter sessions created on or after this date (ISO format)"},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter sessions created on or before this date (ISO format)","title":"To Date"},"description":"Filter sessions created on or before this date (ISO format)"},{"name":"session_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SessionType"},{"type":"null"}],"description":"Filter by specific session type (USER, INTERNAL, DEBUG)","title":"Session Type"},"description":"Filter by specific session type (USER, INTERNAL, DEBUG)"},{"name":"include_internal","in":"query","required":false,"schema":{"type":"boolean","description":"Include INTERNAL and DEBUG sessions (admin/debug mode)","default":false,"title":"Include Internal"},"description":"Include INTERNAL and DEBUG sessions (admin/debug mode)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_SessionWithMessageCount_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["sessions"],"summary":"Create Session","description":"Create new session with optional initial messages.\n\nSupports three access levels for agents/teams:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required\n\nSupports team_identifier and agent_identifier strings to lookup team_id and agent_id.\nIf identifiers are provided and found, the corresponding IDs will be set.\nIf not found, team_id and agent_id will remain NULL.","operationId":"create_session_api_v1_sessions_post","parameters":[{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/sessions/{session_id}":{"get":{"tags":["sessions"],"summary":"Read Session","description":"Get session by ID.\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required","operationId":"read_session_api_v1_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"patch":{"tags":["sessions"],"summary":"Update Session","description":"Update session fields (excludes created_at and updated_at).\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required\n\nSupports team_identifier and agent_identifier strings to lookup team_id and agent_id.\nIf identifiers are provided and found, the corresponding IDs will be set.\nIf not found, team_id and agent_id will be set to NULL.","operationId":"update_session_api_v1_sessions__session_id__patch","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["sessions"],"summary":"Delete Session","description":"Delete session and all its messages.\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required","operationId":"delete_session_api_v1_sessions__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/sessions/{session_id}/messages":{"post":{"tags":["sessions"],"summary":"Add Messages To Session","description":"Add messages to an existing session.\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required","operationId":"add_messages_to_session_api_v1_sessions__session_id__messages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionMessageCreate"},"title":"Messages"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SessionMessage"},"title":"Response Add Messages To Session Api V1 Sessions  Session Id  Messages Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"get":{"tags":["sessions"],"summary":"Get Session Messages","description":"Get messages for a session with pagination.\n\nUse this endpoint when you need complete message history without\nloading the full session object.\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required\n\nArgs:\n    limit: Maximum messages to return (default 100)\n    skip: Number of messages to skip for pagination\n    order: Sort order - 'asc' (oldest first) or 'desc' (newest first)\n    paginated: If True, returns SessionMessagesResponse with total_count and has_more","operationId":"get_session_messages_api_v1_sessions__session_id__messages_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum messages to return","default":100,"title":"Limit"},"description":"Maximum messages to return"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of messages to skip for pagination","default":0,"title":"Skip"},"description":"Number of messages to skip for pagination"},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort order - 'asc' (oldest first) or 'desc' (newest first)","default":"asc","title":"Order"},"description":"Sort order - 'asc' (oldest first) or 'desc' (newest first)"},{"name":"paginated","in":"query","required":false,"schema":{"type":"boolean","description":"Return paginated response with total_count and has_more","default":false,"title":"Paginated"},"description":"Return paginated response with total_count and has_more"},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SessionMessagesResponse"},{"type":"array","items":{"$ref":"#/components/schemas/SessionMessage"}}],"title":"Response Get Session Messages Api V1 Sessions  Session Id  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["sessions"],"summary":"Clear Session Messages","description":"Clear all messages from a session (but keep the session).\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required","operationId":"clear_session_messages_api_v1_sessions__session_id__messages_delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/sessions/{session_id}/messages/latest":{"delete":{"tags":["sessions"],"summary":"Pop Latest Message","description":"Remove and return the latest message from a session.\n\nSupports three access levels based on session's agent/team:\n- PUBLIC: No authentication required\n- PASSWORD_PROTECTED: X-Access-Password header required\n- PRIVATE: User authentication required","operationId":"pop_latest_message_api_v1_sessions__session_id__messages_latest_delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SessionMessage"},{"type":"null"}],"title":"Response Pop Latest Message Api V1 Sessions  Session Id  Messages Latest Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/assets":{"post":{"tags":["assets","assets"],"summary":"Upload a chat attachment","description":"Validate, store, and register a chat attachment; return its stable reference.","operationId":"upload_asset_api_v1_assets_post","parameters":[{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_api_v1_assets_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/assets/{asset_id}/url":{"get":{"tags":["assets","assets"],"summary":"Mint a fresh access URL for a chat attachment","description":"Mint a fresh signed/public URL after re-checking ownership (N2).","operationId":"get_asset_url_api_v1_assets__asset_id__url_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bound session id — proves ownership for anonymous callers.","title":"Session Id"},"description":"Bound session id — proves ownership for anonymous callers."},{"name":"X-Access-Password","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Access-Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/subscription-plans/":{"get":{"tags":["subscription-plans"],"summary":"List Plans","description":"List all subscription plans (public endpoint).\n\nQuery Parameters:\n- skip: Number of records to skip (pagination)\n- limit: Maximum number of records to return\n- active_only: Filter to only active plans (default: true)\n\nReturns:\n- List of plans with full feature details","operationId":"list_plans_api_v1_subscription_plans__get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPlan"},"title":"Response List Plans Api V1 Subscription Plans  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/subscription-plans/{plan_id}":{"get":{"tags":["subscription-plans"],"summary":"Get Plan","description":"Get subscription plan by ID with full feature details (public endpoint).\n\nPath Parameters:\n- plan_id: Plan ID\n\nReturns:\n- Full plan details including nested features\n\nRaises:\n- 404: Plan not found","operationId":"get_plan_api_v1_subscription_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlan"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/subscription-plans/identifier/{identifier}":{"get":{"tags":["subscription-plans"],"summary":"Get Plan By Identifier","description":"Get subscription plan by unique identifier with full feature details (public endpoint).\n\nPath Parameters:\n- identifier: Plan identifier (e.g., \"professional\", \"enterprise\")\n\nReturns:\n- Full plan details including nested features\n\nRaises:\n- 404: Plan not found","operationId":"get_plan_by_identifier_api_v1_subscription_plans_identifier__identifier__get","parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string","title":"Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPlan"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/subscription-plans/billing/{interval}":{"get":{"tags":["subscription-plans"],"summary":"List Plans By Interval","description":"List subscription plans filtered by billing interval (public endpoint).\n\nPath Parameters:\n- interval: Billing interval (\"month\" or \"year\")\n\nQuery Parameters:\n- active_only: Filter to only active plans (default: true)\n\nReturns:\n- List of plans matching the billing interval","operationId":"list_plans_by_interval_api_v1_subscription_plans_billing__interval__get","parameters":[{"name":"interval","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BillingInterval"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPlan"},"title":"Response List Plans By Interval Api V1 Subscription Plans Billing  Interval  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/checkout-sessions":{"post":{"tags":["billing"],"summary":"Create Checkout Session","description":"Create Stripe Checkout Session for new subscription.\n\nValidates:\n- Plan exists and is active\n- Account doesn't already have active subscription\n- Billing interval is valid for the plan","operationId":"create_checkout_session_api_v1_billing_checkout_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/subscription":{"get":{"tags":["billing"],"summary":"Get Subscription","description":"Get current user's subscription details.","operationId":"get_subscription_api_v1_billing_subscription_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["billing"],"summary":"Cancel Subscription","description":"Cancel subscription.","operationId":"cancel_subscription_api_v1_billing_subscription_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/verify-session/{session_id}":{"get":{"tags":["billing"],"summary":"Verify Session","description":"Verify Stripe Checkout Session completion.","operationId":"verify_session_api_v1_billing_verify_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifySessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/subscription/plan":{"put":{"tags":["billing"],"summary":"Change Plan","description":"Upgrade or downgrade subscription plan.","operationId":"change_plan_api_v1_billing_subscription_plan_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/subscription/reactivate":{"post":{"tags":["billing"],"summary":"Reactivate Subscription","description":"Reactivate a subscription scheduled for cancellation.","operationId":"reactivate_subscription_api_v1_billing_subscription_reactivate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactivateSubscriptionResponse"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Create Portal Session","description":"Create Stripe Billing Portal session.","operationId":"create_portal_session_api_v1_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePortalSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePortalSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events with signature verification.\n\nThis endpoint:\n1. Verifies webhook signature (OUTSIDE UoW transaction)\n2. Checks for duplicate events (idempotency)\n3. Logs event\n4. Processes event based on type\n5. Marks event as processed\n6. Commits all DB writes","operationId":"stripe_webhook_api_v1_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}}}}},"/api/v1/webhook-subscriptions":{"get":{"tags":["webhook-subscriptions"],"summary":"List Subscriptions","description":"List the account's destinations (address, kinds, active state).","operationId":"list_subscriptions_api_v1_webhook_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"},"type":"array","title":"Response List Subscriptions Api V1 Webhook Subscriptions Get"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["webhook-subscriptions"],"summary":"Create Subscription","description":"Create a destination; the URL guard refuses unsafe addresses.","operationId":"create_subscription_api_v1_webhook_subscriptions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhook-subscriptions/{subscription_id}":{"get":{"tags":["webhook-subscriptions"],"summary":"Read Subscription","description":"Read one destination owned by the account (404 cross-account).","operationId":"read_subscription_api_v1_webhook_subscriptions__subscription_id__get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"patch":{"tags":["webhook-subscriptions"],"summary":"Update Subscription","description":"Patch address, kinds, ``include_provenance`` or active state.\n\nAn address change re-runs the URL guard; the stored address is unchanged\non refusal.","operationId":"update_subscription_api_v1_webhook_subscriptions__subscription_id__patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["webhook-subscriptions"],"summary":"Delete Subscription","description":"Remove one destination, leaving others untouched (history cascades, D1).","operationId":"delete_subscription_api_v1_webhook_subscriptions__subscription_id__delete","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhook-subscriptions/{subscription_id}/activate":{"post":{"tags":["webhook-subscriptions"],"summary":"Activate Subscription","description":"Reactivate a destination (FR-1.1).","operationId":"activate_subscription_api_v1_webhook_subscriptions__subscription_id__activate_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhook-subscriptions/{subscription_id}/deactivate":{"post":{"tags":["webhook-subscriptions"],"summary":"Deactivate Subscription","description":"Deactivate a destination; history gains no new entries afterwards.","operationId":"deactivate_subscription_api_v1_webhook_subscriptions__subscription_id__deactivate_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhook-subscriptions/{subscription_id}/secret":{"get":{"tags":["webhook-subscriptions"],"summary":"Read Subscription Secret","description":"Read the plaintext ``whsec_`` signing secret (FR-3.2).\n\nThe ONLY endpoint that returns the secret, and the single sanctioned\n``get_secret_value()`` unwrap in the codebase -- default ``SecretStr``\nserialization would mask it as ``**********``.","operationId":"read_subscription_secret_api_v1_webhook_subscriptions__subscription_id__secret_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionSecretResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/webhook-subscriptions/{subscription_id}/deliveries":{"get":{"tags":["webhook-subscriptions"],"summary":"List Subscription Deliveries","description":"Delivery history -- paginated, newest-first, filterable by outcome.\n\nEach entry carries time, kind, attempt, outcome and failure reason\n(FR-5.2, FR-6.1).  The subscription is resolved through the account first,\nso another account's history is a 404.","operationId":"list_subscription_deliveries_api_v1_webhook_subscriptions__subscription_id__deliveries_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"integer","title":"Subscription Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Skip"},"description":"Number of records to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum records to return","default":50,"title":"Limit"},"description":"Maximum records to return"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["success","failed"],"type":"string"},{"type":"null"}],"description":"Filter by delivery outcome","title":"Status"},"description":"Filter by delivery outcome"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_WebhookDeliveryHistoryEntry_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/events":{"post":{"tags":["events"],"summary":"Create Event","description":"Receive an external event.\n\nThe event will be stored and processed asynchronously by any matching\nevent listeners configured for this account.\n\n**Authentication:**\n- JWT Token: `Authorization: Bearer <jwt_token>`\n- API Key: `X-AUTH-TOKEN: <api_key>`\n\n**Request Body:**\n```json\n{\n    \"event_type\": \"order.created\",\n    \"payload\": {\n        \"order_id\": \"12345\",\n        \"customer\": \"John Doe\",\n        \"total\": 99.99\n    },\n    \"context\": {\n        \"source\": \"shopify\",\n        \"environment\": \"production\"\n    },\n    \"event_id\": \"evt_abc123\"\n}\n```\n\n**Fields:**\n- `event_type` (required): Type of the event (e.g., \"order.created\", \"user.signup\")\n- `payload` (required): Event data as JSON object\n- `context` (optional): Additional context (source, environment, etc.)\n- `event_id` (optional): Unique ID for idempotency - auto-generated if not provided\n\n**Response:**\nReturns the created event with listener count and processing status.","operationId":"create_event_api_v1_events_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundEventCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"get":{"tags":["events"],"summary":"List Events","description":"List inbound events for the account.\n\nReturns events sorted by creation date (newest first).\n\n**Query Parameters:**\n- `skip`: Number of records to skip (default: 0)\n- `limit`: Maximum number of records to return (default: 100)\n- `event_type`: Filter by event type (optional)","operationId":"list_events_api_v1_events_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InboundEvent"},"title":"Response List Events Api V1 Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/events/{event_id}":{"get":{"tags":["events"],"summary":"Get Event","description":"Get a specific event by ID.\n\nReturns the event with its processing status.","operationId":"get_event_api_v1_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboundEvent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/events/{event_id}/executions":{"get":{"tags":["events"],"summary":"Get Event Executions","description":"Get all executions for a specific event.\n\nReturns the list of listener executions triggered by this event,\nincluding status, response, and timing information.","operationId":"get_event_executions_api_v1_events__event_id__executions_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventExecution"},"title":"Response Get Event Executions Api V1 Events  Event Id  Executions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/event-listeners":{"get":{"tags":["event-listeners"],"summary":"List Listeners","description":"List event listeners for the account.\n\nReturns listeners sorted by priority (ascending) and creation date.\n\n**Query Parameters:**\n- `skip`: Number of records to skip (default: 0)\n- `limit`: Maximum number of records to return (default: 50)\n- `active_only`: Only return active listeners (default: true)","operationId":"list_listeners_api_v1_event_listeners_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_EventListener_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["event-listeners"],"summary":"Create Listener","description":"Create a new event listener.\n\n**Request Body:**\n```json\n{\n    \"name\": \"Order Processing Handler\",\n    \"description\": \"Handles order events\",\n    \"event_pattern\": \"order.*\",\n    \"match_type\": \"wildcard\",\n    \"target_type\": \"agent\",\n    \"agent_id\": 1,\n    \"message_template\": \"New order received: #{{payload.order_id}} from {{payload.customer}} for ${{payload.total}}. Please process this order.\",\n    \"priority\": 5,\n    \"is_active\": true\n}\n```\n\n**Fields:**\n- `name` (required): Human-readable listener name\n- `event_pattern` (required): Pattern to match (e.g., \"order.created\", \"order.*\")\n- `match_type`: How to match - \"exact\", \"prefix\", or \"wildcard\" (default: exact)\n- `target_type` (required): What to trigger - \"agent\" or \"team\"\n- `agent_id`: Agent ID (required when target_type is \"agent\")\n- `team_id`: Team ID (required when target_type is \"team\")\n- `message_template` (required): Jinja2 template for the message\n- `priority`: 1-10 where 1 is highest priority (default: 5)\n- `is_active`: Whether listener is enabled (default: true)\n\n**Template Variables:**\n- `{{event_type}}`: The event type (e.g., \"order.created\")\n- `{{payload}}`: The event payload object\n- `{{payload.field}}`: Access specific payload fields\n- `{{context}}`: The event context object","operationId":"create_listener_api_v1_event_listeners_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListenerCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListener"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/event-listeners/{listener_id_or_identifier}":{"get":{"tags":["event-listeners"],"summary":"Get Listener","description":"Get a specific listener by ID or identifier.\n\n**Path Parameters:**\n- `listener_id_or_identifier`: Numeric ID or string identifier","operationId":"get_listener_api_v1_event_listeners__listener_id_or_identifier__get","parameters":[{"name":"listener_id_or_identifier","in":"path","required":true,"schema":{"type":"string","title":"Listener Id Or Identifier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListener"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/event-listeners/{listener_id}":{"put":{"tags":["event-listeners"],"summary":"Update Listener","description":"Update an event listener.\n\nAll fields are optional - only provided fields will be updated.","operationId":"update_listener_api_v1_event_listeners__listener_id__put","parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"integer","title":"Listener Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListenerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListener"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["event-listeners"],"summary":"Delete Listener","description":"Delete an event listener.\n\n**Warning:** This will also delete all execution history for this listener.","operationId":"delete_listener_api_v1_event_listeners__listener_id__delete","parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"integer","title":"Listener Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/event-listeners/{listener_id}/executions":{"get":{"tags":["event-listeners"],"summary":"Get Listener Executions","description":"Get all executions for a specific listener.\n\nReturns the execution history for this listener, including\nstatus, response, and timing information.","operationId":"get_listener_executions_api_v1_event_listeners__listener_id__executions_get","parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"integer","title":"Listener Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_EventExecution_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/event-listeners/{listener_id}/test":{"post":{"tags":["event-listeners"],"summary":"Test Listener","description":"Test a listener's message template rendering.\n\n**Request Body:**\n```json\n{\n    \"event_type\": \"order.created\",\n    \"payload\": {\"order_id\": \"123\", \"customer\": \"Test User\"},\n    \"context\": {\"source\": \"test\"}\n}\n```\n\nReturns the rendered message without actually executing the agent/team.","operationId":"test_listener_api_v1_event_listeners__listener_id__test_post","parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"integer","title":"Listener Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Test Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/execute":{"post":{"tags":["execute"],"summary":"Execute Agent","description":"Execute an agent with a message and return the complete response.\n\nThis endpoint provides a synchronous (non-streaming) way to run agents,\nperfect for AI helper features like \"Improve with AI\" buttons.\n\nThe agent can be identified by:\n- Numeric ID: \"123\"\n- Identifier string: \"my-helper-agent\"\n- URI format: \"agent://my-helper-agent\"\n\nOptional features:\n- **context**: Variables to inject into the message template using {{variable}} syntax\n- **response_format**: JSON schema to parse structured output from the response\n\nReturns:\n    ExecuteAgentResponse with the agent's complete response and metadata\n\nRaises:\n    400: User must have an account\n    404: Agent not found\n    500: Execution failed","operationId":"execute_agent_api_v1_execute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteAgentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteAgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entity-types":{"get":{"tags":["entity-types"],"summary":"List Entity Types","description":"List all entity types for the current account.\nIncludes system templates by default.","operationId":"list_entity_types_api_v1_entity_types_get","parameters":[{"name":"include_templates","in":"query","required":false,"schema":{"type":"boolean","description":"Include system templates","default":true,"title":"Include Templates"},"description":"Include system templates"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Field to sort by","default":"updated_at","title":"Sort By"},"description":"Field to sort by"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort order (asc, desc)","default":"desc","title":"Sort Order"},"description":"Sort order (asc, desc)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_EntityType_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["entity-types"],"summary":"Create Entity Type","description":"Create a new entity type.","operationId":"create_entity_type_api_v1_entity_types_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityTypeCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityType"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entity-types/templates":{"get":{"tags":["entity-types"],"summary":"List Templates","description":"List available entity type templates.","operationId":"list_templates_api_v1_entity_types_templates_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by template category","title":"Category"},"description":"Filter by template category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityType"},"title":"Response List Templates Api V1 Entity Types Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entity-types/{entity_type_id}":{"get":{"tags":["entity-types"],"summary":"Get Entity Type","description":"Get a specific entity type with usage details.","operationId":"get_entity_type_api_v1_entity_types__entity_type_id__get","parameters":[{"name":"entity_type_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Type Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityTypeWithAgents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["entity-types"],"summary":"Update Entity Type","description":"Update an entity type.","operationId":"update_entity_type_api_v1_entity_types__entity_type_id__put","parameters":[{"name":"entity_type_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Type Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityTypeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityType"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["entity-types"],"summary":"Delete Entity Type","description":"Delete an entity type.\n\nStill-assigned-to-agents stays a hard 400 (not overridable by force). If the\nentity type has collected data and ``force`` is not set, returns 409 with\n``{\"detail\": ..., \"collected_count\": N}``. Retry with ``?force=true`` to\ncascade-delete the collected rows (returns 204).","operationId":"delete_entity_type_api_v1_entity_types__entity_type_id__delete","parameters":[{"name":"entity_type_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Type Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Cascade-delete the entity type's collected data (extracted entities)","default":false,"title":"Force"},"description":"Cascade-delete the entity type's collected data (extracted entities)"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities":{"get":{"tags":["entities"],"summary":"List Entities","description":"List extracted entities with filtering and pagination.\nReturns entities and total count for pagination; when include_facets is\ntrue, also returns filter-aware per-type and per-status facet counts.","operationId":"list_entities_api_v1_entities_get","parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by agent ID","title":"Agent Id"},"description":"Filter by agent ID"},{"name":"entity_type_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by entity type ID","title":"Entity Type Id"},"description":"Filter by entity type ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EntityStatus"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum confidence score","title":"Min Confidence"},"description":"Minimum confidence score"},{"name":"max_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Maximum confidence score","title":"Max Confidence"},"description":"Maximum confidence score"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter from date","title":"Date From"},"description":"Filter from date"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter to date","title":"Date To"},"description":"Filter to date"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in attributes, agent name, or data type name","title":"Search"},"description":"Search in attributes, agent name, or data type name"},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived entities","default":false,"title":"Include Archived"},"description":"Include archived entities"},{"name":"include_facets","in":"query","required":false,"schema":{"type":"boolean","description":"Include filter-aware per-type and per-status facet counts","default":false,"title":"Include Facets"},"description":"Include filter-aware per-type and per-status facet counts"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Skip"},"description":"Number of items to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedExtractedEntitiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["entities"],"summary":"Create Entity","description":"Create a manual entity entry.","operationId":"create_entity_api_v1_entities_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/stats":{"get":{"tags":["entities"],"summary":"Get Entity Stats","description":"Get entity extraction statistics for dashboard.\n\nWhen group_by_agent is True, returns per-agent breakdown.\nWhen agent_id is provided, filters stats for that specific agent.","operationId":"get_entity_stats_api_v1_entities_stats_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":365,"minimum":1},{"type":"null"}],"description":"Time window in days; omit for all-time","title":"Days"},"description":"Time window in days; omit for all-time"},{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter stats by specific agent","title":"Agent Id"},"description":"Filter stats by specific agent"},{"name":"group_by_agent","in":"query","required":false,"schema":{"type":"boolean","description":"Return stats broken down per agent","default":false,"title":"Group By Agent"},"description":"Return stats broken down per agent"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/StatsRead"},{"$ref":"#/components/schemas/StatsByAgentRead"}],"title":"Response Get Entity Stats Api V1 Entities Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/extraction-status":{"get":{"tags":["entities"],"summary":"Get Extraction Status","description":"Whether any capture is still being extracted for this account (FR-3).\n\nLets ``/collected`` and the post-build success page show a truthful \"still\nprocessing\" state instead of an empty state that lies while the extraction\npipeline is mid-run. ``processing`` is false whenever the pipeline is idle,\nso the empty state is what shows when genuinely nothing was captured.","operationId":"get_extraction_status_api_v1_entities_extraction_status_get","parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Narrow the status to one agent's sessions","title":"Agent Id"},"description":"Narrow the status to one agent's sessions"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/export":{"get":{"tags":["entities"],"summary":"Export Entities","description":"Stream all matching collected data as a CSV download.\n\nSame account scope, auth, and 9-filter set as ``GET /entities`` (single\nshared filter source — export and list can never drift). Row cap\n(``ENTITY_EXPORT_MAX_ROWS``) is applied count-first (D6) so the truncation\nheaders are known at response construction; a capped export is still a 200\ncarrying the first ``cap`` rows.\n\nDeclared BEFORE ``/{entity_id}`` so ``export`` is never coerced to an int\npath param (D2 route order). Auth is header-only (Bearer / X-AUTH-TOKEN) —\na direct browser ``<a href>`` 401s; in-browser download goes through the\nNuxt proxy (task 4e84e060, out of scope here).","operationId":"export_entities_api_v1_entities_export_get","parameters":[{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by agent ID","title":"Agent Id"},"description":"Filter by agent ID"},{"name":"entity_type_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by entity type ID","title":"Entity Type Id"},"description":"Filter by entity type ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EntityStatus"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum confidence score","title":"Min Confidence"},"description":"Minimum confidence score"},{"name":"max_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Maximum confidence score","title":"Max Confidence"},"description":"Maximum confidence score"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter from date","title":"Date From"},"description":"Filter from date"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter to date","title":"Date To"},"description":"Filter to date"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in attributes, agent name, or data type name","title":"Search"},"description":"Search in attributes, agent name, or data type name"},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived entities","default":false,"title":"Include Archived"},"description":"Include archived entities"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/session/{session_id}":{"get":{"tags":["entities"],"summary":"Get Entities By Session","description":"Get all entities extracted from a specific session.","operationId":"get_entities_by_session_api_v1_entities_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExtractedEntityRead"},"title":"Response Get Entities By Session Api V1 Entities Session  Session Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/{entity_id}":{"get":{"tags":["entities"],"summary":"Get Entity","description":"Get a specific entity with full details.","operationId":"get_entity_api_v1_entities__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityDetailRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"patch":{"tags":["entities"],"summary":"Update Entity","description":"Update an entity (attributes, status, notes).","operationId":"update_entity_api_v1_entities__entity_id__patch","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["entities"],"summary":"Delete Entity","description":"Delete an entity.","operationId":"delete_entity_api_v1_entities__entity_id__delete","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"integer","title":"Entity Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/bulk-status":{"post":{"tags":["entities"],"summary":"Bulk Update Status","description":"Bulk update status for multiple entities.","operationId":"bulk_update_status_api_v1_entities_bulk_status_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityBulkStatusUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/entities/bulk-delete":{"post":{"tags":["entities"],"summary":"Bulk Delete Entities","description":"Bulk permanently delete multiple entities.\n\nAccount-scoped (mirrors bulk-status): alien/missing ids are silently\nskipped, ``deleted`` counts only rows actually removed, never 404.","operationId":"bulk_delete_entities_api_v1_entities_bulk_delete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractedEntityBulkDelete"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agent-links":{"post":{"tags":["agent-links"],"summary":"Create Agent Link Endpoint","description":"Create a new agent link (auto-assigns an unguessable slug when omitted).","operationId":"create_agent_link_endpoint_api_v1_agent_links_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"get":{"tags":["agent-links"],"summary":"List Agent Links Endpoint","description":"List agent links for the current user's account.","operationId":"list_agent_links_endpoint_api_v1_agent_links_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_AgentLinkRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agent-links/check-slug/{slug}":{"get":{"tags":["agent-links"],"summary":"Check Agent Link Slug Endpoint","description":"Check whether an agent-link slug is globally available (auth required).\n\nSlugs are globally unique, so availability is not account-scoped; the auth\ndependency gates access without the handler needing the user object. Route\ndeclared before ``GET /{link_id}`` so the literal prefix wins over the int.","operationId":"check_agent_link_slug_endpoint_api_v1_agent_links_check_slug__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkSlugAvailability"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/agent-links/{link_id}":{"get":{"tags":["agent-links"],"summary":"Get Agent Link Endpoint","description":"Get a specific agent link by ID.","operationId":"get_agent_link_endpoint_api_v1_agent_links__link_id__get","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"put":{"tags":["agent-links"],"summary":"Update Agent Link Endpoint","description":"Update an agent link.","operationId":"update_agent_link_endpoint_api_v1_agent_links__link_id__put","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","title":"Link Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLinkRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"delete":{"tags":["agent-links"],"summary":"Delete Agent Link Endpoint","description":"Delete an agent link.","operationId":"delete_agent_link_endpoint_api_v1_agent_links__link_id__delete","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"integer","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/oauth/authorize":{"post":{"tags":["oauth-authorize","oauth-authorize"],"summary":"Json Authorize","description":"Issue or deny an authorization code via JSON body.\n\nRequires an authenticated session JWT. The ``user_id`` is extracted\nfrom the verified token -- any ``user_id`` in the request body is\nignored (the field is not accepted).\n\nReturns:\n    ``JsonAuthorizeResponse`` with ``redirect_url`` containing either\n    an authorization code (approve) or error params (deny).","operationId":"json_authorize_api_v1_oauth_authorize_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthorizeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthorizeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/google":{"post":{"tags":["auth-google"],"summary":"Auth Google","description":"Authenticate via Google OAuth.\n\nExchanges a Google authorization code for an ID token, verifies it,\nresolves the email to a local Gnosari user, and returns a session JWT.","operationId":"auth_google_api_v1_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/forgot-password":{"post":{"tags":["auth-flows"],"summary":"Forgot Password","description":"Request a password reset. ALWAYS returns 200 with a fixed body.\n\nRate-limited per client IP via the reused ``AuthService`` limiter (raises\n``LoginRateLimitError`` -> 429). For a real user this mints a reset token\nand emits ``user.password_reset_requested``; for an unknown email it is a\nsilent no-op -- the response is byte-identical either way.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/reset-password":{"post":{"tags":["auth-flows"],"summary":"Reset Password","description":"Redeem a password-reset token and set the new password.","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/verify-email":{"post":{"tags":["auth-flows"],"summary":"Verify Email","description":"Redeem an email-verification token and flip ``is_verified``.","operationId":"verify_email_api_v1_auth_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOnlyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/resend-verification":{"post":{"tags":["auth-flows"],"summary":"Resend Verification","description":"Re-issue a verification token for a real user (anti-enumeration).","operationId":"resend_verification_api_v1_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/auth/confirm-email-change":{"post":{"tags":["auth-flows"],"summary":"Confirm Email Change","description":"Redeem an email-change token and swap the address.","operationId":"confirm_email_change_api_v1_auth_confirm_email_change_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOnlyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/api/v1/stats/counts":{"get":{"tags":["stats"],"summary":"Get Domain Counts","description":"Return counts for all 13 domains scoped to the current user's account.","operationId":"get_domain_counts_api_v1_stats_counts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCounts"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/":{"get":{"summary":"Read Root","description":"Root endpoint - simple health check.","operationId":"read_root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Read Root  Get"}}}}}}},"/health/live":{"get":{"summary":"Health Live","description":"Liveness probe for Kubernetes — always returns 200.","operationId":"health_live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Live Health Live Get"}}}}}}},"/health":{"get":{"summary":"Health Alias","description":"Backward-compatible alias for ``/health/live``.","operationId":"health_alias_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Alias Health Get"}}}}}}},"/health/ready":{"get":{"summary":"Health Ready","description":"Readiness probe for Kubernetes — checks PostgreSQL and Redis.","operationId":"health_ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ready":{"get":{"summary":"Ready Alias","description":"Backward-compatible alias for ``/health/ready``.","operationId":"ready_alias_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/oauth/authorize":{"get":{"tags":["oauth-authorize"],"summary":"Authorize Get","description":"GET /oauth/authorize -- validate params, render consent page.","operationId":"authorize_get_oauth_authorize_get","parameters":[{"name":"response_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Type"}},{"name":"client_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"}},{"name":"redirect_uri","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"code_challenge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge Method"}},{"name":"resource","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]},"post":{"tags":["oauth-authorize"],"summary":"Authorize Post","description":"POST /oauth/authorize -- process consent decision.","operationId":"authorize_post_oauth_authorize_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_authorize_post_oauth_authorize_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/oauth/token":{"post":{"tags":["oauth-token"],"summary":"Token Endpoint","description":"POST /oauth/token -- exchange authorization code or refresh token.","operationId":"token_endpoint_oauth_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_endpoint_oauth_token_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/oauth/register":{"post":{"tags":["oauth-register"],"summary":"Register Client","description":"Register a new OAuth client per RFC 7591.\n\nNo authentication required -- MCP clients self-register.","operationId":"register_client_oauth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRegistrationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/oauth/register/{client_id}":{"get":{"tags":["oauth-register"],"summary":"Get Client","description":"Retrieve a registered OAuth client's public metadata.\n\nNo authentication required -- matches DCR's open access model.\nNever exposes client_secret or client_secret_hash.","operationId":"get_client_oauth_register__client_id__get","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientReadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/.well-known/oauth-authorization-server":{"get":{"summary":"Get Metadata","description":"Return OAuth Authorization Server Metadata (RFC 8414).","operationId":"get_metadata__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Metadata  Well Known Oauth Authorization Server Get"}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}},"/.well-known/jwks.json":{"get":{"summary":"Get Jwks","description":"Return the JSON Web Key Set (RFC 7517).","operationId":"get_jwks__well_known_jwks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Bearer":[]},{"ApiKey":[]}]}}},"components":{"schemas":{"AccessLevelSchema":{"type":"string","enum":["PRIVATE","PASSWORD_PROTECTED","PUBLIC"],"title":"AccessLevelSchema"},"AccountApiKey":{"properties":{"name":{"type":"string","title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"active"},"id":{"type":"integer","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":["name","id","created_at","updated_at"],"title":"AccountApiKey"},"AccountApiKeyCreate":{"properties":{"name":{"type":"string","title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"active"}},"type":"object","required":["name"],"title":"AccountApiKeyCreate"},"AccountApiKeyCreateResponse":{"properties":{"name":{"type":"string","title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"active"},"id":{"type":"integer","title":"Id"},"key_value":{"type":"string","title":"Key Value"},"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","key_value","created_at","updated_at"],"title":"AccountApiKeyCreateResponse"},"AccountApiKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"AccountApiKeyUpdate"},"Agent":{"additionalProperties":true,"type":"object"},"AgentConfigSchema-Input":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"type":"string","title":"Instructions"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"reasoning_effort":{"type":"string","pattern":"^(low|medium|high)$","title":"Reasoning Effort","default":"medium"},"orchestrator":{"type":"boolean","title":"Orchestrator","default":false},"memory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory"},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"knowledge":{"items":{"type":"string"},"type":"array","title":"Knowledge","default":[]},"traits":{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/TraitReferenceSchema"}]},"type":"array","title":"Traits","default":[]},"delegation":{"items":{"$ref":"#/components/schemas/DelegationConfigSchema"},"type":"array","title":"Delegation","default":[]},"events":{"items":{"$ref":"#/components/schemas/EventConfigSchema"},"type":"array","title":"Events","default":[]},"emits":{"items":{"type":"string"},"type":"array","title":"Emits","default":[]},"publication":{"anyOf":[{"$ref":"#/components/schemas/PublicationConfigSchema-Input"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"configuration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configuration"},"chat_ui":{"anyOf":[{"$ref":"#/components/schemas/ChatUIConfigSchema"},{"type":"null"}]}},"type":"object","required":["id","instructions"],"title":"AgentConfigSchema"},"AgentConfigSchema-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"type":"string","title":"Instructions"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"reasoning_effort":{"type":"string","pattern":"^(low|medium|high)$","title":"Reasoning Effort","default":"medium"},"orchestrator":{"type":"boolean","title":"Orchestrator","default":false},"memory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory"},"tools":{"items":{"type":"string"},"type":"array","title":"Tools","default":[]},"knowledge":{"items":{"type":"string"},"type":"array","title":"Knowledge","default":[]},"traits":{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/TraitReferenceSchema"}]},"type":"array","title":"Traits","default":[]},"delegation":{"items":{"$ref":"#/components/schemas/DelegationConfigSchema"},"type":"array","title":"Delegation","default":[]},"events":{"items":{"$ref":"#/components/schemas/EventConfigSchema"},"type":"array","title":"Events","default":[]},"emits":{"items":{"type":"string"},"type":"array","title":"Emits","default":[]},"publication":{"anyOf":[{"$ref":"#/components/schemas/PublicationConfigSchema-Output"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"configuration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configuration"},"chat_ui":{"anyOf":[{"$ref":"#/components/schemas/ChatUIConfigSchema"},{"type":"null"}]}},"type":"object","required":["id","instructions"],"title":"AgentConfigSchema"},"AgentConnection":{"properties":{"connection_type":{"$ref":"#/components/schemas/ConnectionTypeSchema"},"target_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Agent Id"},"target_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Team Id"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"id":{"type":"integer","title":"Id"},"agent_id":{"type":"integer","title":"Agent Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["connection_type","id","agent_id","created_at"],"title":"AgentConnection","description":"Full agent connection with database fields."},"AgentConnectionCreate":{"properties":{"connection_type":{"$ref":"#/components/schemas/ConnectionTypeSchema"},"target_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Agent Id"},"target_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Team Id"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"}},"type":"object","required":["connection_type"],"title":"AgentConnectionCreate","description":"Schema for creating an agent connection."},"AgentConnectionUpdate":{"properties":{"connection_type":{"anyOf":[{"$ref":"#/components/schemas/ConnectionTypeSchema"},{"type":"null"}]},"target_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Agent Id"},"target_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Team Id"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"}},"type":"object","title":"AgentConnectionUpdate","description":"Schema for updating an agent connection."},"AgentCountItem":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"type":"string","title":"Agent Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["agent_id","agent_name","count"],"title":"AgentCountItem","description":"Individual agent count in stats response."},"AgentCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"configuration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configuration"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"reasoning_effort":{"type":"string","title":"Reasoning Effort","default":"medium"},"orchestrator":{"type":"boolean","title":"Orchestrator","default":false},"memory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory"},"interactive_buttons_enabled":{"type":"boolean","title":"Interactive Buttons Enabled","default":false},"interactive_buttons_behavior":{"anyOf":[{"type":"string","maxLength":1500},{"type":"null"}],"title":"Interactive Buttons Behavior","description":"Optional guidance on WHEN the agent should render interactive choice buttons. NULL uses the canonical default behavior."},"access_level":{"$ref":"#/components/schemas/AccessLevelSchema","default":"PRIVATE"},"access_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Password"},"chat_theme_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Theme Id"},"uri":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Uri","description":"URL-friendly identifier for public access (e.g., 'my-assistant')"},"domain_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Domain Id","description":"Domain where the agent will be published"},"knowledge_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Knowledge Ids"},"tool_ids":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Tool Ids"},"trait_ids":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Trait Ids"},"entity_type_configs":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentEntityTypeConfig"},"type":"array"},{"type":"null"}],"title":"Entity Type Configs"},"entity_type_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Entity Type Ids"},"connections":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentConnectionCreate"},"type":"array"},{"type":"null"}],"title":"Connections"}},"type":"object","required":["name"],"title":"AgentCreate","description":"Schema for creating a new agent.\n\nSupports both new entity_type_configs (with collection modes) and\nlegacy entity_type_ids (auto-converted to passive mode configs)."},"AgentDirectoryItem":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uri"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"access_level":{"$ref":"#/components/schemas/AccessLevelSchema","default":"PRIVATE"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"accent_preset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent Preset"}},"type":"object","required":["id","name"],"title":"AgentDirectoryItem","description":"Lean agent row for pickers: what a row renders, nothing else."},"AgentEntityTypeAssociation":{"properties":{"entity_type_id":{"type":"integer","title":"Entity Type Id"},"collection_mode":{"type":"string","title":"Collection Mode","default":"passive"},"custom_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Prompt"},"entity_type":{"anyOf":[{"$ref":"#/components/schemas/EntityTypeMinimal"},{"type":"null"}]}},"type":"object","required":["entity_type_id"],"title":"AgentEntityTypeAssociation","description":"Schema for the agent-entity type association (from database)."},"AgentEntityTypeConfig":{"properties":{"entity_type_id":{"type":"integer","title":"Entity Type Id"},"collection_mode":{"$ref":"#/components/schemas/CollectionMode","default":"passive"},"custom_prompt":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Custom Prompt"}},"type":"object","required":["entity_type_id"],"title":"AgentEntityTypeConfig","description":"Configuration for an entity type assigned to an agent.\n\nDefines the collection mode and optional custom prompt for the entity type."},"AgentForTask":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"}},"type":"object","required":["id","name"],"title":"AgentForTask","description":"Agent schema for task relationships."},"AgentInfo":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"}},"type":"object","required":["id","name"],"title":"AgentInfo"},"AgentLinkCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"agent_id":{"type":"integer","title":"Agent Id","description":"Agent this link opens"},"slug":{"anyOf":[{"type":"string","maxLength":50,"minLength":3},{"type":"null"}],"title":"Slug"},"presentation":{"type":"string","enum":["chat","conversation"],"title":"Presentation","default":"chat"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting","description":"Override; null = inherit agent"},"topic":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Topic"},"caption":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Caption","description":"Per-link subtitle shown under the conversation title."},"chat_theme_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Theme Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name","agent_id"],"title":"AgentLinkCreate","description":"Create payload. ``slug`` omitted -> service assigns an unguessable token."},"AgentLinkRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"account_id":{"type":"integer","title":"Account Id"},"presentation":{"type":"string","title":"Presentation"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"chat_theme_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Theme Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"visit_count":{"type":"integer","title":"Visit Count"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"},"agent_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Uri"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","slug","agent_id","account_id","presentation","visit_count","created_at","updated_at"],"title":"AgentLinkRead","description":"Canonical read shape returned by the CRUD service functions."},"AgentLinkSlugAvailability":{"properties":{"available":{"type":"boolean","title":"Available"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["available"],"title":"AgentLinkSlugAvailability","description":"Availability result for an agent-link slug (globally unique)."},"AgentLinkUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"slug":{"anyOf":[{"type":"string","maxLength":50,"minLength":3},{"type":"null"}],"title":"Slug"},"presentation":{"anyOf":[{"type":"string","enum":["chat","conversation"]},{"type":"null"}],"title":"Presentation"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"topic":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Topic"},"caption":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Caption"},"chat_theme_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Theme Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"AgentLinkUpdate","description":"Partial update. Fields left unset are unchanged; explicit ``None`` on a\nnullable field clears it (fallback to inherit)."},"AgentMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"AgentMinimal"},"AgentPublicResolve":{"additionalProperties":true,"type":"object"},"AgentStatsItem":{"properties":{"agent_id":{"type":"integer","title":"Agent Id"},"agent_name":{"type":"string","title":"Agent Name"},"status_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Counts"},"type_counts":{"items":{"$ref":"#/components/schemas/TypeCountItem"},"type":"array","title":"Type Counts"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["agent_id","agent_name"],"title":"AgentStatsItem","description":"Per-agent stats breakdown."},"AgentSummary":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"AgentSummary","description":"Minimal agent info for EntityType relationships."},"AgentUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"configuration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configuration"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"reasoning_effort":{"type":"string","title":"Reasoning Effort","default":"medium"},"orchestrator":{"type":"boolean","title":"Orchestrator","default":false},"memory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory"},"interactive_buttons_enabled":{"type":"boolean","title":"Interactive Buttons Enabled","default":false},"interactive_buttons_behavior":{"anyOf":[{"type":"string","maxLength":1500},{"type":"null"}],"title":"Interactive Buttons Behavior","description":"Optional guidance on WHEN the agent should render interactive choice buttons. NULL uses the canonical default behavior."},"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessLevelSchema"},{"type":"null"}]},"access_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Password"},"chat_theme_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Theme Id"},"uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uri"},"domain_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Domain Id"},"knowledge_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Knowledge Ids"},"tool_ids":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Tool Ids"},"trait_ids":{"anyOf":[{"items":{"anyOf":[{"type":"integer"},{"type":"string"}]},"type":"array"},{"type":"null"}],"title":"Trait Ids"},"entity_type_configs":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentEntityTypeConfig"},"type":"array"},{"type":"null"}],"title":"Entity Type Configs"},"entity_type_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Entity Type Ids"},"connections":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentConnectionUpdate"},"type":"array"},{"type":"null"}],"title":"Connections"}},"type":"object","title":"AgentUpdate","description":"Schema for updating an existing agent.\n\nSupports both new entity_type_configs (with collection modes) and\nlegacy entity_type_ids (auto-converted to passive mode configs)."},"AssetUploadResponse":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id","description":"Stable attachment reference (asset UUID)."},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Original client filename (metadata only)."},"mime_type":{"type":"string","title":"Mime Type","description":"Server-sniffed MIME type the object was stored with."},"size":{"type":"integer","title":"Size","description":"Stored object size in bytes."}},"type":"object","required":["asset_id","mime_type","size"],"title":"AssetUploadResponse","description":"Response for a successful ``POST /assets`` upload.\n\nCarries the stable attachment reference the chat UI keeps and later sends on\nthe WS payload as ``attachments:[asset_id]``. No signed URL is returned here."},"AssetUrlResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Fresh short-TTL access URL for the asset."}},"type":"object","required":["url"],"title":"AssetUrlResponse","description":"Response for ``GET /assets/{id}/url`` — a freshly minted access URL.\n\n``url`` is a short-TTL V4 signed URL for private surfaces (chat attachments)\nor a public URL for public surfaces. Minted per call, never persisted (D2)."},"AttributeType":{"type":"string","enum":["text","email","phone","number","boolean","list","date"],"title":"AttributeType","description":"Supported attribute types for entity extraction."},"BillingInterval":{"type":"string","enum":["month","year"],"title":"BillingInterval","description":"Billing interval enum."},"Body_authorize_post_oauth_authorize_post":{"properties":{"action":{"type":"string","title":"Action","default":""},"client_id":{"type":"string","title":"Client Id","default":""},"redirect_uri":{"type":"string","title":"Redirect Uri","default":""},"scope":{"type":"string","title":"Scope","default":""},"state":{"type":"string","title":"State","default":""},"code_challenge":{"type":"string","title":"Code Challenge","default":""},"code_challenge_method":{"type":"string","title":"Code Challenge Method","default":"S256"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"},"username":{"type":"string","title":"Username","default":""},"password":{"type":"string","title":"Password","default":""}},"type":"object","title":"Body_authorize_post_oauth_authorize_post"},"Body_token_endpoint_oauth_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type","default":""},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"client_id":{"type":"string","title":"Client Id","default":""},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"}},"type":"object","title":"Body_token_endpoint_oauth_token_post"},"Body_update_agent_traits_api_v1_agents__agent_id_or_identifier__traits_put":{"properties":{"trait_ids":{"items":{"type":"integer"},"type":"array","title":"Trait Ids"}},"type":"object","required":["trait_ids"],"title":"Body_update_agent_traits_api_v1_agents__agent_id_or_identifier__traits_put"},"Body_upload_asset_api_v1_assets_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"The file to upload."},"surface":{"type":"string","title":"Surface","description":"Upload surface (e.g. chat_attachment)."},"agent_identifier":{"type":"string","title":"Agent Identifier","description":"Governing agent id or identifier."},"session_id":{"type":"string","title":"Session Id","description":"Chat session the attachment binds to."}},"type":"object","required":["file","surface","agent_identifier","session_id"],"title":"Body_upload_asset_api_v1_assets_post"},"BulkDeleteResponse":{"properties":{"deleted":{"type":"integer","title":"Deleted"}},"type":"object","required":["deleted"],"title":"BulkDeleteResponse"},"BulkUpdateResponse":{"properties":{"updated":{"type":"integer","title":"Updated"}},"type":"object","required":["updated"],"title":"BulkUpdateResponse"},"CancelSubscriptionRequest":{"properties":{"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","description":"If true, subscription ends at period end. If false, cancels immediately","default":true},"feedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feedback","description":"Cancellation feedback"}},"type":"object","title":"CancelSubscriptionRequest","description":"Request schema for canceling subscription."},"CancelSubscriptionResponse":{"properties":{"status":{"$ref":"#/components/schemas/SubscriptionStatus"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","cancel_at_period_end","current_period_end","message"],"title":"CancelSubscriptionResponse","description":"Response schema for subscription cancellation."},"ChangePlanRequest":{"properties":{"new_plan_identifier":{"type":"string","title":"New Plan Identifier","description":"New plan identifier"},"proration_behavior":{"type":"string","title":"Proration Behavior","description":"Proration behavior (always_invoice, create_prorations, none)","default":"always_invoice"}},"type":"object","required":["new_plan_identifier"],"title":"ChangePlanRequest","description":"Request schema for changing subscription plan."},"ChangePlanResponse":{"properties":{"subscription":{"additionalProperties":true,"type":"object","title":"Subscription"},"proration_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Proration Amount","description":"Proration amount in cents"}},"type":"object","required":["subscription"],"title":"ChangePlanResponse","description":"Response schema for plan change."},"ChatTheme":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Theme name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Theme description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier","description":"URL-safe unique identifier"},"configuration":{"additionalProperties":true,"type":"object","title":"Configuration","description":"Canonical v2 chat-theme configuration (camelCase blob): {version: 2, branding: {...}, defaults: {...}}. Legacy pre-v2 shapes (top-level ui/content/features/appearance keys) are rejected with a 400."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this is the account's default theme","default":false},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","id","created_at"],"title":"ChatTheme","description":"Response schema for chat theme with all fields."},"ChatThemeCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Theme name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Theme description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier","description":"URL-safe unique identifier"},"configuration":{"additionalProperties":true,"type":"object","title":"Configuration","description":"Canonical v2 chat-theme configuration (camelCase blob): {version: 2, branding: {...}, defaults: {...}}. Legacy pre-v2 shapes (top-level ui/content/features/appearance keys) are rejected with a 400."},"is_default":{"type":"boolean","title":"Is Default","description":"Whether this is the account's default theme","default":false}},"type":"object","required":["name"],"title":"ChatThemeCreate","description":"Schema for creating a new chat theme."},"ChatThemeList":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"is_default":{"type":"boolean","title":"Is Default","default":false},"agent_count":{"type":"integer","title":"Agent Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","created_at"],"title":"ChatThemeList","description":"List response schema with agent count.\nUsed for list views to show how many agents use each theme."},"ChatThemeMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"configuration":{"additionalProperties":true,"type":"object","title":"Configuration","default":{}}},"type":"object","required":["id","name"],"title":"ChatThemeMinimal","description":"Minimal schema for embedding in agent responses.\nContains only essential fields to avoid circular references."},"ChatThemeUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier"},"configuration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configuration"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"ChatThemeUpdate","description":"Schema for updating a chat theme -- all fields optional."},"ChatUIConfigSchema":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"empty_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Empty Title"},"empty_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Empty Description"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"suggested_prompts":{"anyOf":[{"items":{"$ref":"#/components/schemas/core__schemas__team_config__SuggestedPromptSchema"},"type":"array"},{"type":"null"}],"title":"Suggested Prompts"}},"type":"object","title":"ChatUIConfigSchema","description":"Chat UI configuration from push payload."},"ClientReadResponse":{"properties":{"client_id":{"type":"string","title":"Client Id"},"client_name":{"type":"string","title":"Client Name"},"redirect_uris":{"items":{"type":"string"},"type":"array","title":"Redirect Uris"},"grant_types":{"items":{"type":"string"},"type":"array","title":"Grant Types"},"response_types":{"items":{"type":"string"},"type":"array","title":"Response Types"},"token_endpoint_auth_method":{"type":"string","title":"Token Endpoint Auth Method"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"client_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Uri"},"logo_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Uri"}},"type":"object","required":["client_id","client_name","redirect_uris","grant_types","response_types","token_endpoint_auth_method"],"title":"ClientReadResponse","description":"Public client metadata returned by GET /register/{client_id}.\n\nIntentionally excludes client_secret and client_secret_hash."},"ClientRegistrationRequest":{"properties":{"redirect_uris":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Redirect Uris"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"grant_types":{"items":{"type":"string"},"type":"array","title":"Grant Types"},"response_types":{"items":{"type":"string"},"type":"array","title":"Response Types"},"token_endpoint_auth_method":{"type":"string","title":"Token Endpoint Auth Method","default":"none"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"client_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Uri"},"logo_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Uri"}},"type":"object","title":"ClientRegistrationRequest","description":"Dynamic Client Registration Request (RFC 7591)."},"CollectionMode":{"type":"string","enum":["passive","opportunistic","active","guided"],"title":"CollectionMode","description":"Data collection mode for entity types assigned to agents."},"CollectionSummary":{"properties":{"record_count":{"type":"integer","title":"Record Count","default":0},"new_count":{"type":"integer","title":"New Count","default":0},"last_capture":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Capture"}},"type":"object","title":"CollectionSummary","description":"Page-scoped, all-time per-agent collection aggregate.\n\nReturned by ``ExtractedEntityRepository.get_collection_summaries`` keyed by\n``agent_id``. ``last_capture`` is the most recent ``created_at`` across the\nagent's extracted entities, or ``None`` when the agent has no records."},"ConnectionTypeSchema":{"type":"string","enum":["ai_delegation","handoff"],"title":"ConnectionTypeSchema"},"CreateCheckoutSessionRequest":{"properties":{"plan_identifier":{"type":"string","title":"Plan Identifier","description":"Subscription plan identifier"},"billing_interval":{"type":"string","title":"Billing Interval","description":"Billing interval (month or year)"},"success_url":{"type":"string","title":"Success Url","description":"URL to redirect after successful payment"},"cancel_url":{"type":"string","title":"Cancel Url","description":"URL to redirect after canceling payment"}},"type":"object","required":["plan_identifier","billing_interval","success_url","cancel_url"],"title":"CreateCheckoutSessionRequest","description":"Request schema for creating a checkout session."},"CreateCheckoutSessionResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url","description":"Stripe Checkout URL"},"session_id":{"type":"string","title":"Session Id","description":"Stripe Session ID"}},"type":"object","required":["checkout_url","session_id"],"title":"CreateCheckoutSessionResponse","description":"Response schema for checkout session creation."},"CreatePortalSessionRequest":{"properties":{"return_url":{"type":"string","title":"Return Url","description":"URL to return to from billing portal"}},"type":"object","required":["return_url"],"title":"CreatePortalSessionRequest","description":"Request schema for creating billing portal session."},"CreatePortalSessionResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url","description":"Stripe Billing Portal URL"}},"type":"object","required":["portal_url"],"title":"CreatePortalSessionResponse","description":"Response schema for billing portal session."},"DelegationConfigSchema":{"properties":{"agent":{"type":"string","title":"Agent"},"instructions":{"type":"string","title":"Instructions"}},"type":"object","required":["agent","instructions"],"title":"DelegationConfigSchema"},"DeletionResponse":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Event ID for tracking the deletion (outbox event)"},"status":{"type":"string","title":"Status","description":"Current status (deleting)","default":"deleting"},"message":{"type":"string","title":"Message","description":"Human-readable status message","default":"Deletion queued successfully"}},"type":"object","required":["job_id"],"title":"DeletionResponse","description":"Response schema for async deletion operations.\n\nDeletion is queued and processed asynchronously via the neoqueue outbox.\nPoll GET /collections to check status."},"DocumentDetail":{"properties":{"id":{"type":"string","title":"Id","description":"OpenSearch document ID"},"title":{"type":"string","title":"Title","description":"Document title"},"content":{"type":"string","title":"Content","description":"Full document content","default":""},"source_id":{"type":"string","title":"Source Id","description":"ID of the knowledge source"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Additional document metadata"},"indexed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Indexed At","description":"When the document was indexed"}},"type":"object","required":["id","title","source_id"],"title":"DocumentDetail","description":"Full document details including content."},"DocumentSummary":{"properties":{"id":{"type":"string","title":"Id","description":"OpenSearch document ID"},"title":{"type":"string","title":"Title","description":"Document title"},"source_id":{"type":"string","title":"Source Id","description":"ID of the knowledge source"},"content_preview":{"type":"string","title":"Content Preview","description":"First 500 characters of content","default":""},"indexed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Indexed At","description":"When the document was indexed"}},"type":"object","required":["id","title","source_id"],"title":"DocumentSummary","description":"Summary of an indexed document for list views."},"DomainCounts":{"properties":{"agents":{"type":"integer","title":"Agents"},"teams":{"type":"integer","title":"Teams"},"sessions":{"type":"integer","title":"Sessions"},"entities":{"type":"integer","title":"Entities"},"entity_types":{"type":"integer","title":"Entity Types"},"tools":{"type":"integer","title":"Tools"},"knowledge_sources":{"type":"integer","title":"Knowledge Sources"},"traits":{"type":"integer","title":"Traits"},"chat_themes":{"type":"integer","title":"Chat Themes"},"agent_links":{"type":"integer","title":"Agent Links"},"scheduled_tasks":{"type":"integer","title":"Scheduled Tasks"},"automations":{"type":"integer","title":"Automations"},"domains":{"type":"integer","title":"Domains"}},"type":"object","required":["agents","teams","sessions","entities","entity_types","tools","knowledge_sources","traits","chat_themes","agent_links","scheduled_tasks","automations","domains"],"title":"DomainCounts"},"DomainCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"base_url":{"type":"string","maxLength":500,"minLength":1,"title":"Base Url"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"icon":{"type":"string","maxLength":100,"title":"Icon","default":"i-heroicons-globe-alt"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_default":{"type":"boolean","title":"Is Default","default":false},"sort_order":{"type":"integer","minimum":0.0,"title":"Sort Order","default":0}},"type":"object","required":["name","base_url"],"title":"DomainCreate","description":"Schema for creating a domain (admin only)."},"DomainListRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"base_url":{"type":"string","title":"Base Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"type":"string","title":"Icon"},"is_active":{"type":"boolean","title":"Is Active"},"is_default":{"type":"boolean","title":"Is Default"},"sort_order":{"type":"integer","title":"Sort Order"},"agent_count":{"type":"integer","title":"Agent Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","base_url","description","icon","is_active","is_default","sort_order","created_at","updated_at"],"title":"DomainListRead"},"DomainMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"base_url":{"type":"string","title":"Base Url"}},"type":"object","required":["id","name","base_url"],"title":"DomainMinimal","description":"Minimal domain info for embedding in other responses."},"DomainRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"base_url":{"type":"string","title":"Base Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"type":"string","title":"Icon"},"is_active":{"type":"boolean","title":"Is Active"},"is_default":{"type":"boolean","title":"Is Default"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","base_url","description","icon","is_active","is_default","sort_order","created_at","updated_at"],"title":"DomainRead"},"DomainUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"base_url":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Base Url"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Icon"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"DomainUpdate"},"EntityAttribute":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Attribute name (e.g., 'email', 'phone_number')"},"type":{"$ref":"#/components/schemas/AttributeType","description":"Data type for validation and display"},"required":{"type":"boolean","title":"Required","description":"Whether this field must be extracted","default":false},"ai_hint":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Ai Hint","description":"Hint for AI about what to look for"}},"type":"object","required":["name","type"],"title":"EntityAttribute","description":"Single attribute definition within an EntityType."},"EntityFacets":{"properties":{"entity_types":{"items":{"$ref":"#/components/schemas/TypeCountItem"},"type":"array","title":"Entity Types"},"statuses":{"additionalProperties":{"type":"integer"},"type":"object","title":"Statuses"}},"type":"object","title":"EntityFacets","description":"Filter-aware facet counts for the entities list.\n\n``entity_types`` are the per-template counts (nonzero groups only, ordered\ncount desc, reusing ``TypeCountItem``); ``statuses`` maps each\n``EntityStatus`` value to its count. Each facet ignores its OWN dimension's\nfilter and applies all the others."},"EntityStatus":{"type":"string","enum":["NEW","REVIEWED","ACTIONED","ARCHIVED"],"title":"EntityStatus","description":"Status of an extracted entity in the workflow."},"EntityType":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Entity type name (e.g., 'Job Candidate', 'Sales Lead')"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Description of what this entity type represents"},"icon":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Icon","description":"Heroicon name for UI display"},"attributes":{"items":{"$ref":"#/components/schemas/EntityAttribute"},"type":"array","title":"Attributes","description":"List of attribute definitions"},"primary_display_fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Primary Display Fields","description":"Fields to show in list views"},"identity_field":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identity Field","description":"Name of the attribute to use as the person's identity/display field. Must name one of this type's attributes. Any attribute type may be designated. Unset → server heuristic."},"id":{"type":"integer","title":"Id"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"is_template":{"type":"boolean","title":"Is Template","default":false},"template_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Category"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"agent_count":{"type":"integer","title":"Agent Count","default":0},"entity_count":{"type":"integer","title":"Entity Count","default":0}},"type":"object","required":["name","id","created_at"],"title":"EntityType","description":"Schema for EntityType response."},"EntityTypeCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Entity type name (e.g., 'Job Candidate', 'Sales Lead')"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Description of what this entity type represents"},"icon":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Icon","description":"Heroicon name for UI display"},"attributes":{"items":{"$ref":"#/components/schemas/EntityAttribute"},"type":"array","title":"Attributes","description":"List of attribute definitions"},"primary_display_fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Primary Display Fields","description":"Fields to show in list views"},"identity_field":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identity Field","description":"Name of the attribute to use as the person's identity/display field. Must name one of this type's attributes. Any attribute type may be designated. Unset → server heuristic."}},"type":"object","required":["name"],"title":"EntityTypeCreate","description":"Schema for creating an EntityType."},"EntityTypeMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"collection_mode":{"$ref":"#/components/schemas/CollectionMode","default":"passive"},"custom_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Prompt"},"field_count":{"type":"integer","title":"Field Count","default":0}},"type":"object","required":["id","name"],"title":"EntityTypeMinimal","description":"Minimal EntityType schema for Agent response."},"EntityTypeUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Icon"},"attributes":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntityAttribute"},"type":"array"},{"type":"null"}],"title":"Attributes"},"primary_display_fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Primary Display Fields"},"identity_field":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identity Field"}},"type":"object","title":"EntityTypeUpdate","description":"Schema for updating an EntityType (all fields optional)."},"EntityTypeWithAgents":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Entity type name (e.g., 'Job Candidate', 'Sales Lead')"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Description of what this entity type represents"},"icon":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Icon","description":"Heroicon name for UI display"},"attributes":{"items":{"$ref":"#/components/schemas/EntityAttribute"},"type":"array","title":"Attributes","description":"List of attribute definitions"},"primary_display_fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Primary Display Fields","description":"Fields to show in list views"},"identity_field":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identity Field","description":"Name of the attribute to use as the person's identity/display field. Must name one of this type's attributes. Any attribute type may be designated. Unset → server heuristic."},"id":{"type":"integer","title":"Id"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"is_template":{"type":"boolean","title":"Is Template","default":false},"template_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Category"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"agent_count":{"type":"integer","title":"Agent Count","default":0},"entity_count":{"type":"integer","title":"Entity Count","default":0},"agents":{"items":{"$ref":"#/components/schemas/AgentSummary"},"type":"array","title":"Agents","default":[]}},"type":"object","required":["name","id","created_at"],"title":"EntityTypeWithAgents","description":"EntityType with assigned agents list."},"EventConfigSchema":{"properties":{"id":{"type":"string","title":"Id","description":"Event identifier (e.g., 'conversation.completed')"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Display name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"What this event signals"},"trigger":{"type":"string","title":"Trigger","description":"Instructions for when to emit"},"metadata_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Schema","description":"JSON schema for payload"}},"type":"object","required":["id","trigger"],"title":"EventConfigSchema","description":"Event definition schema - matches engine Event domain object."},"EventExecution":{"properties":{"inbound_event_id":{"type":"integer","title":"Inbound Event Id","description":"ID of the triggering event"},"event_listener_id":{"type":"integer","title":"Event Listener Id","description":"ID of the listener configuration"},"message_sent":{"type":"string","title":"Message Sent","description":"The rendered message sent to the agent/team"},"id":{"type":"integer","title":"Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"status":{"$ref":"#/components/schemas/ExecutionStatus"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"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"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"attempt_number":{"type":"integer","title":"Attempt Number"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["inbound_event_id","event_listener_id","message_sent","id","status","attempt_number","created_at"],"title":"EventExecution","description":"Response schema for event execution."},"EventListener":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"event_pattern":{"type":"string","title":"Event Pattern"},"match_type":{"$ref":"#/components/schemas/EventMatchType"},"target_type":{"$ref":"#/components/schemas/ListenerTargetType"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"message_template":{"type":"string","title":"Message Template"},"is_active":{"type":"boolean","title":"Is Active"},"priority":{"type":"integer","title":"Priority"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"agent":{"anyOf":[{"$ref":"#/components/schemas/TargetAgentMinimal"},{"type":"null"}]},"team":{"anyOf":[{"$ref":"#/components/schemas/TargetTeamMinimal"},{"type":"null"}]}},"type":"object","required":["id","name","event_pattern","match_type","target_type","message_template","is_active","priority","created_at"],"title":"EventListener","description":"Response schema for event listener with agent/team details."},"EventListenerCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Human-readable listener name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description of what this listener does"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier","description":"URL-friendly identifier for API access"},"event_pattern":{"type":"string","maxLength":255,"minLength":1,"title":"Event Pattern","description":"Pattern to match against event_type (e.g., 'order.*' for wildcard)"},"match_type":{"$ref":"#/components/schemas/EventMatchType","description":"How to match the pattern: exact, prefix, or wildcard","default":"EXACT"},"target_type":{"$ref":"#/components/schemas/ListenerTargetType","description":"What to trigger: agent or team"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id","description":"Agent ID (required when target_type is 'agent')"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id","description":"Team ID (required when target_type is 'team')"},"message_template":{"type":"string","minLength":1,"title":"Message Template","description":"Jinja2-style template for the message. Variables: {{event_type}}, {{payload}}, {{context}}"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether this listener is enabled","default":true},"priority":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Priority","description":"Processing priority (1=highest, 10=lowest)","default":5},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Additional configuration (retry_count, timeout, filters, etc.)"}},"type":"object","required":["name","event_pattern","target_type","message_template"],"title":"EventListenerCreate","description":"Schema for creating an event listener."},"EventListenerUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier"},"event_pattern":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Event Pattern"},"match_type":{"anyOf":[{"$ref":"#/components/schemas/EventMatchType"},{"type":"null"}]},"target_type":{"anyOf":[{"$ref":"#/components/schemas/ListenerTargetType"},{"type":"null"}]},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"message_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Template"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"priority":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Priority"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"EventListenerUpdate","description":"Schema for updating an event listener (all fields optional)."},"EventMatchType":{"type":"string","enum":["EXACT","PREFIX","WILDCARD"],"title":"EventMatchType","description":"How to match event types to listeners."},"ExecuteAgentRequest":{"properties":{"agent_ref":{"type":"string","title":"Agent Ref","description":"Agent ID, identifier, or URI (e.g., '123', 'my-agent', 'agent://my-agent')"},"message":{"type":"string","maxLength":50000,"minLength":1,"title":"Message","description":"Message/prompt to send to the agent"},"response_format":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response Format","description":"Optional JSON schema for structured output parsing"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context variables for template rendering (e.g., {{variable}})"}},"type":"object","required":["agent_ref","message"],"title":"ExecuteAgentRequest","description":"Request schema for agent execution.\n\nSupports flexible agent identification and optional structured output.","example":{"agent_ref":"instruction-improver","context":{"content":"Help users with their questions"},"message":"Improve the following text:\n\n{{content}}"}},"ExecuteAgentResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether execution completed successfully"},"content":{"type":"string","title":"Content","description":"The agent's response content"},"structured_output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Structured Output","description":"Parsed structured output if response_format was provided"},"agent_name":{"type":"string","title":"Agent Name","description":"Name of the executed agent"},"agent_id":{"type":"integer","title":"Agent Id","description":"ID of the executed agent"},"execution_time_ms":{"type":"integer","title":"Execution Time Ms","description":"Execution time in milliseconds"}},"type":"object","required":["success","content","agent_name","agent_id","execution_time_ms"],"title":"ExecuteAgentResponse","description":"Response schema for agent execution.\n\nContains the complete agent response with metadata.","example":{"agent_id":42,"agent_name":"Instruction Improver","content":"I am a helpful AI assistant that provides clear, accurate answers to user questions.","execution_time_ms":1250,"success":true}},"ExecutionStatus":{"type":"string","enum":["PENDING","RUNNING","COMPLETED","FAILED","TIMEOUT"],"title":"ExecutionStatus","description":"Status of an event listener execution."},"ExtractedEntityBulkDelete":{"properties":{"entity_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Entity Ids","description":"List of entity IDs to delete"}},"type":"object","required":["entity_ids"],"title":"ExtractedEntityBulkDelete","description":"Schema for bulk permanent deletes.\n\nMirrors ``ExtractedEntityBulkStatusUpdate`` (min_length=1 → empty list is a\n422 at the API layer). No status field: the operation is a hard delete."},"ExtractedEntityBulkStatusUpdate":{"properties":{"entity_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Entity Ids","description":"List of entity IDs to update"},"status":{"$ref":"#/components/schemas/EntityStatus","description":"New status to apply"}},"type":"object","required":["entity_ids","status"],"title":"ExtractedEntityBulkStatusUpdate","description":"Schema for bulk status updates."},"ExtractedEntityCreate":{"properties":{"entity_type_id":{"type":"integer","title":"Entity Type Id","description":"ID of the EntityType that defines this entity's structure"},"agent_id":{"type":"integer","title":"Agent Id","description":"ID of the Agent that extracted this entity"},"session_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Session Id","description":"Session ID from which entity was extracted"},"attributes":{"additionalProperties":true,"type":"object","title":"Attributes","description":"Extracted attribute values"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes","description":"User notes about this entity"},"confidence_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence Score","description":"AI confidence score (0.0-1.0)"},"status":{"$ref":"#/components/schemas/EntityStatus","description":"Initial workflow status","default":"NEW"},"is_manual":{"type":"boolean","title":"Is Manual","description":"Whether this was manually created","default":true}},"type":"object","required":["entity_type_id","agent_id"],"title":"ExtractedEntityCreate","description":"Schema for creating an ExtractedEntity (manual or AI-extracted)."},"ExtractedEntityDetailRead":{"properties":{"id":{"type":"integer","title":"Id"},"entity_type_id":{"type":"integer","title":"Entity Type Id"},"agent_id":{"type":"integer","title":"Agent Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"attributes":{"additionalProperties":true,"type":"object","title":"Attributes"},"confidence_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Score"},"status":{"$ref":"#/components/schemas/EntityStatus"},"is_manual":{"type":"boolean","title":"Is Manual"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"account_id":{"type":"integer","title":"Account Id"},"provenance":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Provenance"},"session_excerpt":{"anyOf":[{"items":{"$ref":"#/components/schemas/SessionExcerptMessage"},"type":"array"},{"type":"null"}],"title":"Session Excerpt"},"entity_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type Name"},"entity_type_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type Icon"},"entity_type_attributes":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Entity Type Attributes"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"},"session_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Channel"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"display_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Summary"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","entity_type_id","agent_id","session_id","attributes","confidence_score","status","is_manual","notes","account_id","created_at","updated_at"],"title":"ExtractedEntityDetailRead","description":"Detail read schema -- used for get-by-id with full entity_type info."},"ExtractedEntityRead":{"properties":{"id":{"type":"integer","title":"Id"},"entity_type_id":{"type":"integer","title":"Entity Type Id"},"agent_id":{"type":"integer","title":"Agent Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"attributes":{"additionalProperties":true,"type":"object","title":"Attributes"},"confidence_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Score"},"status":{"$ref":"#/components/schemas/EntityStatus"},"is_manual":{"type":"boolean","title":"Is Manual"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"account_id":{"type":"integer","title":"Account Id"},"entity_type_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type Name"},"entity_type_icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type Icon"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"},"session_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Channel"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"display_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Summary"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","entity_type_id","agent_id","session_id","attributes","confidence_score","status","is_manual","notes","account_id","created_at","updated_at"],"title":"ExtractedEntityRead","description":"Standard read schema -- used in list responses and simple reads."},"ExtractedEntityUpdate":{"properties":{"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes","description":"Updated attribute values"},"status":{"anyOf":[{"$ref":"#/components/schemas/EntityStatus"},{"type":"null"}],"description":"New workflow status"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes","description":"User notes"}},"type":"object","title":"ExtractedEntityUpdate","description":"Schema for updating an ExtractedEntity."},"ExtractionStatus":{"properties":{"processing":{"type":"boolean","title":"Processing","description":"At least one capture is still being extracted."},"pending_count":{"type":"integer","minimum":0.0,"title":"Pending Count","description":"How many captures are still being extracted."}},"type":"object","required":["processing","pending_count"],"title":"ExtractionStatus","description":"What both waiting surfaces consume."},"FlowMessageResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"FlowMessageResponse","description":"Uniform, side-effect-free success envelope for the identity flows."},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest","description":"Body for ``POST /auth/forgot-password``."},"GoogleAuthRequest":{"properties":{"code":{"type":"string","title":"Code"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale"}},"type":"object","required":["code","redirect_uri"],"title":"GoogleAuthRequest","description":"Request body for Google OAuth authentication."},"GoogleAuthResponse":{"properties":{"token":{"type":"string","title":"Token"},"user":{"$ref":"#/components/schemas/GoogleAuthUserResponse"}},"type":"object","required":["token","user"],"title":"GoogleAuthResponse","description":"Successful Google auth response with JWT and user info."},"GoogleAuthUserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id","email"],"title":"GoogleAuthUserResponse","description":"User portion of the Google auth response."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InboundEvent":{"properties":{"event_type":{"type":"string","maxLength":255,"minLength":1,"title":"Event Type","description":"Type of the event (e.g., 'order.created', 'user.signup')"},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Event payload data as JSON"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context data (source, environment, etc.)"},"id":{"type":"integer","title":"Id"},"event_id":{"type":"string","title":"Event Id"},"status":{"$ref":"#/components/schemas/InboundEventStatus"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"processed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processed At"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["event_type","id","event_id","status","created_at"],"title":"InboundEvent","description":"Response schema for inbound event."},"InboundEventCreate":{"properties":{"event_type":{"type":"string","maxLength":255,"minLength":1,"title":"Event Type","description":"Type of the event (e.g., 'order.created', 'user.signup')"},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Event payload data as JSON"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context data (source, environment, etc.)"},"event_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Event Id","description":"Unique event ID for idempotency. Auto-generated if not provided."}},"type":"object","required":["event_type"],"title":"InboundEventCreate","description":"Schema for creating an inbound event via API."},"InboundEventResponse":{"properties":{"event":{"$ref":"#/components/schemas/InboundEvent"},"listeners_matched":{"type":"integer","title":"Listeners Matched"},"message":{"type":"string","title":"Message"}},"type":"object","required":["event","listeners_matched","message"],"title":"InboundEventResponse","description":"Response when creating an event via API."},"InboundEventStatus":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","FAILED","NO_LISTENERS"],"title":"InboundEventStatus","description":"Status of an inbound event in the processing pipeline."},"IndexStats":{"properties":{"document_count":{"type":"integer","title":"Document Count","description":"Total documents in index","default":0},"index_name":{"type":"string","title":"Index Name","description":"OpenSearch index name"},"exists":{"type":"boolean","title":"Exists","description":"Whether the index exists","default":false}},"type":"object","required":["index_name"],"title":"IndexStats","description":"Statistics about the knowledge index."},"JsonAuthorizeBody":{"properties":{"client_id":{"type":"string","title":"Client Id"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"scope":{"type":"string","title":"Scope"},"state":{"type":"string","title":"State"},"code_challenge":{"type":"string","title":"Code Challenge"},"code_challenge_method":{"type":"string","const":"S256","title":"Code Challenge Method"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"},"action":{"type":"string","enum":["approve","deny"],"title":"Action"}},"additionalProperties":false,"type":"object","required":["client_id","redirect_uri","scope","state","code_challenge","code_challenge_method","action"],"title":"JsonAuthorizeBody","description":"Request body for the JSON authorize endpoint.\n\nNote: ``user_id`` is intentionally omitted. It is extracted from the\nauthenticated session JWT to prevent injection."},"JsonAuthorizeResponse":{"properties":{"redirect_url":{"type":"string","title":"Redirect Url"}},"additionalProperties":false,"type":"object","required":["redirect_url"],"title":"JsonAuthorizeResponse","description":"Response from the JSON authorize helper containing the redirect URL.\n\nThe ``redirect_url`` contains either an authorization code (on approve)\nor an error (on deny / validation failure) as query parameters."},"KnowledgeConfigSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"type":"string","title":"Type"},"data":{"items":{"type":"string"},"type":"array","title":"Data"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["id","type","data"],"title":"KnowledgeConfigSchema"},"KnowledgeLoadingStatusSchema":{"type":"string","enum":["unloaded","loading","loaded","partial","failed"],"title":"KnowledgeLoadingStatusSchema","description":"Pydantic-compatible enum for serialization."},"KnowledgeSearchRequest":{"properties":{"query":{"type":"string","maxLength":1000,"minLength":1,"title":"Query","description":"Search query text"},"mode":{"$ref":"#/components/schemas/SearchMode","description":"Search mode (semantic, keyword, hybrid)","default":"hybrid"},"source_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Source Ids","description":"Filter by source IDs"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum results to return","default":20},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip","default":0}},"type":"object","required":["query"],"title":"KnowledgeSearchRequest","description":"Request schema for knowledge search."},"KnowledgeSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/KnowledgeSearchResultItem"},"type":"array","title":"Results","description":"List of search results"},"total":{"type":"integer","title":"Total","description":"Total matching documents","default":0},"mode_used":{"$ref":"#/components/schemas/SearchMode","description":"Search mode that was used","default":"hybrid"}},"type":"object","title":"KnowledgeSearchResponse","description":"Response schema for knowledge search."},"KnowledgeSearchResultItem":{"properties":{"document_id":{"type":"string","title":"Document Id","description":"OpenSearch document ID"},"title":{"type":"string","title":"Title","description":"Document title"},"content_snippet":{"type":"string","title":"Content Snippet","description":"Relevant content snippet from the document","default":""},"score":{"type":"number","title":"Score","description":"Raw relevance score from search engine","default":0.0},"normalized_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Normalized Score","description":"Normalized score (0-100)","default":0},"source_id":{"type":"string","title":"Source Id","description":"Source ID"}},"type":"object","required":["document_id","title","source_id"],"title":"KnowledgeSearchResultItem","description":"Single search result item with relevance score."},"KnowledgeSource":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"data_type":{"type":"string","maxLength":255,"minLength":1,"title":"Data Type"},"paths":{"items":{"type":"string"},"type":"array","title":"Paths"},"status":{"type":"string","maxLength":255,"title":"Status","default":"active"},"loading_status":{"$ref":"#/components/schemas/KnowledgeLoadingStatusSchema","default":"unloaded"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"loaded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Loaded At"},"loading_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Loading Started At"},"loading_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loading Error"},"loading_urls_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loading Urls Total"},"loading_urls_done":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loading Urls Done"},"document_count":{"type":"integer","title":"Document Count","default":0},"id":{"type":"integer","title":"Id"},"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"agents":{"items":{"$ref":"#/components/schemas/AgentMinimal"},"type":"array","title":"Agents","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","data_type","id","created_at"],"title":"KnowledgeSource","description":"Response schema for knowledge source."},"KnowledgeSourceCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"data_type":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Data Type","description":"Ingestion type; omit or pass 'auto' for whole-site auto-resolve"},"paths":{"items":{"type":"string"},"type":"array","title":"Paths"},"status":{"type":"string","maxLength":255,"title":"Status","default":"active"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"KnowledgeSourceCreate","description":"Create-request schema for a knowledge source.\n\n``name`` and ``data_type`` are optional at the REQUEST level so a caller can\nsubmit only a URL and let the boundary (API endpoint / MCP tool) auto-resolve\nthe whole-site ingestion strategy via ``resolve_website_source``:\n\n- ``data_type`` of ``None`` or ``\"auto\"`` triggers sitemap-vs-discovery\n  resolution before ``create_source`` opens its transaction.\n- a blank ``name`` is derived from the URL hostname at the boundary.\n\nThe PERSISTED value is always a concrete resolved string — the boundary fills\nboth fields before calling ``create_source``. The DB column and persisted\nmodel are unchanged."},"KnowledgeSourceUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"data_type":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Data Type"},"paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Paths"},"status":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Status"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Identifier"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"KnowledgeSourceUpdate","description":"Schema for updating a knowledge source. All fields optional."},"LinkResolveAgent":{"properties":{"uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uri"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar"}},"type":"object","title":"LinkResolveAgent","description":"Public-safe agent data carried on a resolve response.\n\nOnly the fields a renderer needs — no private agent config ever leaks."},"LinkResolveResponse":{"properties":{"available":{"type":"boolean","title":"Available"},"agent":{"anyOf":[{"$ref":"#/components/schemas/LinkResolveAgent"},{"type":"null"}]},"presentation":{"type":"string","title":"Presentation"},"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"greeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Greeting"},"theme":{"anyOf":[{"$ref":"#/components/schemas/ChatThemeMinimal"},{"type":"null"}]}},"type":"object","required":["available","presentation"],"title":"LinkResolveResponse","description":"Public resolve payload for ``GET /resolve/l/{slug}``.\n\nDistinct from ``AgentLinkRead`` (the authed/MCP CRUD shape) and from the\nlegacy ``QrResolveResponse``. The embed page (Phase 8) consumes this shape\nverbatim so it needs NO agent-config lookup of its own: ``greeting`` is\nresolved server-side (``link.greeting`` else the agent's ``chat_ui``\ngreeting) and ``theme`` carries the post-3-tier effective branding."},"ListenerTargetType":{"type":"string","enum":["AGENT","TEAM"],"title":"ListenerTargetType","description":"What the listener triggers."},"ListenerTestResponse":{"properties":{"listener_id":{"type":"integer","title":"Listener Id","description":"ID of the tested event listener"},"listener_name":{"type":"string","title":"Listener Name","description":"Name of the tested event listener"},"template":{"type":"string","title":"Template","description":"Raw template string before rendering"},"rendered_message":{"type":"string","title":"Rendered Message","description":"Template rendered with sample event data"},"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Sample event data used for rendering"}},"type":"object","required":["listener_id","listener_name","template","rendered_message","input"],"title":"ListenerTestResponse","description":"Response for event listener test endpoint."},"LoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest","description":"JSON request body for login."},"MessageAttachmentRef":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"kind":{"type":"string","title":"Kind","description":"asset.kind vocabulary: image | document"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"}},"type":"object","required":["asset_id","kind"],"title":"MessageAttachmentRef","description":"A structured attachment reference derived from ``message_data`` (Phase 7).\n\nSerialized alongside a message so the frontend history renderer (Phase 8) can\nshow an inline image / PDF-download chip. ``asset_id`` is the stable\n``gnosari_asset_id`` marker (Interface Contract §2); the renderer resolves it\nto a fresh signed URL via ``GET /assets/{id}/url``. ``mime``/``size`` are not\npersisted in the content-part and are fetched on demand by the renderer."},"MessageResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponse","description":"Simple message response for action endpoints."},"PaginatedExtractedEntitiesResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ExtractedEntityRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationInfo"},"facets":{"anyOf":[{"$ref":"#/components/schemas/EntityFacets"},{"type":"null"}]}},"type":"object","required":["data","pagination"],"title":"PaginatedExtractedEntitiesResponse","description":"Paginated extracted entities from extracted_entity_service."},"PaginatedResponse_AgentDirectoryItem_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentDirectoryItem"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[AgentDirectoryItem]"},"PaginatedResponse_AgentLinkRead_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentLinkRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[AgentLinkRead]"},"PaginatedResponse_Agent_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Agent"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[Agent]"},"PaginatedResponse_ChatThemeList_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ChatThemeList"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[ChatThemeList]"},"PaginatedResponse_DocumentSummary_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DocumentSummary"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[DocumentSummary]"},"PaginatedResponse_DomainListRead_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DomainListRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[DomainListRead]"},"PaginatedResponse_EntityType_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EntityType"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[EntityType]"},"PaginatedResponse_EventExecution_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EventExecution"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[EventExecution]"},"PaginatedResponse_EventListener_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EventListener"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[EventListener]"},"PaginatedResponse_KnowledgeSource_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/KnowledgeSource"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[KnowledgeSource]"},"PaginatedResponse_ScheduledTask_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ScheduledTask"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[ScheduledTask]"},"PaginatedResponse_SessionWithMessageCount_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SessionWithMessageCount"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[SessionWithMessageCount]"},"PaginatedResponse_Team_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Team"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[Team]"},"PaginatedResponse_Tool_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Tool"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[Tool]"},"PaginatedResponse_TraitCategoryRead_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TraitCategoryRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[TraitCategoryRead]"},"PaginatedResponse_TraitRead_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TraitRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[TraitRead]"},"PaginatedResponse_TraitTagRead_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TraitTagRead"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[TraitTagRead]"},"PaginatedResponse_WebhookDeliveryHistoryEntry_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookDeliveryHistoryEntry"},"type":"array","title":"Data"},"pagination":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","pagination"],"title":"PaginatedResponse[WebhookDeliveryHistoryEntry]"},"PaginationInfo":{"properties":{"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["total","skip","limit","has_more"],"title":"PaginationInfo","description":"Shared pagination metadata returned by all list endpoints."},"PaginationMeta":{"properties":{"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["total","skip","limit","has_more"],"title":"PaginationMeta"},"PreloadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether the preload request was accepted"},"message":{"type":"string","title":"Message","description":"Human-readable result description"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Background job event ID, null if already loading"},"knowledge_source_id":{"type":"integer","title":"Knowledge Source Id","description":"ID of the knowledge source being preloaded"},"knowledge_source_name":{"type":"string","title":"Knowledge Source Name","description":"Name of the knowledge source"},"status":{"type":"string","title":"Status","description":"Current knowledge source status"},"note":{"type":"string","title":"Note","description":"Additional context about the preload state"}},"type":"object","required":["success","message","knowledge_source_id","knowledge_source_name","status","note"],"title":"PreloadResponse","description":"Response for knowledge source preload endpoint."},"PromptConfigSchema":{"properties":{"id":{"type":"string","title":"Id"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Variables"}},"type":"object","required":["id"],"title":"PromptConfigSchema"},"PublicationConfigSchema-Input":{"properties":{"access_level":{"type":"string","pattern":"^(public|private|password_protected)$","title":"Access Level","description":"Agent visibility level"},"chat_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Uri","description":"URI slug for public access"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name (must exist in account)"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Password for password_protected access (write-only, never returned in responses)"}},"type":"object","required":["access_level"],"title":"PublicationConfigSchema","description":"Publication configuration for agent visibility."},"PublicationConfigSchema-Output":{"properties":{"access_level":{"type":"string","pattern":"^(public|private|password_protected)$","title":"Access Level","description":"Agent visibility level"},"chat_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Uri","description":"URI slug for public access"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Domain name (must exist in account)"}},"type":"object","required":["access_level"],"title":"PublicationConfigSchema","description":"Publication configuration for agent visibility."},"ReactivateSubscriptionResponse":{"properties":{"status":{"$ref":"#/components/schemas/SubscriptionStatus"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","cancel_at_period_end","message"],"title":"ReactivateSubscriptionResponse","description":"Response schema for subscription reactivation."},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest","description":"Body for ``POST /auth/resend-verification``."},"ResetPasswordRequest":{"properties":{"token":{"type":"string","maxLength":512,"minLength":1,"title":"Token"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"}},"type":"object","required":["token","password"],"title":"ResetPasswordRequest","description":"Body for ``POST /auth/reset-password``."},"ScheduledTask":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"id":{"type":"integer","title":"Id"},"team_id":{"type":"integer","title":"Team Id"},"last_executed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Executed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamForTask"},{"type":"null"}]}},"type":"object","required":["name","id","team_id","created_at","updated_at"],"title":"ScheduledTask"},"ScheduledTaskCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"team_id":{"type":"integer","title":"Team Id"}},"type":"object","required":["name","team_id"],"title":"ScheduledTaskCreate"},"ScheduledTaskUpdate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"}},"type":"object","required":["name"],"title":"ScheduledTaskUpdate"},"SearchMode":{"type":"string","enum":["semantic","keyword","hybrid"],"title":"SearchMode","description":"Search mode for knowledge queries.\n\n- semantic: Vector similarity search using embeddings\n- keyword: Traditional text-based search\n- hybrid: Combination of semantic and keyword search (recommended)"},"Session":{"properties":{"session_id":{"type":"string","title":"Session Id"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Identifier"},"agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Identifier"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"summary_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary Metadata","description":"Metadata from summary generation: key_topics, sentiment, action_items, primary_intent"},"session_type":{"$ref":"#/components/schemas/SessionType","description":"Session type for visibility control","default":"USER"},"channel":{"anyOf":[{"$ref":"#/components/schemas/SessionChannel"},{"type":"null"}],"description":"Origin channel the session was created on (informational display metadata). Set once at creation on the client-known surface; enum-validated (unknown → 422). FORGEABLE BY DESIGN — rides a public POST /sessions and NEVER drives authorization or visibility (that stays session_type). Excluded from SessionUpdate — immutable after creation."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"messages":{"items":{"$ref":"#/components/schemas/SessionMessage"},"type":"array","title":"Messages","default":[]},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamInfo"},{"type":"null"}]},"agent":{"anyOf":[{"$ref":"#/components/schemas/AgentInfo"},{"type":"null"}]}},"type":"object","required":["session_id","created_at","updated_at"],"title":"Session"},"SessionChannel":{"type":"string","enum":["JOINA_CHAT","QR","WIDGET","INTERNAL","API"],"title":"SessionChannel","description":"Origin channel a session was created on — informational display metadata.\n\nSet once at creation on the client-known surface (``POST /sessions``) and\nsurfaced on reads so the Collected Data inbox can render \"via joina.chat\"\nper record. Mirrors ``SessionType``'s varchar+StrEnum shape MINUS the index.\n\nINFORMATIONAL AND FORGEABLE BY DESIGN: it rides a public unauthenticated\n``POST /sessions`` and is enum-validated (invalid → 422) but NEVER drives\nauthorization or visibility — that stays ``session_type``. Do not \"fix\" this\nas a security hole."},"SessionCreate":{"properties":{"session_id":{"type":"string","title":"Session Id"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Identifier"},"agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Identifier"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"summary_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary Metadata","description":"Metadata from summary generation: key_topics, sentiment, action_items, primary_intent"},"session_type":{"$ref":"#/components/schemas/SessionType","description":"Session type for visibility control","default":"USER"},"channel":{"anyOf":[{"$ref":"#/components/schemas/SessionChannel"},{"type":"null"}],"description":"Origin channel the session was created on (informational display metadata). Set once at creation on the client-known surface; enum-validated (unknown → 422). FORGEABLE BY DESIGN — rides a public POST /sessions and NEVER drives authorization or visibility (that stays session_type). Excluded from SessionUpdate — immutable after creation."},"messages":{"items":{"$ref":"#/components/schemas/SessionMessageCreate"},"type":"array","title":"Messages","default":[]}},"type":"object","required":["session_id"],"title":"SessionCreate","description":"Schema for creating a new session.\n\nInherits from SessionBase which already includes:\n- session_id, team_id, agent_id, team_identifier, agent_identifier, summary, session_type\n\nOnly adds the messages field for initial message creation."},"SessionExcerptMessage":{"properties":{"id":{"type":"integer","title":"Id"},"role":{"type":"string","title":"Role"},"text":{"type":"string","title":"Text"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","text","created_at"],"title":"SessionExcerptMessage","description":"One conversation message in an entity's session excerpt.\n\nDetail-only (kept off the list/read schemas to avoid payload bloat). ``id``\nis the ``session_messages`` insertion-order PK so the client can key emerald\nprovenance highlights to the cited message; ``text`` is server-truncated."},"SessionMessage":{"properties":{"message_data":{"type":"string","title":"Message Data"},"id":{"type":"integer","title":"Id"},"session_id":{"type":"string","title":"Session Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"attachments":{"items":{"$ref":"#/components/schemas/MessageAttachmentRef"},"type":"array","title":"Attachments","description":"Attachment references parsed from message_data content parts (Phase 7). Empty for text-only messages."}},"type":"object","required":["message_data","id","session_id","created_at","updated_at"],"title":"SessionMessage"},"SessionMessageCreate":{"properties":{"message_data":{"type":"string","title":"Message Data"}},"type":"object","required":["message_data"],"title":"SessionMessageCreate"},"SessionMessagesResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"messages":{"items":{"$ref":"#/components/schemas/SessionMessage"},"type":"array","title":"Messages","default":[]},"total_count":{"type":"integer","title":"Total Count"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["session_id","total_count","has_more"],"title":"SessionMessagesResponse","description":"Response for dedicated messages endpoint.\n\nUse get_session_messages endpoint to retrieve paginated messages\nwithout loading the full session object."},"SessionType":{"type":"string","enum":["USER","INTERNAL","DEBUG"],"title":"SessionType","description":"Session type for visibility control.\n\nFollowing SOLID principles:\n- Single Responsibility: Each type has one clear visibility pattern\n- Open/Closed: New types can be added without modifying existing code"},"SessionUpdate":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Identifier"},"agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Identifier"},"messages":{"anyOf":[{"items":{"$ref":"#/components/schemas/SessionMessageCreate"},"type":"array"},{"type":"null"}],"title":"Messages"}},"type":"object","title":"SessionUpdate","description":"Schema for updating a session.\n\nNOTE: session_type is intentionally NOT included here.\nSession types are set at creation time and should not be modified via API.\nThis prevents users from hiding sessions by changing them to INTERNAL."},"SessionWithMessageCount":{"properties":{"session_id":{"type":"string","title":"Session Id"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Agent Id"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Identifier"},"agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Identifier"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"summary_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary Metadata","description":"Metadata from summary generation: key_topics, sentiment, action_items, primary_intent"},"session_type":{"$ref":"#/components/schemas/SessionType","description":"Session type for visibility control","default":"USER"},"channel":{"anyOf":[{"$ref":"#/components/schemas/SessionChannel"},{"type":"null"}],"description":"Origin channel the session was created on (informational display metadata). Set once at creation on the client-known surface; enum-validated (unknown → 422). FORGEABLE BY DESIGN — rides a public POST /sessions and NEVER drives authorization or visibility (that stays session_type). Excluded from SessionUpdate — immutable after creation."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"message_count":{"type":"integer","title":"Message Count"},"first_message":{"anyOf":[{"$ref":"#/components/schemas/SessionMessage"},{"type":"null"}]},"messages_overview":{"items":{"$ref":"#/components/schemas/SessionMessage"},"type":"array","title":"Messages Overview","default":[]},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamInfo"},{"type":"null"}]},"agent":{"anyOf":[{"$ref":"#/components/schemas/AgentInfo"},{"type":"null"}]}},"type":"object","required":["session_id","created_at","updated_at","message_count"],"title":"SessionWithMessageCount","description":"Session schema with message count and overview for list views."},"StatsByAgentRead":{"properties":{"agents":{"items":{"$ref":"#/components/schemas/AgentStatsItem"},"type":"array","title":"Agents"},"total":{"type":"integer","title":"Total","default":0},"period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Days"}},"type":"object","title":"StatsByAgentRead","description":"Stats grouped by agent -- matches actual return shape."},"StatsRead":{"properties":{"status_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Counts"},"type_counts":{"items":{"$ref":"#/components/schemas/TypeCountItem"},"type":"array","title":"Type Counts"},"agent_counts":{"items":{"$ref":"#/components/schemas/AgentCountItem"},"type":"array","title":"Agent Counts"},"total":{"type":"integer","title":"Total","default":0},"period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Days"}},"type":"object","title":"StatsRead","description":"Entity extraction statistics -- matches actual return shape."},"SubscriptionPlan":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Plan display name"},"identifier":{"type":"string","maxLength":50,"minLength":1,"title":"Identifier","description":"Unique plan identifier"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Plan description"},"billing_interval":{"$ref":"#/components/schemas/BillingInterval","description":"Billing frequency"},"price":{"type":"integer","minimum":0.0,"title":"Price","description":"Price in cents"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"ISO currency code","default":"usd"},"active":{"type":"boolean","title":"Active","description":"Whether plan is available for new subscriptions","default":true},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"features":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionPlanFeatures"},{"type":"null"}]}},"type":"object","required":["name","identifier","billing_interval","price","id","created_at","updated_at"],"title":"SubscriptionPlan","description":"Schema for subscription plan in database (with nested features)."},"SubscriptionPlanFeatures":{"properties":{"max_agents":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Agents","description":"Maximum agents (-1 or None = unlimited)"},"max_teams":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Teams","description":"Maximum teams"},"max_sessions_per_month":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Sessions Per Month","description":"Monthly session limit"},"max_knowledge_sources":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Knowledge Sources","description":"Maximum knowledge sources"},"max_tools":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Tools","description":"Maximum custom tools"},"max_api_calls_per_month":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Api Calls Per Month","description":"Monthly API call limit"},"max_storage_mb":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Storage Mb","description":"Storage limit in MB"},"max_team_members":{"anyOf":[{"type":"integer","minimum":-1.0},{"type":"null"}],"title":"Max Team Members","description":"Maximum team members"},"advanced_analytics":{"type":"boolean","title":"Advanced Analytics","description":"Access to advanced analytics","default":false},"priority_support":{"type":"boolean","title":"Priority Support","description":"Priority customer support","default":false},"custom_branding":{"type":"boolean","title":"Custom Branding","description":"Custom branding options","default":false},"api_access":{"type":"boolean","title":"Api Access","description":"API access enabled","default":false},"sso_enabled":{"type":"boolean","title":"Sso Enabled","description":"SSO authentication enabled","default":false},"dedicated_infrastructure":{"type":"boolean","title":"Dedicated Infrastructure","description":"Dedicated infrastructure","default":false},"id":{"type":"integer","title":"Id"},"plan_id":{"type":"integer","title":"Plan 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","plan_id","created_at","updated_at"],"title":"SubscriptionPlanFeatures","description":"Schema for plan features in database."},"SubscriptionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"status":{"$ref":"#/components/schemas/SubscriptionStatus"},"current_period_start":{"type":"string","format":"date-time","title":"Current Period Start"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"cancel_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancel At"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"}},"type":"object","required":["id","plan","status","current_period_start","current_period_end","cancel_at_period_end"],"title":"SubscriptionResponse","description":"Response schema for current subscription."},"SubscriptionStatus":{"type":"string","enum":["active","trialing","past_due","canceled","incomplete","incomplete_expired"],"title":"SubscriptionStatus","description":"Subscription status enum matching Stripe subscription statuses."},"SuggestedPromptsConfigSchema":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether to show suggested prompts in chat","default":true},"prompts":{"items":{"$ref":"#/components/schemas/core__schemas__suggested_prompt__SuggestedPromptSchema"},"type":"array","title":"Prompts","description":"List of suggested prompts (max 8)"}},"type":"object","title":"SuggestedPromptsConfigSchema","description":"Schema for suggested prompts configuration.\n\nUsed in Agent and Team create/update operations.\nProvides a complete configuration including enabled state\nand the list of prompts."},"TargetAgentMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar"}},"type":"object","required":["id","name"],"title":"TargetAgentMinimal","description":"Minimal agent info for event listener responses."},"TargetTeamMinimal":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","name"],"title":"TargetTeamMinimal","description":"Minimal team info for event listener responses."},"Task":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"input_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Message"},"type":{"type":"string","title":"Type","default":"task"},"status":{"type":"string","title":"Status","default":"pending"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"id":{"type":"integer","title":"Id"},"account_id":{"type":"integer","title":"Account Id"},"assigned_team_id":{"type":"integer","title":"Assigned Team Id"},"assigned_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned Agent Id"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"reporter_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Team Id"},"reporter_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Agent Id"},"assigned_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Team Identifier"},"assigned_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent Identifier"},"reporter_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Team Identifier"},"reporter_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Agent Identifier"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"assigned_team":{"anyOf":[{"$ref":"#/components/schemas/TeamForTask"},{"type":"null"}]},"assigned_agent":{"anyOf":[{"$ref":"#/components/schemas/AgentForTask"},{"type":"null"}]},"reporter_team":{"anyOf":[{"$ref":"#/components/schemas/TeamForTask"},{"type":"null"}]},"reporter_agent":{"anyOf":[{"$ref":"#/components/schemas/AgentForTask"},{"type":"null"}]},"parent":{"anyOf":[{"$ref":"#/components/schemas/TaskSummary"},{"type":"null"}]},"subtasks":{"items":{"$ref":"#/components/schemas/TaskSummary"},"type":"array","title":"Subtasks"},"dependencies":{"items":{"$ref":"#/components/schemas/TaskDependency"},"type":"array","title":"Dependencies"},"dependents":{"items":{"$ref":"#/components/schemas/TaskDependency"},"type":"array","title":"Dependents"}},"type":"object","required":["title","id","account_id","assigned_team_id","created_at","updated_at"],"title":"Task","description":"Complete task schema with resolved relations."},"TaskCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"input_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Message"},"type":{"type":"string","title":"Type","default":"task"},"status":{"type":"string","title":"Status","default":"pending"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"assigned_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned Team Id"},"assigned_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned Agent Id"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"reporter_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Team Id"},"reporter_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Agent Id"},"dependency_ids":{"items":{"type":"integer"},"type":"array","title":"Dependency Ids"},"assigned_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Team Identifier"},"assigned_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent Identifier"},"reporter_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Team Identifier"},"reporter_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Agent Identifier"}},"type":"object","required":["title"],"title":"TaskCreate","description":"Task creation schema."},"TaskDependency":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type"}},"type":"object","required":["id","title","status","type"],"title":"TaskDependency","description":"Task dependency schema for resolved relations."},"TaskSummary":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type"}},"type":"object","required":["id","title","status","type"],"title":"TaskSummary","description":"Lightweight task summary to prevent circular references."},"TaskUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"input_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Message"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"assigned_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned Team Id"},"assigned_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned Agent Id"},"parent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Id"},"reporter_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Team Id"},"reporter_agent_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reporter Agent Id"},"dependency_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Dependency Ids"},"assigned_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Team Identifier"},"assigned_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent Identifier"},"reporter_team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Team Identifier"},"reporter_agent_identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Agent Identifier"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","title":"TaskUpdate","description":"Task update schema."},"Team":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"parameters":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Parameters","default":[]},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"version":{"type":"string","title":"Version","default":"1.0.0"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"components_include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Include"},"components_exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Exclude"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"access_level":{"$ref":"#/components/schemas/AccessLevelSchema","default":"PRIVATE"},"access_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Password"},"suggested_prompts":{"anyOf":[{"$ref":"#/components/schemas/SuggestedPromptsConfigSchema"},{"type":"null"}]},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"agents":{"items":{"$ref":"#/components/schemas/Agent"},"type":"array","title":"Agents","default":[]}},"type":"object","required":["name","id","created_at"],"title":"Team","description":"Full team schema with database fields and agent list."},"TeamApiCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"parameters":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Parameters","default":[]},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"version":{"type":"string","title":"Version","default":"1.0.0"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"components_include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Include"},"components_exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Exclude"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"access_level":{"$ref":"#/components/schemas/AccessLevelSchema","default":"PRIVATE"},"access_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Password"},"suggested_prompts":{"anyOf":[{"$ref":"#/components/schemas/SuggestedPromptsConfigSchema"},{"type":"null"}]},"agent_ids":{"items":{"type":"integer"},"type":"array","title":"Agent Ids","default":[]}},"type":"object","required":["name"],"title":"TeamApiCreate","description":"Schema for creating a team via API with agent assignments."},"TeamApiUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"parameters":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Parameters","default":[]},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"version":{"type":"string","title":"Version","default":"1.0.0"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"components_include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Include"},"components_exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components Exclude"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"access_level":{"anyOf":[{"$ref":"#/components/schemas/AccessLevelSchema"},{"type":"null"}]},"access_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Password"},"suggested_prompts":{"anyOf":[{"$ref":"#/components/schemas/SuggestedPromptsConfigSchema"},{"type":"null"}]},"agent_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Agent Ids"}},"type":"object","title":"TeamApiUpdate","description":"Schema for partial team updates via API."},"TeamConfigSchema-Input":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"type":"string","title":"Version","default":"1.0.0"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"agents":{"items":{"$ref":"#/components/schemas/AgentConfigSchema-Input"},"type":"array","title":"Agents"},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolConfigSchema"},"type":"array"},{"type":"null"}],"title":"Tools","default":[]},"knowledge":{"anyOf":[{"items":{"$ref":"#/components/schemas/KnowledgeConfigSchema"},"type":"array"},{"type":"null"}],"title":"Knowledge","default":[]},"prompts":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromptConfigSchema"},"type":"array"},{"type":"null"}],"title":"Prompts","default":[]},"traits":{"anyOf":[{"items":{"$ref":"#/components/schemas/TraitConfigSchema"},"type":"array"},{"type":"null"}],"title":"Traits","default":[]},"events":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventConfigSchema"},"type":"array"},{"type":"null"}],"title":"Events","default":[]},"overrides":{"anyOf":[{"additionalProperties":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},"type":"object"},{"type":"null"}],"title":"Overrides"},"components":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Components"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","name","agents"],"title":"TeamConfigSchema"},"TeamConfigSchema-Output":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"type":"string","title":"Version","default":"1.0.0"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"agents":{"items":{"$ref":"#/components/schemas/AgentConfigSchema-Output"},"type":"array","title":"Agents"},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolConfigSchema"},"type":"array"},{"type":"null"}],"title":"Tools","default":[]},"knowledge":{"anyOf":[{"items":{"$ref":"#/components/schemas/KnowledgeConfigSchema"},"type":"array"},{"type":"null"}],"title":"Knowledge","default":[]},"prompts":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromptConfigSchema"},"type":"array"},{"type":"null"}],"title":"Prompts","default":[]},"traits":{"anyOf":[{"items":{"$ref":"#/components/schemas/TraitConfigSchema"},"type":"array"},{"type":"null"}],"title":"Traits","default":[]},"events":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventConfigSchema"},"type":"array"},{"type":"null"}],"title":"Events","default":[]},"overrides":{"anyOf":[{"additionalProperties":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object"},"type":"object"},{"type":"null"}],"title":"Overrides"},"components":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Components"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","name","agents"],"title":"TeamConfigSchema"},"TeamForTask":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"}},"type":"object","required":["id","name"],"title":"TeamForTask","description":"Team schema for task relationships."},"TeamInfo":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"agents":{"items":{"$ref":"#/components/schemas/AgentInfo"},"type":"array","title":"Agents","default":[]}},"type":"object","required":["id","name"],"title":"TeamInfo"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"Token"},"TokenOnlyRequest":{"properties":{"token":{"type":"string","maxLength":512,"minLength":1,"title":"Token"}},"type":"object","required":["token"],"title":"TokenOnlyRequest","description":"Body for endpoints that redeem a raw token (verify / confirm)."},"Tool":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module"},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Command"},"connection_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Type"},"args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"title":"Args"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","default":{}},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"},"id":{"type":"integer","title":"Id"},"account_id":{"type":"integer","title":"Account Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","id","account_id"],"title":"Tool"},"ToolConfigSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module"},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Command"},"connection_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Type"},"args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"title":"Args"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers"},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"}},"type":"object","required":["id"],"title":"ToolConfigSchema"},"ToolCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module"},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Command"},"connection_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Type"},"args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"title":"Args"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","default":{}},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"}},"type":"object","required":["name"],"title":"ToolCreate"},"ToolUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module"},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Command"},"connection_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Type"},"args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"title":"Args"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","default":{}},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"}},"type":"object","title":"ToolUpdate"},"Trait":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Trait name"},"identifier":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identifier","description":"Trait identifier (unique per account, auto-generated from name if omitted)"},"description":{"type":"string","maxLength":500,"minLength":1,"title":"Description","description":"Trait description"},"instructions":{"type":"string","maxLength":3000,"minLength":1,"title":"Instructions","description":"Trait implementation instructions"},"weight":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Weight","description":"Trait weight (0.0-10.0)","default":1.0},"is_default":{"type":"boolean","title":"Is Default","description":"Auto-assign this trait to new agents","default":false},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"categories":{"items":{"$ref":"#/components/schemas/TraitCategory"},"type":"array","title":"Categories","default":[]},"tags":{"items":{"$ref":"#/components/schemas/TraitTag"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["name","description","instructions","id","created_at"],"title":"Trait","description":"Schema for trait response."},"TraitAgentRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"TraitAgentRead","description":"Lean agent reference for trait usage display (list page 'Used by')."},"TraitCategory":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Category name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Category description"},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","id","created_at"],"title":"TraitCategory","description":"Schema for trait category response."},"TraitCategoryCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Category name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Category description"}},"type":"object","required":["name"],"title":"TraitCategoryCreate","description":"Schema for creating trait category."},"TraitCategoryRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","description","created_at","updated_at"],"title":"TraitCategoryRead"},"TraitConfigSchema":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"instructions":{"type":"string","maxLength":3000,"minLength":1,"title":"Instructions"},"weight":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Weight","default":1.0},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["id","name","instructions"],"title":"TraitConfigSchema"},"TraitCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Trait name"},"identifier":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Identifier","description":"Trait identifier (unique per account, auto-generated from name if omitted)"},"description":{"type":"string","maxLength":500,"minLength":1,"title":"Description","description":"Trait description"},"instructions":{"type":"string","maxLength":3000,"minLength":1,"title":"Instructions","description":"Trait implementation instructions"},"weight":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Weight","description":"Trait weight (0.0-10.0)","default":1.0},"is_default":{"type":"boolean","title":"Is Default","description":"Auto-assign this trait to new agents","default":false},"category_ids":{"items":{"type":"integer"},"type":"array","title":"Category Ids","description":"List of category IDs"},"tag_ids":{"items":{"type":"integer"},"type":"array","title":"Tag Ids","description":"List of tag IDs"}},"type":"object","required":["name","description","instructions"],"title":"TraitCreate","description":"Schema for creating trait."},"TraitRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"identifier":{"type":"string","title":"Identifier"},"description":{"type":"string","title":"Description"},"instructions":{"type":"string","title":"Instructions"},"weight":{"type":"number","title":"Weight"},"is_default":{"type":"boolean","title":"Is Default"},"categories":{"items":{"$ref":"#/components/schemas/TraitCategoryRead"},"type":"array","title":"Categories","default":[]},"tags":{"items":{"$ref":"#/components/schemas/TraitTagRead"},"type":"array","title":"Tags","default":[]},"agents":{"items":{"$ref":"#/components/schemas/TraitAgentRead"},"type":"array","title":"Agents","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","identifier","description","instructions","weight","is_default","created_at","updated_at"],"title":"TraitRead"},"TraitReferenceSchema":{"properties":{"name":{"type":"string","title":"Name"},"weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight"}},"type":"object","required":["name"],"title":"TraitReferenceSchema"},"TraitTag":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"Tag name"},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","id","created_at"],"title":"TraitTag","description":"Schema for trait tag response."},"TraitTagCreate":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name","description":"Tag name"}},"type":"object","required":["name"],"title":"TraitTagCreate","description":"Schema for creating trait tag."},"TraitTagRead":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","created_at","updated_at"],"title":"TraitTagRead"},"TraitUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"identifier":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Identifier"},"description":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Description"},"instructions":{"anyOf":[{"type":"string","maxLength":3000,"minLength":1},{"type":"null"}],"title":"Instructions"},"weight":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"null"}],"title":"Weight"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default","description":"Auto-assign this trait to new agents"},"category_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Category Ids","description":"List of category IDs"},"tag_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Tag Ids","description":"List of tag IDs"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"List of tag names (will create if not exist)"}},"type":"object","title":"TraitUpdate","description":"Schema for updating trait."},"TypeCountItem":{"properties":{"template_id":{"type":"integer","title":"Template Id"},"template_name":{"type":"string","title":"Template Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["template_id","template_name","count"],"title":"TypeCountItem","description":"Individual type count in stats response."},"UriAvailabilityResponse":{"properties":{"available":{"type":"boolean","title":"Available"},"uri":{"type":"string","title":"Uri"},"domain_id":{"type":"integer","title":"Domain Id"},"full_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Url"}},"type":"object","required":["available","uri","domain_id"],"title":"UriAvailabilityResponse","description":"Response schema for URI availability check."},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User email address","example":"user@example.com"},"password":{"type":"string","maxLength":100,"minLength":8,"title":"Password","description":"User password (minimum 8 characters)","example":"securepassword123"}},"type":"object","required":["email","password"],"title":"UserCreate","description":"Schema for creating a user with comprehensive validation."},"UserCreateResponse":{"properties":{"user":{"$ref":"#/components/schemas/UserPublic"},"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["user","access_token"],"title":"UserCreateResponse","description":"Response schema for user registration — includes user data and access token."},"UserPublic":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"User email address","example":"user@example.com"},"id":{"type":"integer","title":"Id","description":"User ID","example":1},"roles":{"items":{"type":"string"},"type":"array","title":"Roles","description":"User roles","default":[],"example":["user"]},"is_verified":{"type":"boolean","title":"Is Verified","description":"Whether the user has verified their email address (soft-gate driver).","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"Last update timestamp"}},"type":"object","required":["email","id","created_at"],"title":"UserPublic","description":"Public schema for user without sensitive information."},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email","description":"User email address","example":"newemail@example.com"},"password":{"anyOf":[{"type":"string","maxLength":100,"minLength":8},{"type":"null"}],"title":"Password","description":"User password (minimum 8 characters)","example":"newsecurepassword123"}},"type":"object","title":"UserUpdate","description":"Schema for updating a user with optional validation."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifySessionResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Session status (complete, pending, etc.)"},"subscription":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Subscription","description":"Subscription details if completed"}},"type":"object","required":["status"],"title":"VerifySessionResponse","description":"Response schema for session verification."},"WebhookDeliveryHistoryEntry":{"properties":{"delivery_id":{"type":"string","format":"uuid","title":"Delivery Id"},"event_kind":{"type":"string","title":"Event Kind"},"attempt_no":{"type":"integer","title":"Attempt No"},"status":{"type":"string","title":"Status"},"http_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Status"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["delivery_id","event_kind","attempt_no","status","http_status","failure_reason","occurred_at"],"title":"WebhookDeliveryHistoryEntry","description":"One delivery attempt in the per-destination history read."},"WebhookResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Processing status"}},"type":"object","required":["status"],"title":"WebhookResponse","description":"Response schema for webhook endpoint."},"WebhookSubscriptionCreate":{"properties":{"url":{"type":"string","maxLength":2048,"title":"Url"},"event_kinds":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Event Kinds"},"include_provenance":{"type":"boolean","title":"Include Provenance","default":false}},"type":"object","required":["url","event_kinds"],"title":"WebhookSubscriptionCreate","description":"Request schema for registering a delivery destination."},"WebhookSubscriptionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"url":{"type":"string","title":"Url"},"event_kinds":{"items":{"type":"string"},"type":"array","title":"Event Kinds"},"active":{"type":"boolean","title":"Active"},"include_provenance":{"type":"boolean","title":"Include Provenance"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","url","event_kinds","active","include_provenance","created_at","updated_at"],"title":"WebhookSubscriptionResponse","description":"Public view of one destination -- never carries the secret."},"WebhookSubscriptionSecretResponse":{"properties":{"secret":{"type":"string","title":"Secret"}},"type":"object","required":["secret"],"title":"WebhookSubscriptionSecretResponse","description":"The plaintext signing secret -- returned ONLY by ``GET /{id}/secret``.\n\nThe field is a plain ``str`` on purpose: the endpoint populates it via an\nexplicit ``SecretStr(...).get_secret_value()`` at the response boundary\n(the one sanctioned unwrap in the codebase).  A ``SecretStr`` field here\nwould serialize as ``**********`` and FR-3.2 would be dead."},"WebhookSubscriptionUpdate":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Url"},"event_kinds":{"anyOf":[{"items":{"type":"string"},"type":"array","minItems":1},{"type":"null"}],"title":"Event Kinds"},"include_provenance":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Provenance"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"WebhookSubscriptionUpdate","description":"Partial update -- every field optional (``python/07`` Update convention).\n\nThe service re-runs the URL guard whenever ``url`` is in the patch\n(FR-1.3); it is never re-run for a kinds/flag-only change."},"core__schemas__suggested_prompt__SuggestedPromptSchema":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Id","description":"Unique identifier for the prompt"},"icon":{"type":"string","title":"Icon","description":"Heroicons icon name (e.g., 'i-heroicons-light-bulb')","default":"i-heroicons-chat-bubble-left-right"},"title":{"type":"string","maxLength":50,"minLength":1,"title":"Title","description":"Short title displayed on the prompt button"},"text":{"type":"string","maxLength":500,"minLength":1,"title":"Text","description":"The actual prompt text sent when clicked"}},"type":"object","required":["id","title","text"],"title":"SuggestedPromptSchema","description":"Schema for a single suggested prompt.\n\nMatches the frontend SuggestedPrompt interface for consistency.\nThese prompts are shown in the chat empty state to help users\nstart conversations."},"core__schemas__team_config__SuggestedPromptSchema":{"properties":{"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"title":{"type":"string","title":"Title"},"text":{"type":"string","title":"Text"}},"type":"object","required":["title","text"],"title":"SuggestedPromptSchema","description":"A suggested prompt for the chat interface."}},"securitySchemes":{"Bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT token authentication. Use: Authorization: Bearer <token>"},"ApiKey":{"type":"apiKey","in":"header","name":"X-AUTH-TOKEN","description":"API Key authentication. Use: X-AUTH-TOKEN: <api_key>"}}}}