{"openapi":"3.1.0","info":{"title":"SUPERFASTTT API","description":"Multi-tenant Backend-as-a-Service for the SUPERFASTTT platform.\n\n**Authentication** — every endpoint accepts a single header:\n`Authorization: Bearer <token>`. The token is either a JWT (issued by `/api/auth/login` or `/api/auth/otp/verify`) or a tenant API key (`sk-...`, created at `/api/v1/api-keys`). API keys carry granular scopes (e.g. `documents:read`, `chat:query`); JWTs carry RBAC permissions.\n\n**Multi-tenant** — `tenant_id` is always extracted from the token; never send it in the body.\n\n**Rate limiting** — sensitive endpoints emit `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`. Excess returns `429` with `{detail: {limit, remaining, retry_after}}`.\n\n**Pagination** — list endpoints accept `skip` / `limit` (or `page` / `page_size` on legacy ones). Responses include `{items, total, skip, limit}`.\n\nFull integration guide → [`/API_GUIDE.md`](/API_GUIDE.md).","version":"1.1.0","contact":{"name":"SUPERFASTTT — API support","url":"https://superfasttt.ai/support","email":"support@superfasttt.ai"},"license":{"name":"Proprietary — see Terms of Service","url":"https://superfasttt.ai/terms"},"termsOfService":"https://superfasttt.ai/terms","x-logo":{"url":"https://superfasttt.ai/logo.svg","altText":"SUPERFASTTT"}},"paths":{"/api/auth/login":{"post":{"tags":["Auth"],"summary":"Create login","description":"Create login. Creates the resource scoped to the current tenant.","operationId":"post_auth_login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/refresh":{"post":{"tags":["Auth"],"summary":"Create refresh access token","description":"Create refresh access token. Creates the resource scoped to the current tenant.","operationId":"post_auth_refresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"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/auth/me":{"get":{"tags":["Auth"],"summary":"Get current user info","description":"Get current user info. Returns the resource scoped to the current tenant.","operationId":"get_auth_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/verify":{"get":{"tags":["Auth"],"summary":"Verify token endpoint","description":"Verify token endpoint. Returns the resource scoped to the current tenant.","operationId":"get_auth_verify","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Auth Verify"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/invitation/info":{"get":{"tags":["Auth"],"summary":"Get invitation info","description":"Get invitation info. Returns the resource scoped to the current tenant.","operationId":"get_auth_invitation_info","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/accept-invitation":{"post":{"tags":["Auth"],"summary":"Create accept invitation","description":"Create accept invitation. Creates the resource scoped to the current tenant.","operationId":"post_auth_accept_invitation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/authorize":{"get":{"tags":["Auth"],"summary":"Get authorize","description":"Get authorize. Returns the resource scoped to the current tenant.","operationId":"get_auth_authorize","parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","description":"Client application ID","title":"Client Id"},"description":"Client application ID"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"Callback URL","title":"Redirect Uri"},"description":"Callback URL"},{"name":"response_type","in":"query","required":false,"schema":{"type":"string","description":"Must be 'code'","default":"code","title":"Response Type"},"description":"Must be 'code'"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","description":"Requested scopes","default":"openid profile email","title":"Scope"},"description":"Requested scopes"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CSRF protection state","title":"State"},"description":"CSRF protection state"},{"name":"code_challenge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PKCE code challenge","title":"Code Challenge"},"description":"PKCE code challenge"},{"name":"code_challenge_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PKCE method (S256)","title":"Code Challenge Method"},"description":"PKCE method (S256)"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"User ID (set after login)","title":"User Id"},"description":"User ID (set after login)"},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tenant ID (set after login)","title":"Tenant Id"},"description":"Tenant ID (set after login)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/token":{"post":{"tags":["Auth"],"summary":"Create token exchange","description":"Create token exchange. Creates the resource scoped to the current tenant.","operationId":"post_auth_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/silent-authorize":{"post":{"tags":["Auth"],"summary":"Create silent authorize","description":"Create silent authorize. Creates the resource scoped to the current tenant.","operationId":"post_auth_silent_authorize","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SilentAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SilentAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/clients":{"get":{"tags":["Auth"],"summary":"List clients","description":"List clients. Returns the resource scoped to the current tenant.","operationId":"get_auth_clients","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/session/check":{"post":{"tags":["Auth"],"summary":"Create check session","description":"Create check session. Creates the resource scoped to the current tenant.","operationId":"post_auth_session_check","parameters":[{"name":"superfasttt_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superfasttt Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/session/create":{"post":{"tags":["Auth"],"summary":"Create session","description":"Create session. Creates the resource scoped to the current tenant.","operationId":"post_auth_session_create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/session/destroy":{"post":{"tags":["Auth"],"summary":"Create destroy session","description":"Create destroy session. Creates the resource scoped to the current tenant.","operationId":"post_auth_session_destroy","parameters":[{"name":"superfasttt_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superfasttt Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"get":{"tags":["Auth"],"summary":"Get logout redirect","description":"Get logout redirect. Returns the resource scoped to the current tenant.","operationId":"get_auth_logout","parameters":[{"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":"superfasttt_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Superfasttt Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/providers/{tenant_id}":{"get":{"tags":["Auth"],"summary":"List sso providers","description":"List sso providers. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_providers_tenant_id","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOProvidersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/platform-status":{"get":{"tags":["Auth"],"summary":"Get sso platform status","description":"Get sso platform status. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_platform_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/sso/azure/authorize":{"get":{"tags":["Auth"],"summary":"Get azure authorize","description":"Get azure authorize. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_azure_authorize","parameters":[{"name":"provider_id","in":"query","required":true,"schema":{"type":"string","description":"ID du provider SSO","title":"Provider Id"},"description":"ID du provider SSO"},{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","description":"ID du tenant","title":"Tenant Id"},"description":"ID du tenant"},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","description":"URI de callback","title":"Redirect Uri"},"description":"URI de callback"},{"name":"next_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"URL de redirection après login","title":"Next Url"},"description":"URL de redirection après login"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSOAuthUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/azure/callback":{"get":{"tags":["Auth"],"summary":"Get azure callback","description":"Get azure callback. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_azure_callback","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Authorization code","title":"Code"},"description":"Authorization code"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"State token","title":"State"},"description":"State token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/providers":{"post":{"tags":["Auth"],"summary":"Create or update sso provider","description":"Create or update sso provider. Creates the resource scoped to the current tenant.","operationId":"post_auth_sso_providers","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/sso/providers/{provider_id}/test":{"post":{"tags":["Auth"],"summary":"Test sso provider","description":"Test sso provider. Creates the resource scoped to the current tenant.","operationId":"post_auth_sso_providers_provider_id_test","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","description":"ID du tenant","title":"Tenant Id"},"description":"ID du tenant"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/test-config":{"post":{"tags":["Auth"],"summary":"Test sso config","description":"Test sso config. Creates the resource scoped to the current tenant.","operationId":"post_auth_sso_test_config","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/providers/{provider_id}":{"delete":{"tags":["Auth"],"summary":"Delete sso provider","description":"Delete sso provider. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_auth_sso_providers_provider_id","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"tenant_id","in":"query","required":true,"schema":{"type":"string","description":"ID du tenant","title":"Tenant Id"},"description":"ID du tenant"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/sso/azure/admin-consent":{"get":{"tags":["Auth"],"summary":"Get azure admin consent","description":"Get azure admin consent. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_azure_admin_consent","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/sso/azure/admin-consent/callback":{"get":{"tags":["Auth"],"summary":"Get azure admin consent callback","description":"Get azure admin consent callback. Returns the resource scoped to the current tenant.","operationId":"get_auth_sso_azure_admin_consent_callback","parameters":[{"name":"admin_consent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Consent"}},{"name":"tenant","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/electron/request-otp":{"post":{"tags":["Auth"],"summary":"Create request otp endpoint","description":"Create request otp endpoint. Creates the resource scoped to the current tenant.","operationId":"post_auth_electron_request_otp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__auth__electron__OTPRequestSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/electron/verify-otp":{"post":{"tags":["Auth"],"summary":"Verify otp endpoint","description":"Verify otp endpoint. Creates the resource scoped to the current tenant.","operationId":"post_auth_electron_verify_otp","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__auth__electron__OTPVerifySchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/otp/request":{"post":{"tags":["Auth"],"summary":"Create request otp endpoint","description":"Create request otp endpoint. Creates the resource scoped to the current tenant.","operationId":"post_auth_otp_request","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__auth__otp__OTPRequestSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/otp/verify":{"post":{"tags":["Auth"],"summary":"Verify otp endpoint","description":"Verify otp endpoint. Creates the resource scoped to the current tenant.","operationId":"post_auth_otp_verify","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__auth__otp__OTPVerifySchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OTPVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/password-reset/request":{"post":{"tags":["Auth"],"summary":"Create request password reset","description":"Create request password reset. Creates the resource scoped to the current tenant.","operationId":"post_auth_password_reset_request","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequestSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/password-reset/confirm":{"post":{"tags":["Auth"],"summary":"Confirm password reset","description":"Confirm password reset. Creates the resource scoped to the current tenant.","operationId":"post_auth_password_reset_confirm","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetConfirmSchema"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/providers":{"get":{"tags":["LLM"],"summary":"List all LLM providers","description":"Retrieve the list of LLM providers available in the SUPERFASTTT model catalog.\n\n    The catalog is updated automatically: newly released models become available\n    without any configuration change.\n\n    **Returns:**\n    - List of providers with:\n      - `isConfigured`: if current tenant has API key configured\n      - `model_count`: number of models available for this provider\n      - `modes`: types of models (chat, embedding, image_generation, audio_transcription, etc.)","operationId":"get_llm_providers","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMProvidersListResponse"}}}}},"deprecated":true,"security":[{"HTTPBearer":[]}]}},"/api/v1/llm/models":{"get":{"tags":["LLM"],"summary":"List all LLM models with tenant preferences","description":"Retrieve all LLM models from the SUPERFASTTT catalog with tenant preferences.\n\n    **Architecture:**\n    - Source = SUPERFASTTT model catalog (237+ chat models, auto-updated)\n    - Preferences = per-tenant (enabled/disabled, isDefault)\n    - Default: all models are DISABLED unless explicitly enabled\n\n    **Query Parameters:**\n    - `provider`: Filter by provider name (e.g., \"openai\", \"anthropic\")\n    - `mode`: Filter by mode (default: \"chat\")\n    - `enabled_only`: If true, only return models enabled by tenant (default: false)\n\n    **Returns:**\n    - List of models with provider information, costs, and tenant status","operationId":"get_llm_models","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider name","title":"Provider"},"description":"Filter by provider name"},{"name":"mode","in":"query","required":false,"schema":{"type":"string","description":"Filter by mode (chat, embedding, image_generation, rerank, etc.)","default":"chat","title":"Mode"},"description":"Filter by mode (chat, embedding, image_generation, rerank, etc.)"},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return models enabled by tenant","default":false,"title":"Enabled Only"},"description":"Only return models enabled by tenant"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMModelsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/models/catalog":{"get":{"tags":["LLM"],"summary":"List ALL available LLM models from the catalog","description":"Retrieve the complete catalog of ALL LLM models supported by SUPERFASTTT.\n\n    This endpoint returns every model in the catalog (2000+ entries), not just the ones\n    configured for the current tenant. Newly released models become available automatically.\n\n    **Query Parameters:**\n    - `provider`: Filter by provider name (e.g., \"openai\", \"anthropic\")\n    - `mode`: Filter by mode (e.g., \"chat\", \"embedding\", \"image_generation\", \"rerank\")\n\n    **Returns:**\n    - Complete list of models with costs and capabilities\n    - Total count\n    - List of available providers\n    - List of available modes","operationId":"get_llm_models_catalog","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider (e.g., openai, anthropic)","title":"Provider"},"description":"Filter by provider (e.g., openai, anthropic)"},{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by mode (e.g., chat, embedding, image_generation, rerank)","title":"Mode"},"description":"Filter by mode (e.g., chat, embedding, image_generation, rerank)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogModelsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/models/{model_id}/preference":{"patch":{"tags":["LLM"],"summary":"Update model preference for tenant","description":"Enable/disable a model or set it as default for the current tenant.\n\n    **model_id** can be:\n    - A UUID (legacy)\n    - A model_name (e.g., \"gpt-4o\", \"mistral/mistral-embed\") - will resolve to UUID automatically\n\n    **Actions:**\n    - `is_enabled`: true/false to enable/disable the model for this tenant\n    - `is_default`: true to set as default (automatically unsets previous default)","operationId":"patch_llm_models_model_id:path_preference","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateModelPreferenceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPreferenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/models/{model_id}/test":{"post":{"tags":["LLM"],"summary":"Test a model","description":"Send a test message to the model to verify it works.\n\n    **model_id** can be:\n    - A UUID (legacy)\n    - A model_name (e.g., \"gpt-4o\", \"mistral/mistral-embed\") - will be used directly\n\n    **Returns:**\n    - Success status\n    - Response content\n    - Latency in milliseconds\n    - Token usage and estimated cost","operationId":"post_llm_models_model_id:path_test","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/chat":{"post":{"tags":["LLM"],"summary":"Chat completion","description":"Send a chat completion request to any LLM exposed by SUPERFASTTT.\n\n    Supports all providers in the catalog:\n    - OpenAI (gpt-4o, gpt-4o-mini, etc.)\n    - Anthropic (claude-3-5-sonnet-latest, etc.)\n    - Mistral (mistral-large-latest, etc.)\n    - Google (gemini-pro, etc.)\n\n    The tenant's API key for the selected provider is automatically used.","operationId":"post_llm_chat","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"deprecated":true,"security":[{"HTTPBearer":[]}]}},"/api/v1/llm/images/generate":{"post":{"tags":["LLM"],"summary":"Generate images","description":"Generate images using AI models exposed by SUPERFASTTT.\n\n    Supports:\n    - OpenAI DALL-E 3 (dall-e-3)\n    - OpenAI DALL-E 2 (dall-e-2)\n\n    The tenant's API key for the selected provider is automatically used.","operationId":"post_llm_images_generate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"deprecated":true,"security":[{"HTTPBearer":[]}]}},"/api/v1/llm/audio/transcriptions":{"post":{"tags":["LLM"],"summary":"Transcribe audio","description":"Transcribe audio files using AI models exposed by SUPERFASTTT.\n\n    Supports:\n    - OpenAI Whisper (whisper-1)\n    - Groq Whisper (groq/whisper-large-v3)\n    - Assembly AI (assemblyai/best)\n\n    The tenant's API key for the selected provider is automatically used.","operationId":"post_llm_audio_transcriptions","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioTranscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"deprecated":true,"security":[{"HTTPBearer":[]}]}},"/api/v1/llm/providers/health":{"get":{"tags":["LLM"],"summary":"Check health status of configured LLM providers","description":"Returns the health status of all LLM providers configured for the current tenant.\n\n    **Status values:**\n    - `ok`: Provider is working normally\n    - `rate_limited`: Too many requests, retry after specified time\n    - `quota_exceeded`: API quota exhausted, check billing\n    - `invalid_key`: API key is invalid or expired\n    - `error`: Provider returned an error\n    - `unknown`: No recent status available\n\n    **Use cases:**\n    - Display warnings in UI before user tries to use a provider\n    - Show which providers are available\n    - Indicate when rate limits will reset\n\n    **Caching:**\n    - Status is cached in Redis for 5 minutes\n    - Status is updated automatically when LLM requests fail with 429/401/500","operationId":"get_llm_providers_health","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvidersHealthResponse"}}}}},"deprecated":true,"security":[{"HTTPBearer":[]}]}},"/api/v1/llm/errors":{"get":{"tags":["LLM"],"summary":"List tenant llm errors","description":"List tenant llm errors. Returns the resource scoped to the current tenant.","operationId":"get_llm_errors","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"error_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"}},{"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":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLLMErrorListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/errors/stats":{"get":{"tags":["LLM"],"summary":"Get tenant llm error stats","description":"Get tenant llm error stats. Returns the resource scoped to the current tenant.","operationId":"get_llm_errors_stats","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLLMErrorStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/llm/models/{model_id}/access":{"get":{"tags":["LLM"],"summary":"List access rules for a model","description":"Get model access. Returns the resource scoped to the current tenant.","operationId":"get_llm_models_model_id:path_access","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["LLM"],"summary":"Replace all access rules for a model (bulk, idempotent)","description":"Update model access. Replaces the resource. Idempotent.","operationId":"put_llm_models_model_id:path_access","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateModelAccessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["LLM"],"summary":"Remove all access rules for a model (make it accessible to all)","description":"Delete model access. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_llm_models_model_id:path_access","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","title":"Model Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/llm/models":{"get":{"tags":["LLM"],"summary":"Liste les modèles LLM groupés par type","description":"Retourne tous les modèles disponibles dans le catalogue SUPERFASTTT, groupés par type:\n    - **chat**: Modèles de conversation (GPT-4, Claude, etc.)\n    - **embedding**: Modèles d'embedding (text-embedding-3, etc.)\n    - **image_generation**: Génération d'images (DALL-E, etc.)\n    - **audio_transcription**: Transcription audio (Whisper, etc.)\n    - **audio_speech**: Synthèse vocale (TTS, etc.)\n    - **rerank**: Modèles de reranking\n    - **moderation**: Modèles de modération\n\n    Chaque modèle indique s'il est activé (enabled) pour le tenant courant.","operationId":"get_v2_llm_models","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsGroupedResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v2/llm/models/flat":{"get":{"tags":["LLM"],"summary":"Liste plate des modèles avec filtres","description":"Retourne une liste plate de tous les modèles avec filtres optionnels.\n\n    Utile pour les dropdowns et sélecteurs.","operationId":"get_v2_llm_models_flat","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrer par type: chat, embedding, image_generation, audio_transcription, audio_speech, rerank, moderation","title":"Mode"},"description":"Filtrer par type: chat, embedding, image_generation, audio_transcription, audio_speech, rerank, moderation"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrer par provider: openai, anthropic, mistral, google, etc.","title":"Provider"},"description":"Filtrer par provider: openai, anthropic, mistral, google, etc."},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","description":"Ne retourner que les modèles activés pour le tenant","default":false,"title":"Enabled Only"},"description":"Ne retourner que les modèles activés pour le tenant"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsFlatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/llm/models/activate":{"post":{"tags":["LLM"],"summary":"Activer un modèle pour le tenant","description":"Active un modèle pour le tenant courant.\n\n    Cette opération:\n    1. Vérifie que le modèle existe dans le catalogue\n    2. Crée le modèle dans llm_models s'il n'existe pas\n    3. Crée/met à jour la préférence tenant (enabled=true)","operationId":"post_v2_llm_models_activate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateModelRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v2/llm/models/{model_name}/deactivate":{"delete":{"tags":["LLM"],"summary":"Désactiver un modèle pour le tenant","description":"Désactive un modèle pour le tenant courant.\n    Ne supprime pas le modèle de llm_models, juste la préférence.","operationId":"delete_v2_llm_models_model_name_deactivate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_name","in":"path","required":true,"schema":{"type":"string","title":"Model Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/llm/providers":{"get":{"tags":["LLM"],"summary":"Liste des providers disponibles","description":"Retourne la liste des providers avec le nombre de modèles par type.","operationId":"get_v2_llm_providers","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProviderInfo"},"type":"array","title":"Response Get V2 Llm Providers"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/documents/":{"post":{"tags":["Documents"],"summary":"Upload a document","description":"Upload a single document (PDF, DOCX, XLSX, TXT, MD, MDX, HTML, CSV) and queue it for parsing + indexing in the background. The response returns immediately with the document id; subsequent indexing status is observable via `GET /api/v1/documents/{document_id}/jobs`. Optionally attach to a memory (knowledge base) via `memory_id` so the document becomes searchable through `/api/v1/chat/query`.","operationId":"post_documents","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_documents"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/documents/ \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file=@./contract.pdf\" \\\n  -F \"memory_id=<KB_ID>\""},{"lang":"TypeScript","label":"@superfasttt/sdk","source":"import { createClient } from \"@superfasttt/sdk/api\";\nconst api = createClient(authFetch);\nconst form = new FormData();\nform.append(\"file\", file);\nform.append(\"memory_id\", kbId);\nconst doc = await api.documents.upload(form);\nconsole.log(doc.document_id, doc.status);"},{"lang":"Python","label":"httpx","source":"import httpx\nwith open(\"contract.pdf\", \"rb\") as f:\n    r = httpx.post(\n        \"https://api.superfasttt.ai/api/v1/documents/\",\n        headers={\"Authorization\": f\"Bearer {token}\"},\n        files={\"file\": (\"contract.pdf\", f, \"application/pdf\")},\n        data={\"memory_id\": kb_id},\n    )\ndoc_id = r.json()[\"document_id\"]"}]},"get":{"tags":["Documents"],"summary":"List documents","description":"Paginated list of documents in the current tenant. Supports filtering by `memory_id`, `status` (pending / indexing / indexed / error) and free-text `search` on title.","operationId":"get_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":10,"title":"Page Size"},"description":"Items per page"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"memory_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by memory ID","title":"Memory Id"},"description":"Filter by memory ID"},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by folder ID (use 'null' for unorganized documents)","title":"Folder Id"},"description":"Filter by folder ID (use 'null' for unorganized documents)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/documents/?skip=0&limit=20 \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/documents/?skip=0&limit=20\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/documents/?skip=0&limit=20\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]}},"/api/v1/documents/indexation-progress":{"get":{"tags":["Documents"],"summary":"Indexation progress (tenant-wide)","description":"Snapshot of how many documents are currently being parsed / indexed across the whole tenant. Useful for an admin dashboard indicator; per-document progress lives under `GET /api/v1/documents/{document_id}/jobs`.","operationId":"get_documents_indexation_progress","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexationProgressResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/documents/bulk-upload":{"post":{"tags":["Documents"],"summary":"Upload multiple documents in a single batch","description":"Multipart upload of up to 500 files in a single request. Returns a `batch_id` immediately (202) which can be polled via `GET /api/v1/documents/bulk-upload/{batch_id}` or streamed via the SSE companion endpoint. Each file is queued and indexed in parallel respecting the tenant's RAG profile.","operationId":"post_documents_bulk_upload","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_documents_bulk_upload"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/documents/bulk-upload \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '\"-F files=@./a.pdf -F files=@./b.pdf -F memory_id=<KB_ID>\"'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/documents/bulk-upload\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({})\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/documents/bulk-upload\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={})\nprint(r.json())"}]}},"/api/v1/documents/bulk-upload/{batch_id}":{"get":{"tags":["Documents"],"summary":"Get bulk upload status","description":"Snapshot of a bulk upload batch — counts of pending / indexing / indexed / errored documents. For live updates use the SSE variant `GET .../bulk-upload/{batch_id}/stream`.","operationId":"get_documents_bulk_upload_batch_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUploadStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/bulk-upload/{batch_id}/stream":{"get":{"tags":["Documents"],"summary":"Stream bulk upload progress (SSE)","description":"Server-Sent Events stream emitting one event per document status change in the batch (parsing → indexing → indexed | error). Closes when every document has reached a terminal state.","operationId":"get_documents_bulk_upload_batch_id_stream","security":[{"HTTPBearer":[]}],"parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"SSE stream of batch events","content":{"application/json":{"schema":{}},"text/event-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}":{"get":{"tags":["Documents"],"summary":"Get document by id","description":"Full document metadata including current indexing status, memory association, source filename, MIME type, chunk count and any AI-generated description / tags.","operationId":"get_documents_document_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Documents"],"summary":"Delete a document","description":"Hard delete the document, its chunks, and any associated vector store entries. Irreversible. Returns 204 on success.","operationId":"delete_documents_document_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/chunks/":{"get":{"tags":["Documents"],"summary":"List chunks of a document","description":"Paginated list of indexed chunks (text segments + embeddings metadata) for a single document. Used for debugging RAG retrieval quality.","operationId":"get_documents_document_id_chunks","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/by-conversation/{conversation_id}":{"get":{"tags":["Documents"],"summary":"List documents cited in a conversation","description":"Returns the documents referenced by chat citations across the messages of a single conversation. Useful to render a 'sources' panel alongside the chat. (Audit §6.3 suggests moving this to `/api/v1/conversations/{id}/documents` in a future major version — kept here for backwards compatibility.)","operationId":"get_documents_by_conversation_conversation_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (e.g., 'ready')","title":"Status"},"description":"Filter by status (e.g., 'ready')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/jobs/{job_id}":{"get":{"tags":["Documents"],"summary":"Get document indexation job status","description":"Detailed status of a single indexation job (parse → chunk → embed → store). Useful to surface granular failures (e.g. OCR error vs embedding model timeout) in admin UIs.","operationId":"get_documents_jobs_job_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/jobs":{"get":{"tags":["Documents"],"summary":"List all indexation jobs for a document","description":"Chronological list of every parse / index / reindex attempt for the document. Includes started_at, finished_at, status, error message and provider used.","operationId":"get_documents_document_id_jobs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentJobResponse"},"title":"Response Get Documents Document Id Jobs"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/documents/{document_id}/jobs \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/documents/{document_id}/jobs\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/documents/{document_id}/jobs\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]}},"/api/v1/documents/{document_id}/reindex":{"post":{"tags":["Documents"],"summary":"Re-run parsing + indexation on a document","description":"Queues a fresh parse + index job for the document. Useful after changing the tenant's RAG profile (chunk size, embedding model) or recovering from an indexation error. Returns the new `job_id` immediately.","operationId":"post_documents_document_id_reindex","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Source of the request (admin, rag, api)","default":"api","title":"Source"},"description":"Source of the request (admin, rag, api)"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/documents/{document_id}/reindex \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/documents/{document_id}/reindex\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/documents/{document_id}/reindex\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]}},"/api/v1/documents/{document_id}/ai-description":{"patch":{"tags":["Documents"],"summary":"Update the AI-generated description of a document","description":"Override the AI-generated summary attached to the document. Useful when the auto-generated description is wrong or needs a human touch — preserves the original under `ai_description_original`.","operationId":"patch_documents_document_id_ai_description","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_patch_documents_document_id_ai_description"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/tags":{"patch":{"tags":["Documents"],"summary":"Update document tags","description":"Replace the tag set on the document. Tags are used as filterable metadata in `POST /api/v1/documents/query` and as facets in the chat citations panel.","operationId":"patch_documents_document_id_tags","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_patch_documents_document_id_tags"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/file":{"get":{"tags":["Documents"],"summary":"Download the original document file","description":"Streams the raw file as originally uploaded. Auth-gated; for embeddable preview links (e.g. iframes in a CMS), use `POST .../viewer-token` to mint a short-lived signed URL instead.","operationId":"get_documents_document_id_file","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/viewer-token":{"post":{"tags":["Documents"],"summary":"Mint a short-lived viewer token for a document","description":"Returns a signed token (TTL 10 min) usable on `GET /api/v1/documents/{document_id}/view?viewer_token=...` to render the document in an iframe / preview pane without exposing the user's primary auth token.","operationId":"post_documents_document_id_viewer_token","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewerTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{document_id}/view":{"get":{"tags":["Documents"],"summary":"Render a document via short-lived viewer token","description":"Public-by-token rendering of the document. Authenticates via the `viewer_token` query parameter (minted by `POST .../viewer-token`), so the URL can be safely embedded in iframes / shared previews. No JWT or API key needed.","operationId":"get_documents_document_id_view","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"viewer_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated fallback. Prefer the X-Viewer-Token header.","title":"Viewer Token"},"description":"Deprecated fallback. Prefer the X-Viewer-Token header."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/stats/dashboard":{"get":{"tags":["Documents"],"summary":"Tenant-wide RAG / documents dashboard stats","description":"Aggregates indexation, retrieval and citation counts across the tenant — used to populate the admin dashboard. Numbers are computed live from `documents`, `document_jobs` and chat citations; no caching.","operationId":"get_documents_stats_dashboard","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Number of days for daily stats","default":30,"title":"Days"},"description":"Number of days for daily stats"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RagDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories":{"get":{"tags":["Knowledge Bases"],"summary":"List memories (knowledge bases)","description":"Retrieve a list of memories/knowledge bases with optional filtering (tenant-isolated).\n\n    **Access Control:**\n    - By default, users only see memories they own or that have been shared with them\n    - Admins (super_admin, tenant_admin) see all memories in the tenant\n    - Granular permissions: memories.read.own, memories.read.team, memories.read.all\n\n    **Query Parameters:**\n    - `skip`: Number of memories to skip (pagination)\n    - `limit`: Maximum number of memories to return\n    - `status`: Filter by status (active, indexing, error, archived)\n    - `exclude_project_kbs`: If true, exclude memories that are project knowledge bases (default: false)\n\n    **Returns:**\n    - List of memories with total count (filtered by access)","operationId":"get_memories","security":[{"HTTPBearer":[]}],"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":1000,"minimum":1,"description":"Number of items to return","default":100,"title":"Limit"},"description":"Number of items to return"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"[Legacy] Filter by raw Memory.status","title":"Status"},"description":"[Legacy] Filter by raw Memory.status"},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"enum":["ready","indexing","error","empty"],"type":"string"},{"type":"null"}],"description":"UI-friendly status filter (ready/indexing/error/empty)","title":"Status Filter"},"description":"UI-friendly status filter (ready/indexing/error/empty)"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"description":"Search text matched against name and description (ILIKE)","title":"Search"},"description":"Search text matched against name and description (ILIKE)"},{"name":"sort_by","in":"query","required":false,"schema":{"enum":["name","created_at","updated_at","document_count"],"type":"string","description":"Field to sort by (default kept legacy for compat)","default":"created_at","title":"Sort By"},"description":"Field to sort by (default kept legacy for compat)"},{"name":"sort_order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction","default":"desc","title":"Sort Order"},"description":"Sort direction"},{"name":"exclude_project_kbs","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude memories that are project knowledge bases","default":false,"title":"Exclude Project Kbs"},"description":"Exclude memories that are project knowledge bases"}],"responses":{"200":{"description":"List of memories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryListResponse"},"example":{"memories":[{"memory_id":"ea38c428-00af-4fbd-8af0-e74386f5dc79","name":"Documentation Produit","description":"Base de connaissances produit","document_count":15,"status":"active"}],"total":4}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/memories \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/memories\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/memories\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]},"post":{"tags":["Knowledge Bases"],"summary":"Create new memory (knowledge base)","description":"Create a new memory/knowledge base (tenant-isolated).\n\n    **Request Body:**\n    - `name`: Name of the knowledge base (required)\n    - `description`: Description (optional)\n    - `icon`: Icon emoji or name (optional)\n    - `profile_id`: AI Profile ID to use (required)\n\n    **Note:**\n    - AI Profile is required and determines chunking, embedding, and RAG settings\n    - Profile cannot be changed after creation\n\n    **Returns:**\n    - Created memory with generated ID (auto-assigned to current tenant)","operationId":"post_memories","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryCreate"}}}},"responses":{"201":{"description":"Memory created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryResponse"}}}},"400":{"description":"Invalid AI Profile"},"422":{"description":"Validation error"}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/memories \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Documentation produit\",\n    \"profile_id\": \"<AI_PROFILE_ID>\",\n    \"description\": \"Tous les guides utilisateurs\"\n  }'"},{"lang":"TypeScript","label":"@superfasttt/sdk","source":"import { createClient } from \"@superfasttt/sdk/api\";\nconst api = createClient(authFetch);\nconst kb = await api.memories.create({\n  name: \"Documentation produit\",\n  profile_id: profileId,\n  description: \"Tous les guides utilisateurs\",\n});\nconsole.log(kb.memory_id);"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/memories\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"name\": \"Documentation produit\", \"profile_id\": profile_id},\n)\nkb_id = r.json()[\"memory_id\"]"}]}},"/api/v1/memories/shared-with-me":{"get":{"tags":["Knowledge Bases"],"summary":"List memories shared with me","description":"Get all memories that have been shared with the current user (directly or via team).\n\n    **Returns:**\n    - List of shared memories with share details (who shared, permission level)","operationId":"get_memories_shared_with_me","security":[{"HTTPBearer":[]}],"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":1000,"minimum":1,"description":"Number of items to return","default":100,"title":"Limit"},"description":"Number of items to return"}],"responses":{"200":{"description":"List of shared memories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedMemoriesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}":{"get":{"tags":["Knowledge Bases"],"summary":"Get memory by ID","description":"Retrieve a specific memory by its UUID (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Returns:**\n    - Full memory details with AI profile info (only if belongs to current tenant)\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"get_memories_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Memory details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Knowledge Bases"],"summary":"Update memory","description":"Update an existing memory (partial update, tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory to update\n\n    **Request Body:**\n    - `name`: New name (optional)\n    - `description`: New description (optional)\n    - `icon`: New icon (optional)\n\n    **Note:**\n    - AI Profile cannot be changed after creation\n\n    **Returns:**\n    - Updated memory (only if belongs to current tenant)\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"put_memories_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryUpdate"}}}},"responses":{"200":{"description":"Memory updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation error"}}},"delete":{"tags":["Knowledge Bases"],"summary":"Delete memory","description":"Soft delete a memory (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory to delete\n\n    **Note:**\n    - Documents in the memory will have their memory_id set to null\n    - Documents are NOT deleted\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"delete_memories_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"204":{"description":"Memory deleted successfully"},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/detail":{"get":{"tags":["Knowledge Bases"],"summary":"Get memory with documents","description":"Retrieve a memory with its documents (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Query Parameters:**\n    - `document_limit`: Maximum number of documents to return (default: 100)\n\n    **Returns:**\n    - Memory details with list of documents\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"get_memories_memory_id_detail","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"document_limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max documents to return","default":100,"title":"Document Limit"},"description":"Max documents to return"}],"responses":{"200":{"description":"Memory details with documents","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryDetailResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/stats":{"get":{"tags":["Knowledge Bases"],"summary":"Get memory statistics","description":"Retrieve detailed statistics for a memory (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Returns:**\n    - Statistics including document counts by status\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"get_memories_memory_id_stats","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Memory statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryStatsResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/documents/{document_id}":{"post":{"tags":["Knowledge Bases"],"summary":"Add document to memory","description":"Add an existing document to a memory (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n    - `document_id`: UUID of the document to add\n\n    **Note:**\n    - Document will inherit the AI Profile from the memory\n    - Document must belong to the same tenant\n\n    **Returns:**\n    - Success message\n\n    **Errors:**\n    - 404: Memory or document not found","operationId":"post_memories_memory_id_documents_document_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Document added successfully","content":{"application/json":{"schema":{}}}},"404":{"description":"Memory or document not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Knowledge Bases"],"summary":"Remove document from memory","description":"Remove a document from a memory (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n    - `document_id`: UUID of the document to remove\n\n    **Note:**\n    - Document is NOT deleted, only unlinked from memory\n\n    **Returns:**\n    - Success message\n\n    **Errors:**\n    - 404: Memory or document not found","operationId":"delete_memories_memory_id_documents_document_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Document removed successfully","content":{"application/json":{"schema":{}}}},"404":{"description":"Memory or document not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/refresh-stats":{"post":{"tags":["Knowledge Bases"],"summary":"Refresh memory statistics","description":"Force refresh of memory statistics from documents (tenant-isolated).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Returns:**\n    - Updated statistics\n\n    **Errors:**\n    - 404: Memory not found or doesn't belong to tenant","operationId":"post_memories_memory_id_refresh_stats","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Statistics refreshed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryStatsResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/shares/user":{"post":{"tags":["Knowledge Bases"],"summary":"Share memory with a user","description":"Share a memory with a specific user.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory to share\n\n    **Request Body:**\n    - `user_id`: UUID of the user to share with\n    - `permission`: Permission level (read, write, admin) - default: read\n    - `message`: Optional message when sharing\n    - `expires_at`: Optional expiration date\n\n    **Requirements:**\n    - User must be owner of the memory or have admin permission\n    - Requires `memories.share` permission\n\n    **Returns:**\n    - Created share details","operationId":"post_memories_memory_id_shares_user","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareToUser"}}}},"responses":{"201":{"description":"Share created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareResponse"}}}},"403":{"description":"Not allowed to share this memory"},"404":{"description":"Memory or user not found"},"409":{"description":"Share already exists"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/shares/team":{"post":{"tags":["Knowledge Bases"],"summary":"Share memory with a team","description":"Share a memory with an entire team.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory to share\n\n    **Request Body:**\n    - `team_id`: UUID of the team to share with\n    - `permission`: Permission level (read, write, admin) - default: read\n    - `message`: Optional message when sharing\n    - `expires_at`: Optional expiration date\n\n    **Requirements:**\n    - User must be owner of the memory or have admin permission\n    - Requires `memories.share` permission\n\n    **Returns:**\n    - Created share details","operationId":"post_memories_memory_id_shares_team","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareToTeam"}}}},"responses":{"201":{"description":"Share created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareResponse"}}}},"403":{"description":"Not allowed to share this memory"},"404":{"description":"Memory or team not found"},"409":{"description":"Share already exists"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/shares/users/batch":{"post":{"tags":["Knowledge Bases"],"summary":"Share memory with multiple users","description":"Share a memory with multiple users at once with the same permission level.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory to share\n\n    **Request Body:**\n    - `user_ids`: List of user IDs to share with (max 50)\n    - `permission`: Permission level for all users (read, write, admin)\n    - `message`: Optional message when sharing\n    - `expires_at`: Optional expiration date for all shares\n\n    **Requirements:**\n    - User must be owner of the memory or have admin permission\n    - Requires `memories.share` permission\n\n    **Returns:**\n    - Summary of batch operation with results for each user","operationId":"post_memories_memory_id_shares_users_batch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareToUsersBatch"}}}},"responses":{"200":{"description":"Batch share completed (may include partial failures)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareBatchResponse"}}}},"403":{"description":"Not allowed to share this memory"},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/shares":{"get":{"tags":["Knowledge Bases"],"summary":"List shares for a memory","description":"Get all active shares for a memory.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Returns:**\n    - List of shares with user/team details","operationId":"get_memories_memory_id_shares","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"List of shares","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareListResponse"}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/my-permission":{"get":{"tags":["Knowledge Bases"],"summary":"Get my permission on a memory","description":"Get the current user's permission level on a specific memory.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n\n    **Returns:**\n    - `permission`: The user's permission level (read, write, admin) or null if no access\n    - `is_owner`: True if the user is the creator/owner of the memory\n\n    **Note:**\n    - Owners always have admin-equivalent access\n    - Permission is the highest level from all shares (direct or via team)","operationId":"get_memories_memory_id_my_permission","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"User's permission on the memory","content":{"application/json":{"schema":{}}}},"404":{"description":"Memory not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/shares/{share_id}":{"patch":{"tags":["Knowledge Bases"],"summary":"Update a share","description":"Update an existing share (permission level or expiration).\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n    - `share_id`: UUID of the share to update\n\n    **Request Body:**\n    - `permission`: New permission level (optional)\n    - `expires_at`: New expiration date (optional)\n\n    **Returns:**\n    - Updated share details","operationId":"patch_memories_memory_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareUpdate"}}}},"responses":{"200":{"description":"Share updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryShareResponse"}}}},"403":{"description":"Not allowed to update this share"},"404":{"description":"Share not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Knowledge Bases"],"summary":"Revoke a share","description":"Revoke (soft delete) a share.\n\n    **Path Parameters:**\n    - `memory_id`: UUID of the memory\n    - `share_id`: UUID of the share to revoke\n\n    **Note:**\n    - Share is not deleted, but marked as revoked\n    - Can be revoked by memory owner, share creator, or admin","operationId":"delete_memories_memory_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"204":{"description":"Share revoked successfully"},"403":{"description":"Not allowed to revoke this share"},"404":{"description":"Share not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/entities":{"post":{"tags":["Knowledge Base Entities"],"summary":"Bulk upsert structured entities (Memory.kb_type='structured')","description":"Upsert idempotent par (memory_id, external_id) — max 1000 entites par request. Reembed dispatched en background pour les entites dont le contenu a change (sha256(embedding_text) diff). Race-safe via entity_version. Pass dry_run=true pour preview sans ecriture.","operationId":"post_memories_memory_id_entities","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitiesBulkUpsertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntitiesBulkUpsertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Knowledge Base Entities"],"summary":"Paginated list of structured entities for a Memory","description":"Liste paginee des entites d'une Memory structuree (kb_type='structured'). Filtres optionnels : type_norm, commune_norm, q (full-text sur search_text_norm). Tri par updated_at DESC (entites recemment modifiees en haut).","operationId":"get_memories_memory_id_entities","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Skip"},"description":"Pagination offset"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size (max 100)","default":20,"title":"Limit"},"description":"Page size (max 100)"},{"name":"type_norm","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by entity type (e.g. 'hotels')","title":"Type Norm"},"description":"Filter by entity type (e.g. 'hotels')"},{"name":"commune_norm","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by commune (e.g. 'biarritz')","title":"Commune Norm"},"description":"Filter by commune (e.g. 'biarritz')"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full-text search on search_text_norm","title":"Q"},"description":"Full-text search on search_text_norm"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/embedding-status":{"get":{"tags":["Knowledge Base Entities"],"summary":"Counts of embedded / pending / failed entities for a Memory","description":"Renvoie le compte des entites par etat d'embedding. Utile pour verifier `pending == 0` avant un golden set / batch validation.","operationId":"get_memories_memory_id_embedding_status","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/parse-query":{"post":{"tags":["Knowledge Base Queries"],"summary":"Parse natural language query into structured filters + residual text","description":"Parser deterministe : extrait des filtres `type_norm`/`commune_norm` exacts depuis une requete libre via alias -> dict exact -> fuzzy (rapidfuzz >=0.85). Longest-span-wins. Retourne aussi un parse_trace audit-able. Rate limit 60 req/min.","operationId":"post_memories_memory_id_parse_query","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/aliases":{"get":{"tags":["Knowledge Base Queries"],"summary":"List aliases for a Memory","operationId":"get_memories_memory_id_aliases","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AliasResponse"},"title":"Response Get Memories Memory Id Aliases"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Knowledge Base Queries"],"summary":"Create or upsert a single alias","operationId":"post_memories_memory_id_aliases","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/aliases/bulk":{"post":{"tags":["Knowledge Base Queries"],"summary":"Bulk seed aliases (Tourinsoft initial setup)","operationId":"post_memories_memory_id_aliases_bulk","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasesBulkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasesBulkCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/aliases/{alias_id}":{"delete":{"tags":["Knowledge Base Queries"],"summary":"Delete a single alias","operationId":"delete_memories_memory_id_aliases_alias_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"alias_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alias Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/search":{"post":{"tags":["Knowledge Base Search"],"summary":"Search structured entities with 3 deterministic paths","description":"Parse la query puis dispatch vers listing (filters seuls) / hybrid RRF (filters + FTS + vector) / semantic pur (vector seul) selon le resultat du parser. Pas de cascade silencieuse — 503 explicite si le service d'embedding est down. Rate limit 60 req/min.","operationId":"post_memories_memory_id_search","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__kb_search__SearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__kb_search__SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chunks/":{"get":{"tags":["Chunks"],"summary":"List chunks","description":"List chunks. Returns the resource scoped to the current tenant.","operationId":"get_chunks","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (starts at 1)","default":1,"title":"Page"},"description":"Page number (starts at 1)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":15,"title":"Page Size"},"description":"Items per page"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in chunk content and document title","title":"Search"},"description":"Search in chunk content and document title"},{"name":"profile_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by AI profile ID","title":"Profile Id"},"description":"Filter by AI profile ID"},{"name":"page_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Filter by page number","title":"Page Number"},"description":"Filter by page number"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by indexed date (start) - format: YYYY-MM-DD","title":"Start Date"},"description":"Filter by indexed date (start) - format: YYYY-MM-DD"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by indexed date (end) - format: YYYY-MM-DD","title":"End Date"},"description":"Filter by indexed date (end) - format: YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chunks/{chunk_id}":{"get":{"tags":["Chunks"],"summary":"Get chunk","description":"Get chunk. Returns the resource scoped to the current tenant.","operationId":"get_chunks_chunk_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chunk_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Chunk Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/folders":{"get":{"tags":["Document Folders"],"summary":"List folders","description":"List folders. Returns the resource scoped to the current tenant.","operationId":"get_memories_memory_id_folders","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"parent_folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by parent folder ID","title":"Parent Folder Id"},"description":"Filter by parent folder ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentFolderResponse"},"title":"Response Get Memories Memory Id Folders"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Document Folders"],"summary":"Create folder","description":"Create folder. Creates the resource scoped to the current tenant.","operationId":"post_memories_memory_id_folders","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFolderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/folders/{folder_id}":{"get":{"tags":["Document Folders"],"summary":"Get folder","description":"Get folder. Returns the resource scoped to the current tenant.","operationId":"get_memories_memory_id_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Document Folders"],"summary":"Update folder","description":"Update folder. Updates the resource in place; only the supplied fields change.","operationId":"patch_memories_memory_id_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFolderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Document Folders"],"summary":"Delete folder","description":"Delete folder. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_memories_memory_id_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/folders/{folder_id}/ancestors":{"get":{"tags":["Document Folders"],"summary":"Get folder ancestors","description":"Get folder ancestors. Returns the resource scoped to the current tenant.","operationId":"get_memories_memory_id_folders_folder_id_ancestors","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentFolderResponse"},"title":"Response Get Memories Memory Id Folders Folder Id Ancestors"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/folders/move-documents":{"post":{"tags":["Document Folders"],"summary":"Create move documents","description":"Create move documents. Creates the resource scoped to the current tenant.","operationId":"post_memories_memory_id_folders_move_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveDocumentsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/multi-rag":{"post":{"tags":["RAG"],"summary":"Multi-RAG search with @mentions","description":"Search across multiple knowledge bases with targeted queries using @mentions.\n\n    **Syntax:**\n    Use @base-name to target a specific knowledge base.\n\n    **Examples:**\n    - \"Cherche les tarifs dans @base-commerciale et les procédures dans @base-technique\"\n    - \"Compare les produits de @catalogue-2023 avec @catalogue-2024\"\n    - \"Quelles sont les différences entre @doc-technique et @doc-utilisateur ?\"\n\n    **How it works:**\n    1. Parses @mentions in the message\n    2. Extracts context around each mention (what you're looking for)\n    3. Generates optimized sub-questions for each knowledge base\n    4. Performs parallel searches across all mentioned bases\n    5. Combines results with clear source attribution\n\n    **Response:**\n    - Sources are grouped by knowledge base\n    - Each source includes its origin base\n    - Sub-questions used are included for transparency","operationId":"post_chat_multi_rag","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiRAGRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiRAGResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/chat/memories/available":{"get":{"tags":["RAG"],"summary":"Get available memories for Multi-RAG","description":"List all active memories with their @mention syntax","operationId":"get_chat_memories_available","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/search/stream":{"post":{"tags":["Docs"],"summary":"Search stream","description":"Search stream. Creates the resource scoped to the current tenant.","operationId":"post_docs_search_stream","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/stats":{"get":{"tags":["Docs"],"summary":"Get stats","description":"Get stats. Returns the resource scoped to the current tenant.","operationId":"get_docs_stats","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/docs/":{"get":{"tags":["Docs"],"summary":"List docs","description":"List docs. Returns the resource scoped to the current tenant.","operationId":"get_docs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"storage_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Source"}},{"name":"origin_app","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin App"}},{"name":"document_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Tags"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"updated_at","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Order"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/docs/{registry_id}":{"get":{"tags":["Docs"],"summary":"Get doc","description":"Get doc. Returns the resource scoped to the current tenant.","operationId":"get_docs_registry_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"registry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Registry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Docs"],"summary":"Update doc","description":"Update doc. Updates the resource in place; only the supplied fields change.","operationId":"patch_docs_registry_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"registry_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Registry Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/":{"get":{"tags":["Conversations"],"summary":"List conversations by source","description":"Get all conversations, optionally filtered by source tag","operationId":"get_conversations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Conversations"],"summary":"Create a new conversation","description":"Create a new conversation. memory_id is optional: omit it for standalone chat conversations.","operationId":"post_conversations","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/conversations/ \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"title\":\"Q4 review\",\"memory_id\":\"<KB_ID>\"}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/conversations/\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ title: \"Q4 review\", memory_id: \"<KB_ID>\" })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/conversations/\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"title\":\"Q4 review\",\"memory_id\":\"<KB_ID>\"})\nprint(r.json())"}]}},"/api/v1/conversations/memory/{memory_id}":{"get":{"tags":["Conversations"],"summary":"List conversations for a memory","description":"Get all conversations for a specific memory (max 10, ordered by last_message_at desc)","operationId":"get_conversations_memory_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memory Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}":{"get":{"tags":["Conversations"],"summary":"Get conversation with messages","description":"Get a specific conversation with all its messages","operationId":"get_conversations_conversation_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Conversations"],"summary":"Update conversation title","description":"Update the title of a conversation","operationId":"patch_conversations_conversation_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Conversations"],"summary":"Delete a conversation","description":"Soft delete a conversation","operationId":"delete_conversations_conversation_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/archive":{"post":{"tags":["Conversations"],"summary":"Archive a conversation","description":"Archive a conversation (set status to archived)","operationId":"post_conversations_conversation_id_archive","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/unarchive":{"post":{"tags":["Conversations"],"summary":"Unarchive a conversation","description":"Unarchive a conversation (set status back to active)","operationId":"post_conversations_conversation_id_unarchive","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/messages":{"post":{"tags":["Conversations"],"summary":"Add a message to a conversation","description":"Add a new message (user or assistant) to a conversation","operationId":"post_conversations_conversation_id_messages","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMessageRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/messages \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"role\":\"user\",\"content\":\"What were the key takeaways?\"}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/messages\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ role: \"user\", content: \"What were the key takeaways?\" })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/messages\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"role\":\"user\",\"content\":\"What were the key takeaways?\"})\nprint(r.json())"}]},"get":{"tags":["Conversations"],"summary":"Get messages from a conversation","description":"Get all messages from a conversation with pagination","operationId":"get_conversations_conversation_id_messages","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MessageResponse"},"title":"Response Get Conversations Conversation Id Messages"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/messages/{message_id}":{"patch":{"tags":["Conversations"],"summary":"Edit a user message and truncate conversation","description":"Edit the content of a user message; deletes every message strictly after it in the conversation. Rejects edits on agent conversations, conversations with RAG documents, or image-bearing messages.","operationId":"patch_conversations_conversation_id_messages_message_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserMessageRequest"}}}},"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"}}}}}}},"/api/v1/responses":{"post":{"tags":["Responses"],"summary":"Generate an AI response","description":"Unified entry point for AI generation. The request body shape selects the underlying behaviour:\n\n- `agent_id` set    -> run a stored agent (replaces `POST /api/v1/agents/chat/run`)\n- otherwise         -> RAG query over knowledge bases (replaces `POST /api/v1/chat/query`)\n\nSet `stream: true` to receive a Server-Sent Events stream (`text/event-stream`) instead of a JSON envelope.","operationId":"post_responses","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRequest"}}},"required":true},"responses":{"200":{"description":"AI response (JSON envelope or SSE stream).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}},"text/event-stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/responses \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"input\": \"What are the key takeaways?\",\n    \"memory_ids\": [\"<KB_ID>\"]\n  }'"}]}},"/api/v1/conversations/{conversation_id}/responses":{"post":{"tags":["Conversations"],"summary":"Generate a response inside a conversation","description":"Generate an AI response and persist it to an existing conversation. Defaults to the conversation's pinned `agent_id` / `memory_id` / `model` when the request body omits them.","operationId":"post_conversations_conversation_id_responses","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/responses \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"input\":\"Summarise the discussion\"}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/responses\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ input: \"Summarise the discussion\" })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/conversations/{conversation_id}/responses\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"input\":\"Summarise the discussion\"})\nprint(r.json())"}]}},"/api/v1/users/me":{"get":{"tags":["Users"],"summary":"Get current user info","description":"Get current user info. Returns the resource scoped to the current tenant.","operationId":"get_users_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/me/subordinates":{"get":{"tags":["Users"],"summary":"List my subordinates","description":"List my subordinates. Returns the resource scoped to the current tenant.","operationId":"get_users_me_subordinates","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SubordinateResponse"},"type":"array","title":"Response Get Users Me Subordinates"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/":{"get":{"tags":["Users"],"summary":"List users","description":"List users. Returns the resource scoped to the current tenant.","operationId":"get_users","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recherche par email, username ou full_name","title":"Search"},"description":"Recherche par email, username ou full_name"},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by role","title":"Role"},"description":"Filter by role"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filtrer par statut actif","title":"Is Active"},"description":"Filtrer par statut actif"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination: skip","default":0,"title":"Skip"},"description":"Pagination: skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Pagination: limit","default":10,"title":"Limit"},"description":"Pagination: limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserListResponse"},"title":"Response Get Users"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Users"],"summary":"Create user","description":"Create user. Creates the resource scoped to the current tenant.","operationId":"post_users","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/count":{"get":{"tags":["Users"],"summary":"Get count users","description":"Get count users. Returns the resource scoped to the current tenant.","operationId":"get_users_count","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"integer"},"type":"object","title":"Response Get Users Count"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/{user_id}":{"get":{"tags":["Users"],"summary":"Get user","description":"Get user. Returns the resource scoped to the current tenant.","operationId":"get_users_user_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Users"],"summary":"Update user","description":"Update user. Replaces the resource. Idempotent.","operationId":"put_users_user_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Users"],"summary":"Delete user","description":"Delete user. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_users_user_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Users User Id"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/direct":{"post":{"tags":["Users"],"summary":"Create user direct","description":"Create user direct. Creates the resource scoped to the current tenant.","operationId":"post_users_direct","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDirectCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/users/{user_id}/teams":{"get":{"tags":["Users"],"summary":"Get user teams","description":"Get user teams. Returns the resource scoped to the current tenant.","operationId":"get_users_user_id_teams","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTeamsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Users"],"summary":"Update user teams","description":"Update user teams. Replaces the resource. Idempotent.","operationId":"put_users_user_id_teams","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserTeamsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTeamsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/permissions":{"get":{"tags":["Roles & Permissions"],"summary":"Get user permissions","description":"Get user permissions. Returns the resource scoped to the current tenant.","operationId":"get_users_user_id_permissions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Roles & Permissions"],"summary":"Add user permission","description":"Add user permission. Creates the resource scoped to the current tenant.","operationId":"post_users_user_id_permissions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/{user_id}/permissions/{permission_id}":{"delete":{"tags":["Roles & Permissions"],"summary":"Remove user permission","description":"Remove user permission. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_users_user_id_permissions_permission_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"permission_id","in":"path","required":true,"schema":{"type":"string","title":"Permission Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams/":{"get":{"tags":["Teams"],"summary":"Get teams","description":"Get teams. Returns the resource scoped to the current tenant.","operationId":"get_teams","security":[{"HTTPBearer":[]}],"parameters":[{"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":100,"minimum":1,"description":"Number of records to return","default":10,"title":"Limit"},"description":"Number of records to return"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query for team name or description","title":"Search"},"description":"Search query for team name or description"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Teams"],"summary":"Create team","description":"Create team. Creates the resource scoped to the current tenant.","operationId":"post_teams","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams/{team_id}":{"get":{"tags":["Teams"],"summary":"Get team","description":"Get team. Returns the resource scoped to the current tenant.","operationId":"get_teams_team_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Teams"],"summary":"Update team","description":"Update team. Replaces the resource. Idempotent.","operationId":"put_teams_team_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Teams"],"summary":"Delete team","description":"Delete team. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_teams_team_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams/{team_id}/members":{"get":{"tags":["Teams"],"summary":"Get team members","description":"Get team members. Returns the resource scoped to the current tenant.","operationId":"get_teams_team_id_members","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMembersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Teams"],"summary":"Add team member","description":"Add team member. Creates the resource scoped to the current tenant.","operationId":"post_teams_team_id_members","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams/{team_id}/members/bulk":{"post":{"tags":["Teams"],"summary":"Add team members bulk","description":"Add team members bulk. Creates the resource scoped to the current tenant.","operationId":"post_teams_team_id_members_bulk","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMembersRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMembersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams/{team_id}/members/{user_id}":{"delete":{"tags":["Teams"],"summary":"Remove team member","description":"Remove team member. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_teams_team_id_members_user_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-source":{"get":{"tags":["Knowledge Source"],"summary":"List Knowledge Sources","description":"List the tenant's KnowledgeSources (direct array, per project convention).","operationId":"get_knowledge_source","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KnowledgeSourceResponse"},"type":"array","title":"Response Get Knowledge Source"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Knowledge Source"],"summary":"Create Knowledge Source","description":"Create a KnowledgeSource (the primitive that /index references via its UUID).","operationId":"post_knowledge_source","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKnowledgeSourceRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/governance/vector-spaces":{"get":{"tags":["Knowledge Source"],"summary":"List Vector Index Spaces","description":"Read-only health view of the tenant's VectorIndexSpaces (plan v4 §3.1).","operationId":"get_knowledge_source_governance_vector_spaces","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/VectorSpaceResponse"},"type":"array","title":"Response Get Knowledge Source Governance Vector Spaces"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/governance/index-profiles":{"get":{"tags":["Knowledge Source"],"summary":"List Index Profiles","description":"Read-only list of the tenant's versioned index profiles (plan v4 §3.2).","operationId":"get_knowledge_source_governance_index_profiles","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IndexProfileResponse"},"type":"array","title":"Response Get Knowledge Source Governance Index Profiles"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/governance/acl-freshness":{"get":{"tags":["Knowledge Source"],"summary":"List Acl Freshness","description":"Read-only PG truth of acl_version / content_version per source object (plan v4 §7.4).\n\nThe live payload-vs-PG comparison (stale points) is the runtime post-check, not computed here.","operationId":"get_knowledge_source_governance_acl_freshness","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AclVersionResponse"},"type":"array","title":"Response Get Knowledge Source Governance Acl Freshness"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/{knowledge_source_id}":{"get":{"tags":["Knowledge Source"],"summary":"Get Knowledge Source","description":"Get a single KnowledgeSource (tenant-scoped), with active-profile search settings.","operationId":"get_knowledge_source_knowledge_source_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Knowledge Source"],"summary":"Update Knowledge Source","description":"Update a KnowledgeSource's name/description and/or query-time search settings.\n\nSearch settings (retrieval_strategy / hybrid_alpha / top_k) live on the ACTIVE index\nprofile's ranking_policy (query-time, no reindex — plan v4 §7.3). They can only be set\nonce an active profile exists (i.e. after the first indexing); a request to change them\nwith no active profile fails closed with 422 rather than creating a phantom profile.","operationId":"patch_knowledge_source_knowledge_source_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKnowledgeSourceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Knowledge Source"],"summary":"Delete Knowledge Source","description":"Delete a KnowledgeSource (tenant-scoped) + best-effort Qdrant cleanup.","operationId":"delete_knowledge_source_knowledge_source_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}},{"name":"embedding_model","in":"query","required":false,"schema":{"type":"string","default":"text-embedding-3-small","title":"Embedding Model"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-source/index-file":{"post":{"tags":["Knowledge Source"],"summary":"Index File","description":"Upload a document, parse + chunk it, and index it into the tenant's KnowledgeSource.\n\nThe real documentary path: file → DocumentPipeline (Mistral OCR) or DocumentLoader →\npage-aware chunks → IndexItem[] → §6 orchestrator → Qdrant. Pages (page_start/page_end)\nare propagated into user_fields so search results carry their source page.","operationId":"post_knowledge_source_index_file","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_knowledge_source_index_file"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexFileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/index":{"post":{"tags":["Knowledge Source"],"summary":"Index Knowledge Source","description":"Index a batch of text items into the tenant's KnowledgeSource.\n\nDrives the full §6 profile lifecycle (VectorIndexSpace + KnowledgeSourceIndexProfile\nin PG, config_hash, run cleanup, active-profile flip) via the orchestrator.","operationId":"post_knowledge_source_index","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/index-async":{"post":{"tags":["Knowledge Source"],"summary":"Index Knowledge Source Async","description":"Dispatch indexing to a Celery task (queue 'indexing') and return immediately.\n\nScalability: the embedding + upsert work runs off the HTTP path, so large batches do\nnot block the request nor risk a timeout. Poll GET /jobs/{task_id} for the result.\n\nThe KnowledgeSource existence is checked here (fast, fail-closed 404) before queuing.","operationId":"post_knowledge_source_index_async","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/jobs/{task_id}":{"get":{"tags":["Knowledge Source"],"summary":"Get Index Job","description":"Poll the status/result of an async indexing task (Celery result backend).\n\nTenant-scoped + fail-closed: the task id is only readable by the tenant that enqueued it.\nA missing owner record (Redis down / expired) or a tenant mismatch returns 404 — we never\nconfirm the existence of another tenant's job, nor leak its result/raw error.","operationId":"get_knowledge_source_jobs_task_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-source/search":{"post":{"tags":["Knowledge Source"],"summary":"Search Knowledge Source","description":"Search the tenant's KnowledgeSource (semantic / bm25 / hybrid), with ACL post-check.\n\ntenant + knowledge_source isolation is enforced server-side by the repo; on top, a real\nversion-staleness post-check drops any hit whose acl_version / content_version in Qdrant\ndiffers from the PG source of truth (source_object_versions, §7.4).\n\n- semantic: dense vector (LiteLLM embedding)\n- bm25:     sparse vector (fastembed BM25)\n- hybrid:   dense + sparse, fused server-side (RRF)","operationId":"post_knowledge_source_search","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_source__SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__knowledge_source__SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/knowledge-source/{knowledge_source_id}/documents":{"get":{"tags":["Knowledge Source"],"summary":"List Knowledge Source Documents","description":"List the indexed documents of a KnowledgeSource (aggregated from Qdrant points).","operationId":"get_knowledge_source_knowledge_source_id_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}},{"name":"embedding_model","in":"query","required":false,"schema":{"type":"string","default":"text-embedding-3-small","title":"Embedding Model"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KsDocumentResponse"},"title":"Response Get Knowledge Source Knowledge Source Id Documents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-source/{knowledge_source_id}/metadata-schema":{"get":{"tags":["Knowledge Source"],"summary":"Get Metadata Schema","description":"Return the declared metadata columns of a KnowledgeSource (filterable schema).","operationId":"get_knowledge_source_knowledge_source_id_metadata_schema","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataSchemaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Knowledge Source"],"summary":"Save Metadata Schema","description":"Replace the metadata column schema and ensure a Qdrant payload index for each\nfilterable column (keyword/integer/float) on user_fields.<name>.\n\nIdempotent: re-saving with the same fields re-ensures the same indexes (Qdrant\ncreate_payload_index is a no-op if the index already exists with the same schema).","operationId":"put_knowledge_source_knowledge_source_id_metadata_schema","security":[{"HTTPBearer":[]}],"parameters":[{"name":"knowledge_source_id","in":"path","required":true,"schema":{"type":"string","title":"Knowledge Source Id"}},{"name":"embedding_model","in":"query","required":false,"schema":{"type":"string","default":"text-embedding-3-small","title":"Embedding Model"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MetadataField"},"title":"Fields"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataSchemaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge-source/acl-bump":{"post":{"tags":["Knowledge Source"],"summary":"Bump Object Version","description":"Bump the acl_version / content_version of one source object (§7.4 source of truth).\n\nAfter a bump, the matching Qdrant hit becomes stale and is filtered out of /search until\na reindex (content) or payload update (acl) refreshes its version. Demonstrates the\nfail-closed staleness behaviour without manual SQL.","operationId":"post_knowledge_source_acl_bump","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AclBumpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/identity-blocks/":{"get":{"tags":["Identity"],"summary":"List identity blocks","description":"List identity blocks. Returns the resource scoped to the current tenant.","operationId":"get_identity_blocks","security":[{"HTTPBearer":[]}],"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":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"importance","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Importance"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Identity"],"summary":"Create identity block","description":"Create identity block. Creates the resource scoped to the current tenant.","operationId":"post_identity_blocks","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/identity-blocks/{block_id}":{"get":{"tags":["Identity"],"summary":"Get identity block","description":"Get identity block. Returns the resource scoped to the current tenant.","operationId":"get_identity_blocks_block_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Identity"],"summary":"Update identity block","description":"Update identity block. Replaces the resource. Idempotent.","operationId":"put_identity_blocks_block_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Identity"],"summary":"Delete identity block","description":"Delete identity block. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_identity_blocks_block_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/identity-blocks/{block_id}/duplicate":{"post":{"tags":["Identity"],"summary":"Duplicate identity block","description":"Duplicate identity block. Creates the resource scoped to the current tenant.","operationId":"post_identity_blocks_block_id_duplicate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityBlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/identity-blocks/reorder":{"post":{"tags":["Identity"],"summary":"Create reorder identity blocks","description":"Create reorder identity blocks. Creates the resource scoped to the current tenant.","operationId":"post_identity_blocks_reorder","requestBody":{"content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Block Orders"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IdentityBlockResponse"},"type":"array","title":"Response Post Identity Blocks Reorder"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vocabulary/terms":{"get":{"tags":["Identity"],"summary":"List vocabulary terms","description":"List vocabulary terms. Returns the resource scoped to the current tenant.","operationId":"get_vocabulary_terms","security":[{"HTTPBearer":[]}],"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":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Identity"],"summary":"Create vocabulary term","description":"Create vocabulary term. Creates the resource scoped to the current tenant.","operationId":"post_vocabulary_terms","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vocabulary/terms/{term_id}":{"get":{"tags":["Identity"],"summary":"Get vocabulary term","description":"Get vocabulary term. Returns the resource scoped to the current tenant.","operationId":"get_vocabulary_terms_term_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Term Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Identity"],"summary":"Update vocabulary term","description":"Update vocabulary term. Replaces the resource. Idempotent.","operationId":"put_vocabulary_terms_term_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Term Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Identity"],"summary":"Delete vocabulary term","description":"Delete vocabulary term. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_vocabulary_terms_term_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Term Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vocabulary/terms/{term_id}/archive":{"post":{"tags":["Identity"],"summary":"Archive vocabulary term","description":"Archive vocabulary term. Creates the resource scoped to the current tenant.","operationId":"post_vocabulary_terms_term_id_archive","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Term Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VocabularyTermResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vocabulary/style":{"get":{"tags":["Identity"],"summary":"Get communication style","description":"Get communication style. Returns the resource scoped to the current tenant.","operationId":"get_vocabulary_style","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationStyleResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Identity"],"summary":"Update communication style","description":"Update communication style. Replaces the resource. Idempotent.","operationId":"put_vocabulary_style","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationStyleUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationStyleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vocabulary/style/reset":{"post":{"tags":["Identity"],"summary":"Create reset communication style","description":"Create reset communication style. Creates the resource scoped to the current tenant.","operationId":"post_vocabulary_style_reset","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunicationStyleResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/vocabulary/vectorize":{"post":{"tags":["Identity"],"summary":"Create vectorize tenant vocabulary","description":"Create vectorize tenant vocabulary. Creates the resource scoped to the current tenant.","operationId":"post_vocabulary_vectorize","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/spelling/check":{"post":{"tags":["Identity"],"summary":"Create check spelling","description":"Create check spelling. Creates the resource scoped to the current tenant.","operationId":"post_spelling_check","security":[{"HTTPBearer":[]}],"parameters":[{"name":"use_llm","in":"query","required":false,"schema":{"type":"boolean","description":"Use LLM for additional contextual detection (slower, more comprehensive)","default":false,"title":"Use Llm"},"description":"Use LLM for additional contextual detection (slower, more comprehensive)"},{"name":"llm_model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific LLM model to use for contextual detection","title":"Llm Model"},"description":"Specific LLM model to use for contextual detection"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpellingCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpellingCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/spelling/replace":{"post":{"tags":["Identity"],"summary":"Create apply replacements","description":"Create apply replacements. Creates the resource scoped to the current tenant.","operationId":"post_spelling_replace","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpellingReplaceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpellingReplaceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dictation/config":{"get":{"tags":["Dictation"],"summary":"Get dictation configuration","description":"Retrieve the dictation (speech-to-text) configuration for the current tenant.\n\n    **Returns:**\n    - `enabled`: Whether dictation is enabled\n    - `allowed_models`: List of STT model IDs allowed for users\n    - `default_model`: Default model when user doesn't specify one\n    - `max_recording_seconds`: Maximum recording duration (30-3600s)\n    - `chunk_interval_seconds`: Interval for progressive transcription (5-60s)\n    - `available_models`: List of all STT models with availability status\n\n    A model is \"available\" if the tenant has configured an API key for its provider.\n    A model is \"enabled\" if it's in the `allowed_models` list.","operationId":"get_dictation_config","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DictationConfigResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Dictation"],"summary":"Update dictation configuration","description":"Update the dictation (speech-to-text) configuration for the current tenant.\n\n    **Requires:** ADMIN or SUPER_ADMIN role\n\n    **Request body:**\n    - `enabled`: Whether dictation is enabled\n    - `allowed_models`: List of STT model IDs to allow (must be from available models)\n    - `default_model`: Default model (must be in allowed_models)\n    - `max_recording_seconds`: Maximum recording duration (30-3600s)\n    - `chunk_interval_seconds`: Interval for progressive transcription (5-60s)\n\n    **Validation:**\n    - Models not in ALLOWED_DICTATION_MODELS whitelist are ignored\n    - Models without configured API keys are ignored\n    - If default_model is not in allowed_models, first allowed model is used","operationId":"put_dictation_config","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DictationConfigUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DictationConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dictation/models":{"get":{"tags":["Dictation"],"summary":"List available dictation models","description":"List dictation (STT) models available for the current tenant.\n\n    Only returns models that are:\n    - Enabled in the tenant's dictation configuration\n    - Have provider API key configured\n\n    This endpoint is intended for use by client applications (e.g., Electron)\n    to get the list of models the user can choose from.","operationId":"get_dictation_models","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DictationModelInfo"},"type":"array","title":"Response Get Dictation Models"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dictation/models/all":{"get":{"tags":["Dictation"],"summary":"List all supported dictation models","description":"List all supported dictation models with their availability status.\n\n    Returns all models in the ALLOWED_DICTATION_MODELS whitelist,\n    with `is_available` indicating if the tenant has the provider API key\n    and `is_enabled` indicating if the model is enabled in tenant settings.\n\n    This endpoint is intended for the admin UI to show all available options.","operationId":"get_dictation_models_all","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DictationModelInfo"},"type":"array","title":"Response Get Dictation Models All"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/dictation/transcribe":{"post":{"tags":["Dictation"],"summary":"Transcribe audio file","description":"Transcribe an audio file using the configured dictation model.\n\n    **Supported formats:** MP3, WAV, WebM, OGG, FLAC, M4A\n    **Max file size:** 50MB\n    **Max duration:** Respects tenant's `max_recording_seconds` config\n\n    **Parameters:**\n    - `file`: Audio file to transcribe (multipart/form-data)\n    - `model`: Optional model ID to use (defaults to tenant's default_model)\n    - `language`: Optional ISO 639-1 language code (e.g., \"fr\", \"en\")\n\n    **Usage tracking:** All transcriptions are tracked with tag \"dictation\"\n    for billing and analytics purposes.","operationId":"post_dictation_transcribe","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_dictation_transcribe"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DictationTranscribeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/transcription/realtime/ticket":{"post":{"tags":["Realtime Transcription"],"summary":"Issue a one-time ticket for the realtime transcription WebSocket","description":"SUP-151 — Exchange the caller's JWT (sent via Authorization header) for\na short-lived random ticket presented to the WebSocket handshake. The JWT\ntherefore never appears in any URL or access log.","operationId":"post_transcription_realtime_ticket","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Post Transcription Realtime Ticket"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/status":{"get":{"tags":["User Memory"],"summary":"Get memory status","description":"Check if memory is enabled for the current user (global + tenant + per-user).","operationId":"get_user_memory_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory":{"get":{"tags":["User Memory"],"summary":"List all memories","description":"Retrieve all memories for the current user.","operationId":"get_user_memory","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["User Memory"],"summary":"Add a memory","description":"Manually add a new memory for the current user.","operationId":"post_user_memory","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["User Memory"],"summary":"Delete all memories","description":"Delete all memories for the current user (GDPR right to be forgotten).","operationId":"delete_user_memory","responses":{"204":{"description":"Successful Response"}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/search":{"post":{"tags":["User Memory"],"summary":"Search memories","description":"Search through the user's memories using semantic search.","operationId":"post_user_memory_search","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemorySearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/async":{"post":{"tags":["User Memory"],"summary":"Add a memory (async)","description":"Dispatch memory addition as a Celery task. Returns task_id for polling.","operationId":"post_user_memory_async","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryCreate"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/extract/async":{"post":{"tags":["User Memory"],"summary":"Extract memories from conversation (async)","description":"Dispatch memory extraction as a Celery task. Returns task_id for polling.","operationId":"post_user_memory_extract_async","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMemoryExtract"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/extract":{"post":{"tags":["User Memory"],"summary":"Extract memories from conversation","description":"Automatically extract and store memories from a conversation.","operationId":"post_user_memory_extract","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMemoryExtract"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user-memory/{memory_id}":{"get":{"tags":["User Memory"],"summary":"Get a memory","description":"Retrieve a specific memory by ID.","operationId":"get_user_memory_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["User Memory"],"summary":"Update a memory","description":"Update an existing memory.","operationId":"put_user_memory_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMemoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["User Memory"],"summary":"Delete a memory","description":"Delete a specific memory.","operationId":"delete_user_memory_memory_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/folders":{"get":{"tags":["Workflows"],"summary":"List all folders","description":"List folders. Returns the resource scoped to the current tenant.","operationId":"get_workflow_folders","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FolderResponse"},"type":"array","title":"Response Get Workflow Folders"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Workflows"],"summary":"Create a workflow folder","description":"Create a folder used to group workflows in the visual editor. Folders are tenant-scoped and only affect navigation — they don't gate access (use sharing for that).","operationId":"post_workflow_folders","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/workflow/folders/{folder_id}":{"get":{"tags":["Workflows"],"summary":"Get folder by ID","description":"Retrieve a workflow folder by id. Returns the folder metadata; use `GET /api/v1/workflow/folders/{folder_id}/workflows` for its content.","operationId":"get_workflow_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Workflows"],"summary":"Update folder","description":"Rename or move a workflow folder. Children workflows are kept; only the folder's own metadata changes.","operationId":"patch_workflow_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflows"],"summary":"Delete folder","description":"Delete a folder. Refuses if the folder still contains workflows — move or delete them first.","operationId":"delete_workflow_folders_folder_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Folder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Workflow Folders Folder Id"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows":{"get":{"tags":["Workflows"],"summary":"List all workflows","description":"List workflows. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows","security":[{"HTTPBearer":[]}],"parameters":[{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by folder","title":"Folder Id"},"description":"Filter by folder"},{"name":"trigger_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by trigger type (e.g., 'CompteRendu', 'manual')","title":"Trigger Type"},"description":"Filter by trigger type (e.g., 'CompteRendu', 'manual')"},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return enabled workflows (used with trigger_type)","default":false,"title":"Enabled Only"},"description":"Only return enabled workflows (used with trigger_type)"},{"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":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowResponse"},"title":"Response Get Workflow Workflows"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Workflows"],"summary":"Create workflow","description":"Create a new workflow. The workflow is saved as a draft; call `POST /api/v1/workflow/workflows/{id}/execute` (or trigger via webhook) to run it. Pass `folder_id` to nest it under a folder.","operationId":"post_workflow_workflows","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/trash":{"get":{"tags":["Workflows"],"summary":"List trashed workflows","description":"List soft-deleted workflows (trash) so they can be restored. Non-admins see only the workflows they own.","operationId":"get_workflow_workflows_trash","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkflowResponse"},"type":"array","title":"Response Get Workflow Workflows Trash"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/workflow/workflows/current":{"get":{"tags":["Workflows"],"summary":"Get current workflow state","description":"Get current workflow. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows_current","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentWorkflowResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Workflows"],"summary":"Save current workflow state","description":"Create save current workflow. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_current","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentWorkflowSave"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrentWorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/workflow/workflows/shared-with-me":{"get":{"tags":["Workflows"],"summary":"List workflows shared with me","description":"List shared with me. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows_shared_with_me","security":[{"HTTPBearer":[]}],"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"}},{"name":"trigger_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by trigger type (e.g., 'Projet', 'CompteRendu')","title":"Trigger Type"},"description":"Filter by trigger type (e.g., 'Projet', 'CompteRendu')"},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return enabled workflows","default":false,"title":"Enabled Only"},"description":"Only return enabled workflows"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}":{"get":{"tags":["Workflows"],"summary":"Get workflow by ID","description":"Retrieve the full workflow definition (nodes, edges, trigger config, sharing, current version pointer).","operationId":"get_workflow_workflows_workflow_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Workflows"],"summary":"Update workflow","description":"Update the workflow nodes / edges / trigger. Each save creates a new entry in the versions table; the previous version stays available via `GET /api/v1/workflow/workflows/{id}/versions`.","operationId":"patch_workflow_workflows_workflow_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflows"],"summary":"Delete workflow","description":"Move a workflow to the trash (soft delete). Webhook and email triggers are disarmed. Recover it with `POST /api/v1/workflow/workflows/{id}/restore` or remove it for good with `DELETE /api/v1/workflow/workflows/{id}/permanent`.","operationId":"delete_workflow_workflows_workflow_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Workflow Workflows Workflow Id"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/restore":{"post":{"tags":["Workflows"],"summary":"Restore workflow","description":"Restore a workflow from the trash and re-arm its webhook/email triggers. Non-admins can only restore workflows they own.","operationId":"post_workflow_workflows_workflow_id_restore","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/permanent":{"delete":{"tags":["Workflows"],"summary":"Permanently delete workflow","description":"Permanently delete a workflow that is already in the trash. Irreversible. Non-admins can only purge workflows they own.","operationId":"delete_workflow_workflows_workflow_id_permanent","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Workflow Workflows Workflow Id Permanent"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/code":{"get":{"tags":["Workflows"],"summary":"Get workflow code","description":"Return the generated Python code for the workflow. Useful for reviewing what the engine will execute or running a workflow outside the visual editor.","operationId":"get_workflow_workflows_workflow_id_code","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/download":{"get":{"tags":["Workflows"],"summary":"Download workflow files","description":"Download a zip with the workflow definition + generated code + helper assets. Suitable for archival or moving a workflow between tenants.","operationId":"get_workflow_workflows_workflow_id_download","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDownloadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/export":{"get":{"tags":["Workflows"],"summary":"Export workflow as JSON","description":"Export workflow. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows_workflow_id_export","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/import":{"post":{"tags":["Workflows"],"summary":"Import workflow from exported JSON","description":"Import workflow. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_import","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_workflow_workflows_import"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/workflow/workflows/{workflow_id}/shareable-entities":{"get":{"tags":["Workflows"],"summary":"List users and teams available for sharing","description":"Get shareable entities. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows_workflow_id_shareable_entities","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by name or email","title":"Search"},"description":"Search by name or email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareableEntitiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/shares":{"post":{"tags":["Workflows"],"summary":"Share workflow","description":"Create workflow share. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_workflow_id_shares","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowShareCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workflows"],"summary":"List workflow shares","description":"List workflow shares. Returns the resource scoped to the current tenant.","operationId":"get_workflow_workflows_workflow_id_shares","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"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/WorkflowShareListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/shares/{share_id}":{"put":{"tags":["Workflows"],"summary":"Update share permission","description":"Update workflow share. Replaces the resource. Idempotent.","operationId":"put_workflow_workflows_workflow_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowShareUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflows"],"summary":"Remove share","description":"Delete workflow share. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_workflow_workflows_workflow_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Share Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowShareDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/execute":{"post":{"tags":["Workflows"],"summary":"Execute workflow","description":"Execute workflow. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_workflow_id_execute","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/workflow/workflows/{workflow_id}/execute \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"inputs\":{\"question\":\"hello\"}}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/workflow/workflows/{workflow_id}/execute\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ inputs: { question: \"hello\" } })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/workflow/workflows/{workflow_id}/execute\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"inputs\":{\"question\":\"hello\"}})\nprint(r.json())"}]}},"/api/v1/workflow/workflows/{workflow_id}/webhook":{"post":{"tags":["Workflows"],"summary":"Trigger workflow via webhook","description":"Internal trigger endpoint (kept for the visual editor's 'Test run' button). External callers should use the public, HMAC-signed `/api/v1/webhooks/{workflow_id}` instead.","operationId":"post_workflow_workflows_workflow_id_webhook","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/submit-form":{"post":{"tags":["Workflows"],"summary":"Submit a form-triggered workflow","description":"Submit form. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_workflow_id_submit_form","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmission"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/form-upload":{"post":{"tags":["Workflows"],"summary":"Upload a file for a form-triggered workflow","description":"Create form upload. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_workflow_id_form_upload","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_workflow_workflows_workflow_id_form_upload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/test-alert":{"post":{"tags":["Workflows"],"summary":"Test workflow alert configuration","description":"Test workflow alert. Creates the resource scoped to the current tenant.","operationId":"post_workflow_workflows_workflow_id_test_alert","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/executions":{"get":{"tags":["Workflows"],"summary":"List workflow executions","description":"Paginated history of past executions for a workflow. Filter by status (`pending` / `running` / `completed` / `failed`).","operationId":"get_workflow_workflows_workflow_id_executions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"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":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExecutionResponse"},"title":"Response Get Workflow Workflows Workflow Id Executions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflows"],"summary":"Delete workflow executions","description":"Bulk-delete execution history for a workflow. Useful to clean up after a failed test run. The workflow itself is kept.","operationId":"delete_workflow_workflows_workflow_id_executions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/executions/{execution_id}/resume":{"post":{"tags":["Workflows"],"summary":"Resume a failed workflow execution","description":"Create resume workflow execution. Creates the resource scoped to the current tenant.","operationId":"post_workflow_executions_execution_id_resume","security":[{"HTTPBearer":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/executions/{execution_id}/logs":{"get":{"tags":["Workflows"],"summary":"Get execution logs","description":"Detailed per-node logs of a single execution. Includes the input/output payloads of every node, captured stdout/stderr, and the final outcome.","operationId":"get_workflow_executions_execution_id_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionWithLogsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/workflow/executions/{execution_id}/logs \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/workflow/executions/{execution_id}/logs\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/workflow/executions/{execution_id}/logs\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]}},"/api/v1/workflow/executions/{execution_id}/status":{"get":{"tags":["Workflows"],"summary":"Get execution status","description":"Get execution status. Returns the resource scoped to the current tenant.","operationId":"get_workflow_executions_execution_id_status","security":[{"HTTPBearer":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/integrations":{"get":{"tags":["Workflows"],"summary":"List integrations","description":"List third-party integrations available to the current tenant (API keys, OAuth grants, webhook secrets used by workflows).","operationId":"get_workflow_integrations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by integration type","title":"Type"},"description":"Filter by integration type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__schemas__workflow__IntegrationResponse"},"title":"Response Get Workflow Integrations"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Workflows"],"summary":"Create integration","description":"Register a new integration. The credentials are encrypted at rest with Fernet — they're never returned in the response after creation. Use `POST .../test` to validate them before using.","operationId":"post_workflow_integrations","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__workflow__IntegrationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__workflow__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/integrations/{integration_id}":{"get":{"tags":["Workflows"],"summary":"Get integration by ID","description":"Retrieve metadata of a single integration. The encrypted credentials are never exposed; only the integration type and non-secret config is returned.","operationId":"get_workflow_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationWithConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workflows"],"summary":"Update integration","description":"Patch the integration's name or non-secret config. Rotating secrets is a separate flow (delete + create new) so the old credentials are flushed from the cache.","operationId":"put_workflow_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__workflow__IntegrationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationWithConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workflows"],"summary":"Delete integration","description":"Delete an integration. Refuses if any workflow still references it — update those workflows first.","operationId":"delete_workflow_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Workflow Integrations Integration Id"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/integrations/{integration_id}/test":{"post":{"tags":["Workflows"],"summary":"Test integration connection","description":"Run a synchronous health-check call against the integration (e.g., HEAD on the configured base URL, OAuth token introspect). Useful to validate credentials at creation time.","operationId":"post_workflow_integrations_integration_id_test","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/workflows/{workflow_id}/versions":{"get":{"tags":["Workflows"],"summary":"List workflow versions","description":"Chronological list of saved versions for a workflow. Each edit creates a new version; the workflow points at one of them as the active definition.","operationId":"get_workflow_workflows_workflow_id_versions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"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":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VersionResponse"},"title":"Response Get Workflow Workflows Workflow Id Versions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Workflows"],"summary":"Create workflow version","description":"Snapshot the current workflow definition as a named version. Useful to mark a release point before risky changes.","operationId":"post_workflow_workflows_workflow_id_versions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/versions/{version_id}":{"get":{"tags":["Workflows"],"summary":"Get version by ID","description":"Retrieve the full workflow definition at the time the version was saved. The version is read-only — restore it if you want the workflow to point back at it.","operationId":"get_workflow_versions_version_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/versions/{version_id}/restore":{"post":{"tags":["Workflows"],"summary":"Restore workflow to version","description":"Set the workflow's active definition to a previous version. Creates a new version pointer rather than mutating history, so subsequent rollbacks are still possible.","operationId":"post_workflow_versions_version_id_restore","security":[{"HTTPBearer":[]}],"parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionRestoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{workflow_id}":{"post":{"tags":["Webhooks","Webhooks"],"summary":"Trigger a workflow via webhook","description":"Public endpoint to trigger a workflow execution.\n\n    ## Authentication\n\n    Authentication is done via HMAC-SHA256 signature, NOT JWT tokens.\n    This allows external services to call this endpoint.\n\n    ### Required Headers\n\n    - `X-Webhook-Signature`: `sha256=HMAC(secret, timestamp.body)`\n    - `X-Webhook-Timestamp`: Unix timestamp (seconds)\n    - `Content-Type`: `application/json`\n\n    ### Optional Headers\n\n    - `X-Webhook-Id`: Unique request ID for idempotency tracking\n\n    ### Signature Calculation\n\n    ```python\n    import hmac\n    import hashlib\n    import time\n\n    timestamp = str(int(time.time()))\n    body = '{\"event\": \"test\", \"data\": {}}'\n    message = f\"{timestamp}.{body}\"\n\n    signature = hmac.new(\n        webhook_secret.encode(),\n        message.encode(),\n        hashlib.sha256\n    ).hexdigest()\n\n    headers = {\n        \"X-Webhook-Signature\": f\"sha256={signature}\",\n        \"X-Webhook-Timestamp\": timestamp,\n        \"Content-Type\": \"application/json\"\n    }\n    ```\n\n    ### Security\n\n    - Timestamp must be recent (< 5 minutes) to prevent replay attacks\n    - Signature must match the workflow's configured secret\n    - All requests are logged for audit trail\n    - Rate limiting applies (default: 60/min, 1000/hour per workflow)","operationId":"post_webhooks_workflow_id","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Workflow execution started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTriggerResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookErrorResponse"}}}},"401":{"description":"Authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookErrorResponse"}}}},"404":{"description":"Workflow not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl + openssl","source":"TS=$(date +%s)\nBODY='{\"event\": \"order.created\", \"data\": {}}'\nSIG=$(printf \"%s.%s\" \"$TS\" \"$BODY\" \\\n  | openssl dgst -sha256 -hmac \"$WEBHOOK_SECRET\" \\\n  | sed 's/^.* //')\ncurl -X POST https://api.superfasttt.ai/api/v1/webhooks/$WORKFLOW_ID \\\n  -H \"X-Webhook-Signature: sha256=$SIG\" \\\n  -H \"X-Webhook-Timestamp: $TS\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"$BODY\""},{"lang":"TypeScript","label":"node:crypto","source":"import { createHmac } from \"node:crypto\";\nconst ts = Math.floor(Date.now() / 1000).toString();\nconst body = JSON.stringify({ event: \"order.created\", data: {} });\nconst sig = createHmac(\"sha256\", webhookSecret)\n  .update(`${ts}.${body}`).digest(\"hex\");\nawait fetch(`https://api.superfasttt.ai/api/v1/webhooks/${workflowId}`, {\n  method: \"POST\",\n  headers: {\n    \"X-Webhook-Signature\": `sha256=${sig}`,\n    \"X-Webhook-Timestamp\": ts,\n    \"Content-Type\": \"application/json\",\n  },\n  body,\n});"},{"lang":"Python","label":"hmac + httpx","source":"import hmac, hashlib, json, time, httpx\nts = str(int(time.time()))\nbody = json.dumps({\"event\": \"order.created\", \"data\": {}})\nsig = hmac.new(\n    webhook_secret.encode(), f\"{ts}.{body}\".encode(),\n    hashlib.sha256,\n).hexdigest()\nhttpx.post(\n    f\"https://api.superfasttt.ai/api/v1/webhooks/{workflow_id}\",\n    headers={\n        \"X-Webhook-Signature\": f\"sha256={sig}\",\n        \"X-Webhook-Timestamp\": ts,\n        \"Content-Type\": \"application/json\",\n    },\n    content=body,\n)"}]}},"/api/v1/webhooks/{workflow_id}/test":{"get":{"tags":["Webhooks","Webhooks"],"summary":"Test webhook endpoint (GET)","description":"Simple GET endpoint to verify the webhook URL is reachable. Does not trigger execution.","operationId":"get_webhooks_workflow_id_test","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-secret":{"post":{"tags":["Webhooks"],"summary":"Create a webhook secret","description":"Create a new webhook secret for a workflow.\n\n    **IMPORTANT**: The `secret` field in the response is only shown ONCE.\n    Store it securely - it cannot be retrieved later.\n\n    The secret format is: `whsec_{random_43_chars}`","operationId":"post_workflow_workflow_id_webhook_secret","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-secrets":{"get":{"tags":["Webhooks"],"summary":"List webhook secrets","description":"List all webhook secrets for a workflow (without the actual secrets).","operationId":"get_workflow_workflow_id_webhook_secrets","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include revoked secrets","default":false,"title":"Include Inactive"},"description":"Include revoked secrets"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSecretResponse"},"title":"Response Get Workflow Workflow Id Webhook Secrets"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-secret/{secret_id}":{"delete":{"tags":["Webhooks"],"summary":"Revoke a webhook secret","description":"Revoke (deactivate) a webhook secret. It can no longer be used for authentication.","operationId":"delete_workflow_workflow_id_webhook_secret_secret_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"secret_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Secret Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-secret/{secret_id}/rotate":{"post":{"tags":["Webhooks"],"summary":"Rotate a webhook secret","description":"Rotate a webhook secret by revoking the old one and creating a new one.\n\n    The new secret inherits the name from the old one.\n    **IMPORTANT**: The new secret is only shown once!","operationId":"post_workflow_workflow_id_webhook_secret_secret_id_rotate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"secret_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Secret Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-logs":{"get":{"tags":["Webhooks"],"summary":"Get webhook request logs","description":"Get audit log of webhook requests for a workflow.","operationId":"get_workflow_workflow_id_webhook_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"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":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (e.g., 'success', 'invalid_signature')","title":"Status Filter"},"description":"Filter by status (e.g., 'success', 'invalid_signature')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookLogsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/{workflow_id}/webhook-config":{"get":{"tags":["Webhooks"],"summary":"Get webhook configuration","description":"Get current webhook configuration for a workflow.","operationId":"get_workflow_workflow_id_webhook_config","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"host","in":"query","required":false,"schema":{"type":"string","description":"Request host for URL generation","title":"Host"},"description":"Request host for URL generation"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Webhooks"],"summary":"Update webhook configuration","description":"Update webhook configuration (rate limits, enable/disable).","operationId":"put_workflow_workflow_id_webhook_config","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workflow/favorites":{"get":{"tags":["Form Favorites"],"summary":"List my form favorites","description":"List favorites. Returns the resource scoped to the current tenant.","operationId":"get_workflow_favorites","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/FormFavoriteResponse"},"type":"array","title":"Response Get Workflow Favorites"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Form Favorites"],"summary":"Add form favorite","description":"Add favorite. Creates the resource scoped to the current tenant.","operationId":"post_workflow_favorites","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormFavoriteCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormFavoriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/workflow/favorites/{favorite_id}":{"delete":{"tags":["Form Favorites"],"summary":"Remove form favorite","description":"Remove favorite. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_workflow_favorites_favorite_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/{task_id}/status":{"get":{"tags":["Tasks"],"summary":"Get task status","description":"Get the current status of a Celery task by its ID. Use this for polling task progress.","operationId":"get_tasks_task_id_status","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tasks/{task_id}":{"get":{"tags":["Tasks"],"summary":"Get task details","description":"Alias for /status - get task status by ID.","operationId":"get_tasks_task_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts":{"get":{"tags":["Prompts"],"summary":"List prompts","description":"List prompts. Returns the resource scoped to the current tenant.","operationId":"get_prompts","security":[{"HTTPBearer":[]}],"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":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in title, description, content","title":"Search"},"description":"Search in title, description, content"},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"}},{"name":"visibility","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(platform|tenant|user)$"},{"type":"null"}],"title":"Visibility"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(created_at|usage_count|title)$"},{"type":"null"}],"default":"created_at","title":"Sort By"}},{"name":"created_by_me","in":"query","required":false,"schema":{"type":"boolean","description":"Filter to only prompts created by the current user","default":false,"title":"Created By Me"},"description":"Filter to only prompts created by the current user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PromptResponse"},"title":"Response Get Prompts"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Prompts"],"summary":"Create prompt","description":"Create prompt. Creates the resource scoped to the current tenant.","operationId":"post_prompts","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/{prompt_id}":{"get":{"tags":["Prompts"],"summary":"Get prompt detail","description":"Get prompt. Returns the resource scoped to the current tenant.","operationId":"get_prompts_prompt_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Prompts"],"summary":"Update prompt","description":"Update prompt. Replaces the resource. Idempotent.","operationId":"put_prompts_prompt_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Prompts"],"summary":"Delete prompt","description":"Delete prompt. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_prompts_prompt_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/{prompt_id}/copy":{"post":{"tags":["Prompts"],"summary":"Copy prompt (increment usage)","description":"Create copy prompt. Creates the resource scoped to the current tenant.","operationId":"post_prompts_prompt_id_copy","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Prompt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompt-sequences":{"get":{"tags":["Prompts"],"summary":"List sequences","description":"List sequences. Returns the resource scoped to the current tenant.","operationId":"get_prompt_sequences","security":[{"HTTPBearer":[]}],"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":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"}},{"name":"visibility","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(platform|tenant|user)$"},{"type":"null"}],"title":"Visibility"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(created_at|usage_count|title)$"},{"type":"null"}],"default":"created_at","title":"Sort By"}},{"name":"created_by_me","in":"query","required":false,"schema":{"type":"boolean","description":"Filter to only sequences created by the current user","default":false,"title":"Created By Me"},"description":"Filter to only sequences created by the current user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PromptSequenceResponse"},"title":"Response Get Prompt Sequences"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Prompts"],"summary":"Create sequence","description":"Create sequence. Creates the resource scoped to the current tenant.","operationId":"post_prompt_sequences","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptSequenceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptSequenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompt-sequences/{sequence_id}":{"get":{"tags":["Prompts"],"summary":"Get sequence detail","description":"Get sequence. Returns the resource scoped to the current tenant.","operationId":"get_prompt_sequences_sequence_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptSequenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Prompts"],"summary":"Update sequence","description":"Update sequence. Replaces the resource. Idempotent.","operationId":"put_prompt_sequences_sequence_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptSequenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptSequenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Prompts"],"summary":"Delete sequence","description":"Delete sequence. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_prompt_sequences_sequence_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sequence Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompt-categories":{"get":{"tags":["Prompts"],"summary":"List categories","description":"List categories. Returns the resource scoped to the current tenant.","operationId":"get_prompt_categories","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PromptCategoryResponse"},"type":"array","title":"Response Get Prompt Categories"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Prompts"],"summary":"Create category","description":"Create category. Creates the resource scoped to the current tenant.","operationId":"post_prompt_categories","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCategoryCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/prompt-categories/{category_id}":{"put":{"tags":["Prompts"],"summary":"Update category","description":"Update category. Replaces the resource. Idempotent.","operationId":"put_prompt_categories_category_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCategoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Prompts"],"summary":"Delete category","description":"Delete category. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_prompt_categories_category_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Category Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompt-favorites":{"get":{"tags":["Prompts"],"summary":"List my favorites","description":"List favorites. Returns the resource scoped to the current tenant.","operationId":"get_prompt_favorites","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PromptFavoriteResponse"},"type":"array","title":"Response Get Prompt Favorites"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Prompts"],"summary":"Add favorite","description":"Add favorite. Creates the resource scoped to the current tenant.","operationId":"post_prompt_favorites","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptFavoriteCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptFavoriteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/prompt-favorites/{favorite_id}":{"delete":{"tags":["Prompts"],"summary":"Remove favorite","description":"Remove favorite. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_prompt_favorites_favorite_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"favorite_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Favorite Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/apps/":{"get":{"tags":["Apps"],"summary":"Get tenant apps","description":"Get tenant apps. Returns the resource scoped to the current tenant.","operationId":"get_apps","security":[{"HTTPBearer":[]}],"parameters":[{"name":"client","in":"query","required":false,"schema":{"type":"string","description":"Client type: 'web' or 'desktop'","default":"web","title":"Client"},"description":"Client type: 'web' or 'desktop'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantAppsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/apps/admin":{"get":{"tags":["Apps"],"summary":"Get all apps admin","description":"Get all apps admin. Returns the resource scoped to the current tenant.","operationId":"get_apps_admin","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminAppsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/apps/{app_id}":{"put":{"tags":["Apps"],"summary":"Replace toggle app","description":"Replace toggle app. Replaces the resource. Idempotent.","operationId":"put_apps_app_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppToggleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppConfig"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/manifests/validate":{"post":{"tags":["App Platform"],"summary":"Validate an app manifest","description":"Valide un manifest sans rien écrire. Retourne errors/warnings lisibles.","operationId":"post_app_platform_manifests_validate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateManifestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestValidationReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/app-platform/manifests/import":{"post":{"tags":["App Platform"],"summary":"Import an app manifest","description":"Valide puis upsert le manifest dans le schéma tenant + crée un snapshot version.\n\n- 422 si le manifest est invalide (rapport complet en detail).\n- 409 si l'id correspond à une app first-party (jamais écraser une app interne).","operationId":"post_app_platform_manifests_import","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportManifestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportManifestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/app-platform/apps/{app_id}/install":{"post":{"tags":["App Platform Data"],"summary":"Install a third-party app on the current tenant","description":"Installe une app tierce : pin la version, snapshot granted_permissions et collections.\nIdempotent : une ré-installation met à jour le snapshot.","operationId":"post_app_platform_apps_app_id_install","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/data/{collection}":{"get":{"tags":["App Platform Data"],"summary":"List records in a collection","operationId":"get_app_platform_apps_app_id_data_collection","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"-updated_at","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_data__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["App Platform Data"],"summary":"Create a record in a collection","operationId":"post_app_platform_apps_app_id_data_collection","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/data/{collection}/query":{"post":{"tags":["App Platform Data"],"summary":"List records with body filters","operationId":"post_app_platform_apps_app_id_data_collection_query","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_data__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/data/{collection}/{record_id}":{"get":{"tags":["App Platform Data"],"summary":"Get a single record","operationId":"get_app_platform_apps_app_id_data_collection_record_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["App Platform Data"],"summary":"Update a record","operationId":"patch_app_platform_apps_app_id_data_collection_record_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Data"],"summary":"Soft-delete a record","operationId":"delete_app_platform_apps_app_id_data_collection_record_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/rich-documents":{"get":{"tags":["App Platform Rich Documents"],"summary":"List rich documents","operationId":"get_app_platform_apps_app_id_rich_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"collection","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection"}},{"name":"parent_record_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Record Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_rich_document__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["App Platform Rich Documents"],"summary":"Create a rich document","operationId":"post_app_platform_apps_app_id_rich_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/rich-documents/{doc_id}":{"get":{"tags":["App Platform Rich Documents"],"summary":"Get a rich document","operationId":"get_app_platform_apps_app_id_rich_documents_doc_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["App Platform Rich Documents"],"summary":"Update a rich document","operationId":"patch_app_platform_apps_app_id_rich_documents_doc_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Rich Documents"],"summary":"Soft-delete a rich document","operationId":"delete_app_platform_apps_app_id_rich_documents_doc_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/rich-documents/{doc_id}/versions":{"post":{"tags":["App Platform Rich Documents"],"summary":"Create a manual version snapshot","operationId":"post_app_platform_apps_app_id_rich_documents_doc_id_versions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["App Platform Rich Documents"],"summary":"List versions of a rich document","operationId":"get_app_platform_apps_app_id_rich_documents_doc_id_versions","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VersionOut"},"title":"Response Get App Platform Apps App Id Rich Documents Doc Id Versions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/rich-documents/{doc_id}/restore-version":{"post":{"tags":["App Platform Rich Documents"],"summary":"Restore a previous version as the current document state","operationId":"post_app_platform_apps_app_id_rich_documents_doc_id_restore_version","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/upload-url":{"post":{"tags":["App Platform Assets"],"summary":"Request a presigned PUT URL for direct S3 upload","operationId":"post_app_platform_apps_app_id_assets_upload_url","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/complete":{"post":{"tags":["App Platform Assets"],"summary":"Mark an asset upload as complete after direct S3 PUT","operationId":"post_app_platform_apps_app_id_assets_complete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets":{"get":{"tags":["App Platform Assets"],"summary":"List assets for an app installation","operationId":"get_app_platform_apps_app_id_assets","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"purpose","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"include_pending","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Pending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_asset__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/{asset_id}":{"get":{"tags":["App Platform Assets"],"summary":"Get a single asset by ID","operationId":"get_app_platform_apps_app_id_assets_asset_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Assets"],"summary":"Soft-delete an asset (hard-deletes its links)","operationId":"delete_app_platform_apps_app_id_assets_asset_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/{asset_id}/download-url":{"post":{"tags":["App Platform Assets"],"summary":"Request a presigned GET URL for asset download","operationId":"post_app_platform_apps_app_id_assets_asset_id_download_url","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/{asset_id}/links":{"post":{"tags":["App Platform Assets"],"summary":"Link an asset to a parent record or rich document","operationId":"post_app_platform_apps_app_id_assets_asset_id_links","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/assets/{asset_id}/links/{link_id}":{"delete":{"tags":["App Platform Assets"],"summary":"Remove an asset link","operationId":"delete_app_platform_apps_app_id_assets_asset_id_links_link_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/apps/{app_id}/launch-token":{"post":{"tags":["App Platform Runtime"],"summary":"Create a one-time launch token for an external app","operationId":"post_app_platform_apps_app_id_launch_token","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-platform/runtime/exchange":{"post":{"tags":["App Platform Runtime"],"summary":"Exchange a launch token for a short-lived app access token","operationId":"post_app_platform_runtime_exchange","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-data/{collection}":{"get":{"tags":["App Platform Data (token)"],"summary":"List records (app token)","operationId":"get_app_data_collection","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"-updated_at","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_data__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["App Platform Data (token)"],"summary":"Create a record (app token)","operationId":"post_app_data_collection","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-data/{collection}/query":{"post":{"tags":["App Platform Data (token)"],"summary":"List records with body filters (app token)","operationId":"post_app_data_collection_query","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_data__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-data/{collection}/{record_id}":{"get":{"tags":["App Platform Data (token)"],"summary":"Get a single record (app token)","operationId":"get_app_data_collection_record_id","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["App Platform Data (token)"],"summary":"Update a record (app token)","operationId":"patch_app_data_collection_record_id","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Data (token)"],"summary":"Soft-delete a record (app token)","operationId":"delete_app_data_collection_record_id","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","title":"Collection"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Record Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rich-documents":{"get":{"tags":["App Platform Rich Documents (token)"],"summary":"List rich documents (app token)","operationId":"get_rich_documents","parameters":[{"name":"collection","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection"}},{"name":"parent_record_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Record Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_rich_document__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["App Platform Rich Documents (token)"],"summary":"Create a rich document (app token)","operationId":"post_rich_documents","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rich-documents/{doc_id}":{"get":{"tags":["App Platform Rich Documents (token)"],"summary":"Get a rich document (app token)","operationId":"get_rich_documents_doc_id","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["App Platform Rich Documents (token)"],"summary":"Update a rich document (app token)","operationId":"patch_rich_documents_doc_id","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Rich Documents (token)"],"summary":"Soft-delete a rich document (app token)","operationId":"delete_rich_documents_doc_id","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rich-documents/{doc_id}/versions":{"post":{"tags":["App Platform Rich Documents (token)"],"summary":"Create a manual version snapshot (app token)","operationId":"post_rich_documents_doc_id_versions","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["App Platform Rich Documents (token)"],"summary":"List versions of a rich document (app token)","operationId":"get_rich_documents_doc_id_versions","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VersionOut"},"title":"Response Get Rich Documents Doc Id Versions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rich-documents/{doc_id}/restore-version":{"post":{"tags":["App Platform Rich Documents (token)"],"summary":"Restore a previous version (app token)","operationId":"post_rich_documents_doc_id_restore_version","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RichDocOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/upload-url":{"post":{"tags":["App Platform Assets (token)"],"summary":"Request presigned PUT URL (app token)","operationId":"post_app_assets_upload_url","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/complete":{"post":{"tags":["App Platform Assets (token)"],"summary":"Mark asset upload complete (app token)","operationId":"post_app_assets_complete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets":{"get":{"tags":["App Platform Assets (token)"],"summary":"List assets (app token)","operationId":"get_app_assets","parameters":[{"name":"purpose","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"}},{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"include_pending","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Pending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__app_asset__ListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/{asset_id}":{"get":{"tags":["App Platform Assets (token)"],"summary":"Get a single asset (app token)","operationId":"get_app_assets_asset_id","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["App Platform Assets (token)"],"summary":"Soft-delete an asset (app token)","operationId":"delete_app_assets_asset_id","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/{asset_id}/download-url":{"post":{"tags":["App Platform Assets (token)"],"summary":"Request presigned download URL (app token)","operationId":"post_app_assets_asset_id_download_url","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/{asset_id}/links":{"post":{"tags":["App Platform Assets (token)"],"summary":"Link an asset to a parent record (app token)","operationId":"post_app_assets_asset_id_links","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/app-assets/{asset_id}/links/{link_id}":{"delete":{"tags":["App Platform Assets (token)"],"summary":"Remove an asset link (app token)","operationId":"delete_app_assets_asset_id_links_link_id","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shares/{resource_type}/{resource_id}/shares":{"post":{"tags":["Sharing"],"summary":"Share a resource","description":"Share a resource with a user or team.\n\n**Resource Types:** memories, workflows, projects, meetings, documents\n\n**Permissions (hierarchical):**\n- `view`: Read-only access\n- `comment`: Can view and add comments\n- `edit`: Can modify the resource\n- `admin`: Full control, can re-share\n\n**Requirements:**\n- Must have access to the resource (owner or admin permission)","operationId":"post_shares_resource_type_resource_id_shares","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","description":"Resource type (memories, workflows, projects, meetings, documents)","title":"Resource Type"},"description":"Resource type (memories, workflows, projects, meetings, documents)"},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Resource UUID","title":"Resource Id"},"description":"Resource UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Sharing"],"summary":"List shares for a resource","description":"Get all shares for a specific resource.","operationId":"get_shares_resource_type_resource_id_shares","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","description":"Resource type","title":"Resource Type"},"description":"Resource type"},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Resource UUID","title":"Resource Id"},"description":"Resource UUID"},{"name":"include_revoked","in":"query","required":false,"schema":{"type":"boolean","description":"Include revoked shares","default":false,"title":"Include Revoked"},"description":"Include revoked shares"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shares/{resource_type}/{resource_id}/shares/{share_id}":{"patch":{"tags":["Sharing"],"summary":"Update a share","description":"Update permission level or expiration of a share.","operationId":"patch_shares_resource_type_resource_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","description":"Resource type","title":"Resource Type"},"description":"Resource type"},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Resource UUID","title":"Resource Id"},"description":"Resource UUID"},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Share UUID","title":"Share Id"},"description":"Share UUID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateShareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Sharing"],"summary":"Revoke a share","description":"Soft-revoke a share. The share record is kept for audit purposes.","operationId":"delete_shares_resource_type_resource_id_shares_share_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","description":"Resource type","title":"Resource Type"},"description":"Resource type"},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Resource UUID","title":"Resource Id"},"description":"Resource UUID"},{"name":"share_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Share UUID","title":"Share Id"},"description":"Share UUID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shares/shared-with-me":{"get":{"tags":["Sharing"],"summary":"List resources shared with me","description":"Get all resources that have been shared with the current user (directly or via team).","operationId":"get_shares_shared_with_me","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by resource type (memories, workflows, etc.)","title":"Resource Type"},"description":"Filter by resource type (memories, workflows, etc.)"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Skip"},"description":"Pagination offset"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Pagination limit","default":50,"title":"Limit"},"description":"Pagination limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedResourcesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/shares/{resource_type}/{resource_id}/permission":{"get":{"tags":["Sharing"],"summary":"Get my permission on a resource","description":"Check what permission level the current user has on a specific resource.","operationId":"get_shares_resource_type_resource_id_permission","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","description":"Resource type","title":"Resource Type"},"description":"Resource type"},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Resource UUID","title":"Resource Id"},"description":"Resource UUID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyPermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications":{"get":{"tags":["Notifications"],"summary":"Get Notifications","description":"Recupere les notifications pour l'utilisateur courant.\n\nRetourne les notifications:\n- De l'utilisateur specifique (user_id match)\n- Globales du tenant (user_id = None)\n\nArgs:\n    unread_only: Si True, ne retourne que les non lues\n    notification_type: Filtrer par type (budget_warning, budget_exceeded, rate_limit, system)\n    limit: Nombre max de notifications a retourner\n    offset: Offset pour pagination\n\nReturns:\n    Liste des notifications avec compteurs","operationId":"get_notifications","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","description":"Ne retourner que les non lues","default":false,"title":"Unread Only"},"description":"Ne retourner que les non lues"},{"name":"notification_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrer par type","title":"Notification Type"},"description":"Filtrer par type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Nombre max de notifications","default":20,"title":"Limit"},"description":"Nombre max de notifications"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset pour pagination","default":0,"title":"Offset"},"description":"Offset pour pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications/mark-read":{"post":{"tags":["Notifications"],"summary":"Mark Notifications Read","description":"Marque des notifications comme lues.\n\nArgs:\n    request: Liste des IDs de notifications a marquer comme lues\n\nReturns:\n    Nombre de notifications mises a jour","operationId":"post_notifications_mark_read","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkReadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkReadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/mark-all-read":{"post":{"tags":["Notifications"],"summary":"Mark All Notifications Read","description":"Marque toutes les notifications de l'utilisateur comme lues.\n\nReturns:\n    Nombre de notifications mises a jour","operationId":"post_notifications_mark_all_read","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkReadResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/notifications/unread-count":{"get":{"tags":["Notifications"],"summary":"Get Unread Count","description":"Recupere le nombre de notifications non lues.\n\nUtile pour afficher un badge dans l'UI.\n\nReturns:\n    Compteur de notifications non lues","operationId":"get_notifications_unread_count","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/api-keys/":{"post":{"tags":["API Keys"],"summary":"Create an API key","description":"Create a new tenant-scoped API key (`sk-...`) for backend-to-backend integrations.\n\n    The full secret (`key_secret`) is returned **once** in the response;\n    SUPERFASTTT only stores its hash. Persist it in your secret manager\n    immediately — there is no recovery flow.\n\n    Required permission: `admin` or `*:write`.","operationId":"post_api_keys","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyWithSecret"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/api-keys/ \\\n  -H \"Authorization: Bearer $JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"Tourinsoft sync\",\n    \"scopes\": [\"documents:ingest\", \"knowledge_bases:read\"],\n    \"expires_at\": \"2027-12-31T23:59:59Z\"\n  }'"},{"lang":"TypeScript","label":"@superfasttt/sdk","source":"import { createClient } from \"@superfasttt/sdk/api\";\nconst api = createClient(authFetch);\nconst { key_secret } = await api.apiKeys.create({\n  name: \"Tourinsoft sync\",\n  scopes: [\"documents:ingest\", \"knowledge_bases:read\"],\n  expires_at: \"2027-12-31T23:59:59Z\",\n});\n// Store key_secret in your secret manager — it won't be shown again."},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/api-keys/\",\n    headers={\"Authorization\": f\"Bearer {jwt}\"},\n    json={\n        \"name\": \"Tourinsoft sync\",\n        \"scopes\": [\"documents:ingest\", \"knowledge_bases:read\"],\n        \"expires_at\": \"2027-12-31T23:59:59Z\",\n    },\n)\nkey_secret = r.json()[\"key_secret\"]"}]},"get":{"tags":["API Keys"],"summary":"Lister les API Keys","description":"Lister toutes les clés API pour un tenant donné.\n\n    Supporte pagination et filtres:\n    - Par statut (actives/inactives)\n    - Par recherche de nom\n    - Tri par date de création ou dernière utilisation","operationId":"get_api_keys","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Taille de la page","default":20,"title":"Page Size"},"description":"Taille de la page"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filtrer par statut actif","title":"Is Active"},"description":"Filtrer par statut actif"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Rechercher dans le nom","title":"Search"},"description":"Rechercher dans le nom"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filtrer par utilisateur","title":"User Id"},"description":"Filtrer par utilisateur"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}":{"get":{"tags":["API Keys"],"summary":"Obtenir une API Key par ID","description":"Get details of a specific API key (secret value is never returned).","operationId":"get_api_keys_api_key_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["API Keys"],"summary":"Update an API key","description":"Mettre à jour les informations d'une clé API.\n\n    ⚠️ Le secret de la clé ne peut pas être modifié.\n    Pour changer le secret, il faut créer une nouvelle clé et révoquer l'ancienne.","operationId":"put_api_keys_api_key_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["API Keys"],"summary":"Supprimer une API Key","description":"Supprimer définitivement une clé API.\n\n    ⚠️ ATTENTION: Cette action est irréversible.\n    Préférez la révocation pour conserver l'historique.","operationId":"delete_api_keys_api_key_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/revoke":{"post":{"tags":["API Keys"],"summary":"Revoke an API key","description":"Révoquer (désactiver) une clé API.\n\n    La clé ne pourra plus être utilisée pour l'authentification,\n    mais reste visible dans l'historique pour l'audit.","operationId":"post_api_keys_api_key_id_revoke","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/APIKeyRevoke"},{"type":"null"}],"title":"Revoke Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/api-keys/{api_key_id}/revoke \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"reason\":\"Rotation Q1 2027\"}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/api-keys/{api_key_id}/revoke\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ reason: \"Rotation Q1 2027\" })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/api-keys/{api_key_id}/revoke\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"reason\":\"Rotation Q1 2027\"})\nprint(r.json())"}]}},"/api/v1/api-keys/{api_key_id}/stats":{"get":{"tags":["API Keys"],"summary":"Statistiques d'utilisation","description":"Get usage statistics for an API key.","operationId":"get_api_keys_api_key_id_stats","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyUsageStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{api_key_id}/logs":{"get":{"tags":["API Keys"],"summary":"Logs d'audit d'une API Key","description":"Obtenir l'historique complet des logs d'audit pour une clé API.\n\n    Retourne tous les événements liés à cette clé :\n    - Création, modification, révocation, suppression\n    - Tentatives d'authentification (succès et échecs)\n    - Utilisation de la clé\n    - Refus de permissions\n\n    Supporte pagination et filtres par action et date.","operationId":"get_api_keys_api_key_id_logs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Taille de la page","default":20,"title":"Page Size"},"description":"Taille de la page"},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filtrer par action (ex: api_key.created)","title":"Action"},"description":"Filtrer par action (ex: api_key.created)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mfa/setup":{"post":{"tags":["MFA"],"summary":"Create setup mfa","description":"Create setup mfa. Creates the resource scoped to the current tenant.","operationId":"post_mfa_setup","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFASetupResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mfa/enable":{"post":{"tags":["MFA"],"summary":"Enable mfa","description":"Enable mfa. Creates the resource scoped to the current tenant.","operationId":"post_mfa_enable","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAEnableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mfa/disable":{"post":{"tags":["MFA"],"summary":"Disable mfa","description":"Disable mfa. Creates the resource scoped to the current tenant.","operationId":"post_mfa_disable","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/user/budget-status":{"get":{"tags":["Budget"],"summary":"Get budget status","description":"Get budget status. Returns the resource scoped to the current tenant.","operationId":"get_user_budget_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BudgetStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/events/track":{"post":{"tags":["Events"],"summary":"Create track event","description":"Create track event. Creates the resource scoped to the current tenant.","operationId":"post_events_track","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackEventRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/overview":{"get":{"tags":["Stats"],"summary":"Get stats overview","description":"Get stats overview. Returns the resource scoped to the current tenant.","operationId":"get_stats_overview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"7d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/by-app":{"get":{"tags":["Stats"],"summary":"Get stats by app","description":"Get stats by app. Returns the resource scoped to the current tenant.","operationId":"get_stats_by_app","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"30d","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppCount"},"title":"Response Get Stats By App"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/by-user":{"get":{"tags":["Stats"],"summary":"Get stats by user","description":"Get stats by user. Returns the resource scoped to the current tenant.","operationId":"get_stats_by_user","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"7d","title":"Period"}},{"name":"app","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserCount"},"title":"Response Get Stats By User"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/by-team":{"get":{"tags":["Stats"],"summary":"Get stats by team","description":"Get stats by team. Returns the resource scoped to the current tenant.","operationId":"get_stats_by_team","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"30d","title":"Period"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamCount"},"title":"Response Get Stats By Team"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/timeseries":{"get":{"tags":["Stats"],"summary":"Get stats timeseries","description":"Get stats timeseries. Returns the resource scoped to the current tenant.","operationId":"get_stats_timeseries","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"30d","title":"Period"}},{"name":"app","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TimeseriesPoint"},"title":"Response Get Stats Timeseries"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/events":{"get":{"tags":["Stats"],"summary":"Get stats events","description":"Get stats events. Returns the resource scoped to the current tenant.","operationId":"get_stats_events","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"enum":["24h","7d","30d","90d"],"type":"string","default":"7d","title":"Period"}},{"name":"app","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats/events/{event_id}":{"get":{"tags":["Stats"],"summary":"Get stats event detail","description":"Get stats event detail. Returns the resource scoped to the current tenant.","operationId":"get_stats_events_event_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"include_attributes","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Attributes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/":{"get":{"tags":["Integrations"],"summary":"List integrations","description":"List integrations. Returns the resource scoped to the current tenant.","operationId":"get_integrations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationType"},{"type":"null"}],"title":"Integration Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationStatus"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"},"title":"Response Get Integrations"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/integrations/ \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/integrations/\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/integrations/\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]},"post":{"tags":["Integrations"],"summary":"Create integration","description":"Create integration. Creates the resource scoped to the current tenant.","operationId":"post_integrations","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}":{"get":{"tags":["Integrations"],"summary":"Get integration","description":"Get integration. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Integrations"],"summary":"Update integration","description":"Update integration. Replaces the resource. Idempotent.","operationId":"put_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Integrations"],"summary":"Delete integration","description":"Delete integration. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_integrations_integration_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/connect":{"post":{"tags":["Integrations"],"summary":"Create connect integration","description":"Create connect integration. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_connect","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokens"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/disconnect":{"post":{"tags":["Integrations"],"summary":"Create disconnect integration","description":"Create disconnect integration. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_disconnect","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sync":{"post":{"tags":["Integrations"],"summary":"Trigger sync","description":"Trigger sync. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_sync","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"force_full","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Full"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/integrations/{integration_id}/sync \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"force\":false}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/integrations/{integration_id}/sync\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ force: false })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/integrations/{integration_id}/sync\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"force\":false})\nprint(r.json())"}]}},"/api/v1/integrations/{integration_id}/syncs":{"get":{"tags":["Integrations"],"summary":"List syncs","description":"List syncs. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_syncs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationSyncResponse"},"title":"Response Get Integrations Integration Id Syncs"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/syncs/{sync_id}":{"get":{"tags":["Integrations"],"summary":"Get sync","description":"Get sync. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_syncs_sync_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"sync_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Sync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/documents":{"get":{"tags":["Integrations"],"summary":"List documents","description":"List documents. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_documents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/IntegrationDocStatus"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationDocumentResponse"},"title":"Response Get Integrations Integration Id Documents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/documents/stats":{"get":{"tags":["Integrations"],"summary":"Get document stats","description":"Get document stats. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_documents_stats","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/pause":{"post":{"tags":["Integrations"],"summary":"Create pause integration","description":"Create pause integration. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_pause","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/resume":{"post":{"tags":["Integrations"],"summary":"Create resume integration","description":"Create resume integration. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_resume","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sharepoint/sites":{"get":{"tags":["Integrations"],"summary":"List sharepoint sites","description":"List sharepoint sites. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_sharepoint_sites","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"*","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SharePointSiteResponse"},"title":"Response Get Integrations Integration Id Sharepoint Sites"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sharepoint/sites/{site_id}/drives":{"get":{"tags":["Integrations"],"summary":"List sharepoint drives","description":"List sharepoint drives. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_sharepoint_sites_site_id_drives","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SharePointDriveResponse"},"title":"Response Get Integrations Integration Id Sharepoint Sites Site Id Drives"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sharepoint/browse":{"get":{"tags":["Integrations"],"summary":"Get browse sharepoint folder","description":"Get browse sharepoint folder. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_sharepoint_browse","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}},{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"drive_id","in":"query","required":true,"schema":{"type":"string","title":"Drive Id"}},{"name":"folder_path","in":"query","required":false,"schema":{"type":"string","default":"root","title":"Folder Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharePointBrowseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sharepoint/auto-connect":{"post":{"tags":["Integrations"],"summary":"Create auto connect sharepoint","description":"Create auto connect sharepoint. Creates the resource scoped to the current tenant.","operationId":"post_integrations_integration_id_sharepoint_auto_connect","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__integrations__IntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/sharepoint/test":{"get":{"tags":["Integrations"],"summary":"Test sharepoint connection","description":"Test sharepoint connection. Returns the resource scoped to the current tenant.","operationId":"get_integrations_integration_id_sharepoint_test","security":[{"HTTPBearer":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Integrations Integration Id Sharepoint Test"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/documents/upsert":{"post":{"tags":["External Sync"],"summary":"Upsert document by external ID","description":"Idempotent upsert keyed by `(connector_id, external_id)` — the primary entry point for external sync services (Tourinsoft, WordPress, custom CRM). If a document with the same external id already exists, its content is replaced and re-indexed; otherwise a new document is created. Requires API key scope `documents:ingest`. Pair with `POST /documents/delete` for removals.","operationId":"post_integrations_documents_upsert","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUpsertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUpsertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/integrations/documents/delete":{"post":{"tags":["External Sync"],"summary":"Delete document by external ID","description":"Remove a document previously upserted by `(connector_id, external_id)`. Hard delete: chunks + vector entries are purged. Returns 200 even if the document didn't exist (so the external sync service can replay safely). Requires API key scope `documents:ingest`.","operationId":"post_integrations_documents_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/integrations/connectors/{connector_id}/jobs":{"get":{"tags":["External Sync"],"summary":"List sync jobs for a connector","description":"Audit history of sync jobs reported by an external connector. Each job carries the connector-side run id, the period covered and the count of upserts / deletes — useful for monitoring ingestion pipelines without leaving the SUPERFASTTT admin.","operationId":"get_integrations_connectors_connector_id_jobs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connector Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyncJobResponse"},"title":"Response Get Integrations Connectors Connector Id Jobs"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["External Sync"],"summary":"Report sync job status","description":"Open a new sync job for the connector — typically called at the start of an external sync run. Pair with `PATCH .../jobs/{job_id}` to update status (`running` → `completed` / `failed`) and counts when the run finishes.","operationId":"post_integrations_connectors_connector_id_jobs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncJobCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/connectors/{connector_id}/jobs/{job_id}":{"patch":{"tags":["External Sync"],"summary":"Update sync job status","description":"Patch an in-flight sync job — typically called at the end of an external sync run with the final status, the upsert/delete counts and any error message. Idempotent: re-sending the same completion payload is safe.","operationId":"patch_integrations_connectors_connector_id_jobs_job_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connector Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncJobUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncJobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/meeting-bots/dispatch":{"post":{"tags":["Meeting Bots"],"summary":"Launch a Vexa meeting bot for the current tenant","description":"Provisions the tenant's Vexa user on first use, mints a tenant-scoped transcribe JWT, and POSTs the bot to Vexa's api-gateway. Bot will join, transcribe (BYOK), and notify us via the ``meeting.completed`` webhook when it's done.","operationId":"post_meeting_bots_dispatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchBotRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispatchBotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/calendar/connections":{"get":{"tags":["Calendar"],"summary":"List the current user's calendar connections","operationId":"get_calendar_connections","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CalendarConnectionResponse"},"type":"array","title":"Response Get Calendar Connections"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/calendar/connections/{connection_id}":{"delete":{"tags":["Calendar"],"summary":"Disconnect a calendar (revokes at provider when possible)","operationId":"delete_calendar_connections_connection_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/connections/{connection_id}/refresh":{"post":{"tags":["Calendar"],"summary":"Force a refresh of the access token (debug / manual heal)","description":"Useful when a token went bad mid-flight. Phase B's poller will do this automatically every 5 min when it's about to expire.","operationId":"post_calendar_connections_connection_id_refresh","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/oauth/{provider}/start":{"get":{"tags":["Calendar"],"summary":"Start the OAuth code flow for a calendar provider","description":"Generates a CSRF state, stores the user/tenant binding in Redis with a 10-minute TTL, and returns the provider's /authorize URL as JSON. The frontend then does ``window.location.href = authorize_url``. After consent the provider hits /callback below. Use 'google' or 'outlook' as the provider path param.","operationId":"get_calendar_oauth_provider_start","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartOAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calendar/oauth/{provider}/callback":{"get":{"tags":["Calendar"],"summary":"Handle the OAuth callback after provider consent","description":"PUBLIC endpoint — no JWT required because the OAuth provider can't pass it. The Redis-stored state recovers the user + tenant binding from /start. Exchanges the authorization code for tokens, persists encrypted to Integration, and redirects the browser to MEETING_URL/settings/calendar?connected=<provider> (or ?error=<reason> on failure).","operationId":"get_calendar_oauth_provider_callback","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}}],"responses":{"302":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/platform-status":{"get":{"tags":["SharePoint"],"summary":"Get platform status","description":"Get platform status. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_platform_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/consent-url":{"get":{"tags":["SharePoint"],"summary":"Get consent url","description":"Get consent url. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_consent_url","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/register-tenant":{"post":{"tags":["SharePoint"],"summary":"Create register tenant","description":"Create register tenant. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_register_tenant","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/deactivate":{"post":{"tags":["SharePoint"],"summary":"Create deactivate","description":"Create deactivate. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_deactivate","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/status":{"get":{"tags":["SharePoint"],"summary":"Get status","description":"Get status. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/sites":{"get":{"tags":["SharePoint"],"summary":"List sites","description":"List sites. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sites","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter sites by name/url","title":"Search"},"description":"Filter sites by name/url"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sites/{site_id}/drives":{"get":{"tags":["SharePoint"],"summary":"List drives","description":"List drives. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sites_site_id_drives","security":[{"HTTPBearer":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sites/{site_id}/drives/{drive_id}/folders":{"get":{"tags":["SharePoint"],"summary":"List folders","description":"List folders. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sites_site_id_drives_drive_id_folders","security":[{"HTTPBearer":[]}],"parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","title":"Drive Id"}},{"name":"path","in":"query","required":false,"schema":{"type":"string","description":"Folder path, 'root' for drive root","default":"root","title":"Path"},"description":"Folder path, 'root' for drive root"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets":{"get":{"tags":["SharePoint"],"summary":"List sync targets","description":"List sync targets. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sync_targets","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetRead"},"type":"array","title":"Response Get Sharepoint Sync Targets"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["SharePoint"],"summary":"Create sync target","description":"Create sync target. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_sync_targets","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sharepoint/sync-targets/{target_id}":{"get":{"tags":["SharePoint"],"summary":"Get sync target","description":"Get sync target. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["SharePoint"],"summary":"Update sync target","description":"Update sync target. Updates the resource in place; only the supplied fields change.","operationId":"patch_sharepoint_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__sharepoint__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["SharePoint"],"summary":"Delete sync target","description":"Delete sync target. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_sharepoint_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets/{target_id}/syncs":{"get":{"tags":["SharePoint"],"summary":"List sync runs","description":"List sync runs. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sync_targets_target_id_syncs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyncRunRead"},"title":"Response Get Sharepoint Sync Targets Target Id Syncs"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets/{target_id}/activate":{"post":{"tags":["SharePoint"],"summary":"Create activate sync target","description":"Create activate sync target. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_sync_targets_target_id_activate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets/{target_id}/sync":{"post":{"tags":["SharePoint"],"summary":"Sync sync target now","description":"Sync sync target now. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_sync_targets_target_id_sync","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets/{target_id}/pause":{"post":{"tags":["SharePoint"],"summary":"Create pause sync target","description":"Create pause sync target. Creates the resource scoped to the current tenant.","operationId":"post_sharepoint_sync_targets_target_id_pause","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sharepoint/sync-targets/{target_id}/preview":{"get":{"tags":["SharePoint"],"summary":"Preview sync target","description":"Preview sync target. Returns the resource scoped to the current tenant.","operationId":"get_sharepoint_sync_targets_target_id_preview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}},{"name":"folder","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Folder path to preview","title":"Folder"},"description":"Folder path to preview"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/platform-status":{"get":{"tags":["Google Drive"],"summary":"Get platform status","description":"Get platform status. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_platform_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/google-drive/authorize":{"get":{"tags":["Google Drive"],"summary":"Get authorize","description":"Get authorize. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_authorize","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/google-drive/callback":{"get":{"tags":["Google Drive"],"summary":"Get callback","description":"Get callback. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_callback","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/deactivate":{"post":{"tags":["Google Drive"],"summary":"Create deactivate","description":"Create deactivate. Creates the resource scoped to the current tenant.","operationId":"post_google_drive_deactivate","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/google-drive/status":{"get":{"tags":["Google Drive"],"summary":"Get status","description":"Get status. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_status","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/google-drive/drives":{"get":{"tags":["Google Drive"],"summary":"List drives","description":"List drives. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_drives","security":[{"HTTPBearer":[]}],"parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","description":"Force refresh cache from Google API","default":false,"title":"Refresh"},"description":"Force refresh cache from Google API"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter drives by name","title":"Search"},"description":"Filter drives by name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DriveOut"},"title":"Response Get Google Drive Drives"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/drives/{drive_id}/folders":{"get":{"tags":["Google Drive"],"summary":"List drive folders","description":"List drive folders. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_drives_drive_id_folders","security":[{"HTTPBearer":[]}],"parameters":[{"name":"drive_id","in":"path","required":true,"schema":{"type":"string","title":"Drive Id"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Parent folder (root if omitted)","title":"Folder Id"},"description":"Parent folder (root if omitted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DriveFolderOut"},"title":"Response Get Google Drive Drives Drive Id Folders"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets":{"get":{"tags":["Google Drive"],"summary":"List sync targets","description":"List sync targets. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_sync_targets","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetRead"},"type":"array","title":"Response Get Google Drive Sync Targets"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Google Drive"],"summary":"Create sync target","description":"Create sync target. Creates the resource scoped to the current tenant.","operationId":"post_google_drive_sync_targets","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/google-drive/sync-targets/{target_id}":{"get":{"tags":["Google Drive"],"summary":"Get sync target","description":"Get sync target. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Google Drive"],"summary":"Update sync target","description":"Update sync target. Updates the resource in place; only the supplied fields change.","operationId":"patch_google_drive_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__google_drive__SyncTargetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Google Drive"],"summary":"Delete sync target","description":"Delete sync target. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_google_drive_sync_targets_target_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets/{target_id}/syncs":{"get":{"tags":["Google Drive"],"summary":"List sync runs","description":"List sync runs. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_sync_targets_target_id_syncs","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyncRunRead"},"title":"Response Get Google Drive Sync Targets Target Id Syncs"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets/{target_id}/activate":{"post":{"tags":["Google Drive"],"summary":"Create activate sync target","description":"Create activate sync target. Creates the resource scoped to the current tenant.","operationId":"post_google_drive_sync_targets_target_id_activate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets/{target_id}/sync":{"post":{"tags":["Google Drive"],"summary":"Sync sync target now","description":"Sync sync target now. Creates the resource scoped to the current tenant.","operationId":"post_google_drive_sync_targets_target_id_sync","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}},{"name":"force_full","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Full"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets/{target_id}/pause":{"post":{"tags":["Google Drive"],"summary":"Create pause sync target","description":"Create pause sync target. Creates the resource scoped to the current tenant.","operationId":"post_google_drive_sync_targets_target_id_pause","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google-drive/sync-targets/{target_id}/preview":{"get":{"tags":["Google Drive"],"summary":"Preview sync target","description":"Preview sync target. Returns the resource scoped to the current tenant.","operationId":"get_google_drive_sync_targets_target_id_preview","security":[{"HTTPBearer":[]}],"parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Id"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google folder ID to preview","title":"Folder Id"},"description":"Google folder ID to preview"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/":{"get":{"tags":["Teams Bots"],"summary":"List teams bots","description":"List teams bots. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TeamsBotResponse"},"type":"array","title":"Response Get Teams Bots"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Teams Bots"],"summary":"Create teams bot","description":"Create teams bot. Creates the resource scoped to the current tenant.","operationId":"post_teams_bots","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/teams-bots/{bot_id}":{"get":{"tags":["Teams Bots"],"summary":"Get teams bot","description":"Get teams bot. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Teams Bots"],"summary":"Update teams bot","description":"Update teams bot. Updates the resource in place; only the supplied fields change.","operationId":"patch_teams_bots_bot_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Teams Bots"],"summary":"Delete teams bot","description":"Delete teams bot. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_teams_bots_bot_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/activate":{"post":{"tags":["Teams Bots"],"summary":"Create activate teams bot","description":"Create activate teams bot. Creates the resource scoped to the current tenant.","operationId":"post_teams_bots_bot_id_activate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotActivateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/deactivate":{"post":{"tags":["Teams Bots"],"summary":"Create deactivate teams bot","description":"Create deactivate teams bot. Creates the resource scoped to the current tenant.","operationId":"post_teams_bots_bot_id_deactivate","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/register-teams-tenant":{"post":{"tags":["Teams Bots"],"summary":"Create register teams tenant","description":"Create register teams tenant. Creates the resource scoped to the current tenant.","operationId":"post_teams_bots_bot_id_register_teams_tenant","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterTeamsTenantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/stats":{"get":{"tags":["Teams Bots"],"summary":"Get teams bot stats","description":"Get teams bot stats. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_stats","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/consent-url":{"get":{"tags":["Teams Bots"],"summary":"Get consent url","description":"Get consent url. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_consent_url","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsBotConsentUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/conversations":{"get":{"tags":["Teams Bots"],"summary":"Get teams bot conversations","description":"Get teams bot conversations. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_conversations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}},{"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":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamsConversationResponse"},"title":"Response Get Teams Bots Bot Id Conversations"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/package":{"get":{"tags":["Teams Bots"],"summary":"Download teams package","description":"Download teams package. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_package","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/icon":{"post":{"tags":["Teams Bots"],"summary":"Upload bot icon","description":"Upload bot icon. Creates the resource scoped to the current tenant.","operationId":"post_teams_bots_bot_id_icon","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_teams_bots_bot_id_icon"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Teams Bots"],"summary":"Delete bot icon","description":"Delete bot icon. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_teams_bots_bot_id_icon","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Teams Bots"],"summary":"Get bot icon","description":"Get bot icon. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_icon","parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/teams-bots/{bot_id}/icon.png":{"get":{"tags":["Teams Bots"],"summary":"Get bot icon","description":"Get bot icon. Returns the resource scoped to the current tenant.","operationId":"get_teams_bots_bot_id_icon.png","parameters":[{"name":"bot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/shared-with-me":{"get":{"tags":["Agents"],"summary":"List shared agents","description":"List shared agents. Returns the resource scoped to the current tenant.","operationId":"get_agents_shared_with_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AgentResponse"},"type":"array","title":"Response Get Agents Shared With Me"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agents/":{"get":{"tags":["Agents"],"summary":"List agents","description":"List agents. Returns the resource scoped to the current tenant.","operationId":"get_agents","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AgentResponse"},"type":"array","title":"Response Get Agents"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Agents"],"summary":"Create agent","description":"Create agent. Creates the resource scoped to the current tenant.","operationId":"post_agents","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/agents/{agent_id}":{"get":{"tags":["Agents"],"summary":"Get agent","description":"Get agent. Returns the resource scoped to the current tenant.","operationId":"get_agents_agent_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Agents"],"summary":"Update agent","description":"Update agent. Replaces the resource. Idempotent.","operationId":"put_agents_agent_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Agents"],"summary":"Delete agent","description":"Delete agent. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_agents_agent_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/{agent_id}/skills/{skill_id}":{"post":{"tags":["Agents"],"summary":"Create attach skill","description":"Create attach skill. Creates the resource scoped to the current tenant.","operationId":"post_agents_agent_id_skills_skill_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Agents"],"summary":"Delete detach skill","description":"Delete detach skill. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_agents_agent_id_skills_skill_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/{agent_id}/traces":{"get":{"tags":["Agents"],"summary":"List traces","description":"List traces. Returns the resource scoped to the current tenant.","operationId":"get_agents_agent_id_traces","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","pattern":"^(mine|all)$","default":"mine","title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AgentTraceResponse"},"title":"Response Get Agents Agent Id Traces"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/traces/{trace_id}":{"get":{"tags":["Agents"],"summary":"Get trace","description":"Get trace. Returns the resource scoped to the current tenant.","operationId":"get_agents_traces_trace_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTraceDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agents/{agent_id}/shareable-entities":{"get":{"tags":["Agents"],"summary":"Get shareable entities","description":"Get shareable entities. Returns the resource scoped to the current tenant.","operationId":"get_agents_agent_id_shareable_entities","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Agent Id"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills/shared-with-me":{"get":{"tags":["Skills"],"summary":"List shared skills","description":"List shared skills. Returns the resource scoped to the current tenant.","operationId":"get_skills_shared_with_me","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SkillResponse"},"type":"array","title":"Response Get Skills Shared With Me"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/skills/":{"get":{"tags":["Skills"],"summary":"List skills","description":"List skills. Returns the resource scoped to the current tenant.","operationId":"get_skills","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SkillResponse"},"title":"Response Get Skills"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X GET https://api.superfasttt.ai/api/v1/skills/ \\\n  -H \"Authorization: Bearer $TOKEN\""},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/skills/\", {\n  method: \"GET\",\n  headers: { Authorization: `Bearer ${token}` },\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.get(\n    \"https://api.superfasttt.ai/api/v1/skills/\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    )\nprint(r.json())"}]},"post":{"tags":["Skills"],"summary":"Create skill","description":"Create skill. Creates the resource scoped to the current tenant.","operationId":"post_skills","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-codeSamples":[{"lang":"curl","label":"curl","source":"curl -X POST https://api.superfasttt.ai/api/v1/skills/ \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\"\\\n  -d '{\"name\":\"summarise\",\"instructions\":\"<MD>\"}'"},{"lang":"TypeScript","label":"fetch","source":"const res = await fetch(\"https://api.superfasttt.ai/api/v1/skills/\", {\n  method: \"POST\",\n  headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify({ name: \"summarise\", instructions: \"<MD>\" })\n});\nconst data = await res.json();"},{"lang":"Python","label":"httpx","source":"import httpx\nr = httpx.post(\n    \"https://api.superfasttt.ai/api/v1/skills/\",\n    headers={\"Authorization\": f\"Bearer {token}\"},\n    json={\"name\":\"summarise\",\"instructions\":\"<MD>\"})\nprint(r.json())"}]}},"/api/v1/skills/{skill_id}":{"get":{"tags":["Skills"],"summary":"Get skill","description":"Get skill. Returns the resource scoped to the current tenant.","operationId":"get_skills_skill_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Skills"],"summary":"Update skill","description":"Update skill. Replaces the resource. Idempotent.","operationId":"put_skills_skill_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Skills"],"summary":"Delete skill","description":"Delete skill. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_skills_skill_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills/import-bulk":{"post":{"tags":["Skills"],"summary":"Import bulk skills","description":"Import bulk skills. Creates the resource scoped to the current tenant.","operationId":"post_skills_import_bulk","security":[{"HTTPBearer":[]}],"parameters":[{"name":"upsert","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Upsert"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_skills_import_bulk"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills/import-md":{"post":{"tags":["Skills"],"summary":"Import skill md","description":"Import skill md. Creates the resource scoped to the current tenant.","operationId":"post_skills_import_md","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_skills_import_md"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/skills/{skill_id}/export-md":{"get":{"tags":["Skills"],"summary":"Export skill md","description":"Export skill md. Returns the resource scoped to the current tenant.","operationId":"get_skills_skill_id_export_md","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills/import-package":{"post":{"tags":["Skills"],"summary":"Import skill package","description":"Import skill package. Creates the resource scoped to the current tenant.","operationId":"post_skills_import_package","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_skills_import_package"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkillResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/skills/{skill_id}/export-package":{"get":{"tags":["Skills"],"summary":"Export skill package","description":"Export skill package. Returns the resource scoped to the current tenant.","operationId":"get_skills_skill_id_export_package","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills/{skill_id}/shareable-entities":{"get":{"tags":["Skills"],"summary":"Get shareable entities","description":"Get shareable entities. Returns the resource scoped to the current tenant.","operationId":"get_skills_skill_id_shareable_entities","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Skill Id"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","maxLength":100,"default":"","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/catalog":{"get":{"tags":["MCP"],"summary":"Get mcp catalog","description":"Returns the active MCP catalog managed by superadmin. Per-tenant custom MCPs are no longer merged here — the catalog is the single source of truth and the response shape (flat list with source='system') is preserved.","operationId":"get_mcp_catalog","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/McpServerResponse"},"type":"array","title":"Response Get Mcp Catalog"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mcp/custom":{"get":{"tags":["MCP"],"summary":"List custom mcp servers","description":"List custom mcp servers. Returns the resource scoped to the current tenant.","operationId":"get_mcp_custom","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CustomMcpServerResponse"},"type":"array","title":"Response Get Mcp Custom"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["MCP"],"summary":"Create custom mcp","description":"Create custom mcp. Creates the resource scoped to the current tenant.","operationId":"post_mcp_custom","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomMcpServerCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomMcpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mcp/custom/{server_id}":{"put":{"tags":["MCP"],"summary":"Update custom mcp","description":"Update custom mcp. Replaces the resource. Idempotent.","operationId":"put_mcp_custom_server_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Server Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomMcpServerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomMcpServerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["MCP"],"summary":"Delete custom mcp","description":"Delete custom mcp. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_mcp_custom_server_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Server Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/oauth/config":{"get":{"tags":["MCP"],"summary":"Get oauth config","description":"Get oauth config. Returns the resource scoped to the current tenant.","operationId":"get_mcp_oauth_config","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mcp/custom/{server_id}/auth/start":{"post":{"tags":["MCP"],"summary":"Create oauth start","description":"Create oauth start. Creates the resource scoped to the current tenant.","operationId":"post_mcp_custom_server_id_auth_start","security":[{"HTTPBearer":[]}],"parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/oauth/callback":{"get":{"tags":["MCP"],"summary":"Get oauth callback","description":"Get oauth callback. Returns the resource scoped to the current tenant.","operationId":"get_mcp_oauth_callback","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}},{"name":"accounts-server","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accounts-Server"}},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/keys":{"get":{"tags":["MCP"],"summary":"List Mcp Keys","description":"List all MCP server keys for the current tenant.","operationId":"get_mcp_keys","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TenantMcpKeyResponse"},"type":"array","title":"Response Get Mcp Keys"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["MCP"],"summary":"Create Or Update Mcp Key","description":"Create or update an MCP server API key for a tenant (upsert).","operationId":"post_mcp_keys","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantMcpKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantMcpKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/mcp/keys/status/{mcp_server_name}":{"get":{"tags":["MCP"],"summary":"Get Mcp Key Status","description":"Check if a tenant has an active MCP key for a given server.","operationId":"get_mcp_keys_status_mcp_server_name","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mcp_server_name","in":"path","required":true,"schema":{"type":"string","title":"Mcp Server Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpKeyStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/keys/{mcp_server_name}":{"delete":{"tags":["MCP"],"summary":"Delete Mcp Key","description":"Delete an MCP server key.","operationId":"delete_mcp_keys_mcp_server_name","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mcp_server_name","in":"path","required":true,"schema":{"type":"string","title":"Mcp Server Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/catalog/{name}/connect":{"post":{"tags":["MCP"],"summary":"Connect a tenant to a catalog OAuth provider","operationId":"post_mcp_catalog_name_connect","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectFromCatalogRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/connections/{connection_id}/auth/start":{"post":{"tags":["MCP"],"summary":"Start the OAuth consent flow for a pending connection","operationId":"post_mcp_connections_connection_id_auth_start","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/connections":{"get":{"tags":["MCP"],"summary":"List the tenant's external connections","operationId":"get_mcp_connections","security":[{"HTTPBearer":[]}],"parameters":[{"name":"catalog_entry_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Catalog Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionResponse"},"title":"Response Get Mcp Connections"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/connections/{connection_id}":{"get":{"tags":["MCP"],"summary":"Get Connection","operationId":"get_mcp_connections_connection_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["MCP"],"summary":"Soft-delete a connection","operationId":"delete_mcp_connections_connection_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/connections/{connection_id}/disconnect":{"post":{"tags":["MCP"],"summary":"Disconnect (revoke locally, best-effort at provider)","operationId":"post_mcp_connections_connection_id_disconnect","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/settings":{"get":{"tags":["Email Settings"],"summary":"Get Email Settings","operationId":"get_email_settings","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPolicyResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Email Settings"],"summary":"Update Email Settings","operationId":"put_email_settings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPolicyUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailPolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/email/admin/connections":{"get":{"tags":["Email Settings"],"summary":"List Admin Mailboxes","description":"Governance view: every connected mailbox in the tenant + volumes/errors.\nMetadata only — never the email body (admin_content_visibility=metadata_only).","operationId":"get_email_admin_connections","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AdminMailboxItem"},"type":"array","title":"Response Get Email Admin Connections"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/email/admin/connections/{connection_id}/purge":{"post":{"tags":["Email Settings"],"summary":"Purge Mailbox Data","description":"Hard-delete imported email data for a mailbox. Keeps the connection.\n\nContract: removes imported messages (+ attachments and trigger deliveries via\nFK ``ON DELETE CASCADE``), the source's email threads, and the public\ndispatch-index rows of those deliveries — all atomically with the\n``email.data.purged`` audit row (a single commit, so a purge without a durable\naudit trail is impossible). Retained on purpose: workflow execution history\n(``workflow_executions`` is an operational record); S3 body objects are removed\nby the retention job, not here.","operationId":"post_email_admin_connections_connection_id_purge","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurgeResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/admin/connections/{connection_id}":{"delete":{"tags":["Email Settings"],"summary":"Delete Mailbox Connection","description":"Fully remove a mailbox connection (governance hard-delete).\n\nUnlike ``/purge`` (which keeps the connection), this soft-deletes the row so it\ndisappears from the admin list and the sf-workflow picker, after wiping its\nimported data and trigger bindings. Atomic by construction: every mutation is\nstaged and flushed together with the ``email.connection.deleted`` audit row in a\nsingle commit (``AuditService.log`` owns it), so a delete without a durable audit\ntrail is impossible. The row is retained (``deleted_at``) for audit history; the\nrefresh token is cleared and the provider revoke is left to the retention job.","operationId":"delete_email_admin_connections_connection_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurgeResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/admin/connections/{connection_id}/usages":{"get":{"tags":["Email Settings"],"summary":"List Mailbox Usages","description":"Workflows + trigger nodes wired to this mailbox (governance Usages tab).","operationId":"get_email_admin_connections_connection_id_usages","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UsageItem"},"title":"Response Get Email Admin Connections Connection Id Usages"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/admin/connections/{connection_id}/audit":{"get":{"tags":["Email Settings"],"summary":"List Mailbox Audit","description":"Recent email.* governance events for this mailbox (Audit tab). Scoped by\ntenant_id + resource_id so an admin only ever sees their tenant's trail.","operationId":"get_email_admin_connections_connection_id_audit","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditItem"},"title":"Response Get Email Admin Connections Connection Id Audit"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/admin/connections/{connection_id}/errors":{"get":{"tags":["Email Settings"],"summary":"List Mailbox Errors","description":"Recent failed deliveries for this mailbox's triggers (Errors tab).","operationId":"get_email_admin_connections_connection_id_errors","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorItem"},"title":"Response Get Email Admin Connections Connection Id Errors"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/admin/connections/{connection_id}/sync":{"post":{"tags":["Email Settings"],"summary":"Force Sync Mailbox","description":"Queue an immediate poll of this mailbox (governance 'Sync now').","operationId":"post_email_admin_connections_connection_id_sync","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/oauth/start":{"post":{"tags":["Connections"],"summary":"Start Gmail Connect","operationId":"post_connections_oauth_start","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartGmailConnectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartConnectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/connections":{"get":{"tags":["Connections"],"summary":"List My Connections","operationId":"get_connections","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ConnectionItem"},"type":"array","title":"Response Get Connections"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/connections/catalog":{"get":{"tags":["Connections"],"summary":"List Connection Catalog","description":"Connectable providers for end users. MVP: ``provider_type=mail`` →\noauth_account catalog entries, filtered by the tenant policy (deny-by-default:\nnothing when the feature is off, only providers the policy allows).","operationId":"get_connections_catalog","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider_type","in":"query","required":false,"schema":{"type":"string","default":"mail","title":"Provider Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"},"title":"Response Get Connections Catalog"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/revoke":{"post":{"tags":["Connections"],"summary":"Revoke Connection","operationId":"post_connections_connection_id_revoke","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/pause":{"post":{"tags":["Connections"],"summary":"Pause Connection","operationId":"post_connections_connection_id_pause","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/resume":{"post":{"tags":["Connections"],"summary":"Resume Connection","operationId":"post_connections_connection_id_resume","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{connection_id}/test":{"post":{"tags":["Connections"],"summary":"Test Connection","description":"Health-check a mailbox connection: refresh the access token and call\nGmail getProfile. On invalid_grant, flip to reconnect_required + recompute\nbindings (owner-or-admin only; no secret ever returned).","operationId":"post_connections_connection_id_test","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/email-bindings":{"get":{"tags":["Connections"],"summary":"List Workflow Email Bindings","description":"Email trigger binding status per node for one workflow (for the\nsf-workflow trigger UI). Enforces workflow read access — bindings expose\nwhich mailbox is wired to a trigger.","operationId":"get_connections_email_bindings","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailBindingItem"},"title":"Response Get Connections Email Bindings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/images/upload":{"post":{"tags":["RAG"],"summary":"Upload chat image","description":"Upload chat image. Creates the resource scoped to the current tenant.","operationId":"post_chat_images_upload","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_post_chat_images_upload"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatImageUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"post":{"tags":["Feedback"],"summary":"Submit or update a feedback (idempotent)","description":"Submit feedback. Creates the resource scoped to the current tenant.","operationId":"post_feedback","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Feedback"],"summary":"List feedbacks (admin)","description":"List feedback. Returns the resource scoped to the current tenant.","operationId":"get_feedback","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sentiment","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(like|dislike)$"},{"type":"null"}],"title":"Sentiment"}},{"name":"app_origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Origin"}},{"name":"llm_model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"}},{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"has_comment","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Comment"}},{"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":100,"minimum":1,"description":"Number of items to return","default":10,"title":"Limit"},"description":"Number of items to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_FeedbackResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/{feedback_id}":{"delete":{"tags":["Feedback"],"summary":"Remove a feedback (soft delete)","description":"Remove feedback. Soft-deletes the resource when applicable; otherwise permanently removes it.","operationId":"delete_feedback_feedback_id","security":[{"HTTPBearer":[]}],"parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Feedback Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/me":{"get":{"tags":["Feedback"],"summary":"Get current user's feedbacks (for UI hydration)","description":"List my feedback. Returns the resource scoped to the current tenant.","operationId":"get_feedback_me","security":[{"HTTPBearer":[]}],"parameters":[{"name":"app_origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Origin"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"}},{"name":"target_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Repeat for multiple ids (max 200)","title":"Target Ids"},"description":"Repeat for multiple ids (max 200)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeedbackResponse"},"title":"Response Get Feedback Me"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/stats":{"get":{"tags":["Feedback"],"summary":"Aggregated stats (admin)","description":"Get feedback stats. Returns the resource scoped to the current tenant.","operationId":"get_feedback_stats","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/portable/v1/me":{"get":{"tags":["Portable","Portable - Identity"],"summary":"Get Me","operationId":"getMe","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortableMe"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/knowledge-bases":{"get":{"tags":["Portable","Portable - KnowledgeBases"],"summary":"List Knowledge Bases","description":"Return one cursor-bound page of `Memory` rows for the authenticated tenant.\n\nTenant isolation: search_path is already set by the dependency. We add an\nexplicit `Memory.tenant_id == auth.tenant_id` predicate as defence in depth\nagainst schema-level escapes.","operationId":"listKnowledgeBases","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeBaseListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/meetings":{"get":{"tags":["Portable","Portable - Meetings"],"summary":"List Meetings","operationId":"listMeetings","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/meetings/{meeting_id}":{"get":{"tags":["Portable","Portable - Meetings"],"summary":"Get Meeting","operationId":"getMeeting","security":[{"HTTPBearer":[]}],"parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Meeting Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeetingDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/workflows":{"get":{"tags":["Portable","Portable - Workflows"],"summary":"List Workflows","operationId":"listWorkflows","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/workflows/{workflow_id}":{"get":{"tags":["Portable","Portable - Workflows"],"summary":"Get Workflow","operationId":"getWorkflow","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/projects":{"get":{"tags":["Portable","Portable - Projects"],"summary":"List Projects","operationId":"listProjects","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/projects/{project_id}":{"get":{"tags":["Portable","Portable - Projects"],"summary":"Get Project","operationId":"getProject","security":[{"HTTPBearer":[]}],"parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/documents":{"get":{"tags":["Portable","Portable - Documents"],"summary":"List Documents","operationId":"listDocuments","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"memory_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"}},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/documents/{document_id}":{"get":{"tags":["Portable","Portable - Documents"],"summary":"Get Document","operationId":"getDocument","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"sample_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Sample Size"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"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"}}}}}}},"/portable/v1/documents/{document_id}/download":{"get":{"tags":["Portable","Portable - Documents"],"summary":"Get Document Download","operationId":"getDocumentDownload","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedDownload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/conversations":{"get":{"tags":["Portable","Portable - Conversations"],"summary":"List Conversations","operationId":"listConversations","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"}},{"name":"agent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/conversations/{conversation_id}":{"get":{"tags":["Portable","Portable - Conversations"],"summary":"Get Conversation","operationId":"getConversation","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"message_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Cursor"}},{"name":"message_limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Message Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/agents":{"get":{"tags":["Portable","Portable - Agents"],"summary":"List Agents","operationId":"listAgents","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/prompts":{"get":{"tags":["Portable","Portable - Prompts"],"summary":"List Prompts","operationId":"listPrompts","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/config":{"get":{"tags":["Portable","Portable - Config"],"summary":"Get Tenant Config","operationId":"getTenantConfig","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantConfig"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/usage":{"get":{"tags":["Portable","Portable - Usage"],"summary":"Get Volumes Report","operationId":"getVolumesReport","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumesReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/people":{"get":{"tags":["Portable","Portable - People"],"summary":"List People","operationId":"listPeople","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/exports":{"post":{"tags":["Portable","Portable - Exports"],"summary":"Create Export","operationId":"createExport","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJob"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Portable","Portable - Exports"],"summary":"List Exports","operationId":"listExports","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/exports/{export_id}/download":{"get":{"tags":["Portable","Portable - Exports"],"summary":"Get Export Download","operationId":"getExportDownload","security":[{"HTTPBearer":[]}],"parameters":[{"name":"export_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Export Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedDownload"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/keys":{"post":{"tags":["Portable","Portable - Keys"],"summary":"Create Portable Api Key","operationId":"createPortableApiKey","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortableApiKeyCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortableApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Portable","Portable - Keys"],"summary":"List Portable Api Keys","operationId":"listPortableApiKeys","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortableApiKeyListPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/portable/v1/keys/{key_id}":{"delete":{"tags":["Portable","Portable - Keys"],"summary":"Revoke Portable Api Key","operationId":"revokePortableApiKey","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","operationId":"get_health","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"get_root","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AIProfilePublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"chat_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Model"},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"AIProfilePublic"},"AIProfileSummary":{"properties":{"profile_id":{"type":"string","format":"uuid","title":"Profile Id"},"name":{"type":"string","title":"Name"},"chunking_strategy":{"type":"string","title":"Chunking Strategy"},"chunk_size":{"type":"integer","title":"Chunk Size"},"retrieval_strategy":{"type":"string","title":"Retrieval Strategy"}},"type":"object","required":["profile_id","name","chunking_strategy","chunk_size","retrieval_strategy"],"title":"AIProfileSummary","description":"Minimal AI Profile info for memory response"},"APIKeyCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Nom descriptif de la clé"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Description optionnelle"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Date d'expiration (null = pas d'expiration)"},"is_active":{"type":"boolean","title":"Is Active","description":"Clé active ou désactivée","default":true},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"List of scopes. Defaults to ['admin'] if not provided."}},"type":"object","required":["name"],"title":"APIKeyCreate","description":"Schéma pour créer une nouvelle API Key","example":{"description":"Key for Tourinsoft sync service","expires_at":"2027-12-31T23:59:59Z","is_active":true,"name":"External Sync Key","scopes":["documents:ingest","documents:read","knowledge_bases:read"]}},"APIKeyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/APIKeyResponse"},"type":"array","title":"Items","description":"Liste des clés API"},"total":{"type":"integer","title":"Total","description":"Nombre total de clés"},"page":{"type":"integer","title":"Page","description":"Page actuelle"},"page_size":{"type":"integer","title":"Page Size","description":"Taille de la page"},"pages":{"type":"integer","title":"Pages","description":"Nombre total de pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"APIKeyListResponse","description":"Schéma de retour pour liste paginée d'API Keys","example":{"items":[{"id":"123e4567-e89b-12d3-a456-426614174000","is_active":true,"key_prefix":"sk-1234","name":"Production Key","tenant_id":"tenant_abc","usage_count":42}],"page":1,"page_size":20,"pages":1,"total":1}},"APIKeyResponse":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Nom descriptif de la clé"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Description optionnelle"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Date d'expiration (null = pas d'expiration)"},"is_active":{"type":"boolean","title":"Is Active","description":"Clé active ou désactivée","default":true},"id":{"type":"string","format":"uuid","title":"Id","description":"ID unique de la clé (api_key_id)"},"key_prefix":{"type":"string","title":"Key Prefix","description":"Préfixe de la clé (ex: 'sk-1234')"},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID du tenant propriétaire"},"user_id":{"type":"string","format":"uuid","title":"User Id","description":"ID de l'utilisateur créateur"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"Permissions de la clé"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At","description":"Dernière utilisation"},"usage_count":{"type":"integer","title":"Usage Count","description":"Nombre d'utilisations","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date de création"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Date de dernière modification"}},"type":"object","required":["name","id","key_prefix","tenant_id","user_id","created_at","updated_at"],"title":"APIKeyResponse","description":"Schéma de retour pour une API Key (SANS le secret complet)","example":{"created_at":"2025-11-01T12:00:00Z","description":"Clé pour l'application de production","expires_at":"2027-12-31T23:59:59Z","id":"123e4567-e89b-12d3-a456-426614174000","is_active":true,"key_prefix":"sk-1234","last_used_at":"2025-11-20T10:30:00Z","name":"Production API Key","tenant_id":"tenant_abc","updated_at":"2025-11-20T10:30:00Z","usage_count":42,"user_id":"123e4567-e89b-12d3-a456-426614174001"}},"APIKeyRevoke":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason","description":"Raison de la révocation"}},"type":"object","title":"APIKeyRevoke","description":"Schéma pour révoquer (désactiver) une clé","example":{"reason":"Clé compromise - rotation de sécurité"}},"APIKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"APIKeyUpdate","description":"Schéma pour mettre à jour une API Key existante","example":{"is_active":false,"name":"Updated Key Name"}},"APIKeyUsageStats":{"properties":{"api_key_id":{"type":"string","format":"uuid","title":"Api Key Id"},"usage_count":{"type":"integer","title":"Usage Count","description":"Nombre total d'utilisations"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At","description":"Dernière utilisation"},"first_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Used At","description":"Première utilisation"},"requests_last_24h":{"type":"integer","title":"Requests Last 24H","description":"Requêtes dans les dernières 24h","default":0},"requests_last_7d":{"type":"integer","title":"Requests Last 7D","description":"Requêtes dans les 7 derniers jours","default":0}},"type":"object","required":["api_key_id","usage_count"],"title":"APIKeyUsageStats","description":"Statistiques d'utilisation d'une API Key","example":{"api_key_id":"123e4567-e89b-12d3-a456-426614174000","first_used_at":"2025-11-01T12:00:00Z","last_used_at":"2025-11-20T10:30:00Z","requests_last_24h":127,"requests_last_7d":892,"usage_count":1523}},"APIKeyWithSecret":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name","description":"Nom descriptif de la clé"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Description optionnelle"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Date d'expiration (null = pas d'expiration)"},"is_active":{"type":"boolean","title":"Is Active","description":"Clé active ou désactivée","default":true},"id":{"type":"string","format":"uuid","title":"Id","description":"ID unique de la clé (api_key_id)"},"key_prefix":{"type":"string","title":"Key Prefix","description":"Préfixe de la clé (ex: 'sk-1234')"},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID du tenant propriétaire"},"user_id":{"type":"string","format":"uuid","title":"User Id","description":"ID de l'utilisateur créateur"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes","description":"Permissions de la clé"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At","description":"Dernière utilisation"},"usage_count":{"type":"integer","title":"Usage Count","description":"Nombre d'utilisations","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date de création"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Date de dernière modification"},"key_secret":{"type":"string","title":"Key Secret","description":"Secret complet de la clé (visible 1 seule fois)"}},"type":"object","required":["name","id","key_prefix","tenant_id","user_id","created_at","updated_at","key_secret"],"title":"APIKeyWithSecret","description":"Schéma de retour incluant le secret complet\n\n⚠️ IMPORTANT: Ce schéma ne doit être retourné QU'UNE SEULE FOIS\nlors de la création de la clé. Le secret ne peut pas être récupéré après.","example":{"created_at":"2025-11-20T10:30:00Z","id":"123e4567-e89b-12d3-a456-426614174000","is_active":true,"key_prefix":"sk-1234","key_secret":"sk-1234567890abcdef1234567890abcdef1234567890abcdef","name":"Production API Key","tenant_id":"tenant_abc","updated_at":"2025-11-20T10:30:00Z","usage_count":0,"user_id":"123e4567-e89b-12d3-a456-426614174001"}},"AcceptInvitationRequest":{"properties":{"token":{"type":"string","title":"Token"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"full_name":{"type":"string","title":"Full Name"}},"type":"object","required":["token","full_name"],"title":"AcceptInvitationRequest","description":"Requête pour accepter une invitation"},"AccessRuleInput":{"properties":{"scope_type":{"type":"string","pattern":"^(team|user)$","title":"Scope Type"},"scope_id":{"type":"string","format":"uuid4","title":"Scope Id"}},"type":"object","required":["scope_type","scope_id"],"title":"AccessRuleInput"},"AccessRuleResponse":{"properties":{"id":{"type":"string","title":"Id"},"scope_type":{"type":"string","title":"Scope Type"},"scope_id":{"type":"string","title":"Scope Id"},"scope_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Name"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","scope_type","scope_id","created_at"],"title":"AccessRuleResponse"},"AclBumpRequest":{"properties":{"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"source_object_id":{"type":"string","title":"Source Object Id"},"new_acl_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Acl Version"},"new_content_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Content Version"}},"type":"object","required":["knowledge_source_id","source_object_id"],"title":"AclBumpRequest"},"AclVersionResponse":{"properties":{"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"knowledge_source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Source Name"},"source_object_id":{"type":"string","title":"Source Object Id"},"acl_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acl Version"},"content_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Version"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["knowledge_source_id","source_object_id"],"title":"AclVersionResponse"},"ActionCount":{"properties":{"action":{"type":"string","title":"Action"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["action","count"],"title":"ActionCount"},"ActivateModelRequest":{"properties":{"model_name":{"type":"string","title":"Model Name","description":"Nom du modèle"},"provider":{"type":"string","title":"Provider","description":"Provider (openai, anthropic, etc.)"},"is_default":{"type":"boolean","title":"Is Default","description":"Définir comme modèle par défaut","default":false}},"type":"object","required":["model_name","provider"],"title":"ActivateModelRequest","description":"Request pour activer un modèle"},"ActivateModelResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"model_id":{"type":"string","title":"Model Id"},"model_name":{"type":"string","title":"Model Name"},"provider":{"type":"string","title":"Provider"},"created_in_llm_models":{"type":"boolean","title":"Created In Llm Models","default":false},"preference_created":{"type":"boolean","title":"Preference Created","default":false},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","model_id","model_name","provider","message"],"title":"ActivateModelResponse","description":"Response après activation"},"AddMemberRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"AddMemberRequest","description":"Request schema to add a member to a team"},"AddMembersRequest":{"properties":{"user_ids":{"items":{"type":"string"},"type":"array","title":"User Ids"}},"type":"object","required":["user_ids"],"title":"AddMembersRequest","description":"Request schema to add multiple members to a team"},"AddMessageRequest":{"properties":{"role":{"$ref":"#/components/schemas/MessageRole","description":"Message role"},"content":{"type":"string","minLength":1,"title":"Content","description":"Message content"},"sources":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sources","description":"RAG sources if assistant message"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model used if assistant message"},"tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens","description":"Token count if assistant message"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning","description":"LLM reasoning/thinking content"},"image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Image Urls","description":"Persisted S3 image URLs"},"user_image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Image Urls","description":"User-uploaded image URLs for vision"},"user_image_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Image Keys","description":"Stable S3 object keys for user-uploaded vision images"}},"type":"object","required":["role","content"],"title":"AddMessageRequest","description":"Schema for adding a message to a conversation"},"AdminAppsResponse":{"properties":{"apps":{"items":{"$ref":"#/components/schemas/AppConfig"},"type":"array","title":"Apps"}},"type":"object","required":["apps"],"title":"AdminAppsResponse","description":"Response with all apps for admin (including disabled)"},"AdminMailboxItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"},"owner_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"},"status":{"type":"string","title":"Status"},"created_via_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created Via App"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"emails_processed":{"type":"integer","title":"Emails Processed","default":0},"attachments_processed":{"type":"integer","title":"Attachments Processed","default":0},"active_bindings":{"type":"integer","title":"Active Bindings","default":0}},"type":"object","required":["id","status"],"title":"AdminMailboxItem","description":"Governance/audit view of one connected mailbox (metadata only, no body)."},"AgentCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"system_prompt":{"type":"string","title":"System Prompt"},"model_name":{"type":"string","title":"Model Name","default":"gpt-4o-mini"},"temperature":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Temperature","default":70},"max_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens","default":4000},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"document_ids":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Document Ids"},"is_public":{"type":"boolean","title":"Is Public","default":false},"max_iterations":{"type":"integer","minimum":1.0,"title":"Max Iterations","default":10},"timeout_seconds":{"type":"integer","minimum":1.0,"title":"Timeout Seconds","default":300},"max_tokens_per_query":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens Per Query","default":8000},"activated_mcp":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Activated Mcp"},"skill_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Skill Ids"}},"type":"object","required":["name","system_prompt"],"title":"AgentCreate"},"AgentListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AgentSummary"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"AgentListPage"},"AgentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"system_prompt":{"type":"string","title":"System Prompt"},"model_name":{"type":"string","title":"Model Name"},"temperature":{"type":"integer","title":"Temperature"},"max_tokens":{"type":"integer","title":"Max Tokens"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"document_ids":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Document Ids"},"is_public":{"type":"boolean","title":"Is Public"},"is_active":{"type":"boolean","title":"Is Active"},"max_iterations":{"type":"integer","title":"Max Iterations"},"timeout_seconds":{"type":"integer","title":"Timeout Seconds"},"max_tokens_per_query":{"type":"integer","title":"Max Tokens Per Query"},"config_version":{"type":"integer","title":"Config Version"},"activated_mcp":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Activated Mcp"},"created_by_id":{"type":"string","format":"uuid","title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"skills":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillResponse"},"type":"array"},{"type":"null"}],"title":"Skills"}},"type":"object","required":["id","name","description","system_prompt","model_name","temperature","max_tokens","config","document_ids","is_public","is_active","max_iterations","timeout_seconds","max_tokens_per_query","config_version","activated_mcp","created_by_id","created_at","updated_at"],"title":"AgentResponse"},"AgentSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Donnée tenant, exposable. Pas un secret Superfasttt."},"model_name":{"type":"string","title":"Model Name"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"conversation_count":{"type":"integer","minimum":0.0,"title":"Conversation Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"skills":{"items":{"$ref":"#/components/schemas/SkillSummary"},"type":"array","title":"Skills"}},"additionalProperties":false,"type":"object","required":["id","name","is_active","model_name","conversation_count","created_at","updated_at","skills"],"title":"AgentSummary"},"AgentTraceDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"agent_id":{"type":"string","format":"uuid","title":"Agent Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"model_name":{"type":"string","title":"Model Name"},"status":{"type":"string","title":"Status"},"input_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Text"},"output_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Text"},"total_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Ms"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"total_cost_cents":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Cents"},"iteration_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Iteration Count"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"spans":{"items":{"$ref":"#/components/schemas/AgentTraceSpanResponse"},"type":"array","title":"Spans","default":[]}},"type":"object","required":["id","agent_id","user_id","model_name","status","created_at"],"title":"AgentTraceDetailResponse"},"AgentTraceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"agent_id":{"type":"string","format":"uuid","title":"Agent Id"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"model_name":{"type":"string","title":"Model Name"},"status":{"type":"string","title":"Status"},"input_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Text"},"output_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Text"},"total_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Duration Ms"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"total_cost_cents":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Cents"},"iteration_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Iteration Count"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","agent_id","user_id","model_name","status","created_at"],"title":"AgentTraceResponse"},"AgentTraceSpanResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"trace_id":{"type":"string","format":"uuid","title":"Trace Id"},"span_type":{"type":"string","title":"Span Type"},"span_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Span Name"},"start_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Ms"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"input_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Data"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prompt Tokens"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","trace_id","span_type"],"title":"AgentTraceSpanResponse"},"AgentUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"temperature":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"document_ids":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Document Ids"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"max_iterations":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Iterations"},"timeout_seconds":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Timeout Seconds"},"max_tokens_per_query":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens Per Query"},"activated_mcp":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Activated Mcp"},"skill_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Skill Ids"}},"type":"object","title":"AgentUpdate"},"AliasCreateRequest":{"properties":{"field":{"type":"string","maxLength":64,"minLength":1,"title":"Field"},"alias":{"type":"string","maxLength":200,"minLength":1,"title":"Alias"},"canonical":{"type":"string","maxLength":200,"minLength":1,"title":"Canonical"}},"additionalProperties":false,"type":"object","required":["field","alias","canonical"],"title":"AliasCreateRequest","description":"POST /memories/{id}/aliases."},"AliasResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"field":{"type":"string","title":"Field"},"alias":{"type":"string","title":"Alias"},"canonical":{"type":"string","title":"Canonical"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","memory_id","field","alias","canonical","created_at","updated_at"],"title":"AliasResponse"},"AliasesBulkCreateRequest":{"properties":{"aliases":{"items":{"$ref":"#/components/schemas/AliasCreateRequest"},"type":"array","maxItems":500,"minItems":1,"title":"Aliases"},"replace":{"type":"boolean","title":"Replace","description":"Si True, supprime tous les aliases existants de la Memory avant insertion","default":false}},"additionalProperties":false,"type":"object","required":["aliases"],"title":"AliasesBulkCreateRequest","description":"Pour seeding initial (Tourinsoft ~30 entrees)."},"AliasesBulkCreateResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"inserted":{"type":"integer","title":"Inserted"},"updated":{"type":"integer","title":"Updated"},"deleted_first":{"type":"integer","title":"Deleted First"}},"additionalProperties":false,"type":"object","required":["memory_id","inserted","updated","deleted_first"],"title":"AliasesBulkCreateResponse"},"AppConfig":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"name_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Key"},"icon":{"type":"string","title":"Icon"},"type":{"type":"string","title":"Type"},"color":{"type":"string","title":"Color"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"enabled":{"type":"boolean","title":"Enabled","default":true},"web_visible":{"type":"boolean","title":"Web Visible","default":true}},"type":"object","required":["id","name","icon","type","color"],"title":"AppConfig","description":"Configuration for a single app"},"AppCount":{"properties":{"app":{"type":"string","title":"App"},"count":{"type":"integer","title":"Count"},"unique_users":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Users"}},"type":"object","required":["app","count"],"title":"AppCount"},"AppToggleRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"AppToggleRequest","description":"Request to toggle app enabled status"},"AssetOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"storage_path":{"type":"string","title":"Storage Path"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"upload_status":{"type":"string","title":"Upload Status"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","filename","content_type","size_bytes","storage_path","upload_status","created_at"],"title":"AssetOut"},"AudioTranscriptionRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID (e.g., 'whisper-1', 'openai/whisper-1')"},"audio_url":{"type":"string","title":"Audio Url","description":"URL of the audio file to transcribe"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Language code (e.g., 'fr', 'en')"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Usage tag for tracking (e.g., 'sf-meeting', 'sf-workflow')"}},"type":"object","required":["model","audio_url"],"title":"AudioTranscriptionRequest","description":"Request for audio transcription"},"AuditItem":{"properties":{"action":{"type":"string","title":"Action"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["action","created_at"],"title":"AuditItem","description":"One email.* governance event for a mailbox (Audit tab)."},"AuditLogListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditLogResponse"},"type":"array","title":"Items","description":"Liste des logs"},"total":{"type":"integer","title":"Total","description":"Nombre total de logs"},"page":{"type":"integer","title":"Page","description":"Page actuelle"},"page_size":{"type":"integer","title":"Page Size","description":"Taille de la page"},"pages":{"type":"integer","title":"Pages","description":"Nombre total de pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"AuditLogListResponse","description":"Schéma de retour pour liste paginée de logs d'audit","example":{"items":[{"action":"api_key.created","created_at":"2025-11-20T10:30:00Z","log_id":"123e4567-e89b-12d3-a456-426614174000","message":"API Key créée","resource_type":"api_key"}],"page":1,"page_size":20,"pages":1,"total":1}},"AuditLogResponse":{"properties":{"log_id":{"type":"string","format":"uuid","title":"Log Id","description":"ID unique du log"},"tenant_id":{"type":"string","title":"Tenant Id","description":"ID du tenant"},"action":{"type":"string","title":"Action","description":"Action effectuée"},"resource_type":{"type":"string","title":"Resource Type","description":"Type de ressource"},"resource_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Id","description":"ID de la ressource"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id","description":"ID de l'utilisateur"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id","description":"ID de l'API Key"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address","description":"Adresse IP du client"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent","description":"User-Agent du client"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint","description":"Endpoint appelé"},"http_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Method","description":"Méthode HTTP"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code","description":"Code HTTP"},"audit_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Audit Metadata","description":"Métadonnées JSON"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Message descriptif"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Date de création"}},"type":"object","required":["log_id","tenant_id","action","resource_type","created_at"],"title":"AuditLogResponse","description":"Schéma de retour pour une entrée d'audit","example":{"action":"api_key.created","created_at":"2025-11-20T10:30:00Z","endpoint":"/api/v1/api-keys/","http_method":"POST","ip_address":"192.168.1.100","log_id":"123e4567-e89b-12d3-a456-426614174000","message":"API Key créée avec préfixe sk-1234","metadata":{"key_prefix":"sk-1234","scopes":["documents:read"]},"resource_id":"123e4567-e89b-12d3-a456-426614174001","resource_type":"api_key","status_code":"201","tenant_id":"tenant_abc","user_agent":"Mozilla/5.0...","user_id":"123e4567-e89b-12d3-a456-426614174002"}},"BlockNoteBlock":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"props":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Props"},"content":{"anyOf":[{"items":{"$ref":"#/components/schemas/BlockNoteRichText"},"type":"array"},{"type":"null"}],"title":"Content"},"children":{"anyOf":[{"items":{"$ref":"#/components/schemas/BlockNoteBlock"},"type":"array"},{"type":"null"}],"title":"Children"}},"additionalProperties":false,"type":"object","required":["id","type"],"title":"BlockNoteBlock"},"BlockNoteDoc":{"properties":{"blocks":{"items":{"$ref":"#/components/schemas/BlockNoteBlock"},"type":"array","title":"Blocks"}},"additionalProperties":false,"type":"object","required":["blocks"],"title":"BlockNoteDoc"},"BlockNoteRichText":{"properties":{"type":{"type":"string","title":"Type"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"styles":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Styles"}},"additionalProperties":false,"type":"object","required":["type"],"title":"BlockNoteRichText"},"Body_patch_documents_document_id_ai_description":{"properties":{"ai_description":{"type":"string","title":"Ai Description"}},"type":"object","required":["ai_description"],"title":"Body_patch_documents_document_id_ai_description"},"Body_patch_documents_document_id_tags":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["tags"],"title":"Body_patch_documents_document_id_tags"},"Body_post_chat_images_upload":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_post_chat_images_upload"},"Body_post_dictation_transcribe":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Audio file to transcribe"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Model ID (e.g., openai/whisper-1)"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"ISO 639-1 language code"}},"type":"object","required":["file"],"title":"Body_post_dictation_transcribe"},"Body_post_documents":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"memory_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Id"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id","description":"Conversation ID for RAG isolation (sf-chatbot)"},"folder_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Id","description":"Folder ID to organize document in a folder"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Source of the request (admin, rag, api)","default":"api"}},"type":"object","required":["file"],"title":"Body_post_documents"},"Body_post_documents_bulk_upload":{"properties":{"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"},"memory_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Id"},"profile_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Id"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","default":"api"}},"type":"object","required":["files"],"title":"Body_post_documents_bulk_upload"},"Body_post_knowledge_source_index_file":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"embedding_model":{"type":"string","title":"Embedding Model","default":"text-embedding-3-small"},"entity_type":{"type":"string","title":"Entity Type","default":"Document"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Id"}},"type":"object","required":["file","knowledge_source_id"],"title":"Body_post_knowledge_source_index_file"},"Body_post_skills_import_bulk":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_post_skills_import_bulk"},"Body_post_skills_import_md":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_post_skills_import_md"},"Body_post_skills_import_package":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_post_skills_import_package"},"Body_post_teams_bots_bot_id_icon":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_post_teams_bots_bot_id_icon"},"Body_post_workflow_workflows_import":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["file"],"title":"Body_post_workflow_workflows_import"},"Body_post_workflow_workflows_workflow_id_form_upload":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"field_name":{"type":"string","title":"Field Name"}},"type":"object","required":["file","field_name"],"title":"Body_post_workflow_workflows_workflow_id_form_upload"},"BudgetStatusResponse":{"properties":{"can_use":{"type":"boolean","title":"Can Use"},"status":{"type":"string","enum":["ok","warning","critical","exceeded"],"title":"Status"},"budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Usd"},"spend_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spend Usd"},"usage_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usage Percent"},"budget_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Type"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"checked_at":{"type":"string","title":"Checked At"},"cache_ttl":{"type":"integer","title":"Cache Ttl","default":60}},"type":"object","required":["can_use","status","checked_at"],"title":"BudgetStatusResponse","description":"Réponse du statut de budget pour les apps tierces."},"BulkImportError":{"properties":{"folder":{"type":"string","title":"Folder"},"error":{"type":"string","title":"Error"}},"type":"object","required":["folder","error"],"title":"BulkImportError"},"BulkImportResponse":{"properties":{"imported":{"type":"integer","title":"Imported"},"updated":{"type":"integer","title":"Updated"},"skipped":{"type":"integer","title":"Skipped"},"errors":{"items":{"$ref":"#/components/schemas/BulkImportError"},"type":"array","title":"Errors"},"skills":{"items":{"$ref":"#/components/schemas/BulkImportSkillSummary"},"type":"array","title":"Skills"}},"type":"object","required":["imported","updated","skipped","errors","skills"],"title":"BulkImportResponse"},"BulkImportSkillSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"}},"type":"object","required":["id","name","slug"],"title":"BulkImportSkillSummary"},"BulkUploadFileResult":{"properties":{"filename":{"type":"string","title":"Filename"},"accepted":{"type":"boolean","title":"Accepted"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["filename","accepted"],"title":"BulkUploadFileResult"},"BulkUploadResponse":{"properties":{"batch_id":{"type":"string","format":"uuid","title":"Batch Id"},"total":{"type":"integer","title":"Total"},"accepted":{"type":"integer","title":"Accepted"},"rejected":{"type":"integer","title":"Rejected"},"queued":{"type":"integer","title":"Queued"},"files":{"items":{"$ref":"#/components/schemas/BulkUploadFileResult"},"type":"array","title":"Files"}},"type":"object","required":["batch_id","total","accepted","rejected","queued","files"],"title":"BulkUploadResponse"},"BulkUploadStatusResponse":{"properties":{"batch_id":{"type":"string","format":"uuid","title":"Batch Id"},"status":{"type":"string","title":"Status"},"total_files":{"type":"integer","title":"Total Files"},"completed_files":{"type":"integer","title":"Completed Files"},"failed_files":{"type":"integer","title":"Failed Files"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["batch_id","status","total_files","completed_files","failed_files","created_at"],"title":"BulkUploadStatusResponse"},"CalendarConnectionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"external_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Email"},"status":{"type":"string","title":"Status"},"token_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Token Expires At"},"webhook_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Webhook Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"}},"type":"object","required":["id","provider","external_email","status","token_expires_at","created_at","updated_at"],"title":"CalendarConnectionResponse","description":"Public shape of a calendar connection.\n\nTokens are NEVER returned — only metadata the user needs to manage\ntheir connections from the UI."},"CatalogItem":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"provider":{"type":"string","title":"Provider"},"scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scopes"},"capabilities":{"items":{"type":"string"},"type":"array","title":"Capabilities","default":[]}},"type":"object","required":["name","display_name","provider"],"title":"CatalogItem"},"CatalogModelResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"provider":{"type":"string","title":"Provider"},"mode":{"type":"string","title":"Mode"},"input_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Cost Per Million"},"output_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Cost Per Million"},"max_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Input Tokens"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"supports_vision":{"type":"boolean","title":"Supports Vision"},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling"}},"type":"object","required":["model_id","name","display_name","provider","mode","input_cost_per_million","output_cost_per_million","max_input_tokens","max_output_tokens","supports_vision","supports_function_calling"],"title":"CatalogModelResponse","description":"Model from the SUPERFASTTT LLM catalog"},"CatalogModelsListResponse":{"properties":{"models":{"items":{"$ref":"#/components/schemas/CatalogModelResponse"},"type":"array","title":"Models"},"total":{"type":"integer","title":"Total"},"providers":{"items":{"type":"string"},"type":"array","title":"Providers"},"modes":{"items":{"type":"string"},"type":"array","title":"Modes"}},"type":"object","required":["models","total","providers","modes"],"title":"CatalogModelsListResponse"},"ChatImageUploadResponse":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"storage_path":{"type":"string","title":"Storage Path"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size":{"type":"integer","title":"Size"}},"type":"object","required":["id","url","storage_path","filename","content_type","size"],"title":"ChatImageUploadResponse"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role","description":"Message role: system, user, or assistant"},"content":{"type":"string","title":"Content","description":"Message content"}},"type":"object","required":["role","content"],"title":"ChatMessage","description":"Chat message format"},"ChatRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID (e.g., 'openai/gpt-4o-mini')"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"Messages","description":"List of messages"},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Sampling temperature","default":0.7},"max_tokens":{"anyOf":[{"type":"integer","maximum":128000.0,"minimum":1.0},{"type":"null"}],"title":"Max Tokens","description":"Maximum tokens to generate","default":4096},"top_p":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Top P","description":"Top-p (nucleus) sampling","default":1.0},"max_thinking_tokens":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Thinking Tokens","description":"Max tokens for thinking/reasoning (for thinking models)"},"include_vocabulary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Vocabulary","description":"Include company vocabulary in system prompt","default":false},"include_company_context":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Company Context","description":"Include company context (identity blocks) in system prompt","default":false},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Usage tag for tracking (e.g., 'knowledge-hub', 'sf-project')"}},"type":"object","required":["model","messages"],"title":"ChatRequest","description":"Request for chat completion"},"CheckSessionRequest":{"properties":{"client_id":{"type":"string","title":"Client Id"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"scope":{"type":"string","title":"Scope","default":"openid profile email"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["client_id","redirect_uri"],"title":"CheckSessionRequest","description":"Request to check if session is valid for SSO"},"CheckSessionResponse":{"properties":{"authenticated":{"type":"boolean","title":"Authenticated"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"redirect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Url"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["authenticated"],"title":"CheckSessionResponse","description":"Response for session check"},"ChunkSample":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"chunk_index":{"type":"integer","minimum":0.0,"title":"Chunk Index"},"text":{"type":"string","title":"Text"},"embedding_model":{"type":"string","title":"Embedding Model"},"embedding_dim":{"type":"integer","title":"Embedding Dim"},"embedding_created_at":{"type":"string","format":"date-time","title":"Embedding Created At"},"chunking_strategy":{"type":"string","title":"Chunking Strategy"},"vector_space":{"type":"string","title":"Vector Space"},"page_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Number"},"section_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section Title"}},"additionalProperties":false,"type":"object","required":["id","chunk_index","text","embedding_model","embedding_dim","embedding_created_at","chunking_strategy","vector_space"],"title":"ChunkSample"},"CommunicationStyleResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"presentation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presentation"},"typical_phrases":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typical Phrases"},"things_to_avoid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Things To Avoid"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"is_demo":{"type":"boolean","title":"Is Demo","default":false}},"type":"object","required":["id","tenant_id","name","description","presentation","typical_phrases","things_to_avoid","created_by","updated_by","created_at","updated_at"],"title":"CommunicationStyleResponse"},"CommunicationStyleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"presentation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Presentation"},"typical_phrases":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Typical Phrases"},"things_to_avoid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Things To Avoid"}},"type":"object","title":"CommunicationStyleUpdate"},"CompleteRequest":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"}},"type":"object","required":["asset_id"],"title":"CompleteRequest"},"ConnectFromCatalogRequest":{"properties":{"alias":{"type":"string","maxLength":100,"minLength":1,"title":"Alias"},"client_id":{"type":"string","maxLength":500,"minLength":1,"title":"Client Id"},"client_secret":{"type":"string","format":"password","title":"Client Secret","writeOnly":true},"provider_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Provider Metadata"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Headers"}},"additionalProperties":false,"type":"object","required":["alias","client_id","client_secret"],"title":"ConnectFromCatalogRequest","description":"Body of ``POST /api/v1/mcp/catalog/{name}/connect``.\n\nThe tenant admin always provides ``client_id`` + ``client_secret`` from\nits own Connected App (per-tenant). ``alias`` lets multiple instances of\nthe same provider coexist (Salesforce sandbox vs prod, multiple Slack\nworkspaces…). ``provider_metadata`` is validated against the catalog's\n``provider_metadata_schema`` when present."},"ConnectionItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"provider":{"type":"string","title":"Provider"},"alias":{"type":"string","title":"Alias"},"status":{"type":"string","title":"Status"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"},"created_via_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created Via App"},"scopes_granted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scopes Granted"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","provider","alias","status","created_at"],"title":"ConnectionItem"},"ConnectionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"catalog_entry_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Catalog Entry Id"},"alias":{"type":"string","title":"Alias"},"auth_type":{"type":"string","title":"Auth Type"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"status":{"type":"string","title":"Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"last_health_check_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Health Check At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"scopes_granted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scopes Granted"},"connected_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Account Id"},"connected_account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Account Email"},"connected_account_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Account Display Name"},"connected_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Org Id"},"connected_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected Org Name"},"provider_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Provider Metadata"},"auth_config_version_at_connect":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auth Config Version At Connect"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"oauth_client_secret_set":{"type":"boolean","title":"Oauth Client Secret Set","default":false},"oauth_refresh_token_set":{"type":"boolean","title":"Oauth Refresh Token Set","default":false}},"type":"object","required":["id","alias","auth_type","status","is_active","created_at","updated_at"],"title":"ConnectionResponse","description":"Public projection of a connection — never exposes ciphertext."},"ConnectionTestResult":{"properties":{"ok":{"type":"boolean","title":"Ok"},"status":{"type":"string","title":"Status"},"account_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Email"},"messages_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Messages Total"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["ok","status"],"title":"ConnectionTestResult"},"ConversationCreate":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Conversation title"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id","description":"Memory/Knowledge Base ID. Null for standalone conversations."},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Source app identifier (e.g. sf-chatbot)"}},"type":"object","required":["title"],"title":"ConversationCreate","description":"Schema for creating a new conversation"},"ConversationDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"message_count":{"type":"integer","minimum":0.0,"title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"messages":{"$ref":"#/components/schemas/MessageListPage"}},"additionalProperties":false,"type":"object","required":["id","status","message_count","created_at","updated_at","messages"],"title":"ConversationDetail"},"ConversationDetailResponse":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Conversation title"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"status":{"type":"string","title":"Status"},"message_count":{"type":"integer","title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"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/MessageResponse"},"type":"array","title":"Messages","description":"Messages in this conversation"}},"type":"object","required":["title","id","tenant_id","user_id","status","message_count","created_at","updated_at"],"title":"ConversationDetailResponse","description":"Schema for conversation with messages"},"ConversationListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"status":{"type":"string","title":"Status"},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"message_count":{"type":"integer","minimum":0.0,"title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","status","message_count","created_at","updated_at"],"title":"ConversationListItem"},"ConversationListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"ConversationListPage"},"ConversationListResponse":{"properties":{"conversations":{"items":{"$ref":"#/components/schemas/ConversationResponse"},"type":"array","title":"Conversations"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["conversations","total"],"title":"ConversationListResponse","description":"Schema for list of conversations"},"ConversationMemoryExtract":{"properties":{"messages":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","minItems":1,"title":"Messages","description":"Messages de la conversation [{'role': 'user/assistant', 'content': '...'}]"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Métadonnées optionnelles"}},"type":"object","required":["messages"],"title":"ConversationMemoryExtract","description":"Schema pour extraire les mémoires d'une conversation"},"ConversationResponse":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"Conversation title"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"status":{"type":"string","title":"Status"},"message_count":{"type":"integer","title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["title","id","tenant_id","user_id","status","message_count","created_at","updated_at"],"title":"ConversationResponse","description":"Schema for conversation in API response"},"ConversationUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Title"}},"type":"object","title":"ConversationUpdate","description":"Schema for updating a conversation"},"CreateKnowledgeSourceRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"profile":{"type":"string","title":"Profile","default":"documentaire"}},"type":"object","required":["name"],"title":"CreateKnowledgeSourceRequest"},"CreateLinkRequest":{"properties":{"parent_type":{"type":"string","title":"Parent Type"},"parent_id":{"type":"string","format":"uuid","title":"Parent Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["parent_type","parent_id"],"title":"CreateLinkRequest"},"CreateSessionRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"device_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Info"}},"type":"object","required":["user_id","tenant_id","email","role"],"title":"CreateSessionRequest","description":"Request to create a session after login"},"CreateShareRequest":{"properties":{"target_type":{"$ref":"#/components/schemas/ShareTargetTypeEnum","description":"Type of target: 'user' or 'team'"},"target_id":{"type":"string","format":"uuid","title":"Target Id","description":"UUID of the user or team to share with"},"permission":{"$ref":"#/components/schemas/app__schemas__share__SharePermissionEnum","description":"Permission level: view, comment, edit, or admin","default":"view"},"message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Message","description":"Optional message to include with the share"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration date for the share"}},"type":"object","required":["target_type","target_id"],"title":"CreateShareRequest","description":"Request body for creating a new share","example":{"message":"Here's the project for review","permission":"edit","target_id":"550e8400-e29b-41d4-a716-446655440000","target_type":"user"}},"CurrentWorkflowResponse":{"properties":{"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes"},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["nodes","edges"],"title":"CurrentWorkflowResponse","description":"Schema for current workflow response"},"CurrentWorkflowSave":{"properties":{"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes"},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges"}},"type":"object","title":"CurrentWorkflowSave","description":"Schema for saving current workflow"},"CustomMcpServerCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","maxLength":50,"title":"Category","default":"custom"},"transport":{"type":"string","maxLength":30,"title":"Transport"},"url":{"type":"string","title":"Url"},"auth_type":{"type":"string","enum":["none","query_param","bearer","oauth_refresh"],"title":"Auth Type","default":"none"},"bearer_token":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Bearer Token"},"api_key_param":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Api Key Param"},"help_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Help Url"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers","default":{}},"oauth_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Id"},"oauth_client_secret":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Oauth Client Secret"},"oauth_refresh_token":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Oauth Refresh Token"},"oauth_token_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Token Endpoint"},"oauth_authorization_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Authorization Endpoint"},"oauth_scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Scopes"}},"type":"object","required":["name","display_name","transport","url"],"title":"CustomMcpServerCreate"},"CustomMcpServerResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","title":"Category"},"transport":{"type":"string","title":"Transport"},"url":{"type":"string","title":"Url"},"auth_type":{"type":"string","enum":["none","query_param","bearer","oauth_refresh"],"title":"Auth Type"},"requires_api_key":{"type":"boolean","title":"Requires Api Key"},"bearer_token_set":{"type":"boolean","title":"Bearer Token Set"},"api_key_param":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Param"},"help_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Url"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers"},"is_active":{"type":"boolean","title":"Is Active"},"oauth_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Id"},"oauth_token_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Token Endpoint"},"oauth_authorization_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Authorization Endpoint"},"oauth_scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Scopes"},"oauth_client_secret_set":{"type":"boolean","title":"Oauth Client Secret Set"},"oauth_refresh_token_set":{"type":"boolean","title":"Oauth Refresh Token Set"},"created_by_id":{"type":"string","format":"uuid","title":"Created By 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","name","display_name","description","category","transport","url","auth_type","requires_api_key","bearer_token_set","api_key_param","help_url","headers","is_active","oauth_client_id","oauth_token_endpoint","oauth_authorization_endpoint","oauth_scopes","oauth_client_secret_set","oauth_refresh_token_set","created_by_id","created_at","updated_at"],"title":"CustomMcpServerResponse"},"CustomMcpServerUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category"},"transport":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Transport"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"auth_type":{"anyOf":[{"type":"string","enum":["none","query_param","bearer","oauth_refresh"]},{"type":"null"}],"title":"Auth Type"},"bearer_token":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Bearer Token"},"clear_bearer_token":{"type":"boolean","title":"Clear Bearer Token","default":false},"api_key_param":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Api Key Param"},"help_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Help Url"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"oauth_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Id"},"oauth_client_secret":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Oauth Client Secret"},"oauth_refresh_token":{"anyOf":[{"type":"string","format":"password","writeOnly":true},{"type":"null"}],"title":"Oauth Refresh Token"},"oauth_token_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Token Endpoint"},"oauth_authorization_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Authorization Endpoint"},"oauth_scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Scopes"},"clear_oauth_client_secret":{"type":"boolean","title":"Clear Oauth Client Secret","default":false},"clear_oauth_refresh_token":{"type":"boolean","title":"Clear Oauth Refresh Token","default":false}},"type":"object","title":"CustomMcpServerUpdate"},"DailyDocumentStatsResponse":{"properties":{"date":{"type":"string","title":"Date"},"documents_count":{"type":"integer","title":"Documents Count"},"chunks_count":{"type":"integer","title":"Chunks Count"},"storage_size":{"type":"integer","title":"Storage Size"}},"type":"object","required":["date","documents_count","chunks_count","storage_size"],"title":"DailyDocumentStatsResponse","description":"Stats quotidiennes pour les graphiques"},"DictationConfigResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether dictation is enabled for this tenant","default":true},"allowed_models":{"items":{"type":"string"},"type":"array","title":"Allowed Models","description":"List of model IDs allowed for users (subset of ALLOWED_DICTATION_MODELS)"},"default_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Model","description":"Default model to use when user doesn't specify one"},"max_recording_seconds":{"type":"integer","maximum":3600.0,"minimum":30.0,"title":"Max Recording Seconds","description":"Maximum recording duration in seconds (30s to 1 hour)","default":300},"chunk_interval_seconds":{"type":"integer","maximum":60.0,"minimum":5.0,"title":"Chunk Interval Seconds","description":"Interval for sending audio chunks for progressive transcription","default":10},"realtime_enabled":{"type":"boolean","title":"Realtime Enabled","description":"Whether realtime voice-to-text transcription is enabled (requires Mistral API key)","default":false},"available_models":{"items":{"$ref":"#/components/schemas/DictationModelInfo"},"type":"array","title":"Available Models","description":"List of all dictation models with availability status"}},"type":"object","title":"DictationConfigResponse","description":"Response schema for dictation configuration","example":{"allowed_models":["openai/whisper-1"],"available_models":[{"is_available":true,"is_enabled":true,"model_id":"openai/whisper-1","name":"OpenAI Whisper","provider":"openai"},{"is_available":false,"is_enabled":false,"model_id":"mistral/voxtral-mini-latest","name":"Mistral Voxtral","provider":"mistral"}],"chunk_interval_seconds":10,"default_model":"openai/whisper-1","enabled":true,"max_recording_seconds":300,"realtime_enabled":false}},"DictationConfigUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether dictation is enabled for this tenant","default":true},"allowed_models":{"items":{"type":"string"},"type":"array","title":"Allowed Models","description":"List of model IDs allowed for users (subset of ALLOWED_DICTATION_MODELS)"},"default_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Model","description":"Default model to use when user doesn't specify one"},"max_recording_seconds":{"type":"integer","maximum":3600.0,"minimum":30.0,"title":"Max Recording Seconds","description":"Maximum recording duration in seconds (30s to 1 hour)","default":300},"chunk_interval_seconds":{"type":"integer","maximum":60.0,"minimum":5.0,"title":"Chunk Interval Seconds","description":"Interval for sending audio chunks for progressive transcription","default":10},"realtime_enabled":{"type":"boolean","title":"Realtime Enabled","description":"Whether realtime voice-to-text transcription is enabled (requires Mistral API key)","default":false}},"type":"object","title":"DictationConfigUpdate","description":"Schema for updating dictation configuration","example":{"allowed_models":["openai/whisper-1"],"chunk_interval_seconds":10,"default_model":"openai/whisper-1","enabled":true,"max_recording_seconds":300,"realtime_enabled":false}},"DictationModelInfo":{"properties":{"model_id":{"type":"string","title":"Model Id","description":"Model identifier (e.g., openai/whisper-1)"},"name":{"type":"string","title":"Name","description":"Display name"},"provider":{"type":"string","title":"Provider","description":"Provider name (openai, mistral, etc.)"},"is_available":{"type":"boolean","title":"Is Available","description":"True if tenant has API key for this provider","default":false},"is_enabled":{"type":"boolean","title":"Is Enabled","description":"True if enabled for this tenant","default":false}},"type":"object","required":["model_id","name","provider"],"title":"DictationModelInfo","description":"Information about a dictation model","example":{"is_available":true,"is_enabled":true,"model_id":"openai/whisper-1","name":"OpenAI Whisper","provider":"openai"}},"DictationTranscribeResponse":{"properties":{"text":{"type":"string","title":"Text","description":"Transcribed text"},"duration_seconds":{"type":"number","title":"Duration Seconds","description":"Duration of the audio in seconds"},"model_used":{"type":"string","title":"Model Used","description":"Model used for transcription"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"Detected or specified language"}},"type":"object","required":["text","duration_seconds","model_used"],"title":"DictationTranscribeResponse","description":"Response schema for dictation transcription","example":{"duration_seconds":2.5,"language":"fr","model_used":"openai/whisper-1","text":"Bonjour, comment allez-vous ?"}},"DisconnectResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","title":"Status"},"revoked_at_provider":{"type":"boolean","title":"Revoked At Provider"}},"type":"object","required":["id","status","revoked_at_provider"],"title":"DisconnectResponse"},"DispatchBotRequest":{"properties":{"platform":{"type":"string","title":"Platform","description":"Meeting platform identifier — one of google_meet, teams, zoom."},"native_meeting_id":{"type":"string","maxLength":255,"minLength":1,"title":"Native Meeting Id","description":"Platform-native meeting id (e.g., 'abc-defg-hij' for Google Meet)."},"bot_name":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Bot Name","description":"Display name shown in the meeting roster."},"language":{"anyOf":[{"type":"string","maxLength":8,"minLength":2},{"type":"null"}],"title":"Language","description":"ISO 639-1 language hint (e.g., 'fr', 'en')."},"passcode":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Passcode","description":"Required for most Teams meetings. The '?p=' value of the URL."},"recording_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recording Enabled","description":"Persist a media recording. Defaults to the Vexa stack policy."}},"type":"object","required":["platform","native_meeting_id"],"title":"DispatchBotRequest"},"DispatchBotResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"vexa_user_id":{"type":"integer","title":"Vexa User Id"},"meeting_id":{"type":"integer","title":"Meeting Id"},"platform":{"type":"string","title":"Platform"},"native_meeting_id":{"type":"string","title":"Native Meeting Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["tenant_id","vexa_user_id","meeting_id","platform","native_meeting_id","status"],"title":"DispatchBotResponse"},"DocDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"storage_source":{"$ref":"#/components/schemas/StorageSourceEnum"},"origin_app":{"$ref":"#/components/schemas/OriginAppEnum"},"source_document_id":{"type":"string","format":"uuid","title":"Source Document Id"},"source_parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Parent Id"},"source_parent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Parent Name"},"title":{"type":"string","title":"Title"},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"},"preview_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Text"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_indexed":{"type":"boolean","title":"Is Indexed"},"chunk_count":{"type":"integer","title":"Chunk Count"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"content":{"anyOf":[{},{"type":"null"}],"title":"Content"},"user_permission":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Permission"}},"type":"object","required":["id","storage_source","origin_app","source_document_id","title","is_indexed","chunk_count","created_at","updated_at"],"title":"DocDetailResponse"},"DocListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"storage_source":{"$ref":"#/components/schemas/StorageSourceEnum"},"origin_app":{"$ref":"#/components/schemas/OriginAppEnum"},"source_document_id":{"type":"string","format":"uuid","title":"Source Document Id"},"source_parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Parent Id"},"source_parent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Parent Name"},"title":{"type":"string","title":"Title"},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"},"preview_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Text"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_indexed":{"type":"boolean","title":"Is Indexed"},"chunk_count":{"type":"integer","title":"Chunk Count"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By 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","storage_source","origin_app","source_document_id","title","is_indexed","chunk_count","created_at","updated_at"],"title":"DocListItem"},"DocListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DocListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["items","total","page","per_page","total_pages"],"title":"DocListResponse"},"DocSearchMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"DocSearchMessage"},"DocSearchRequest":{"properties":{"question":{"type":"string","minLength":1,"title":"Question"},"history":{"anyOf":[{"items":{"$ref":"#/components/schemas/DocSearchMessage"},"type":"array"},{"type":"null"}],"title":"History"},"top_k":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Top K","default":5}},"type":"object","required":["question"],"title":"DocSearchRequest"},"DocStatsResponse":{"properties":{"total_documents":{"type":"integer","title":"Total Documents"},"by_storage":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Storage"},"by_origin":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Origin"},"by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Type"},"recent_count_7d":{"type":"integer","title":"Recent Count 7D"},"indexed_count":{"type":"integer","title":"Indexed Count"}},"type":"object","required":["total_documents","by_storage","by_origin","by_type","recent_count_7d","indexed_count"],"title":"DocStatsResponse"},"DocUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{},{"type":"null"}],"title":"Content"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"DocUpdateRequest"},"DocumentDeleteRequest":{"properties":{"source_type":{"type":"string","maxLength":50,"title":"Source Type"},"source_feed":{"type":"string","maxLength":50,"title":"Source Feed"},"external_id":{"type":"string","maxLength":500,"title":"External Id"},"knowledge_base_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Knowledge Base Id"}},"type":"object","required":["source_type","source_feed","external_id"],"title":"DocumentDeleteRequest"},"DocumentDeleteResponse":{"properties":{"action":{"type":"string","title":"Action"},"external_id":{"type":"string","title":"External Id"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"}},"type":"object","required":["action","external_id"],"title":"DocumentDeleteResponse"},"DocumentDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"filename":{"type":"string","title":"Filename"},"original_filename":{"type":"string","title":"Original Filename"},"file_type":{"type":"string","title":"File Type"},"file_size":{"type":"integer","minimum":0.0,"title":"File Size"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"ai_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"status":{"type":"string","title":"Status"},"total_chunks":{"type":"integer","minimum":0.0,"title":"Total Chunks"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"download":{"$ref":"#/components/schemas/PresignedDownload"},"chunks_sample":{"items":{"$ref":"#/components/schemas/ChunkSample"},"type":"array","maxItems":50,"title":"Chunks Sample"}},"additionalProperties":false,"type":"object","required":["id","filename","original_filename","file_type","file_size","status","total_chunks","created_at","updated_at","download","chunks_sample"],"title":"DocumentDetail"},"DocumentFolderCreate":{"properties":{"name":{"type":"string","maxLength":500,"minLength":1,"title":"Name"},"parent_folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Folder Id"}},"type":"object","required":["name"],"title":"DocumentFolderCreate"},"DocumentFolderResponse":{"properties":{"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"parent_folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Folder Id"},"name":{"type":"string","title":"Name"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"document_count":{"type":"integer","title":"Document 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":["folder_id","name","created_at","updated_at"],"title":"DocumentFolderResponse"},"DocumentFolderUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Name"},"parent_folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Folder Id"}},"type":"object","title":"DocumentFolderUpdate"},"DocumentJobResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"task_id":{"type":"string","title":"Task Id"},"document_id":{"type":"string","format":"uuid","title":"Document Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"},"total_chunks":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Chunks"},"processed_chunks":{"type":"integer","title":"Processed Chunks","default":0},"enriched_chunks":{"type":"integer","title":"Enriched Chunks","default":0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"error_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error Details"},"retry_count":{"type":"integer","title":"Retry Count","default":0},"max_retries":{"type":"integer","title":"Max Retries","default":3},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"enrichment_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Enrichment Status"},"enrichment_total_batches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Enrichment Total Batches"},"enrichment_completed_batches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Enrichment Completed Batches"}},"type":"object","required":["id","task_id","document_id","tenant_id","status","progress","created_at"],"title":"DocumentJobResponse","description":"Response for document indexing job status"},"DocumentListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"filename":{"type":"string","title":"Filename"},"original_filename":{"type":"string","title":"Original Filename"},"file_type":{"type":"string","title":"File Type"},"file_size":{"type":"integer","minimum":0.0,"title":"File Size"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"ai_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"status":{"type":"string","title":"Status"},"total_chunks":{"type":"integer","minimum":0.0,"title":"Total Chunks"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","filename","original_filename","file_type","file_size","status","total_chunks","created_at","updated_at"],"title":"DocumentListItem"},"DocumentListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DocumentListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"DocumentListPage"},"DocumentListResponse":{"properties":{"documents":{"items":{"$ref":"#/components/schemas/DocumentResponse"},"type":"array","title":"Documents"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["documents","total","page","page_size"],"title":"DocumentListResponse","description":"Schema pour liste de documents"},"DocumentResponse":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"filename":{"type":"string","title":"Filename"},"file_size":{"type":"integer","title":"File Size"},"file_type":{"type":"string","title":"File Type"},"original_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Filename"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"storage_path":{"type":"string","title":"Storage Path"},"status":{"type":"string","title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"total_chunks":{"type":"integer","title":"Total Chunks"},"doc_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Doc Metadata"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"ai_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"content_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Hash"},"processing_started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processing Started At"},"processing_completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processing Completed At"},"profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Profile Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["filename","file_size","file_type","id","tenant_id","storage_path","status","total_chunks","created_at","updated_at"],"title":"DocumentResponse","description":"Schema pour réponse document"},"DocumentSummary":{"properties":{"document_id":{"type":"string","format":"uuid","title":"Document Id"},"filename":{"type":"string","title":"Filename"},"original_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Filename"},"file_type":{"type":"string","title":"File Type"},"file_size":{"type":"integer","title":"File Size"},"status":{"type":"string","title":"Status"},"total_chunks":{"type":"integer","title":"Total Chunks"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folder Id"}},"type":"object","required":["document_id","filename","file_type","file_size","status","total_chunks","created_at"],"title":"DocumentSummary","description":"Minimal document info for memory response"},"DocumentTypeDistributionResponse":{"properties":{"file_type":{"type":"string","title":"File Type"},"count":{"type":"integer","title":"Count"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["file_type","count","percentage"],"title":"DocumentTypeDistributionResponse","description":"Distribution par type de document"},"DocumentUploadResponse":{"properties":{"document_id":{"type":"string","format":"uuid","title":"Document Id"},"filename":{"type":"string","title":"Filename"},"file_size":{"type":"integer","title":"File Size"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message","default":"Document uploaded successfully. Indexation started."},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},"type":"object","required":["document_id","filename","file_size","status"],"title":"DocumentUploadResponse","description":"Response après upload d'un document"},"DocumentUpsertRequest":{"properties":{"knowledge_base_id":{"type":"string","format":"uuid","title":"Knowledge Base Id"},"external_id":{"type":"string","maxLength":500,"title":"External Id"},"source_type":{"type":"string","maxLength":50,"title":"Source Type"},"source_feed":{"type":"string","maxLength":50,"title":"Source Feed"},"title":{"type":"string","maxLength":500,"title":"Title"},"content_markdown":{"type":"string","title":"Content Markdown"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["knowledge_base_id","external_id","source_type","source_feed","title","content_markdown"],"title":"DocumentUpsertRequest"},"DocumentUpsertResponse":{"properties":{"action":{"type":"string","title":"Action"},"link":{"$ref":"#/components/schemas/ExternalDocumentLinkResponse"},"document_id":{"type":"string","format":"uuid","title":"Document Id"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},"type":"object","required":["action","link","document_id"],"title":"DocumentUpsertResponse"},"DomainUsage":{"properties":{"domain":{"type":"string","enum":["meetings","documents","projects","workflows","knowledge_bases","agents_prompts","chat","system_tables"],"title":"Domain"},"bytes":{"type":"integer","minimum":0.0,"title":"Bytes"},"label_fr":{"type":"string","title":"Label Fr"},"label_en":{"type":"string","title":"Label En"}},"additionalProperties":false,"type":"object","required":["domain","bytes","label_fr","label_en"],"title":"DomainUsage"},"DownloadUrlResponse":{"properties":{"download_url":{"type":"string","title":"Download Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"}},"type":"object","required":["download_url","expires_at","filename","content_type"],"title":"DownloadUrlResponse"},"DriveFolderOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"}},"type":"object","required":["id","name","path"],"title":"DriveFolderOut"},"DriveOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"DriveOut"},"EmailBindingItem":{"properties":{"node_id":{"type":"string","title":"Node Id"},"status":{"type":"string","title":"Status"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"folder_or_label":{"type":"string","title":"Folder Or Label"},"backfill_mode":{"type":"string","title":"Backfill Mode"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["node_id","status","connection_id","folder_or_label","backfill_mode","updated_at"],"title":"EmailBindingItem"},"EmailPolicyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email_connections_enabled":{"type":"boolean","title":"Email Connections Enabled"},"allowed_providers":{"items":{"type":"string"},"type":"array","title":"Allowed Providers"},"allowed_connection_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Connection Scopes"},"allowed_apps":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Allowed Apps"},"allow_workflow_triggers":{"type":"boolean","title":"Allow Workflow Triggers"},"allow_knowledge_ingestion":{"type":"boolean","title":"Allow Knowledge Ingestion"},"allow_agent_context":{"type":"boolean","title":"Allow Agent Context"},"allow_reply_draft":{"type":"boolean","title":"Allow Reply Draft"},"allow_send":{"type":"boolean","title":"Allow Send"},"require_user_consent_for_knowledge":{"type":"boolean","title":"Require User Consent For Knowledge"},"require_user_consent_for_agent_context":{"type":"boolean","title":"Require User Consent For Agent Context"},"max_connected_mailboxes_per_user":{"type":"integer","title":"Max Connected Mailboxes Per User"},"max_backfill_days":{"type":"integer","title":"Max Backfill Days"},"retention_raw_days":{"type":"integer","title":"Retention Raw Days"},"retention_attachment_days":{"type":"integer","title":"Retention Attachment Days"},"admin_content_visibility":{"type":"string","enum":["metadata_only","full_with_breakglass"],"title":"Admin Content Visibility"},"attachment_max_size_mb":{"type":"integer","title":"Attachment Max Size Mb"},"attachment_allowed_mime_types":{"items":{"type":"string"},"type":"array","title":"Attachment Allowed Mime Types"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"updated_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Updated By Id"}},"type":"object","required":["id","email_connections_enabled","allowed_providers","allowed_connection_scopes","allowed_apps","allow_workflow_triggers","allow_knowledge_ingestion","allow_agent_context","allow_reply_draft","allow_send","require_user_consent_for_knowledge","require_user_consent_for_agent_context","max_connected_mailboxes_per_user","max_backfill_days","retention_raw_days","retention_attachment_days","admin_content_visibility","attachment_max_size_mb","attachment_allowed_mime_types","created_at","updated_at"],"title":"EmailPolicyResponse"},"EmailPolicyUpdate":{"properties":{"email_connections_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Connections Enabled"},"allowed_providers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Providers"},"allowed_connection_scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Connection Scopes"},"allowed_apps":{"anyOf":[{"additionalProperties":{"type":"boolean"},"type":"object"},{"type":"null"}],"title":"Allowed Apps"},"allow_workflow_triggers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Workflow Triggers"},"allow_knowledge_ingestion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Knowledge Ingestion"},"allow_agent_context":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Agent Context"},"allow_reply_draft":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Reply Draft"},"allow_send":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Send"},"require_user_consent_for_knowledge":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require User Consent For Knowledge"},"require_user_consent_for_agent_context":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require User Consent For Agent Context"},"max_connected_mailboxes_per_user":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Connected Mailboxes Per User"},"max_backfill_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Backfill Days"},"retention_raw_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Retention Raw Days"},"retention_attachment_days":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Retention Attachment Days"},"admin_content_visibility":{"anyOf":[{"type":"string","enum":["metadata_only","full_with_breakglass"]},{"type":"null"}],"title":"Admin Content Visibility"},"attachment_max_size_mb":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Attachment Max Size Mb"},"attachment_allowed_mime_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attachment Allowed Mime Types"}},"additionalProperties":false,"type":"object","title":"EmailPolicyUpdate","description":"PATCH-style update: only fields present in the payload are applied."},"EmbeddingStatusResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"total":{"type":"integer","title":"Total"},"embedded":{"type":"integer","title":"Embedded"},"pending":{"type":"integer","title":"Pending"},"failed":{"type":"integer","title":"Failed"},"oldest_pending_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Oldest Pending At"}},"additionalProperties":false,"type":"object","required":["memory_id","total","embedded","pending","failed"],"title":"EmbeddingStatusResponse","description":"GET /memories/{id}/embedding-status."},"EntitiesBulkUpsertRequest":{"properties":{"entities":{"items":{"$ref":"#/components/schemas/EntityIn"},"type":"array","maxItems":1000,"minItems":1,"title":"Entities"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"additionalProperties":false,"type":"object","required":["entities"],"title":"EntitiesBulkUpsertRequest","description":"Bulk upsert d'entites pour une Memory structuree."},"EntitiesBulkUpsertResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"dry_run":{"type":"boolean","title":"Dry Run"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"},"results":{"items":{"$ref":"#/components/schemas/EntityUpsertResult"},"type":"array","title":"Results"},"dispatched_reembed_jobs":{"type":"integer","title":"Dispatched Reembed Jobs","default":0}},"additionalProperties":false,"type":"object","required":["memory_id","dry_run","counts","results"],"title":"EntitiesBulkUpsertResponse","description":"Reponse de POST /memories/{id}/entities."},"EntityHit":{"properties":{"entity_id":{"type":"string","format":"uuid","title":"Entity Id"},"external_id":{"type":"string","title":"External Id"},"type_norm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Norm"},"commune_norm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Norm"},"raw":{"additionalProperties":true,"type":"object","title":"Raw"},"score":{"type":"number","title":"Score"},"rank":{"type":"integer","title":"Rank"},"score_breakdown":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Score Breakdown"}},"additionalProperties":false,"type":"object","required":["entity_id","external_id","raw","score","rank"],"title":"EntityHit","description":"Une entite retournee par /search."},"EntityIn":{"properties":{"external_id":{"type":"string","maxLength":255,"minLength":1,"title":"External Id"},"raw":{"additionalProperties":true,"type":"object","title":"Raw","description":"Payload source brut"},"lat":{"anyOf":[{"type":"number","maximum":90.0,"minimum":-90.0},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number","maximum":180.0,"minimum":-180.0},{"type":"null"}],"title":"Lon"}},"additionalProperties":false,"type":"object","required":["external_id","raw"],"title":"EntityIn","description":"Une entite a upserter dans une KB structuree.\n\nLe payload est intentionnellement minimaliste : la projection vers\n`search_text_norm`, `embedding_text`, `type_norm`, `commune_norm`, etc.\nest calculee server-side par le service d'ingestion via le\n`embedding_template` de la Memory."},"EntityListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"external_id":{"type":"string","title":"External Id"},"type_norm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Norm"},"commune_norm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commune Norm"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"status":{"type":"string","title":"Status"},"entity_version":{"type":"integer","title":"Entity Version"},"embedding_indexed":{"type":"boolean","title":"Embedding Indexed"},"raw":{"additionalProperties":true,"type":"object","title":"Raw"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","external_id","status","entity_version","embedding_indexed","raw","updated_at"],"title":"EntityListItem","description":"One row in GET /memories/{id}/entities."},"EntityListResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"items":{"items":{"$ref":"#/components/schemas/EntityListItem"},"type":"array","title":"Items"}},"additionalProperties":false,"type":"object","required":["memory_id","total","skip","limit","items"],"title":"EntityListResponse","description":"GET /memories/{id}/entities — paginated list."},"EntityUpsertResult":{"properties":{"external_id":{"type":"string","title":"External Id"},"action":{"type":"string","title":"Action"},"entity_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Entity Id"},"entity_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entity Version"},"embedding_pending":{"type":"boolean","title":"Embedding Pending","default":false},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"additionalProperties":false,"type":"object","required":["external_id","action"],"title":"EntityUpsertResult","description":"Resultat unitaire pour une entite dans un bulk upsert."},"ErrorItem":{"properties":{"workflow_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Workflow Id"},"node_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Id"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"retry_count":{"type":"integer","title":"Retry Count","default":0},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"ErrorItem","description":"One failed delivery for a mailbox's triggers (Errors tab)."},"EventDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"event_id":{"type":"string","title":"Event Id"},"app":{"type":"string","title":"App"},"action":{"type":"string","title":"Action"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"source":{"type":"string","title":"Source"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"},"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes"},"external_actor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Actor Id"},"received_at":{"type":"string","format":"date-time","title":"Received At"}},"type":"object","required":["id","event_id","app","action","entity_type","entity_id","user_id","user_name","team_id","team_name","source","occurred_at","received_at"],"title":"EventDetailResponse"},"EventListItem":{"properties":{"id":{"type":"string","title":"Id"},"event_id":{"type":"string","title":"Event Id"},"app":{"type":"string","title":"App"},"action":{"type":"string","title":"Action"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"source":{"type":"string","title":"Source"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["id","event_id","app","action","entity_type","entity_id","user_id","user_name","team_id","team_name","source","occurred_at"],"title":"EventListItem"},"EventListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["items","next_cursor"],"title":"EventListResponse"},"ExchangeRequest":{"properties":{"launch_token":{"type":"string","title":"Launch Token"}},"type":"object","required":["launch_token"],"title":"ExchangeRequest"},"ExchangeResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"},"expires_in":{"type":"integer","title":"Expires In","default":900},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["access_token","scopes"],"title":"ExchangeResponse"},"ExecutionCreate":{"properties":{"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input","description":"Input data"}},"type":"object","title":"ExecutionCreate","description":"Schema for creating an execution"},"ExecutionDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"deletedCount":{"type":"integer","title":"Deletedcount"}},"type":"object","required":["success","deletedCount"],"title":"ExecutionDeleteResponse","description":"Schema for execution delete response"},"ExecutionLogResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"executionId":{"type":"string","format":"uuid","title":"Executionid"},"nodeId":{"type":"string","title":"Nodeid"},"nodeName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodename"},"nodeType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nodetype"},"status":{"type":"string","title":"Status"},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input"},"output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startedat"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["id","executionId","nodeId","status"],"title":"ExecutionLogResponse","description":"Schema for execution log response"},"ExecutionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflowId":{"type":"string","format":"uuid","title":"Workflowid"},"status":{"type":"string","title":"Status"},"triggerType":{"type":"string","title":"Triggertype"},"input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input"},"output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startedat"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duration"},"failedNodeId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failednodeid"},"resumedFromExecutionId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resumedfromexecutionid"}},"type":"object","required":["id","workflowId","status","triggerType"],"title":"ExecutionResponse","description":"Schema for execution response - matches frontend WorkflowExecution type"},"ExecutionStartResponse":{"properties":{"executionId":{"type":"string","format":"uuid","title":"Executionid"},"status":{"type":"string","title":"Status"},"output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"}},"type":"object","required":["executionId","status"],"title":"ExecutionStartResponse","description":"Schema for execution start response"},"ExecutionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"nodeStatuses":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Nodestatuses"}},"type":"object","required":["status","nodeStatuses"],"title":"ExecutionStatusResponse","description":"Schema for execution status response"},"ExecutionWithLogsResponse":{"properties":{"execution":{"$ref":"#/components/schemas/ExecutionResponse"},"logs":{"items":{"$ref":"#/components/schemas/ExecutionLogResponse"},"type":"array","title":"Logs"}},"type":"object","required":["execution","logs"],"title":"ExecutionWithLogsResponse","description":"Schema for execution with logs response"},"ExportActor":{"properties":{"type":{"type":"string","enum":["jwt","api_key"],"title":"Type"},"label":{"type":"string","title":"Label","description":"JWT: email du user. API key: préfixe pak_*"}},"additionalProperties":false,"type":"object","required":["type","label"],"title":"ExportActor"},"ExportJob":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","enum":["queued","running","ready","failed","expired"],"title":"Status"},"scope":{"type":"string","enum":["full","meetings","workflows","projects","documents","knowledge_bases","agents","prompts","conversations","people","config","usage"],"title":"Scope"},"format":{"type":"string","enum":["json","tar.gz"],"title":"Format"},"requested_by_actor":{"$ref":"#/components/schemas/ExportActor"},"requested_by_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requested By User Id"},"requested_by_key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"file_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"File Size Bytes"},"checksum_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum Sha256"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason","description":"Sanitisé, jamais d'écho SQL ou noms de modèles"},"legal_hold":{"type":"boolean","title":"Legal Hold","description":"True si un legal hold tenant intersecte ce scope","default":false}},"additionalProperties":false,"type":"object","required":["id","status","scope","format","requested_by_actor","created_at","expires_at"],"title":"ExportJob"},"ExportListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExportJob"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"ExportListPage"},"ExportRequest":{"properties":{"scope":{"type":"string","enum":["full","meetings","workflows","projects","documents","knowledge_bases","agents","prompts","conversations","people","config","usage"],"title":"Scope"},"format":{"type":"string","enum":["json","tar.gz"],"title":"Format"}},"additionalProperties":false,"type":"object","required":["scope","format"],"title":"ExportRequest"},"ExternalDocumentLinkResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"knowledge_base_id":{"type":"string","format":"uuid","title":"Knowledge Base Id"},"document_id":{"type":"string","format":"uuid","title":"Document Id"},"source_type":{"type":"string","title":"Source Type"},"source_feed":{"type":"string","title":"Source Feed"},"external_id":{"type":"string","title":"External Id"},"payload_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload Hash"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","knowledge_base_id","document_id","source_type","source_feed","external_id","created_at","updated_at"],"title":"ExternalDocumentLinkResponse"},"FeedbackCreate":{"properties":{"sentiment":{"type":"string","enum":["like","dislike"],"title":"Sentiment"},"app_origin":{"type":"string","maxLength":100,"minLength":1,"title":"App Origin"},"target_type":{"type":"string","enum":["message","trace","external"],"title":"Target Type"},"target_id":{"type":"string","maxLength":255,"minLength":1,"title":"Target Id"},"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Idempotency Key"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"},"trace_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Trace Id"},"llm_model":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Llm Model"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment"},"feedback_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feedback Metadata"},"external_actor_ref":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Actor Ref"}},"type":"object","required":["sentiment","app_origin","target_type","target_id"],"title":"FeedbackCreate"},"FeedbackResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"submitted_by_user_id":{"type":"string","format":"uuid","title":"Submitted By User Id"},"auth_method":{"type":"string","enum":["jwt","api_key"],"title":"Auth Method"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"external_actor_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Actor Ref"},"sentiment":{"type":"string","enum":["like","dislike"],"title":"Sentiment"},"app_origin":{"type":"string","title":"App Origin"},"target_type":{"type":"string","enum":["message","trace","external"],"title":"Target Type"},"target_id":{"type":"string","title":"Target Id"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id"},"trace_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Trace Id"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"},"feedback_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Feedback Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","submitted_by_user_id","auth_method","api_key_id","external_actor_ref","sentiment","app_origin","target_type","target_id","idempotency_key","conversation_id","agent_id","trace_id","llm_model","comment","feedback_metadata","created_at","updated_at"],"title":"FeedbackResponse"},"FeedbackStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"likes":{"type":"integer","title":"Likes"},"dislikes":{"type":"integer","title":"Dislikes"},"like_ratio":{"type":"number","title":"Like Ratio"},"by_app":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By App"},"by_model":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Model"},"by_day":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Day"}},"type":"object","required":["total","likes","dislikes","like_ratio","by_app","by_model","by_day"],"title":"FeedbackStatsResponse"},"FilterClause":{"properties":{"field":{"type":"string","title":"Field"},"op":{"type":"string","title":"Op"},"value":{"title":"Value"},"confidence":{"type":"string","title":"Confidence"}},"additionalProperties":false,"type":"object","required":["field","op","value","confidence"],"title":"FilterClause","description":"Un filtre extrait du parser (a appliquer cote search)."},"FolderConfigOut":{"properties":{"path":{"type":"string","title":"Path","description":"Folder path (normalized to canonical)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"},"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["path","id"],"title":"FolderConfigOut"},"FolderCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Folder name"}},"type":"object","required":["name"],"title":"FolderCreate","description":"Schema for creating a folder"},"FolderResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Folder name"},"folder_id":{"type":"string","format":"uuid","title":"Folder Id"},"is_default":{"type":"boolean","title":"Is Default"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","folder_id","is_default","created_at","updated_at"],"title":"FolderResponse","description":"Schema for folder response"},"FolderUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"}},"type":"object","title":"FolderUpdate","description":"Schema for updating a folder"},"FormFavoriteCreate":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"}},"type":"object","required":["workflow_id"],"title":"FormFavoriteCreate"},"FormFavoriteResponse":{"properties":{"favorite_id":{"type":"string","format":"uuid","title":"Favorite Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"workflow_name":{"type":"string","title":"Workflow Name"},"workflow_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["favorite_id","workflow_id","workflow_name","created_at"],"title":"FormFavoriteResponse"},"FormSubmission":{"properties":{"input":{"additionalProperties":true,"type":"object","title":"Input","description":"Form field values keyed by field name"}},"type":"object","required":["input"],"title":"FormSubmission","description":"Schema for submitting a form-triggered workflow"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeavyItem":{"properties":{"kind":{"type":"string","enum":["document","meeting"],"title":"Kind"},"id":{"type":"string","title":"Id","description":"UUID logique du parent (meeting ou document)"},"title":{"type":"string","title":"Title"},"bytes":{"type":"integer","minimum":0.0,"title":"Bytes"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"additionalProperties":false,"type":"object","required":["kind","id","title","bytes"],"title":"HeavyItem"},"IdentityBlockCreate":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"content":{"type":"string","minLength":1,"title":"Content"},"order":{"type":"integer","minimum":0.0,"title":"Order","default":0},"status":{"type":"string","maxLength":50,"title":"Status","default":"active"},"type":{"type":"string","enum":["mission","vision","positioning","target-audience","main-promise","strategic-pillars","core-values","values","culture","history","general","other"],"title":"Type","default":"general"},"custom_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Custom Type"},"importance":{"type":"string","enum":["low","normal","high","critical"],"title":"Importance","default":"normal"}},"type":"object","required":["title","content"],"title":"IdentityBlockCreate"},"IdentityBlockListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/IdentityBlockResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"is_demo":{"type":"boolean","title":"Is Demo","default":false}},"type":"object","required":["items","total"],"title":"IdentityBlockListResponse"},"IdentityBlockPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"tone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tone"},"taboo":{"items":{"type":"string"},"type":"array","title":"Taboo"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"IdentityBlockPublic"},"IdentityBlockResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"order":{"type":"integer","title":"Order"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type"},"custom_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Type"},"importance":{"type":"string","title":"Importance"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","title","content","order","status","type","custom_type","importance","created_by","updated_by","created_at","updated_at"],"title":"IdentityBlockResponse"},"IdentityBlockUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Content"},"order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order"},"status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Status"},"type":{"anyOf":[{"type":"string","enum":["mission","vision","positioning","target-audience","main-promise","strategic-pillars","core-values","values","culture","history","general","other"]},{"type":"null"}],"title":"Type"},"custom_type":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Custom Type"},"importance":{"anyOf":[{"type":"string","enum":["low","normal","high","critical"]},{"type":"null"}],"title":"Importance"}},"type":"object","title":"IdentityBlockUpdate"},"ImageGenerationRequest":{"properties":{"model":{"type":"string","title":"Model","description":"Model ID (e.g., 'dall-e-3', 'openai/dall-e-3')"},"prompt":{"type":"string","title":"Prompt","description":"Text description of the image to generate"},"n":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"N","description":"Number of images to generate","default":1},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size","description":"Image size (e.g., '1024x1024', '1792x1024')","default":"1024x1024"},"quality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quality","description":"Image quality ('standard' or 'hd')","default":"standard"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style","description":"Image style ('vivid' or 'natural')","default":"vivid"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Usage tag for tracking (e.g., 'sf-workflow', 'knowledge-hub')"}},"type":"object","required":["model","prompt"],"title":"ImageGenerationRequest","description":"Request for image generation"},"ImportManifestRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"}},"type":"object","required":["manifest"],"title":"ImportManifestRequest"},"ImportManifestResponse":{"properties":{"app_id":{"type":"string","title":"App Id"},"version":{"type":"string","title":"Version"},"lifecycle_status":{"type":"string","title":"Lifecycle Status"},"created":{"type":"boolean","title":"Created","description":"True si nouveau manifest, False si mise à jour"},"validation":{"$ref":"#/components/schemas/ManifestValidationReport"}},"type":"object","required":["app_id","version","lifecycle_status","created","validation"],"title":"ImportManifestResponse"},"IndexFileResponse":{"properties":{"document_id":{"type":"string","title":"Document Id"},"parser":{"type":"string","title":"Parser"},"chunks":{"type":"integer","title":"Chunks"},"indexed":{"type":"integer","title":"Indexed"},"skipped":{"type":"integer","title":"Skipped"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"ingestion_run_id":{"type":"string","title":"Ingestion Run Id"},"collection":{"type":"string","title":"Collection"},"page_aware":{"type":"boolean","title":"Page Aware"}},"type":"object","required":["document_id","parser","chunks","indexed","skipped","errors","ingestion_run_id","collection","page_aware"],"title":"IndexFileResponse"},"IndexItemPayload":{"properties":{"source_object_id":{"type":"string","title":"Source Object Id","description":"Stable id of the source object"},"text":{"type":"string","title":"Text","description":"Text projected into the dense vector"},"source_object_kind":{"type":"string","title":"Source Object Kind","description":"record | document | chunk","default":"document"},"chunk_index":{"type":"integer","title":"Chunk Index","default":0},"user_fields":{"additionalProperties":true,"type":"object","title":"User Fields"},"acl_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acl Version"},"content_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Version"}},"type":"object","required":["source_object_id","text"],"title":"IndexItemPayload"},"IndexJobResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","title":"Status"},"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"items":{"type":"integer","title":"Items"}},"type":"object","required":["task_id","status","knowledge_source_id","items"],"title":"IndexJobResponse"},"IndexProfileResponse":{"properties":{"id":{"type":"string","title":"Id"},"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"knowledge_source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Knowledge Source Name"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"vector_index_space_id":{"type":"string","title":"Vector Index Space Id"},"indexed_capabilities":{"items":{"type":"string"},"type":"array","title":"Indexed Capabilities"},"allowed_source_object_kinds":{"items":{"type":"string"},"type":"array","title":"Allowed Source Object Kinds"},"ranking_policy":{"additionalProperties":true,"type":"object","title":"Ranking Policy"},"config_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config Hash"},"projection_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Projection Version"},"active_profile":{"type":"boolean","title":"Active Profile"},"status":{"type":"string","title":"Status"},"last_successful_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Successful Run Id"},"last_ingestion_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Ingestion Run Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","knowledge_source_id","vector_index_space_id","indexed_capabilities","allowed_source_object_kinds","ranking_policy","active_profile","status"],"title":"IndexProfileResponse"},"IndexRequest":{"properties":{"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"entity_type":{"type":"string","title":"Entity Type","default":"Document"},"embedding_model":{"type":"string","title":"Embedding Model","default":"text-embedding-3-small"},"items":{"items":{"$ref":"#/components/schemas/IndexItemPayload"},"type":"array","title":"Items"},"allowed_source_object_kinds":{"items":{"type":"string"},"type":"array","title":"Allowed Source Object Kinds"},"ingestion_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ingestion Run Id"}},"type":"object","required":["knowledge_source_id","items"],"title":"IndexRequest"},"IndexResponse":{"properties":{"collection":{"type":"string","title":"Collection"},"indexed":{"type":"integer","title":"Indexed"},"skipped":{"type":"integer","title":"Skipped"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"ingestion_run_id":{"type":"string","title":"Ingestion Run Id"},"vector_index_space_id":{"type":"string","title":"Vector Index Space Id"},"index_profile_id":{"type":"string","title":"Index Profile Id"},"config_hash":{"type":"string","title":"Config Hash"},"reused_profile":{"type":"boolean","title":"Reused Profile"}},"type":"object","required":["collection","indexed","skipped","errors","ingestion_run_id","vector_index_space_id","index_profile_id","config_hash","reused_profile"],"title":"IndexResponse"},"IndexationProgressResponse":{"properties":{"active_jobs":{"type":"integer","title":"Active Jobs"},"pending_jobs":{"type":"integer","title":"Pending Jobs"},"completed_jobs":{"type":"integer","title":"Completed Jobs"},"failed_jobs":{"type":"integer","title":"Failed Jobs"},"max_concurrent":{"type":"integer","title":"Max Concurrent"},"recent_jobs":{"items":{"$ref":"#/components/schemas/RecentJobResponse"},"type":"array","title":"Recent Jobs"}},"type":"object","required":["active_jobs","pending_jobs","completed_jobs","failed_jobs","max_concurrent","recent_jobs"],"title":"IndexationProgressResponse"},"InlineStepCreate":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"content":{"type":"string","minLength":1,"title":"Content"},"step_order":{"type":"integer","minimum":1.0,"title":"Step Order"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromptVariable"},"type":"array"},{"type":"null"}],"title":"Variables"}},"type":"object","required":["title","content","step_order"],"title":"InlineStepCreate","description":"A step with inline prompt content (created atomically with the sequence)."},"IntegrationDocStatus":{"type":"string","enum":["pending","indexed","failed","deleted","skipped"],"title":"IntegrationDocStatus","description":"Status d'un document synchronisé"},"IntegrationDocumentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"external_id":{"type":"string","title":"External Id"},"external_path":{"type":"string","title":"External Path"},"name":{"type":"string","title":"Name"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"external_modified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"External Modified At"},"external_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Url"},"document_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Document Id"},"memory_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Memory Id"},"status":{"$ref":"#/components/schemas/IntegrationDocStatus"},"last_indexed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Indexed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["id","integration_id","external_id","external_path","name","mime_type","size_bytes","external_modified_at","external_url","document_id","memory_id","status","last_indexed_at","error_message"],"title":"IntegrationDocumentResponse","description":"Response schema for an integration document."},"IntegrationPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_type":{"type":"string","title":"Integration Type"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"total_documents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total Documents"},"synced_documents":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Synced Documents"}},"additionalProperties":false,"type":"object","required":["id","integration_type","name","status"],"title":"IntegrationPublic","description":"Metadata d'intégration tierce. Tokens et config opaque exclus."},"IntegrationStatus":{"type":"string","enum":["pending","active","syncing","error","paused","disconnected"],"title":"IntegrationStatus","description":"Status d'une intégration"},"IntegrationSyncResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"status":{"$ref":"#/components/schemas/SyncStatus"},"documents_found":{"type":"integer","title":"Documents Found"},"documents_new":{"type":"integer","title":"Documents New"},"documents_updated":{"type":"integer","title":"Documents Updated"},"documents_deleted":{"type":"integer","title":"Documents Deleted"},"documents_failed":{"type":"integer","title":"Documents Failed"},"documents_skipped":{"type":"integer","title":"Documents Skipped"},"is_full_sync":{"type":"boolean","title":"Is Full Sync"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"},"errors":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["id","integration_id","started_at","completed_at","status","documents_found","documents_new","documents_updated","documents_deleted","documents_failed","documents_skipped","is_full_sync","triggered_by","errors"],"title":"IntegrationSyncResponse","description":"Response schema for a sync record."},"IntegrationTestResponse":{"properties":{"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","message"],"title":"IntegrationTestResponse","description":"Schema for integration test response"},"IntegrationType":{"type":"string","enum":["sharepoint","google_drive","notion","confluence","dropbox","onedrive","google_calendar","outlook_calendar"],"title":"IntegrationType","description":"Types d'intégrations supportées.\n\nConvention de scope :\n- SHAREPOINT, GOOGLE_DRIVE, NOTION, CONFLUENCE, DROPBOX, ONEDRIVE :\n  **tenant-scoped** — 1 row par tenant, partagée par tous les users.\n- GOOGLE_CALENDAR, OUTLOOK_CALENDAR (SUP-155) :\n  **user-scoped** — 1 row par user. Les queries DOIVENT filtrer par\n  ``Integration.created_by_id = current_user.id``. Voir\n  ``app/services/calendar/helpers.py::require_user_calendar_integration``."},"IntegrationWithConfigResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"isActive":{"type":"boolean","title":"Isactive"},"lastTestedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lasttestedat"},"testStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teststatus"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["id","name","type","isActive","createdAt","updatedAt","config"],"title":"IntegrationWithConfigResponse","description":"Schema for integration response with config"},"JobStatusResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"state":{"type":"string","title":"State"},"ready":{"type":"boolean","title":"Ready"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["task_id","state","ready"],"title":"JobStatusResponse"},"KnowledgeBaseListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"embedding_model":{"type":"string","title":"Embedding Model"},"document_count":{"type":"integer","minimum":0.0,"title":"Document Count"},"chunk_count":{"type":"integer","minimum":0.0,"title":"Chunk Count"},"total_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Total Size Bytes"},"kb_type":{"type":"string","title":"Kb Type"},"is_system":{"type":"boolean","title":"Is System"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","name","embedding_model","document_count","chunk_count","kb_type","is_system","status","created_at","updated_at"],"title":"KnowledgeBaseListItem"},"KnowledgeBaseListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/KnowledgeBaseListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"KnowledgeBaseListPage"},"KnowledgeSourceResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"profile":{"type":"string","title":"Profile"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"retrieval_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Retrieval Strategy"},"hybrid_alpha":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hybrid Alpha"},"top_k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Top K"}},"type":"object","required":["id","name","description","profile","status"],"title":"KnowledgeSourceResponse"},"KsDocumentResponse":{"properties":{"source_object_id":{"type":"string","title":"Source Object Id"},"source_object_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Object Kind"},"chunks":{"type":"integer","title":"Chunks"},"parser":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parser"},"source_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Filename"}},"type":"object","required":["source_object_id","chunks"],"title":"KsDocumentResponse"},"LLMModelResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"provider_id":{"type":"string","title":"Provider Id"},"provider_name":{"type":"string","title":"Provider Name"},"input_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Cost Per Million"},"output_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Cost Per Million"},"enabled":{"type":"boolean","title":"Enabled"},"isDefault":{"type":"boolean","title":"Isdefault"},"isLegacy":{"type":"boolean","title":"Islegacy","default":false},"fallback_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Id"},"fallback_model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Name"},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","default":false},"supports_vision":{"type":"boolean","title":"Supports Vision","default":false},"max_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Input Tokens"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"agent_tier":{"type":"string","title":"Agent Tier","default":"compatible"},"speed_tier":{"type":"string","title":"Speed Tier","default":"medium"},"strengths":{"items":{"type":"string"},"type":"array","title":"Strengths"},"weaknesses":{"items":{"type":"string"},"type":"array","title":"Weaknesses"},"display_name_fr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name Fr"},"use_cases":{"items":{"type":"string"},"type":"array","title":"Use Cases"},"performance_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Performance Rating"},"cost_efficiency_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cost Efficiency Rating"},"speed_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Speed Rating"},"reasoning_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reasoning Rating"},"eco_rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Eco Rating"},"badges":{"items":{"type":"string"},"type":"array","title":"Badges"},"reasoning_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Reasoning Config"},"provider_icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Icon Url"},"is_restricted":{"type":"boolean","title":"Is Restricted","default":false},"access_rules_count":{"type":"integer","title":"Access Rules Count","default":0},"is_featured":{"type":"boolean","title":"Is Featured","default":false}},"type":"object","required":["model_id","name","display_name","provider_id","provider_name","input_cost_per_million","output_cost_per_million","enabled","isDefault"],"title":"LLMModelResponse"},"LLMModelsListResponse":{"properties":{"models":{"items":{"$ref":"#/components/schemas/LLMModelResponse"},"type":"array","title":"Models"},"total":{"type":"integer","title":"Total"},"configured_providers":{"items":{"type":"string"},"type":"array","title":"Configured Providers","default":[]}},"type":"object","required":["models","total"],"title":"LLMModelsListResponse"},"LLMProviderResponse":{"properties":{"provider_id":{"type":"string","title":"Provider Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"isConfigured":{"type":"boolean","title":"Isconfigured"},"model_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Model Count"},"modes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"featured_order":{"type":"integer","title":"Featured Order","default":0}},"type":"object","required":["provider_id","name","display_name","isConfigured"],"title":"LLMProviderResponse"},"LLMProvidersListResponse":{"properties":{"providers":{"items":{"$ref":"#/components/schemas/LLMProviderResponse"},"type":"array","title":"Providers"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["providers","total"],"title":"LLMProvidersListResponse"},"LaunchTokenResponse":{"properties":{"launch_token":{"type":"string","title":"Launch Token"},"entry_url":{"type":"string","title":"Entry Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["launch_token","entry_url","expires_at"],"title":"LaunchTokenResponse"},"LinkOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"parent_type":{"type":"string","title":"Parent Type"},"parent_id":{"type":"string","format":"uuid","title":"Parent Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","asset_id","parent_type","parent_id","created_at"],"title":"LinkOut"},"ListQuery":{"properties":{"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"},"search":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"},"sort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"},"page":{"type":"integer","title":"Page","default":1},"page_size":{"type":"integer","title":"Page Size","default":50}},"type":"object","title":"ListQuery"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"tenant_id":{"type":"string","title":"Tenant Id"},"mfa_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mfa Code"}},"type":"object","required":["email","password","tenant_id"],"title":"LoginRequest","description":"Requête de connexion"},"LoginResponse":{"properties":{"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In"},"requires_mfa":{"type":"boolean","title":"Requires Mfa","default":false}},"type":"object","title":"LoginResponse","description":"Réponse login (support MFA)"},"MFAEnableRequest":{"properties":{"secret":{"type":"string","title":"Secret"},"code":{"type":"string","title":"Code"}},"type":"object","required":["secret","code"],"title":"MFAEnableRequest"},"MFASetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"qr_code":{"type":"string","title":"Qr Code"},"backup_codes":{"items":{"type":"string"},"type":"array","title":"Backup Codes"}},"type":"object","required":["secret","qr_code","backup_codes"],"title":"MFASetupResponse"},"MFAVerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"MFAVerifyRequest"},"ManifestValidationIssue":{"properties":{"path":{"type":"string","title":"Path","description":"Chemin JSON du champ concerné, ex: runtime.entry_url"},"code":{"type":"string","title":"Code","description":"Code machine, ex: https_required"},"message":{"type":"string","title":"Message","description":"Message lisible"}},"type":"object","required":["path","code","message"],"title":"ManifestValidationIssue","description":"Une erreur ou un avertissement de validation, lisible par l'admin."},"ManifestValidationReport":{"properties":{"valid":{"type":"boolean","title":"Valid"},"errors":{"items":{"$ref":"#/components/schemas/ManifestValidationIssue"},"type":"array","title":"Errors","default":[]},"warnings":{"items":{"$ref":"#/components/schemas/ManifestValidationIssue"},"type":"array","title":"Warnings","default":[]}},"type":"object","required":["valid"],"title":"ManifestValidationReport","description":"Rapport de validation d'un manifest (§29.3)."},"MarkReadRequest":{"properties":{"notification_ids":{"items":{"type":"string"},"type":"array","title":"Notification Ids"}},"type":"object","required":["notification_ids"],"title":"MarkReadRequest","description":"Schema pour marquer des notifications comme lues"},"MarkReadResponse":{"properties":{"updated_count":{"type":"integer","title":"Updated Count"}},"type":"object","required":["updated_count"],"title":"MarkReadResponse","description":"Schema de reponse pour mark as read"},"McpKeyStatusResponse":{"properties":{"mcp_server_name":{"type":"string","title":"Mcp Server Name"},"has_key":{"type":"boolean","title":"Has Key","description":"Whether an active MCP API key exists"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the key is active"}},"type":"object","required":["mcp_server_name","has_key","is_active"],"title":"McpKeyStatusResponse"},"McpServerResponse":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"description":{"type":"string","title":"Description"},"category":{"type":"string","title":"Category"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"requires_api_key":{"type":"boolean","title":"Requires Api Key"},"help_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Help Url"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"source":{"type":"string","title":"Source","default":"system"}},"type":"object","required":["name","display_name","description","category","requires_api_key"],"title":"McpServerResponse"},"MeetingDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"date":{"type":"string","format":"date-time","title":"Date","description":"created_at logique"},"duration_seconds":{"type":"integer","minimum":0.0,"title":"Duration Seconds"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"status":{"type":"string","title":"Status"},"participants":{"items":{"type":"string"},"type":"array","title":"Participants"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"transcript":{"items":{"$ref":"#/components/schemas/TranscriptSegment"},"type":"array","title":"Transcript"},"speakers":{"items":{"type":"string"},"type":"array","title":"Speakers"},"blocknote_content":{"anyOf":[{"$ref":"#/components/schemas/BlockNoteDoc"},{"type":"null"}]},"audio_download":{"anyOf":[{"$ref":"#/components/schemas/PresignedDownload"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id","title","date","duration_seconds","status","participants","created_at","updated_at","transcript","speakers"],"title":"MeetingDetail"},"MeetingListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"date":{"type":"string","format":"date-time","title":"Date","description":"created_at logique"},"duration_seconds":{"type":"integer","minimum":0.0,"title":"Duration Seconds"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"status":{"type":"string","title":"Status"},"participants":{"items":{"type":"string"},"type":"array","title":"Participants"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","title","date","duration_seconds","status","participants","created_at","updated_at"],"title":"MeetingListItem"},"MeetingListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MeetingListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"MeetingListPage"},"MemoryCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Memory/Knowledge Base name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Memory description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon emoji or name"},"profile_id":{"type":"string","format":"uuid","title":"Profile Id","description":"AI Profile ID (required at creation)"},"system_prompt":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt for RAG chat"}},"type":"object","required":["name","profile_id"],"title":"MemoryCreate","description":"Schema for creating a new memory"},"MemoryDetailResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Memory/Knowledge Base name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Memory description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon emoji or name"},"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Profile Id"},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model","description":"Embedding model used for this memory (captured at creation)"},"kb_type":{"type":"string","title":"Kb Type","description":"Memory type: 'documents' (free text PDF/docx) or 'structured' (catalog entities)","default":"documents"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt for RAG chat"},"auto_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Summary","description":"Auto-generated summary of KB content"},"document_count":{"type":"integer","title":"Document Count"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_size_bytes":{"type":"integer","title":"Total Size Bytes"},"status":{"type":"string","title":"Status"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"profile":{"anyOf":[{"$ref":"#/components/schemas/AIProfileSummary"},{"type":"null"}],"description":"Associated AI Profile"},"documents":{"items":{"$ref":"#/components/schemas/DocumentSummary"},"type":"array","title":"Documents","description":"Documents in this memory"}},"type":"object","required":["name","memory_id","tenant_id","profile_id","document_count","total_chunks","total_size_bytes","status","created_by_id","created_at","updated_at"],"title":"MemoryDetailResponse","description":"Schema for detailed API response with documents"},"MemoryListResponse":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/MemoryResponse"},"type":"array","title":"Memories"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["memories","total"],"title":"MemoryListResponse","description":"Schema for list API response"},"MemoryResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Memory/Knowledge Base name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Memory description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon emoji or name"},"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Profile Id"},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model","description":"Embedding model used for this memory (captured at creation)"},"kb_type":{"type":"string","title":"Kb Type","description":"Memory type: 'documents' (free text PDF/docx) or 'structured' (catalog entities)","default":"documents"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt for RAG chat"},"auto_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Summary","description":"Auto-generated summary of KB content"},"document_count":{"type":"integer","title":"Document Count"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_size_bytes":{"type":"integer","title":"Total Size Bytes"},"status":{"type":"string","title":"Status"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"profile":{"anyOf":[{"$ref":"#/components/schemas/AIProfileSummary"},{"type":"null"}],"description":"Associated AI Profile"}},"type":"object","required":["name","memory_id","tenant_id","profile_id","document_count","total_chunks","total_size_bytes","status","created_by_id","created_at","updated_at"],"title":"MemoryResponse","description":"Schema for API response with profile info"},"MemoryShareBatchResponse":{"properties":{"total_requested":{"type":"integer","title":"Total Requested"},"successful":{"type":"integer","title":"Successful"},"failed":{"type":"integer","title":"Failed"},"results":{"items":{"$ref":"#/components/schemas/MemoryShareBatchResult"},"type":"array","title":"Results"}},"type":"object","required":["total_requested","successful","failed","results"],"title":"MemoryShareBatchResponse","description":"Response for batch share operation"},"MemoryShareBatchResult":{"properties":{"user_id":{"type":"string","format":"uuid","title":"User Id"},"success":{"type":"boolean","title":"Success"},"share_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Share Id"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["user_id","success"],"title":"MemoryShareBatchResult","description":"Result of a single share in batch operation"},"MemoryShareListResponse":{"properties":{"shares":{"items":{"$ref":"#/components/schemas/MemoryShareResponse"},"type":"array","title":"Shares"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["shares","total"],"title":"MemoryShareListResponse","description":"Schema for list of shares"},"MemoryShareResponse":{"properties":{"share_id":{"type":"string","format":"uuid","title":"Share Id"},"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"share_type":{"$ref":"#/components/schemas/ShareTypeEnum"},"shared_with_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Shared With User Id"},"shared_with_team_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Shared With Team Id"},"permission":{"$ref":"#/components/schemas/SharePermissionEnum-Output"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"type":"boolean","title":"Is Active"},"shared_by":{"anyOf":[{"$ref":"#/components/schemas/SharedByUser"},{"type":"null"}]},"shared_with_user":{"anyOf":[{"$ref":"#/components/schemas/SharedWithUser"},{"type":"null"}]},"shared_with_team":{"anyOf":[{"$ref":"#/components/schemas/SharedWithTeam"},{"type":"null"}]},"memory_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memory Name"}},"type":"object","required":["share_id","memory_id","share_type","permission","created_at","is_active"],"title":"MemoryShareResponse","description":"Schema for API response of a share"},"MemoryShareToTeam":{"properties":{"permission":{"$ref":"#/components/schemas/app__schemas__memory__SharePermissionEnum","description":"Permission level: read, write, or admin","default":"read"},"message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Message","description":"Optional message when sharing"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration date for the share"},"team_id":{"type":"string","format":"uuid","title":"Team Id","description":"Team ID to share with"}},"type":"object","required":["team_id"],"title":"MemoryShareToTeam","description":"Schema for sharing a memory with a team"},"MemoryShareToUser":{"properties":{"permission":{"$ref":"#/components/schemas/app__schemas__memory__SharePermissionEnum","description":"Permission level: read, write, or admin","default":"read"},"message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Message","description":"Optional message when sharing"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration date for the share"},"user_id":{"type":"string","format":"uuid","title":"User Id","description":"User ID to share with"}},"type":"object","required":["user_id"],"title":"MemoryShareToUser","description":"Schema for sharing a memory with a specific user"},"MemoryShareToUsersBatch":{"properties":{"user_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"User Ids","description":"List of user IDs to share with (max 50)"},"permission":{"$ref":"#/components/schemas/app__schemas__memory__SharePermissionEnum","description":"Permission level for all users: read, write, or admin","default":"read"},"message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Message","description":"Optional message when sharing"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Optional expiration date for all shares"}},"type":"object","required":["user_ids"],"title":"MemoryShareToUsersBatch","description":"Schema for sharing a memory with multiple users at once"},"MemoryShareUpdate":{"properties":{"permission":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__memory__SharePermissionEnum"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"MemoryShareUpdate","description":"Schema for updating a share"},"MemoryStatsResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"name":{"type":"string","title":"Name"},"document_count":{"type":"integer","title":"Document Count"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_size_bytes":{"type":"integer","title":"Total Size Bytes"},"status":{"type":"string","title":"Status"},"documents_by_status":{"additionalProperties":true,"type":"object","title":"Documents By Status","description":"Documents grouped by status"}},"type":"object","required":["memory_id","name","document_count","total_chunks","total_size_bytes","status"],"title":"MemoryStatsResponse","description":"Schema for memory statistics"},"MemoryStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"La mémoire est-elle opérationnelle"},"reason":{"type":"string","title":"Reason","description":"Code machine-readable : enabled, sdk_missing, disabled_global, tenant_not_found, disabled_tenant, disabled_user, config_missing, init_failed"},"message":{"type":"string","title":"Message","description":"Message UI localisé FR"}},"type":"object","required":["enabled","reason","message"],"title":"MemoryStatusResponse","description":"État actuel de la mémoire utilisateur pour l'utilisateur courant."},"MemoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"system_prompt":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt for RAG chat"}},"type":"object","title":"MemoryUpdate","description":"Schema for updating an existing memory (all fields optional)"},"MemoryWithShareInfo":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Memory/Knowledge Base name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Memory description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","description":"Icon emoji or name"},"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"profile_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Profile Id"},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model","description":"Embedding model used for this memory (captured at creation)"},"kb_type":{"type":"string","title":"Kb Type","description":"Memory type: 'documents' (free text PDF/docx) or 'structured' (catalog entities)","default":"documents"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt for RAG chat"},"auto_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Summary","description":"Auto-generated summary of KB content"},"document_count":{"type":"integer","title":"Document Count"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_size_bytes":{"type":"integer","title":"Total Size Bytes"},"status":{"type":"string","title":"Status"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"profile":{"anyOf":[{"$ref":"#/components/schemas/AIProfileSummary"},{"type":"null"}],"description":"Associated AI Profile"},"shared_by":{"anyOf":[{"$ref":"#/components/schemas/SharedByUser"},{"type":"null"}]},"share_permission":{"anyOf":[{"$ref":"#/components/schemas/SharePermissionEnum-Output"},{"type":"null"}]},"shared_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Shared At"}},"type":"object","required":["name","memory_id","tenant_id","profile_id","document_count","total_chunks","total_size_bytes","status","created_by_id","created_at","updated_at"],"title":"MemoryWithShareInfo","description":"Memory response with additional share info (for shared memories view)"},"MessageListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MessageSummary"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"MessageListPage"},"MessageResponse":{"properties":{"role":{"$ref":"#/components/schemas/MessageRole","description":"Message role: user, assistant, or system"},"content":{"type":"string","minLength":1,"title":"Content","description":"Message content"},"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sources"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning"},"image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Image Urls"},"user_image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Image Urls"},"user_image_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"User Image Keys"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"editable":{"type":"boolean","title":"Editable","description":"Whether this message can be edited via PATCH (SUP-72)","default":false}},"type":"object","required":["role","content","id","conversation_id","created_at"],"title":"MessageResponse","description":"Schema for message in API response"},"MessageRole":{"type":"string","enum":["user","assistant","system"],"title":"MessageRole","description":"Role of message sender"},"MessageSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"role":{"type":"string","title":"Role","description":"user | assistant | system | tool"},"content":{"type":"string","title":"Content"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"sources":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sources","description":"Citations typées attachées au message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"assistant_images":{"items":{"$ref":"#/components/schemas/PresignedDownload"},"type":"array","title":"Assistant Images"},"user_uploaded_images":{"items":{"$ref":"#/components/schemas/PresignedDownload"},"type":"array","title":"User Uploaded Images"}},"additionalProperties":false,"type":"object","required":["id","role","content","created_at"],"title":"MessageSummary"},"MetadataField":{"properties":{"name":{"type":"string","title":"Name"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"type":{"type":"string","title":"Type","default":"keyword"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"filterable":{"type":"boolean","title":"Filterable","default":false},"searchable":{"type":"boolean","title":"Searchable","default":false},"embedInSemantic":{"type":"boolean","title":"Embedinsemantic","default":false},"required":{"type":"boolean","title":"Required","default":false},"order":{"type":"integer","title":"Order","default":0}},"type":"object","required":["name"],"title":"MetadataField","description":"A declared metadata column (sf-knowledge-hub MetadataField contract)."},"MetadataSchemaResponse":{"properties":{"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"fields":{"items":{"$ref":"#/components/schemas/MetadataField"},"type":"array","title":"Fields"},"indexed_fields":{"items":{"type":"string"},"type":"array","title":"Indexed Fields"}},"type":"object","required":["knowledge_source_id","fields","indexed_fields"],"title":"MetadataSchemaResponse"},"ModelAccessResponse":{"properties":{"model_id":{"type":"string","title":"Model Id"},"is_restricted":{"type":"boolean","title":"Is Restricted"},"rules":{"items":{"$ref":"#/components/schemas/AccessRuleResponse"},"type":"array","title":"Rules"}},"type":"object","required":["model_id","is_restricted","rules"],"title":"ModelAccessResponse"},"ModelPreferenceResponse":{"properties":{"preference_id":{"type":"string","title":"Preference Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"model_id":{"type":"string","title":"Model Id"},"is_enabled":{"type":"boolean","title":"Is Enabled"},"is_default":{"type":"boolean","title":"Is Default"},"fallback_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Id"},"fallback_model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Name"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["preference_id","tenant_id","model_id","is_enabled","is_default","created_at","updated_at"],"title":"ModelPreferenceResponse"},"ModelResponse":{"properties":{"model_name":{"type":"string","title":"Model Name"},"provider":{"type":"string","title":"Provider"},"mode":{"type":"string","title":"Mode"},"display_name":{"type":"string","title":"Display Name"},"supports_vision":{"type":"boolean","title":"Supports Vision","default":false},"supports_function_calling":{"type":"boolean","title":"Supports Function Calling","default":false},"supports_streaming":{"type":"boolean","title":"Supports Streaming","default":true},"max_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Input Tokens"},"max_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Output Tokens"},"input_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Input Cost Per Million"},"output_cost_per_million":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Output Cost Per Million"},"enabled":{"type":"boolean","title":"Enabled","default":false},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["model_name","provider","mode","display_name"],"title":"ModelResponse","description":"Modèle individuel"},"ModelsFlatResponse":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Models"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["models","total"],"title":"ModelsFlatResponse","description":"Liste plate de modèles"},"ModelsGroupedResponse":{"properties":{"chat":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Chat"},"embedding":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Embedding"},"image_generation":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Image Generation"},"audio_transcription":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Audio Transcription"},"audio_speech":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Audio Speech"},"rerank":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Rerank"},"moderation":{"items":{"$ref":"#/components/schemas/ModelResponse"},"type":"array","title":"Moderation"},"total":{"type":"integer","title":"Total","default":0},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"}},"type":"object","title":"ModelsGroupedResponse","description":"Modèles groupés par type"},"MonthlyPoint":{"properties":{"month":{"type":"string","title":"Month","description":"Format ISO YYYY-MM"},"bytes":{"type":"integer","minimum":0.0,"title":"Bytes"}},"additionalProperties":false,"type":"object","required":["month","bytes"],"title":"MonthlyPoint"},"MoveDocumentsRequest":{"properties":{"document_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Document Ids"},"target_folder_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Target Folder Id"}},"type":"object","required":["document_ids"],"title":"MoveDocumentsRequest"},"MultiRAGRequest":{"properties":{"message":{"type":"string","maxLength":5000,"minLength":1,"title":"Message","description":"Message with @mentions to target specific knowledge bases"},"fallback_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Fallback Memory Ids","description":"Default knowledge bases when no @mention is provided"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id","description":"LLM model name (format: provider/model)"},"top_k_per_memory":{"anyOf":[{"type":"integer","maximum":20.0,"minimum":1.0},{"type":"null"}],"title":"Top K Per Memory","description":"Number of chunks to retrieve per knowledge base","default":5},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score","default":0.1},"tag":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Tag","description":"Tag for per-tag usage tracking"},"system_prompt":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt to override AI Profile default"}},"type":"object","required":["message"],"title":"MultiRAGRequest","description":"Request for Multi-RAG search with @mentions\n\nExample message:\n\"Cherche les tarifs dans @base-commerciale et les procédures dans @base-technique\""},"MultiRAGResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"original_question":{"type":"string","title":"Original Question"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"sources_by_memory":{"additionalProperties":{"items":{"$ref":"#/components/schemas/MultiRAGSource"},"type":"array"},"type":"object","title":"Sources By Memory"},"all_sources":{"items":{"$ref":"#/components/schemas/MultiRAGSource"},"type":"array","title":"All Sources"},"targeted_queries":{"items":{"$ref":"#/components/schemas/TargetedQueryInfo"},"type":"array","title":"Targeted Queries"},"memories_queried":{"items":{"type":"string"},"type":"array","title":"Memories Queried"},"total_chunks_found":{"type":"integer","title":"Total Chunks Found","default":0},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","original_question"],"title":"MultiRAGResponse","description":"Response from Multi-RAG search"},"MultiRAGSource":{"properties":{"chunk_id":{"type":"string","title":"Chunk Id"},"document_id":{"type":"string","title":"Document Id"},"document_name":{"type":"string","title":"Document Name"},"content_preview":{"type":"string","title":"Content Preview"},"similarity_score":{"type":"number","title":"Similarity Score"},"memory_id":{"type":"string","title":"Memory Id"},"memory_name":{"type":"string","title":"Memory Name"},"page_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page Number"},"section_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section Title"}},"type":"object","required":["chunk_id","document_id","document_name","content_preview","similarity_score","memory_id","memory_name"],"title":"MultiRAGSource","description":"Source with attribution to its knowledge base"},"MyPermissionResponse":{"properties":{"resource_type":{"type":"string","title":"Resource Type"},"resource_id":{"type":"string","format":"uuid","title":"Resource Id"},"permission":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permission","description":"User's permission level, or null if no access"},"is_owner":{"type":"boolean","title":"Is Owner","description":"True if the user is the resource owner","default":false},"via_team":{"type":"boolean","title":"Via Team","description":"True if permission is granted via team membership","default":false}},"type":"object","required":["resource_type","resource_id"],"title":"MyPermissionResponse","description":"Response schema for checking current user's permission on a resource","example":{"is_owner":false,"permission":"edit","resource_id":"550e8400-e29b-41d4-a716-446655440000","resource_type":"memory","via_team":true}},"NotificationListResponse":{"properties":{"notifications":{"items":{"$ref":"#/components/schemas/NotificationResponse"},"type":"array","title":"Notifications"},"total":{"type":"integer","title":"Total"},"unread_count":{"type":"integer","title":"Unread Count"}},"type":"object","required":["notifications","total","unread_count"],"title":"NotificationListResponse","description":"Schema de reponse pour liste de notifications"},"NotificationResponse":{"properties":{"id":{"type":"string","title":"Id"},"notification_type":{"type":"string","title":"Notification Type"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"is_read":{"type":"boolean","title":"Is Read"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","notification_type","severity","title","message","is_read","created_at"],"title":"NotificationResponse","description":"Schema de reponse pour une notification"},"OAuthTokens":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["access_token"],"title":"OAuthTokens","description":"OAuth tokens for connecting an integration."},"OTPRequestResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"OTPRequestResponse","description":"Réponse après demande d'OTP"},"OTPVerifyResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In"},"user":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success"],"title":"OTPVerifyResponse","description":"Réponse après vérification d'OTP (avec tokens JWT)"},"OriginAppEnum":{"type":"string","enum":["meeting","project","delegate","workflow"],"title":"OriginAppEnum"},"OverviewResponse":{"properties":{"period":{"type":"string","enum":["24h","7d","30d","90d"],"title":"Period"},"start":{"type":"string","format":"date-time","title":"Start"},"end":{"type":"string","format":"date-time","title":"End"},"total_events":{"type":"integer","title":"Total Events"},"active_users":{"type":"integer","title":"Active Users"},"top_apps":{"items":{"$ref":"#/components/schemas/AppCount"},"type":"array","title":"Top Apps"},"top_actions":{"items":{"$ref":"#/components/schemas/ActionCount"},"type":"array","title":"Top Actions"},"timeseries":{"items":{"$ref":"#/components/schemas/TimeseriesPoint"},"type":"array","title":"Timeseries"}},"type":"object","required":["period","start","end","total_events","active_users","top_apps","top_actions","timeseries"],"title":"OverviewResponse"},"PaginatedResponse_FeedbackResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FeedbackResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponse[FeedbackResponse]"},"ParseQueryRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"}},"additionalProperties":false,"type":"object","required":["query"],"title":"ParseQueryRequest","description":"POST /memories/{id}/parse-query."},"ParseQueryResponse":{"properties":{"query":{"type":"string","title":"Query"},"normalized":{"type":"string","title":"Normalized"},"filters":{"items":{"$ref":"#/components/schemas/FilterClause"},"type":"array","title":"Filters"},"array_text":{"type":"string","title":"Array Text"},"trace":{"items":{"$ref":"#/components/schemas/ParseTraceStep"},"type":"array","title":"Trace"}},"additionalProperties":false,"type":"object","required":["query","normalized","filters","array_text","trace"],"title":"ParseQueryResponse","description":"Resultat du parser : filtres + reste pour FTS/vector."},"ParseTraceStep":{"properties":{"span":{"type":"string","title":"Span"},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"},"canonical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical"},"via":{"type":"string","title":"Via"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"}},"additionalProperties":false,"type":"object","required":["span","via"],"title":"ParseTraceStep","description":"Trace de decision du parser (audit / debug)."},"PasswordResetConfirmSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","maxLength":6,"minLength":6,"title":"Code"},"new_password":{"type":"string","minLength":8,"title":"New Password"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["email","code","new_password","tenant_id"],"title":"PasswordResetConfirmSchema","description":"Schema pour confirmer la réinitialisation de mot de passe","example":{"code":"123456","email":"user@example.com","new_password":"NewSecurePassword123!","tenant_id":"matsiya"}},"PasswordResetRequestSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["email","tenant_id"],"title":"PasswordResetRequestSchema","description":"Schema pour demander la réinitialisation de mot de passe","example":{"email":"user@example.com","tenant_id":"matsiya"}},"PasswordResetResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"PasswordResetResponse","description":"Réponse générique pour les endpoints de réinitialisation"},"PersonListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PersonSummary"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"PersonListPage"},"PersonSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"mfa_enabled":{"type":"boolean","title":"Mfa Enabled"},"team":{"anyOf":[{"$ref":"#/components/schemas/TeamRef"},{"type":"null"}]},"avatar":{"anyOf":[{"$ref":"#/components/schemas/PresignedDownload"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","email","role","is_active","is_verified","mfa_enabled","created_at"],"title":"PersonSummary"},"PortableApiKey":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"key_prefix":{"type":"string","maxLength":10,"minLength":10,"title":"Key Prefix","description":"pak_ + 6 base32"},"scopes":{"items":{"type":"string","enum":["portable:read","portable:export"]},"type":"array","title":"Scopes"},"usage_count":{"type":"integer","minimum":0.0,"title":"Usage Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"additionalProperties":false,"type":"object","required":["id","name","key_prefix","scopes","usage_count","is_active","created_at","updated_at"],"title":"PortableApiKey"},"PortableApiKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"scopes":{"items":{"type":"string","enum":["portable:read","portable:export"]},"type":"array","minItems":1,"title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Défaut now+365j, max now+730j"}},"additionalProperties":false,"type":"object","required":["name","scopes"],"title":"PortableApiKeyCreateRequest"},"PortableApiKeyCreated":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"key_prefix":{"type":"string","maxLength":10,"minLength":10,"title":"Key Prefix","description":"pak_ + 6 base32"},"scopes":{"items":{"type":"string","enum":["portable:read","portable:export"]},"type":"array","title":"Scopes"},"usage_count":{"type":"integer","minimum":0.0,"title":"Usage Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"secret":{"type":"string","title":"Secret","description":"Secret complet, retourné une seule fois. Le serveur stocke SHA256(secret) et ne peut pas le re-générer."}},"additionalProperties":false,"type":"object","required":["id","name","key_prefix","scopes","usage_count","is_active","created_at","updated_at","secret"],"title":"PortableApiKeyCreated"},"PortableApiKeyListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PortableApiKey"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"PortableApiKeyListPage"},"PortableMe":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id","description":"Tenant slug (e.g. 'spexe'). Comes from the JWT or API key binding."},"tenant_name":{"type":"string","title":"Tenant Name","description":"Human-readable tenant name from public.tenants.name. Falls back to tenant_id if no display name is set."},"actor_type":{"type":"string","enum":["jwt_user","portable_key"],"title":"Actor Type","description":"JWT user or portable API key."},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email","description":"Email of the JWT user, omitted for portable key auth."},"user_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Full Name","description":"Display name of the JWT user, omitted for portable key auth."},"role":{"type":"string","title":"Role","description":"Role of the JWT user (e.g. 'tenant_admin', 'user'), or 'external_api_key' for portable key auth."},"api_key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Prefix","description":"Public key prefix (e.g. 'pak_xxxxxx') for portable key auth."}},"additionalProperties":false,"type":"object","required":["tenant_id","tenant_name","actor_type","role"],"title":"PortableMe"},"PresignedDownload":{"properties":{"url":{"type":"string","title":"Url","description":"URL MinIO signée, single-object"},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"ISO 8601 UTC"},"byte_size":{"type":"integer","minimum":0.0,"title":"Byte Size"},"checksum_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum Sha256","description":"SHA256 hex"}},"additionalProperties":false,"type":"object","required":["url","expires_at","byte_size"],"title":"PresignedDownload","description":"Download signé. Remplace tout *_url brut. Jamais 302, toujours JSON."},"ProjectDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"status":{"type":"string","title":"Status"},"document_count":{"type":"integer","minimum":0.0,"title":"Document Count"},"conversation_count":{"type":"integer","minimum":0.0,"title":"Conversation Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"members":{"items":{"$ref":"#/components/schemas/ProjectMemberSummary"},"type":"array","title":"Members"}},"additionalProperties":false,"type":"object","required":["id","name","status","document_count","conversation_count","created_at","members"],"title":"ProjectDetail"},"ProjectListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"status":{"type":"string","title":"Status"},"document_count":{"type":"integer","minimum":0.0,"title":"Document Count"},"conversation_count":{"type":"integer","minimum":0.0,"title":"Conversation Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","name","status","document_count","conversation_count","created_at"],"title":"ProjectListItem"},"ProjectListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProjectListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"ProjectListPage"},"ProjectMemberSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"role":{"type":"string","title":"Role"}},"additionalProperties":false,"type":"object","required":["id","full_name","role"],"title":"ProjectMemberSummary"},"PromptCategoryCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color"},"visibility":{"$ref":"#/components/schemas/PromptVisibilityEnum","default":"tenant"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0}},"type":"object","required":["name"],"title":"PromptCategoryCreate"},"PromptCategoryRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"PromptCategoryRef"},"PromptCategoryResponse":{"properties":{"category_id":{"type":"string","format":"uuid","title":"Category Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"visibility":{"type":"string","title":"Visibility"},"sort_order":{"type":"integer","title":"Sort Order"},"created_by_id":{"type":"string","format":"uuid","title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["category_id","tenant_id","name","description","icon","color","visibility","sort_order","created_by_id","created_at","updated_at"],"title":"PromptCategoryResponse"},"PromptCategoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color"},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PromptVisibilityEnum"},{"type":"null"}]},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"PromptCategoryUpdate"},"PromptCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"type":"string","title":"Content"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"visibility":{"$ref":"#/components/schemas/PromptVisibilityEnum","default":"tenant"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured","default":false},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromptVariable"},"type":"array"},{"type":"null"}],"title":"Variables"}},"type":"object","required":["title","content"],"title":"PromptCreate"},"PromptFavoriteCreate":{"properties":{"prompt_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prompt Id"},"sequence_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sequence Id"}},"type":"object","title":"PromptFavoriteCreate"},"PromptFavoriteResponse":{"properties":{"favorite_id":{"type":"string","format":"uuid","title":"Favorite Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"prompt_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prompt Id"},"sequence_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Sequence Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"prompt":{"anyOf":[{"$ref":"#/components/schemas/PromptResponse"},{"type":"null"}]},"sequence":{"anyOf":[{"$ref":"#/components/schemas/PromptSequenceResponse"},{"type":"null"}]}},"type":"object","required":["favorite_id","tenant_id","user_id","prompt_id","sequence_id","created_at"],"title":"PromptFavoriteResponse"},"PromptListPage":{"properties":{"prompts":{"items":{"$ref":"#/components/schemas/PromptSummary"},"type":"array","title":"Prompts"},"sequences":{"items":{"$ref":"#/components/schemas/PromptSequenceSummary"},"type":"array","title":"Sequences"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["prompts","sequences","next_cursor"],"title":"PromptListPage"},"PromptResponse":{"properties":{"prompt_id":{"type":"string","format":"uuid","title":"Prompt Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"type":"string","title":"Content"},"variables":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Variables"},"visibility":{"type":"string","title":"Visibility"},"is_featured":{"type":"boolean","title":"Is Featured"},"usage_count":{"type":"integer","title":"Usage Count"},"created_by_id":{"type":"string","format":"uuid","title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"is_sequence_internal":{"type":"boolean","title":"Is Sequence Internal","default":false},"category":{"anyOf":[{"$ref":"#/components/schemas/PromptCategoryResponse"},{"type":"null"}]},"is_favorited":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorited"}},"type":"object","required":["prompt_id","tenant_id","category_id","title","description","content","variables","visibility","is_featured","usage_count","created_by_id","created_at","updated_at"],"title":"PromptResponse"},"PromptSequenceCreate":{"properties":{"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"visibility":{"$ref":"#/components/schemas/PromptVisibilityEnum","default":"tenant"},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured","default":false},"steps":{"items":{"$ref":"#/components/schemas/InlineStepCreate"},"type":"array","title":"Steps","default":[]}},"type":"object","required":["title"],"title":"PromptSequenceCreate"},"PromptSequenceResponse":{"properties":{"sequence_id":{"type":"string","format":"uuid","title":"Sequence Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"visibility":{"type":"string","title":"Visibility"},"is_featured":{"type":"boolean","title":"Is Featured"},"usage_count":{"type":"integer","title":"Usage Count"},"created_by_id":{"type":"string","format":"uuid","title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"category":{"anyOf":[{"$ref":"#/components/schemas/PromptCategoryResponse"},{"type":"null"}]},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/SequenceStepResponse"},"type":"array"},{"type":"null"}],"title":"Steps"},"is_favorited":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorited"}},"type":"object","required":["sequence_id","tenant_id","category_id","title","description","visibility","is_featured","usage_count","created_by_id","created_at","updated_at"],"title":"PromptSequenceResponse"},"PromptSequenceStepSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"prompt_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Prompt Id"},"step_order":{"type":"integer","minimum":0.0,"title":"Step Order"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"}},"additionalProperties":false,"type":"object","required":["id","step_order"],"title":"PromptSequenceStepSummary"},"PromptSequenceSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"category":{"anyOf":[{"$ref":"#/components/schemas/PromptCategoryRef"},{"type":"null"}]},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"items":{"$ref":"#/components/schemas/PromptSequenceStepSummary"},"type":"array","title":"Steps"},"visibility":{"type":"string","title":"Visibility"},"usage_count":{"type":"integer","minimum":0.0,"title":"Usage Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","title","steps","visibility","usage_count","created_at"],"title":"PromptSequenceSummary"},"PromptSequenceUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PromptVisibilityEnum"},{"type":"null"}]},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/InlineStepCreate"},"type":"array"},{"type":"null"}],"title":"Steps"}},"type":"object","title":"PromptSequenceUpdate"},"PromptSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"category":{"anyOf":[{"$ref":"#/components/schemas/PromptCategoryRef"},{"type":"null"}]},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"type":"string","title":"Content"},"variables":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Variables","description":"JSONB typé, déclaré par l'auteur du prompt"},"visibility":{"type":"string","title":"Visibility"},"usage_count":{"type":"integer","minimum":0.0,"title":"Usage Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","title","content","visibility","usage_count","created_at"],"title":"PromptSummary"},"PromptUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PromptVisibilityEnum"},{"type":"null"}]},"is_featured":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Featured"},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/PromptVariable"},"type":"array"},{"type":"null"}],"title":"Variables"}},"type":"object","title":"PromptUpdate"},"PromptVariable":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Value"}},"type":"object","required":["name"],"title":"PromptVariable","description":"A variable extracted from prompt content."},"PromptVisibilityEnum":{"type":"string","enum":["platform","tenant","user"],"title":"PromptVisibilityEnum"},"ProviderHealthResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"status":{"type":"string","title":"Status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"retry_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retry After"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"models_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Models Count"}},"type":"object","required":["provider","status"],"title":"ProviderHealthResponse","description":"Health status for a single provider"},"ProviderInfo":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"model_count":{"type":"integer","title":"Model Count"},"modes":{"items":{"type":"string"},"type":"array","title":"Modes"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"}},"type":"object","required":["name","display_name","model_count","modes"],"title":"ProviderInfo","description":"Info sur un provider"},"ProvidersHealthResponse":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"providers":{"items":{"$ref":"#/components/schemas/ProviderHealthResponse"},"type":"array","title":"Providers"},"cached_at":{"type":"string","title":"Cached At"},"cache_ttl":{"type":"integer","title":"Cache Ttl","default":300}},"type":"object","required":["tenant_id","providers","cached_at"],"title":"ProvidersHealthResponse","description":"Health status for all tenant's configured providers"},"PurgeResult":{"properties":{"purged_messages":{"type":"integer","title":"Purged Messages"}},"type":"object","required":["purged_messages"],"title":"PurgeResult"},"RagDashboardResponse":{"properties":{"stats":{"$ref":"#/components/schemas/RagStatsResponse"},"daily_stats":{"items":{"$ref":"#/components/schemas/DailyDocumentStatsResponse"},"type":"array","title":"Daily Stats"},"type_distribution":{"items":{"$ref":"#/components/schemas/DocumentTypeDistributionResponse"},"type":"array","title":"Type Distribution"}},"type":"object","required":["stats","daily_stats","type_distribution"],"title":"RagDashboardResponse","description":"Response complète pour le dashboard RAG"},"RagStatsResponse":{"properties":{"total_documents":{"type":"integer","title":"Total Documents"},"total_chunks":{"type":"integer","title":"Total Chunks"},"total_embeddings":{"type":"integer","title":"Total Embeddings"},"storage_size":{"type":"integer","title":"Storage Size"},"last_document_uploaded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Document Uploaded At"},"failed_documents":{"type":"integer","title":"Failed Documents"},"indexed_documents":{"type":"integer","title":"Indexed Documents"},"indexing_documents":{"type":"integer","title":"Indexing Documents"}},"type":"object","required":["total_documents","total_chunks","total_embeddings","storage_size","failed_documents","indexed_documents","indexing_documents"],"title":"RagStatsResponse","description":"Stats globales RAG pour le dashboard"},"RecentJobResponse":{"properties":{"id":{"type":"string","title":"Id"},"document_id":{"type":"string","title":"Document Id"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","document_id","status","progress","created_at"],"title":"RecentJobResponse"},"RecordCreate":{"properties":{"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["data"],"title":"RecordCreate"},"RecordOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"collection":{"type":"string","title":"Collection"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"data":{"additionalProperties":true,"type":"object","title":"Data"},"version":{"type":"integer","title":"Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","collection","data","version","created_at","updated_at"],"title":"RecordOut"},"RecordUpdate":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["data"],"title":"RecordUpdate"},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest","description":"Requête de refresh token"},"RegisterTeamsTenantRequest":{"properties":{"teams_tenant_id":{"type":"string","title":"Teams Tenant Id"}},"type":"object","required":["teams_tenant_id"],"title":"RegisterTeamsTenantRequest"},"ResponseEnvelope":{"properties":{"id":{"type":"string","title":"Id","description":"Unique response identifier."},"object":{"type":"string","const":"response","title":"Object","default":"response"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"mode":{"type":"string","enum":["rag","agent"],"title":"Mode","description":"Which dispatch path produced this response."},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"output_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Text","description":"Final assistant message."},"sources":{"items":{"$ref":"#/components/schemas/ResponseSource"},"type":"array","title":"Sources"},"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls","description":"Agent tool-use trace, when `mode == 'agent'`."},"trace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Id"},"usage":{"anyOf":[{"$ref":"#/components/schemas/ResponseUsage"},{"type":"null"}]},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["id","created_at","mode"],"title":"ResponseEnvelope","description":"Canonical response shape for `POST /api/v1/responses`."},"ResponseRequest":{"properties":{"input":{"type":"string","maxLength":10000,"minLength":1,"title":"Input","description":"User prompt. The semantic depends on the selected mode: question for RAG (default), message for agent runs."},"agent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Agent Id","description":"If set, runs the stored agent identified by this id. Mutually exclusive with the RAG-only fields."},"memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Memory Ids","description":"Knowledge base IDs to query. If null/empty in RAG mode, all active KBs accessible to the caller are searched."},"document_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Document Ids","description":"Restrict the search to a subset of documents."},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id","description":"Existing conversation to attach this response to."},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"LLM model in `provider/model` format (e.g. `openai/gpt-4o`). Falls back to the AI Profile default when omitted."},"system_prompt":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"System Prompt","description":"Override the system prompt for this single response."},"temperature":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"LLM temperature (lower = more focused)."},"top_k":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Top K","description":"Number of chunks to retrieve in RAG mode."},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score for retrieved chunks."},"reasoning_effort":{"anyOf":[{"type":"string","enum":["low","medium","high"]},{"type":"null"}],"title":"Reasoning Effort","description":"Reasoning effort hint for models that support it."},"image_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Image Keys","description":"Image storage keys to attach (agent mode only)."},"stream":{"type":"boolean","title":"Stream","description":"When true, the response is delivered as a Server-Sent Events stream (`text/event-stream`).","default":false},"tag":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Tag","description":"Free-form tag for per-tag usage tracking."},"meetings_scope":{"type":"boolean","title":"Meetings Scope","description":"RAG mode only — restrict retrieval to documents tagged as meeting transcripts and apply a temporal filter.","default":false},"date_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date From","description":"Lower bound (UTC, inclusive) for `meetings_scope`."},"date_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date To","description":"Upper bound (UTC, exclusive) for `meetings_scope`."}},"type":"object","required":["input"],"title":"ResponseRequest","description":"Unified request body for `POST /api/v1/responses`."},"ResponseSource":{"properties":{"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Id"},"document_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Title"},"chunk_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chunk Id"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excerpt"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"ResponseSource","description":"Citation / source returned by RAG."},"ResponseUsage":{"properties":{"prompt_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prompt Tokens"},"completion_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Completion Tokens"},"total_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Tokens"},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost","description":"Estimated cost in USD."}},"type":"object","title":"ResponseUsage","description":"Token / cost usage for a single response."},"RestoreVersionRequest":{"properties":{"version":{"type":"integer","title":"Version"}},"type":"object","required":["version"],"title":"RestoreVersionRequest"},"ResumeExecutionResponse":{"properties":{"executionId":{"type":"string","format":"uuid","title":"Executionid"},"status":{"type":"string","title":"Status"}},"type":"object","required":["executionId","status"],"title":"ResumeExecutionResponse","description":"Schema for resume execution response"},"RichDocCreate":{"properties":{"collection":{"type":"string","title":"Collection"},"parent_record_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Record Id"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"title":{"type":"string","title":"Title"},"editor":{"type":"string","title":"Editor"},"schema_version":{"type":"string","title":"Schema Version"},"content":{"additionalProperties":true,"type":"object","title":"Content"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"is_indexable":{"type":"boolean","title":"Is Indexable","default":false}},"type":"object","required":["collection","title","editor","schema_version","content"],"title":"RichDocCreate"},"RichDocOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"collection":{"type":"string","title":"Collection"},"parent_record_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Record Id"},"external_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Id"},"title":{"type":"string","title":"Title"},"editor":{"type":"string","title":"Editor"},"schema_version":{"type":"string","title":"Schema Version"},"content":{"additionalProperties":true,"type":"object","title":"Content"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plain Text"},"doc_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Doc Metadata"},"is_indexable":{"type":"boolean","title":"Is Indexable"},"version":{"type":"integer","title":"Version"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","collection","title","editor","schema_version","content","is_indexable","version","created_at","updated_at"],"title":"RichDocOut"},"RichDocUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Content"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"RichDocUpdate"},"SSOAuthUrlResponse":{"properties":{"auth_url":{"type":"string","title":"Auth Url"},"state":{"type":"string","title":"State"}},"type":"object","required":["auth_url","state"],"title":"SSOAuthUrlResponse"},"SSOProviderConfigResponse":{"properties":{"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"domain_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Hint"},"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"},"is_managed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Managed"}},"type":"object","title":"SSOProviderConfigResponse","description":"Config sans le secret"},"SSOProviderResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider_type":{"type":"string","title":"Provider Type"},"name":{"type":"string","title":"Name"},"is_primary":{"type":"boolean","title":"Is Primary"},"config":{"anyOf":[{"$ref":"#/components/schemas/SSOProviderConfigResponse"},{"type":"null"}]}},"type":"object","required":["id","provider_type","name","is_primary"],"title":"SSOProviderResponse"},"SSOProvidersListResponse":{"properties":{"providers":{"items":{"$ref":"#/components/schemas/SSOProviderResponse"},"type":"array","title":"Providers"}},"type":"object","required":["providers"],"title":"SSOProvidersListResponse"},"SearchFilter":{"properties":{"field":{"type":"string","title":"Field"},"value":{"title":"Value"}},"type":"object","required":["field"],"title":"SearchFilter","description":"One column filter (sf-knowledge-hub SearchFilterValue).\n\nvalue semantics by column type:\n- keyword → str (exact match, case-sensitive at the store level)\n- integer/float → [min, max] (either bound may be null = open)\n- bool → true/false\n- null / \"\" → ignored by the caller (no condition emitted)"},"SearchHit":{"properties":{"source_object_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Object Id"},"score":{"type":"number","title":"Score"},"user_fields":{"additionalProperties":true,"type":"object","title":"User Fields"}},"type":"object","required":["source_object_id","score","user_fields"],"title":"SearchHit"},"SequenceStepResponse":{"properties":{"step_id":{"type":"string","format":"uuid","title":"Step Id"},"sequence_id":{"type":"string","format":"uuid","title":"Sequence Id"},"prompt_id":{"type":"string","format":"uuid","title":"Prompt Id"},"step_order":{"type":"integer","title":"Step Order"},"instruction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instruction"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"prompt":{"anyOf":[{"$ref":"#/components/schemas/PromptResponse"},{"type":"null"}]}},"type":"object","required":["step_id","sequence_id","prompt_id","step_order","instruction","created_at"],"title":"SequenceStepResponse"},"ShareListResponse":{"properties":{"shares":{"items":{"$ref":"#/components/schemas/ShareResponse"},"type":"array","title":"Shares"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["shares","total"],"title":"ShareListResponse","description":"Response schema for list of shares","example":{"shares":[],"total":0}},"SharePermissionEnum-Output":{"type":"string","enum":["read","write","admin"],"title":"SharePermissionEnum","description":"Permission level for shared memory"},"SharePointBrowseResponse":{"properties":{"site_id":{"type":"string","title":"Site Id"},"drive_id":{"type":"string","title":"Drive Id"},"folder_path":{"type":"string","title":"Folder Path"},"items":{"items":{"$ref":"#/components/schemas/SharePointItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["site_id","drive_id","folder_path","items"],"title":"SharePointBrowseResponse","description":"Response for browsing SharePoint folders."},"SharePointDriveResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"drive_type":{"type":"string","title":"Drive Type"},"web_url":{"type":"string","title":"Web Url"},"quota_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Used"},"quota_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Total"}},"type":"object","required":["id","name","drive_type","web_url"],"title":"SharePointDriveResponse","description":"Response schema for a SharePoint drive (document library)."},"SharePointItemResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"modified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modified At"},"web_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Web Url"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["id","name","type"],"title":"SharePointItemResponse","description":"Response schema for a SharePoint item (file or folder)."},"SharePointSiteResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"web_url":{"type":"string","title":"Web Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","name","display_name","web_url"],"title":"SharePointSiteResponse","description":"Response schema for a SharePoint site."},"ShareResponse":{"properties":{"share_id":{"type":"string","format":"uuid","title":"Share Id"},"resource_type":{"type":"string","title":"Resource Type"},"resource_id":{"type":"string","format":"uuid","title":"Resource Id"},"target_type":{"type":"string","title":"Target Type"},"permission":{"type":"string","title":"Permission"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_active":{"type":"boolean","title":"Is Active"},"shared_by":{"anyOf":[{"$ref":"#/components/schemas/UserInfo"},{"type":"null"}]},"target_user":{"anyOf":[{"$ref":"#/components/schemas/UserInfo"},{"type":"null"}]},"target_team":{"anyOf":[{"$ref":"#/components/schemas/TeamInfo"},{"type":"null"}]}},"type":"object","required":["share_id","resource_type","resource_id","target_type","permission","created_at","updated_at","is_active"],"title":"ShareResponse","description":"Response schema for a single share","example":{"created_at":"2026-01-14T10:00:00Z","is_active":true,"message":"Here's the project for review","permission":"edit","resource_id":"550e8400-e29b-41d4-a716-446655440000","resource_type":"memory","share_id":"123e4567-e89b-12d3-a456-426614174000","shared_by":{"email":"owner@company.com","full_name":"John Owner","id":"111e1111-e11b-11d1-a111-111111111111"},"target_type":"user","target_user":{"email":"collaborator@company.com","full_name":"Jane Collaborator","id":"222e2222-e22b-22d2-a222-222222222222"},"updated_at":"2026-01-14T10:00:00Z"}},"ShareTargetTypeEnum":{"type":"string","enum":["user","team"],"title":"ShareTargetTypeEnum","description":"Target type for sharing"},"ShareTypeEnum":{"type":"string","enum":["user","team"],"title":"ShareTypeEnum","description":"Type of share recipient"},"ShareableEntitiesResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/ShareableUserResponse"},"type":"array","title":"Users"},"teams":{"items":{"$ref":"#/components/schemas/ShareableTeamResponse"},"type":"array","title":"Teams"}},"type":"object","required":["users","teams"],"title":"ShareableEntitiesResponse","description":"Response containing users and teams available for sharing."},"ShareableTeamResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"member_count":{"type":"integer","title":"Member Count"}},"type":"object","required":["id","name","member_count"],"title":"ShareableTeamResponse","description":"Response for a team available for sharing."},"ShareableUserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["id","email"],"title":"ShareableUserResponse","description":"Response for a user available for sharing."},"SharedByUser":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["id","email"],"title":"SharedByUser","description":"Minimal user info for who shared"},"SharedMemoriesListResponse":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/MemoryWithShareInfo"},"type":"array","title":"Memories"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["memories","total"],"title":"SharedMemoriesListResponse","description":"Schema for list of memories shared with the current user"},"SharedResourceResponse":{"properties":{"resource_type":{"type":"string","title":"Resource Type"},"resource_id":{"type":"string","format":"uuid","title":"Resource Id"},"permission":{"type":"string","title":"Permission"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"shared_at":{"type":"string","format":"date-time","title":"Shared At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"shared_by":{"anyOf":[{"$ref":"#/components/schemas/UserInfo"},{"type":"null"}]}},"type":"object","required":["resource_type","resource_id","permission","shared_at"],"title":"SharedResourceResponse","description":"Response schema for a resource shared with the current user"},"SharedResourcesListResponse":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/SharedResourceResponse"},"type":"array","title":"Resources"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["resources","total","skip","limit"],"title":"SharedResourcesListResponse","description":"Response schema for list of shared resources"},"SharedWithTeam":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"SharedWithTeam","description":"Minimal team info for share recipient"},"SharedWithUser":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["id","email"],"title":"SharedWithUser","description":"Minimal user info for share recipient"},"SilentAuthRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"},"client_id":{"type":"string","title":"Client Id"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"scope":{"type":"string","title":"Scope","default":"openid profile email"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["refresh_token","client_id","redirect_uri"],"title":"SilentAuthRequest","description":"Request body for silent authentication (SSO)"},"SilentAuthResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"redirect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"SilentAuthResponse","description":"Response for silent authentication"},"SkillCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"slug":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Slug"},"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Category"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"output_format":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Output Format"},"is_public":{"type":"boolean","title":"Is Public","default":false},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"compatibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compatibility"},"memory_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Memory Ids","default":[]},"mcp_tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Mcp Tools","default":[]},"allowed_tools":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Allowed Tools"},"package_manifest":{"anyOf":[{"$ref":"#/components/schemas/SkillPackageManifest"},{"type":"null"}]},"examples":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillExample"},"type":"array"},{"type":"null"}],"title":"Examples"},"error_handling":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillErrorHandler"},"type":"array"},{"type":"null"}],"title":"Error Handling"},"skill_metadata":{"anyOf":[{"$ref":"#/components/schemas/SkillMetadata"},{"type":"null"}]}},"type":"object","required":["name"],"title":"SkillCreate"},"SkillErrorHandler":{"properties":{"error":{"type":"string","title":"Error"},"cause":{"type":"string","title":"Cause"},"solution":{"type":"string","title":"Solution"}},"type":"object","required":["error","cause","solution"],"title":"SkillErrorHandler"},"SkillExample":{"properties":{"user_message":{"type":"string","title":"User Message"},"actions":{"items":{"type":"string"},"type":"array","title":"Actions","default":[]},"result":{"type":"string","title":"Result"}},"type":"object","required":["user_message","result"],"title":"SkillExample"},"SkillMetadata":{"properties":{"author":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"trigger_phrases":{"items":{"type":"string"},"type":"array","title":"Trigger Phrases","default":[]},"mcp_servers":{"items":{"type":"string"},"type":"array","title":"Mcp Servers","default":[]},"requires_knowledge_base":{"type":"boolean","title":"Requires Knowledge Base","default":false},"version_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Label"},"documentation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentation"},"support":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support"}},"type":"object","title":"SkillMetadata"},"SkillPackageFile":{"properties":{"path":{"type":"string","title":"Path"},"kind":{"type":"string","enum":["script","reference","asset"],"title":"Kind"},"size":{"type":"integer","title":"Size"},"sha256":{"type":"string","title":"Sha256"},"storage_key":{"type":"string","title":"Storage Key"}},"type":"object","required":["path","kind","size","sha256","storage_key"],"title":"SkillPackageFile"},"SkillPackageManifest":{"properties":{"version":{"type":"integer","title":"Version","default":1},"root_dir":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Dir"},"files":{"items":{"$ref":"#/components/schemas/SkillPackageFile"},"type":"array","title":"Files","default":[]}},"type":"object","title":"SkillPackageManifest"},"SkillResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"slug":{"type":"string","title":"Slug"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"output_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Format"},"instruction_blocks":{"items":{},"type":"array","title":"Instruction Blocks","default":[]},"variables":{"items":{},"type":"array","title":"Variables","default":[]},"examples":{"items":{},"type":"array","title":"Examples","default":[]},"error_handling":{"items":{},"type":"array","title":"Error Handling","default":[]},"skill_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Skill Metadata"},"version":{"type":"integer","title":"Version"},"is_active":{"type":"boolean","title":"Is Active"},"is_public":{"type":"boolean","title":"Is Public"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"compatibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compatibility"},"memory_ids":{"items":{"type":"string"},"type":"array","title":"Memory Ids","default":[]},"mcp_tools":{"items":{"type":"string"},"type":"array","title":"Mcp Tools","default":[]},"allowed_tools":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allowed Tools"},"package_manifest":{"anyOf":[{"$ref":"#/components/schemas/SkillPackageManifest"},{"type":"null"}]},"created_by_id":{"type":"string","format":"uuid","title":"Created By 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","name","description","slug","category","content","output_format","version","is_active","is_public","created_by_id","created_at","updated_at"],"title":"SkillResponse"},"SkillSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"is_active":{"type":"boolean","title":"Is Active"}},"additionalProperties":false,"type":"object","required":["id","name","slug","is_active"],"title":"SkillSummary"},"SkillUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"slug":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Slug"},"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Category"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"output_format":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Output Format"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"compatibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compatibility"},"memory_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Memory Ids"},"mcp_tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Mcp Tools"},"allowed_tools":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Allowed Tools"},"package_manifest":{"anyOf":[{"$ref":"#/components/schemas/SkillPackageManifest"},{"type":"null"}]},"examples":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillExample"},"type":"array"},{"type":"null"}],"title":"Examples"},"error_handling":{"anyOf":[{"items":{"$ref":"#/components/schemas/SkillErrorHandler"},"type":"array"},{"type":"null"}],"title":"Error Handling"},"skill_metadata":{"anyOf":[{"$ref":"#/components/schemas/SkillMetadata"},{"type":"null"}]}},"type":"object","title":"SkillUpdate"},"SpellingCheckRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"Text to check for spelling errors"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context","description":"Additional context about the text (e.g., 'meeting notes about rugby')"}},"type":"object","required":["text"],"title":"SpellingCheckRequest","description":"Request to check text for spelling errors"},"SpellingCheckResponse":{"properties":{"suggestions":{"items":{"$ref":"#/components/schemas/SpellingSuggestion"},"type":"array","title":"Suggestions","description":"List of spelling suggestions","default":[]},"checked_text":{"type":"string","title":"Checked Text","description":"The text that was checked"},"has_suggestions":{"type":"boolean","title":"Has Suggestions","description":"Whether any suggestions were found","default":false}},"type":"object","required":["checked_text"],"title":"SpellingCheckResponse","description":"Response with spelling suggestions"},"SpellingReplaceRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Original text"},"replacements":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Replacements","description":"List of replacements to apply: [{original, suggested, start_index, end_index}]"}},"type":"object","required":["text","replacements"],"title":"SpellingReplaceRequest","description":"Request to apply a spelling replacement"},"SpellingReplaceResponse":{"properties":{"text":{"type":"string","title":"Text","description":"Text with replacements applied"},"replacements_applied":{"type":"integer","title":"Replacements Applied","description":"Number of replacements applied"}},"type":"object","required":["text","replacements_applied"],"title":"SpellingReplaceResponse","description":"Response with replaced text"},"SpellingSuggestion":{"properties":{"original":{"type":"string","title":"Original","description":"The original (potentially misspelled) word"},"suggested":{"type":"string","title":"Suggested","description":"The suggested correction"},"term_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Term Id","description":"ID of the vocabulary term if matched"},"term_definition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Term Definition","description":"Definition of the term for context"},"start_index":{"type":"integer","title":"Start Index","description":"Start position in the text"},"end_index":{"type":"integer","title":"End Index","description":"End position in the text"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","description":"Confidence score (1.0 = exact match from vocabulary, <1.0 = LLM suggestion)","default":1.0}},"type":"object","required":["original","suggested","start_index","end_index"],"title":"SpellingSuggestion","description":"A single spelling suggestion"},"StartAuthResponse":{"properties":{"authorize_url":{"type":"string","title":"Authorize Url"},"state":{"type":"string","title":"State"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"}},"type":"object","required":["authorize_url","state","connection_id"],"title":"StartAuthResponse"},"StartConnectResponse":{"properties":{"authorize_url":{"type":"string","title":"Authorize Url"},"connection_id":{"type":"string","format":"uuid","title":"Connection Id"},"state":{"type":"string","title":"State"}},"type":"object","required":["authorize_url","connection_id","state"],"title":"StartConnectResponse"},"StartGmailConnectRequest":{"properties":{"app_slug":{"type":"string","title":"App Slug","default":"sf-workflow"},"return_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return To"},"connection_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Connection Id"}},"additionalProperties":false,"type":"object","title":"StartGmailConnectRequest"},"StartOAuthResponse":{"properties":{"authorize_url":{"type":"string","title":"Authorize Url"}},"type":"object","required":["authorize_url"],"title":"StartOAuthResponse","description":"Returned by ``/oauth/{provider}/start`` for AJAX-driven flows.\n\nThe frontend issues this call via ``authFetch`` (so the JWT travels\nin the ``Authorization`` header), then navigates the browser to\n``authorize_url`` with ``window.location.href``. Doing it this way\navoids the chicken-and-egg of \"302 redirect that needs a header\nthe browser only sends on fetch, not on navigation\"."},"StorageSourceEnum":{"type":"string","enum":["meeting","project"],"title":"StorageSourceEnum"},"SubordinateResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","email","full_name","job_title","is_active"],"title":"SubordinateResponse","description":"Subordonné direct d'un user (SUP-20)."},"SyncFrequency":{"type":"string","enum":["manual","15m","1h","6h","24h","weekly"],"title":"SyncFrequency","description":"Fréquence de synchronisation"},"SyncJobCreateRequest":{"properties":{"connector_id":{"type":"string","format":"uuid","title":"Connector Id"},"status":{"type":"string","pattern":"^(running|completed|failed|cancelled)$","title":"Status"},"mode":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Mode"},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["connector_id","status"],"title":"SyncJobCreateRequest"},"SyncJobResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"connector_id":{"type":"string","format":"uuid","title":"Connector Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"status":{"type":"string","title":"Status"},"documents_found":{"type":"integer","title":"Documents Found","default":0},"documents_new":{"type":"integer","title":"Documents New","default":0},"documents_updated":{"type":"integer","title":"Documents Updated","default":0},"documents_deleted":{"type":"integer","title":"Documents Deleted","default":0},"documents_failed":{"type":"integer","title":"Documents Failed","default":0},"documents_skipped":{"type":"integer","title":"Documents Skipped","default":0},"errors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Errors"},"is_full_sync":{"type":"boolean","title":"Is Full Sync","default":false},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"}},"type":"object","required":["id","connector_id","started_at","status"],"title":"SyncJobResponse"},"SyncJobUpdateRequest":{"properties":{"status":{"anyOf":[{"type":"string","pattern":"^(running|completed|failed|cancelled)$"},{"type":"null"}],"title":"Status"},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","title":"SyncJobUpdateRequest"},"SyncResult":{"properties":{"queued":{"type":"boolean","title":"Queued"}},"type":"object","required":["queued"],"title":"SyncResult"},"SyncRunRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"status":{"type":"string","title":"Status"},"documents_found":{"type":"integer","title":"Documents Found","default":0},"documents_new":{"type":"integer","title":"Documents New","default":0},"documents_updated":{"type":"integer","title":"Documents Updated","default":0},"documents_deleted":{"type":"integer","title":"Documents Deleted","default":0},"documents_failed":{"type":"integer","title":"Documents Failed","default":0},"documents_skipped":{"type":"integer","title":"Documents Skipped","default":0},"is_full_sync":{"type":"boolean","title":"Is Full Sync","default":false},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"}},"type":"object","required":["id","started_at","status"],"title":"SyncRunRead"},"SyncStatus":{"type":"string","enum":["running","completed","failed","cancelled"],"title":"SyncStatus","description":"Status d'une synchronisation"},"TargetedQueryInfo":{"properties":{"memory_id":{"type":"string","title":"Memory Id"},"memory_name":{"type":"string","title":"Memory Name"},"sub_question":{"type":"string","title":"Sub Question"}},"type":"object","required":["memory_id","memory_name","sub_question"],"title":"TargetedQueryInfo","description":"Info about a sub-question generated for a specific RAG"},"TaskStatusResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"task_type":{"type":"string","title":"Task Type"},"status":{"type":"string","title":"Status"},"progress":{"type":"integer","title":"Progress"},"created_at":{"type":"string","title":"Created At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["task_id","task_type","status","progress","created_at"],"title":"TaskStatusResponse","description":"Response schema for task status."},"TeamCount":{"properties":{"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["team_id","team_name","count"],"title":"TeamCount"},"TeamCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"TeamCreate"},"TeamInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"member_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Count"}},"type":"object","required":["id","name"],"title":"TeamInfo","description":"Basic team info for share responses"},"TeamMemberResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"role":{"type":"string","title":"Role"},"joined_at":{"type":"string","title":"Joined At"}},"type":"object","required":["user_id","email","role","joined_at"],"title":"TeamMemberResponse","description":"Response schema for a team member"},"TeamMembersListResponse":{"properties":{"members":{"items":{"$ref":"#/components/schemas/TeamMemberResponse"},"type":"array","title":"Members"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["members","total"],"title":"TeamMembersListResponse","description":"Response schema for list of team members"},"TeamRef":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"}},"additionalProperties":false,"type":"object","required":["id","name"],"title":"TeamRef"},"TeamResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"member_count":{"type":"integer","title":"Member Count"},"created_at":{"type":"string","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"creator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creator Name"}},"type":"object","required":["name","id","tenant_id","member_count","created_at"],"title":"TeamResponse"},"TeamUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"TeamUpdate"},"TeamsBotActivateResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"bot_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Id"},"has_bot_secret":{"type":"boolean","title":"Has Bot Secret","default":false},"azure_app_object_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure App Object Id"},"is_managed":{"type":"boolean","title":"Is Managed","default":false},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"},"max_response_length":{"type":"integer","title":"Max Response Length"},"include_sources":{"type":"boolean","title":"Include Sources"},"language":{"type":"string","title":"Language"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"is_active":{"type":"boolean","title":"Is Active"},"total_queries":{"type":"integer","title":"Total Queries"},"last_query_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Query At"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"API key shown only once"}},"type":"object","required":["id","tenant_id","name","description","bot_app_id","memory_ids","model_id","system_prompt","welcome_message","max_response_length","include_sources","language","is_active","total_queries","last_query_at","api_key_id","created_by_id","created_at","updated_at"],"title":"TeamsBotActivateResponse"},"TeamsBotConsentUrlResponse":{"properties":{"consent_url":{"type":"string","title":"Consent Url"},"messaging_endpoint":{"type":"string","title":"Messaging Endpoint"},"redirect_uri":{"type":"string","title":"Redirect Uri"}},"type":"object","required":["consent_url","messaging_endpoint","redirect_uri"],"title":"TeamsBotConsentUrlResponse"},"TeamsBotCreate":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"bot_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Id"},"bot_app_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Secret"},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"},"max_response_length":{"type":"integer","maximum":10000.0,"minimum":100.0,"title":"Max Response Length","default":2000},"include_sources":{"type":"boolean","title":"Include Sources","default":true},"language":{"type":"string","maxLength":10,"title":"Language","default":"fr"}},"type":"object","required":["name"],"title":"TeamsBotCreate"},"TeamsBotResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"bot_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Id"},"has_bot_secret":{"type":"boolean","title":"Has Bot Secret","default":false},"azure_app_object_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure App Object Id"},"is_managed":{"type":"boolean","title":"Is Managed","default":false},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"},"max_response_length":{"type":"integer","title":"Max Response Length"},"include_sources":{"type":"boolean","title":"Include Sources"},"language":{"type":"string","title":"Language"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"is_active":{"type":"boolean","title":"Is Active"},"total_queries":{"type":"integer","title":"Total Queries"},"last_query_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Query At"},"api_key_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Api Key Id"},"created_by_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By 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","tenant_id","name","description","bot_app_id","memory_ids","model_id","system_prompt","welcome_message","max_response_length","include_sources","language","is_active","total_queries","last_query_at","api_key_id","created_by_id","created_at","updated_at"],"title":"TeamsBotResponse"},"TeamsBotStats":{"properties":{"total_queries":{"type":"integer","title":"Total Queries"},"queries_today":{"type":"integer","title":"Queries Today"},"queries_this_month":{"type":"integer","title":"Queries This Month"},"unique_users":{"type":"integer","title":"Unique Users"}},"type":"object","required":["total_queries","queries_today","queries_this_month","unique_users"],"title":"TeamsBotStats"},"TeamsBotUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"bot_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Id"},"bot_app_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bot App Secret"},"memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Memory Ids"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Id"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"},"max_response_length":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":100.0},{"type":"null"}],"title":"Max Response Length"},"include_sources":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Sources"},"language":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Language"}},"type":"object","title":"TeamsBotUpdate"},"TeamsConversationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"bot_config_id":{"type":"string","format":"uuid","title":"Bot Config Id"},"teams_conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teams Conversation Id"},"teams_user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teams User Name"},"teams_user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teams User Email"},"message_count":{"type":"integer","title":"Message Count"},"last_message_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Message At"}},"type":"object","required":["id","bot_config_id","teams_conversation_id","teams_user_name","teams_user_email","message_count","last_message_at"],"title":"TeamsConversationResponse"},"TeamsListResponse":{"properties":{"teams":{"items":{"$ref":"#/components/schemas/TeamResponse"},"type":"array","title":"Teams"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["teams","total","page","page_size"],"title":"TeamsListResponse"},"TenantAppsResponse":{"properties":{"frontend_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frontend Base Url"},"apps":{"items":{"$ref":"#/components/schemas/AppConfig"},"type":"array","title":"Apps"}},"type":"object","required":["apps"],"title":"TenantAppsResponse","description":"Response with apps and frontend base URL"},"TenantConfig":{"properties":{"ai_profiles":{"items":{"$ref":"#/components/schemas/AIProfilePublic"},"type":"array","title":"Ai Profiles"},"identity_blocks":{"items":{"$ref":"#/components/schemas/IdentityBlockPublic"},"type":"array","title":"Identity Blocks"},"vocabulary":{"items":{"$ref":"#/components/schemas/VocabularyPublic"},"type":"array","title":"Vocabulary"},"webhook_endpoints":{"items":{"$ref":"#/components/schemas/WebhookEndpointPublic"},"type":"array","title":"Webhook Endpoints"},"integrations":{"items":{"$ref":"#/components/schemas/IntegrationPublic"},"type":"array","title":"Integrations"}},"additionalProperties":false,"type":"object","required":["ai_profiles","identity_blocks","vocabulary","webhook_endpoints","integrations"],"title":"TenantConfig"},"TenantLLMErrorListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TenantLLMErrorResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"TenantLLMErrorListResponse"},"TenantLLMErrorResponse":{"properties":{"id":{"type":"string","title":"Id"},"model":{"type":"string","title":"Model"},"provider":{"type":"string","title":"Provider"},"error_code":{"type":"string","title":"Error Code"},"error_message":{"type":"string","title":"Error Message"},"http_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","model","provider","error_code","error_message","created_at"],"title":"TenantLLMErrorResponse"},"TenantLLMErrorStatsResponse":{"properties":{"total_errors":{"type":"integer","title":"Total Errors"},"period_days":{"type":"integer","title":"Period Days"},"by_provider":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Provider"},"by_error_code":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"By Error Code"},"hourly_trend":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Hourly Trend"}},"type":"object","required":["total_errors","period_days","by_provider","by_error_code","hourly_trend"],"title":"TenantLLMErrorStatsResponse"},"TenantMcpKeyCreate":{"properties":{"mcp_server_name":{"type":"string","title":"Mcp Server Name","description":"MCP server name from catalog: web_search, notion"},"api_key":{"type":"string","title":"Api Key","description":"API key in plaintext (will be encrypted)"}},"type":"object","required":["mcp_server_name","api_key"],"title":"TenantMcpKeyCreate"},"TenantMcpKeyResponse":{"properties":{"key_id":{"type":"string","title":"Key Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"mcp_server_name":{"type":"string","title":"Mcp Server Name"},"api_key_masked":{"type":"string","title":"Api Key Masked"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["key_id","tenant_id","mcp_server_name","api_key_masked","is_active","created_at","updated_at"],"title":"TenantMcpKeyResponse"},"TestConfigRequest":{"properties":{"provider_type":{"type":"string","title":"Provider Type"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["provider_type","config"],"title":"TestConfigRequest","description":"Request body pour tester une config SSO sans sauvegarder"},"TimeseriesPoint":{"properties":{"bucket":{"type":"string","format":"date-time","title":"Bucket"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["bucket","count"],"title":"TimeseriesPoint"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"Token","description":"Réponse JWT"},"TokenRequest":{"properties":{"grant_type":{"type":"string","title":"Grant Type","default":"authorization_code"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"client_id":{"type":"string","title":"Client Id"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","required":["client_id"],"title":"TokenRequest","description":"Request body for token exchange"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","refresh_token","expires_in"],"title":"TokenResponse","description":"Response for token exchange"},"TrackEventRequest":{"properties":{"event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Event Id"},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"app":{"type":"string","maxLength":50,"title":"App"},"action":{"type":"string","maxLength":100,"title":"Action"},"entity_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Entity Id"},"team_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Team Id"},"external_actor_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Actor Id"},"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes"}},"type":"object","required":["app","action"],"title":"TrackEventRequest","description":"Forme du payload. Les regles metier (namespace ext-*, skew occurred_at,\nallowlist attributes, team_id existe) sont validees dans le handler pour\nproduire un contrat HTTP homogene (400) plutot que 422 Pydantic."},"TranscriptSegment":{"properties":{"start":{"type":"number","title":"Start","description":"Secondes depuis le début"},"end":{"type":"number","title":"End"},"speaker":{"type":"string","title":"Speaker"},"text":{"type":"string","title":"Text"}},"additionalProperties":false,"type":"object","required":["start","end","speaker","text"],"title":"TranscriptSegment"},"UpdateKnowledgeSourceRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"retrieval_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Retrieval Strategy"},"hybrid_alpha":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hybrid Alpha"},"top_k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Top K"}},"type":"object","title":"UpdateKnowledgeSourceRequest"},"UpdateModelAccessRequest":{"properties":{"rules":{"items":{"$ref":"#/components/schemas/AccessRuleInput"},"type":"array","title":"Rules"}},"type":"object","required":["rules"],"title":"UpdateModelAccessRequest"},"UpdateModelPreferenceRequest":{"properties":{"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"fallback_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Model Id","description":"Model ID to use as fallback if this model fails (e.g., 'openai/gpt-4o-mini')"}},"type":"object","title":"UpdateModelPreferenceRequest"},"UpdateShareRequest":{"properties":{"permission":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__share__SharePermissionEnum"},{"type":"null"}],"description":"New permission level"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"New expiration date (set to null to remove expiration)"}},"type":"object","title":"UpdateShareRequest","description":"Request body for updating an existing share","example":{"expires_at":"2026-12-31T23:59:59Z","permission":"admin"}},"UpdateUserMessageRequest":{"properties":{"content":{"type":"string","maxLength":50000,"minLength":1,"title":"Content","description":"New message content (trimmed, 1..50000 chars)"}},"type":"object","required":["content"],"title":"UpdateUserMessageRequest","description":"Edit a user message content. Truncates every subsequent message."},"UpdateUserTeamsRequest":{"properties":{"team_ids":{"items":{"type":"string"},"type":"array","title":"Team Ids"}},"type":"object","required":["team_ids"],"title":"UpdateUserTeamsRequest","description":"Requête pour mettre à jour les équipes d'un utilisateur"},"UploadUrlRequest":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","exclusiveMinimum":0.0,"title":"Size Bytes"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"}},"type":"object","required":["filename","content_type","size_bytes"],"title":"UploadUrlRequest"},"UploadUrlResponse":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"upload_url":{"type":"string","title":"Upload Url"},"storage_path":{"type":"string","title":"Storage Path"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"required_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Required Headers"}},"type":"object","required":["asset_id","upload_url","storage_path","expires_at","required_headers"],"title":"UploadUrlResponse"},"UsageItem":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"node_id":{"type":"string","title":"Node Id"},"status":{"type":"string","title":"Status"},"folder_or_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Or Label"},"backfill_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backfill Mode"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["workflow_id","node_id","status"],"title":"UsageItem","description":"One workflow trigger node wired to a mailbox (governance Usages tab)."},"UserCount":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["user_id","user_name","count"],"title":"UserCount"},"UserCreateRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"password":{"type":"string","title":"Password"},"role":{"type":"string","title":"Role","default":"user"}},"type":"object","required":["email","password"],"title":"UserCreateRequest","description":"Requête pour créer un utilisateur"},"UserDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"role":{"type":"string","title":"Role"},"tenant_id":{"type":"string","title":"Tenant Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"setup_completed":{"type":"boolean","title":"Setup Completed"},"manager_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager 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","email","username","full_name","job_title","role","tenant_id","is_active","is_verified","setup_completed","created_at","updated_at"],"title":"UserDetailResponse","description":"Réponse détaillée pour un utilisateur"},"UserDirectCreateRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"role":{"type":"string","title":"Role","default":"user"},"team_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Id"},"send_welcome_email":{"type":"boolean","title":"Send Welcome Email","default":true}},"type":"object","required":["email"],"title":"UserDirectCreateRequest","description":"Création directe d'un utilisateur (sans invitation, login OTP)."},"UserInfo":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar"}},"type":"object","required":["id","email"],"title":"UserInfo","description":"Basic user info for share responses"},"UserListResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"setup_completed":{"type":"boolean","title":"Setup Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","email","username","full_name","job_title","role","is_active","is_verified","setup_completed","created_at","updated_at"],"title":"UserListResponse","description":"Réponse pour la liste des utilisateurs"},"UserMemoryCreate":{"properties":{"content":{"type":"string","maxLength":2000,"minLength":1,"title":"Content","description":"Contenu de la mémoire"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Métadonnées optionnelles"}},"type":"object","required":["content"],"title":"UserMemoryCreate","description":"Schema pour créer une nouvelle mémoire manuellement"},"UserMemoryListResponse":{"properties":{"memories":{"items":{"$ref":"#/components/schemas/UserMemoryResponse"},"type":"array","title":"Memories"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["memories","total"],"title":"UserMemoryListResponse","description":"Schema pour la liste des mémoires"},"UserMemoryResponse":{"properties":{"id":{"type":"string","title":"Id","description":"ID unique de la mémoire"},"memory":{"type":"string","title":"Memory","description":"Contenu de la mémoire"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id","description":"ID de l'utilisateur"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Métadonnées"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Date de création"}},"type":"object","required":["id","memory"],"title":"UserMemoryResponse","description":"Schema de réponse pour une mémoire"},"UserMemorySearchRequest":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Requête de recherche"},"limit":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Limit","description":"Nombre max de résultats","default":5}},"type":"object","required":["query"],"title":"UserMemorySearchRequest","description":"Schema pour rechercher dans les mémoires"},"UserMemoryUpdate":{"properties":{"content":{"type":"string","maxLength":2000,"minLength":1,"title":"Content","description":"Nouveau contenu"}},"type":"object","required":["content"],"title":"UserMemoryUpdate","description":"Schema pour modifier une mémoire existante"},"UserPermissionCreate":{"properties":{"permission":{"type":"string","title":"Permission"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["permission"],"title":"UserPermissionCreate"},"UserPermissionResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"permission":{"type":"string","title":"Permission"},"granted_by_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted By Id"},"granted_at":{"type":"string","format":"date-time","title":"Granted At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["id","user_id","permission","granted_by_id","granted_at","expires_at","reason"],"title":"UserPermissionResponse"},"UserPermissionsResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"role_permissions":{"items":{"type":"string"},"type":"array","title":"Role Permissions"},"individual_permissions":{"items":{"$ref":"#/components/schemas/UserPermissionResponse"},"type":"array","title":"Individual Permissions"},"effective_permissions":{"items":{"type":"string"},"type":"array","title":"Effective Permissions"}},"type":"object","required":["user_id","role_permissions","individual_permissions","effective_permissions"],"title":"UserPermissionsResponse"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"role":{"type":"string","title":"Role"},"tenant_id":{"type":"string","title":"Tenant Id"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"setup_completed":{"type":"boolean","title":"Setup Completed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","email","username","full_name","job_title","role","tenant_id","is_active","is_verified","setup_completed","created_at","updated_at"],"title":"UserResponse","description":"Réponse utilisateur pour /me"},"UserTeamResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"member_count":{"type":"integer","title":"Member Count"},"joined_at":{"type":"string","format":"date-time","title":"Joined At"}},"type":"object","required":["id","name","description","member_count","joined_at"],"title":"UserTeamResponse","description":"Réponse pour une équipe d'un utilisateur"},"UserTeamsListResponse":{"properties":{"teams":{"items":{"$ref":"#/components/schemas/UserTeamResponse"},"type":"array","title":"Teams"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["teams","total"],"title":"UserTeamsListResponse","description":"Réponse pour la liste des équipes d'un utilisateur"},"UserUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"manager_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Id"}},"type":"object","title":"UserUpdateRequest","description":"Requête pour mettre à jour un utilisateur"},"ValidateManifestRequest":{"properties":{"manifest":{"additionalProperties":true,"type":"object","title":"Manifest"}},"type":"object","required":["manifest"],"title":"ValidateManifestRequest"},"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"},"VectorSpaceResponse":{"properties":{"id":{"type":"string","title":"Id"},"vector_space_key":{"type":"string","title":"Vector Space Key"},"embedding_model":{"type":"string","title":"Embedding Model"},"embedding_revision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Revision"},"embedding_dimensions":{"type":"integer","title":"Embedding Dimensions"},"distance_metric":{"type":"string","title":"Distance Metric"},"preproc_profile":{"type":"string","title":"Preproc Profile"},"collection_name":{"type":"string","title":"Collection Name"},"status":{"type":"string","title":"Status"},"shared_by_knowledge_sources":{"type":"integer","title":"Shared By Knowledge Sources"},"points_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Points Count"},"sparse_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sparse Enabled"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","vector_space_key","embedding_model","embedding_dimensions","distance_metric","preproc_profile","collection_name","status","shared_by_knowledge_sources"],"title":"VectorSpaceResponse"},"VersionCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Version name/tag"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Change description"}},"type":"object","title":"VersionCreate","description":"Schema for creating a version"},"VersionOut":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"rich_document_id":{"type":"string","format":"uuid","title":"Rich Document Id"},"title":{"type":"string","title":"Title"},"content":{"additionalProperties":true,"type":"object","title":"Content"},"plain_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plain Text"},"doc_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Doc Metadata"},"version":{"type":"integer","title":"Version"},"version_type":{"type":"string","title":"Version Type"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","rich_document_id","title","content","version","version_type","created_at"],"title":"VersionOut"},"VersionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflowId":{"type":"string","format":"uuid","title":"Workflowid"},"versionNumber":{"type":"integer","title":"Versionnumber"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes"},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"createdBy":{"type":"string","format":"uuid","title":"Createdby"}},"type":"object","required":["id","workflowId","versionNumber","nodes","edges","createdAt","createdBy"],"title":"VersionResponse","description":"Schema for version response - matches frontend WorkflowVersion type"},"VersionRestoreResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"workflow":{"$ref":"#/components/schemas/WorkflowResponse"},"restoredFromVersion":{"type":"integer","title":"Restoredfromversion"}},"type":"object","required":["success","workflow","restoredFromVersion"],"title":"VersionRestoreResponse","description":"Schema for version restore response"},"ViewerTokenResponse":{"properties":{"viewer_token":{"type":"string","title":"Viewer Token"},"document_id":{"type":"string","title":"Document Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds","default":300}},"type":"object","required":["viewer_token","document_id","expires_at"],"title":"ViewerTokenResponse","description":"Response for viewer token generation"},"VocabularyPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"glossary":{"additionalProperties":{"type":"string"},"type":"object","title":"Glossary"}},"additionalProperties":false,"type":"object","required":["id","name","glossary"],"title":"VocabularyPublic"},"VocabularyTermCreate":{"properties":{"term":{"type":"string","maxLength":255,"minLength":1,"title":"Term"},"definition":{"type":"string","minLength":1,"title":"Definition"},"category":{"type":"string","enum":["product","service","team","process","finance","internal","technical","business","industry","general","other"],"title":"Category","default":"other"},"synonyms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Synonyms","default":[]},"common_misspellings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Common Misspellings","default":[]},"notes_for_ai":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes For Ai"},"status":{"type":"string","maxLength":50,"title":"Status","default":"active"}},"type":"object","required":["term","definition"],"title":"VocabularyTermCreate"},"VocabularyTermListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VocabularyTermResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"is_demo":{"type":"boolean","title":"Is Demo","default":false}},"type":"object","required":["items","total"],"title":"VocabularyTermListResponse"},"VocabularyTermResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"term":{"type":"string","title":"Term"},"definition":{"type":"string","title":"Definition"},"category":{"type":"string","title":"Category"},"synonyms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Synonyms"},"common_misspellings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Common Misspellings"},"notes_for_ai":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes For Ai"},"status":{"type":"string","title":"Status"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","term","definition","category","synonyms","common_misspellings","notes_for_ai","status","created_by","updated_by","created_at","updated_at"],"title":"VocabularyTermResponse"},"VocabularyTermUpdate":{"properties":{"term":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Term"},"definition":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Definition"},"category":{"anyOf":[{"type":"string","enum":["product","service","team","process","finance","internal","technical","business","industry","general","other"]},{"type":"null"}],"title":"Category"},"synonyms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Synonyms"},"common_misspellings":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Common Misspellings"},"notes_for_ai":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes For Ai"},"status":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Status"}},"type":"object","title":"VocabularyTermUpdate"},"VolumesReport":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"totals":{"$ref":"#/components/schemas/VolumesTotals"},"by_domain":{"items":{"$ref":"#/components/schemas/DomainUsage"},"type":"array","title":"By Domain"},"heavy_items":{"items":{"$ref":"#/components/schemas/HeavyItem"},"type":"array","maxItems":10,"title":"Heavy Items"},"monthly_growth":{"items":{"$ref":"#/components/schemas/MonthlyPoint"},"type":"array","title":"Monthly Growth"}},"additionalProperties":false,"type":"object","required":["generated_at","totals","by_domain","heavy_items","monthly_growth"],"title":"VolumesReport"},"VolumesTotals":{"properties":{"postgres_bytes":{"type":"integer","minimum":0.0,"title":"Postgres Bytes"},"minio_bytes":{"type":"integer","minimum":0.0,"title":"Minio Bytes"},"qdrant_chunks":{"type":"integer","minimum":0.0,"title":"Qdrant Chunks"},"qdrant_bytes":{"type":"integer","minimum":0.0,"title":"Qdrant Bytes"}},"additionalProperties":false,"type":"object","required":["postgres_bytes","minio_bytes","qdrant_chunks","qdrant_bytes"],"title":"VolumesTotals"},"WebhookConfigResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"rate_limit_per_hour":{"type":"integer","title":"Rate Limit Per Hour"},"webhook_url":{"type":"string","title":"Webhook Url"},"secrets_count":{"type":"integer","title":"Secrets Count"},"active_secrets_count":{"type":"integer","title":"Active Secrets Count"}},"type":"object","required":["enabled","rate_limit_per_minute","rate_limit_per_hour","webhook_url","secrets_count","active_secrets_count"],"title":"WebhookConfigResponse","description":"Current webhook configuration"},"WebhookConfigUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Enable/disable webhook trigger","default":true},"rate_limit_per_minute":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Rate Limit Per Minute","default":60},"rate_limit_per_hour":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Rate Limit Per Hour","default":1000}},"type":"object","title":"WebhookConfigUpdate","description":"Update webhook configuration for a workflow"},"WebhookEndpointPublic":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"url":{"type":"string","title":"Url","description":"URL publique tenant-scoped"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"use_count":{"type":"integer","minimum":0.0,"title":"Use Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","name","url","events","is_active","use_count","created_at"],"title":"WebhookEndpointPublic","description":"URL publique + events souscrits. Secret de signature jamais exposé."},"WebhookErrorResponse":{"properties":{"error":{"type":"string","title":"Error"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["error"],"title":"WebhookErrorResponse","description":"Response when webhook validation fails"},"WebhookLogResponse":{"properties":{"log_id":{"type":"string","format":"uuid","title":"Log Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id"},"status":{"type":"string","title":"Status"},"request_method":{"type":"string","title":"Request Method"},"request_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Ip"},"response_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Code"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"received_at":{"type":"string","format":"date-time","title":"Received At"}},"type":"object","required":["log_id","workflow_id","execution_id","status","request_method","request_ip","response_code","error_message","duration_ms","received_at"],"title":"WebhookLogResponse","description":"Response for a webhook log entry"},"WebhookLogsListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/WebhookLogResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"WebhookLogsListResponse","description":"Paginated list of webhook logs"},"WebhookSecretCreate":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","description":"Name for the secret","default":"default"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"}},"type":"object","title":"WebhookSecretCreate","description":"Request to create a new webhook secret"},"WebhookSecretCreatedResponse":{"properties":{"secret_id":{"type":"string","format":"uuid","title":"Secret Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"secret_prefix":{"type":"string","title":"Secret Prefix"},"is_active":{"type":"boolean","title":"Is Active"},"use_count":{"type":"integer","title":"Use Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"rotated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rotated At"},"secret":{"type":"string","title":"Secret","description":"The webhook secret. IMPORTANT: This is only shown once! Store it securely."}},"type":"object","required":["secret_id","workflow_id","name","description","secret_prefix","is_active","use_count","last_used_at","created_at","rotated_at","secret"],"title":"WebhookSecretCreatedResponse","description":"Response when creating a secret - includes the actual secret (shown ONCE)"},"WebhookSecretResponse":{"properties":{"secret_id":{"type":"string","format":"uuid","title":"Secret Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"secret_prefix":{"type":"string","title":"Secret Prefix"},"is_active":{"type":"boolean","title":"Is Active"},"use_count":{"type":"integer","title":"Use Count"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"rotated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Rotated At"}},"type":"object","required":["secret_id","workflow_id","name","description","secret_prefix","is_active","use_count","last_used_at","created_at","rotated_at"],"title":"WebhookSecretResponse","description":"Response for webhook secret (without the actual secret)"},"WebhookTriggerResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id"},"status":{"type":"string","title":"Status","default":"pending"},"message":{"type":"string","title":"Message","default":"Workflow execution started"}},"type":"object","required":["execution_id"],"title":"WebhookTriggerResponse","description":"Response when a webhook successfully triggers a workflow"},"WorkflowCodeResponse":{"properties":{"code":{"type":"string","title":"Code"},"workflowName":{"type":"string","title":"Workflowname"}},"type":"object","required":["code","workflowName"],"title":"WorkflowCodeResponse","description":"Schema for workflow code generation response"},"WorkflowCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"Workflow name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Workflow description"},"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes","description":"Workflow nodes"},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges","description":"Workflow edges"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"Whether workflow is enabled","default":true},"folderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folderid","description":"Parent folder ID"}},"type":"object","title":"WorkflowCreate","description":"Schema for creating a workflow"},"WorkflowDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"enabled":{"type":"boolean","title":"Enabled"},"folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"nodes":{"items":{"$ref":"#/components/schemas/WorkflowNode"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/WorkflowEdge"},"type":"array","title":"Edges"},"runs_30d":{"items":{"$ref":"#/components/schemas/WorkflowRunSummary"},"type":"array","title":"Runs 30D"}},"additionalProperties":false,"type":"object","required":["id","name","enabled","created_at","updated_at","nodes","edges","runs_30d"],"title":"WorkflowDetail"},"WorkflowDownloadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"files":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Files"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"WorkflowDownloadResponse","description":"Schema for workflow download response"},"WorkflowEdge":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"}},"additionalProperties":false,"type":"object","required":["id","source","target"],"title":"WorkflowEdge"},"WorkflowExportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"WorkflowExportResponse","description":"Schema for workflow export response"},"WorkflowImportResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"workflow":{"anyOf":[{"$ref":"#/components/schemas/WorkflowResponse"},{"type":"null"}]},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"WorkflowImportResponse","description":"Schema for workflow import response"},"WorkflowListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"enabled":{"type":"boolean","title":"Enabled"},"folder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"additionalProperties":false,"type":"object","required":["id","name","enabled","created_at","updated_at"],"title":"WorkflowListItem"},"WorkflowListPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/WorkflowListItem"},"type":"array","title":"Items"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"additionalProperties":false,"type":"object","required":["items","next_cursor"],"title":"WorkflowListPage"},"WorkflowListResponse":{"properties":{"workflows":{"items":{"$ref":"#/components/schemas/WorkflowResponse"},"type":"array","title":"Workflows"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["workflows","total"],"title":"WorkflowListResponse","description":"Schema for workflow list response"},"WorkflowNode":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"type":{"type":"string","title":"Type"},"x":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"X"},"y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Y"}},"additionalProperties":false,"type":"object","required":["id","label","type"],"title":"WorkflowNode"},"WorkflowResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"nodes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Nodes"},"edges":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Edges"},"enabled":{"type":"boolean","title":"Enabled"},"folderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folderid"},"alertConfig":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Alertconfig"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","name","nodes","edges","enabled","createdAt","updatedAt"],"title":"WorkflowResponse","description":"Schema for workflow response - matches frontend SavedWorkflow type"},"WorkflowRunSummary":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id"},"status":{"type":"string","title":"Status"},"trigger_type":{"type":"string","title":"Trigger Type"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"duration_ms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Ms"}},"additionalProperties":false,"type":"object","required":["execution_id","status","trigger_type","started_at"],"title":"WorkflowRunSummary"},"WorkflowShareCreate":{"properties":{"shareType":{"type":"string","title":"Sharetype","description":"Type of share: 'user' or 'team'"},"targetId":{"type":"string","format":"uuid","title":"Targetid","description":"User ID or Team ID to share with"},"permission":{"type":"string","title":"Permission","description":"Permission level: 'view', 'edit', 'execute'","default":"view"}},"type":"object","required":["shareType","targetId"],"title":"WorkflowShareCreate","description":"Schema for creating a workflow share"},"WorkflowShareDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"WorkflowShareDeleteResponse","description":"Schema for workflow share delete response"},"WorkflowShareListResponse":{"properties":{"shares":{"items":{"$ref":"#/components/schemas/WorkflowShareResponse"},"type":"array","title":"Shares"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["shares","total"],"title":"WorkflowShareListResponse","description":"Schema for workflow share list response"},"WorkflowShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflowId":{"type":"string","format":"uuid","title":"Workflowid"},"shareType":{"type":"string","title":"Sharetype"},"targetId":{"type":"string","format":"uuid","title":"Targetid"},"targetName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetname"},"targetEmail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetemail"},"permission":{"type":"string","title":"Permission"},"sharedById":{"type":"string","format":"uuid","title":"Sharedbyid"},"sharedByName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sharedbyname"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","workflowId","shareType","targetId","permission","sharedById","createdAt","updatedAt"],"title":"WorkflowShareResponse","description":"Schema for workflow share response"},"WorkflowShareUpdate":{"properties":{"permission":{"type":"string","title":"Permission","description":"Permission level: 'view', 'edit', 'execute'"}},"type":"object","required":["permission"],"title":"WorkflowShareUpdate","description":"Schema for updating a workflow share"},"WorkflowUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"nodes":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Nodes"},"edges":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Edges"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"folderId":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Folderid"},"alertConfig":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Alertconfig"}},"type":"object","title":"WorkflowUpdate","description":"Schema for updating a workflow"},"app__api__v1__endpoints__integrations__IntegrationCreate":{"properties":{"integration_type":{"$ref":"#/components/schemas/IntegrationType"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"target_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Target Memory Ids"},"sync_frequency":{"$ref":"#/components/schemas/SyncFrequency","default":"1h"}},"type":"object","required":["integration_type","name"],"title":"IntegrationCreate","description":"Schema for creating an integration."},"app__api__v1__endpoints__integrations__IntegrationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"integration_type":{"$ref":"#/components/schemas/IntegrationType"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"target_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Target Memory Ids"},"sync_frequency":{"$ref":"#/components/schemas/SyncFrequency"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"status":{"$ref":"#/components/schemas/IntegrationStatus"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"total_documents":{"type":"integer","title":"Total Documents"},"synced_documents":{"type":"integer","title":"Synced Documents"},"failed_documents":{"type":"integer","title":"Failed Documents"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","tenant_id","integration_type","name","description","config","target_memory_ids","sync_frequency","last_sync_at","next_sync_at","status","error_message","total_documents","synced_documents","failed_documents","created_at","updated_at"],"title":"IntegrationResponse","description":"Response schema for an integration."},"app__api__v1__endpoints__integrations__IntegrationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"target_memory_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Target Memory Ids"},"sync_frequency":{"anyOf":[{"$ref":"#/components/schemas/SyncFrequency"},{"type":"null"}]}},"type":"object","title":"IntegrationUpdate","description":"Schema for updating an integration."},"app__api__v1__endpoints__knowledge_source__SearchRequest":{"properties":{"knowledge_source_id":{"type":"string","title":"Knowledge Source Id"},"query":{"type":"string","title":"Query"},"embedding_model":{"type":"string","title":"Embedding Model","default":"text-embedding-3-small"},"limit":{"type":"integer","title":"Limit","default":10},"mode":{"type":"string","title":"Mode","default":"semantic"},"rerank":{"type":"boolean","title":"Rerank","default":false},"rerank_candidates":{"type":"integer","title":"Rerank Candidates","default":15},"filters":{"items":{"$ref":"#/components/schemas/SearchFilter"},"type":"array","title":"Filters","default":[]}},"type":"object","required":["knowledge_source_id","query"],"title":"SearchRequest"},"app__api__v1__endpoints__knowledge_source__SearchResponse":{"properties":{"hits":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Hits"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["hits","count"],"title":"SearchResponse"},"app__routes__auth__electron__OTPRequestSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["email"],"title":"OTPRequestSchema","description":"Schema pour demander un code OTP - Electron app","example":{"email":"user@example.com","tenant_id":"matsiya"}},"app__routes__auth__electron__OTPVerifySchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","title":"Code"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}},"type":"object","required":["email","code"],"title":"OTPVerifySchema","description":"Schema pour vérifier un code OTP - Electron app","example":{"code":"123456","email":"user@example.com","tenant_id":"matsiya"}},"app__routes__auth__otp__OTPRequestSchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["email","tenant_id"],"title":"OTPRequestSchema","description":"Schema pour demander un code OTP","example":{"email":"user@example.com","tenant_id":"matsiya"}},"app__routes__auth__otp__OTPVerifySchema":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"code":{"type":"string","title":"Code"},"tenant_id":{"type":"string","title":"Tenant Id"}},"type":"object","required":["email","code","tenant_id"],"title":"OTPVerifySchema","description":"Schema pour vérifier un code OTP","example":{"code":"123456","email":"user@example.com","tenant_id":"matsiya"}},"app__schemas__app_asset__ListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AssetOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["items","total","page","page_size"],"title":"ListResponse"},"app__schemas__app_data__ListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RecordOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["items","total","page","page_size"],"title":"ListResponse"},"app__schemas__app_rich_document__ListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RichDocOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["items","total","page","page_size"],"title":"ListResponse"},"app__schemas__google_drive__FolderConfigIn":{"properties":{"path":{"type":"string","title":"Path","description":"Folder path (normalized to canonical)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"}},"type":"object","required":["path"],"title":"FolderConfigIn"},"app__schemas__google_drive__SyncTargetCreate":{"properties":{"drive_id":{"type":"string","title":"Drive Id"},"drive_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Name"},"folder_configs":{"items":{"$ref":"#/components/schemas/app__schemas__google_drive__FolderConfigIn"},"type":"array","title":"Folder Configs"},"file_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Types"},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns"},"sync_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Frequency","default":"1h"}},"type":"object","required":["drive_id"],"title":"SyncTargetCreate"},"app__schemas__google_drive__SyncTargetRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"drive_id":{"type":"string","title":"Drive Id"},"drive_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Name"},"file_types":{"items":{"type":"string"},"type":"array","title":"File Types"},"exclude_patterns":{"items":{"type":"string"},"type":"array","title":"Exclude Patterns"},"sync_frequency":{"type":"string","title":"Sync Frequency"},"status":{"type":"string","title":"Status"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"total_documents":{"type":"integer","title":"Total Documents","default":0},"synced_documents":{"type":"integer","title":"Synced Documents","default":0},"failed_documents":{"type":"integer","title":"Failed Documents","default":0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"folder_configs":{"items":{"$ref":"#/components/schemas/FolderConfigOut"},"type":"array","title":"Folder Configs"}},"type":"object","required":["id","integration_id","drive_id","sync_frequency","status","created_at","updated_at"],"title":"SyncTargetRead"},"app__schemas__google_drive__SyncTargetUpdate":{"properties":{"folder_configs":{"anyOf":[{"items":{"$ref":"#/components/schemas/app__schemas__google_drive__FolderConfigIn"},"type":"array"},{"type":"null"}],"title":"Folder Configs"},"file_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Types"},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns"},"sync_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Frequency"}},"type":"object","title":"SyncTargetUpdate"},"app__schemas__kb_search__SearchRequest":{"properties":{"query":{"type":"string","maxLength":500,"minLength":1,"title":"Query"},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","default":10},"force_path":{"anyOf":[{"type":"string","enum":["listing","hybrid","semantic"]},{"type":"null"}],"title":"Force Path"},"skip_parser":{"type":"boolean","title":"Skip Parser","default":false}},"additionalProperties":false,"type":"object","required":["query"],"title":"SearchRequest","description":"POST /memories/{id}/search."},"app__schemas__kb_search__SearchResponse":{"properties":{"memory_id":{"type":"string","format":"uuid","title":"Memory Id"},"query":{"type":"string","title":"Query"},"path_taken":{"type":"string","enum":["listing","hybrid","semantic"],"title":"Path Taken"},"parse_filters":{"items":{"$ref":"#/components/schemas/FilterClause"},"type":"array","title":"Parse Filters"},"parse_trace":{"items":{"$ref":"#/components/schemas/ParseTraceStep"},"type":"array","title":"Parse Trace"},"array_text":{"type":"string","title":"Array Text"},"total_candidates":{"type":"integer","title":"Total Candidates"},"hits":{"items":{"$ref":"#/components/schemas/EntityHit"},"type":"array","title":"Hits"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"additionalProperties":false,"type":"object","required":["memory_id","query","path_taken","parse_filters","parse_trace","array_text","total_candidates","hits","latency_ms"],"title":"SearchResponse","description":"Reponse /search avec audit complet."},"app__schemas__memory__SharePermissionEnum":{"type":"string","enum":["read","write","admin"],"title":"SharePermissionEnum","description":"Permission level for shared memory"},"app__schemas__share__SharePermissionEnum":{"type":"string","enum":["view","comment","edit","admin"],"title":"SharePermissionEnum","description":"Permission levels for sharing (hierarchical: view < comment < edit < admin)"},"app__schemas__sharepoint__FolderConfigIn":{"properties":{"path":{"type":"string","title":"Path","description":"Folder path (normalized to canonical)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"memory_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Memory Ids"}},"type":"object","required":["path"],"title":"FolderConfigIn","description":"Folder mapping input (on create/update)."},"app__schemas__sharepoint__SyncTargetCreate":{"properties":{"site_id":{"type":"string","title":"Site Id"},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Name"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"drive_id":{"type":"string","title":"Drive Id"},"drive_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Name"},"folder_configs":{"items":{"$ref":"#/components/schemas/app__schemas__sharepoint__FolderConfigIn"},"type":"array","title":"Folder Configs"},"file_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Types"},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns"},"sync_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Frequency","default":"1h"}},"type":"object","required":["site_id","drive_id"],"title":"SyncTargetCreate"},"app__schemas__sharepoint__SyncTargetRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"integration_id":{"type":"string","format":"uuid","title":"Integration Id"},"site_id":{"type":"string","title":"Site Id"},"site_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Name"},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url"},"drive_id":{"type":"string","title":"Drive Id"},"drive_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drive Name"},"file_types":{"items":{"type":"string"},"type":"array","title":"File Types"},"exclude_patterns":{"items":{"type":"string"},"type":"array","title":"Exclude Patterns"},"sync_frequency":{"type":"string","title":"Sync Frequency"},"status":{"type":"string","title":"Status"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"total_documents":{"type":"integer","title":"Total Documents","default":0},"synced_documents":{"type":"integer","title":"Synced Documents","default":0},"failed_documents":{"type":"integer","title":"Failed Documents","default":0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"folder_configs":{"items":{"$ref":"#/components/schemas/FolderConfigOut"},"type":"array","title":"Folder Configs"}},"type":"object","required":["id","integration_id","site_id","drive_id","sync_frequency","status","created_at","updated_at"],"title":"SyncTargetRead"},"app__schemas__sharepoint__SyncTargetUpdate":{"properties":{"folder_configs":{"anyOf":[{"items":{"$ref":"#/components/schemas/app__schemas__sharepoint__FolderConfigIn"},"type":"array"},{"type":"null"}],"title":"Folder Configs"},"file_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Types"},"exclude_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Patterns"},"sync_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Frequency"}},"type":"object","title":"SyncTargetUpdate"},"app__schemas__workflow__IntegrationCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Integration name"},"type":{"type":"string","title":"Type","description":"Integration type (openai, anthropic, webhook, etc.)"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Integration configuration"}},"type":"object","required":["name","type"],"title":"IntegrationCreate","description":"Schema for creating an integration"},"app__schemas__workflow__IntegrationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"isActive":{"type":"boolean","title":"Isactive"},"lastTestedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lasttestedat"},"testStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Teststatus"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","name","type","isActive","createdAt","updatedAt"],"title":"IntegrationResponse","description":"Schema for integration response (without sensitive config)"},"app__schemas__workflow__IntegrationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"IntegrationUpdate","description":"Schema for updating an integration"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Authentication via the `Authorization: Bearer <token>` header. Two token formats are accepted:\n- **JWT** (issued by `/api/auth/login` or `/api/auth/otp/verify`)\n- **API key** scoped per-tenant (created via `/api/v1/api-keys`, format `sk-...`)\n\nPer-endpoint scopes apply to API keys (e.g. `documents:read`, `chat:query`)."}}},"tags":[{"name":"Auth","description":"Authentication (OAuth, OTP, SSO, token management)"},{"name":"API Keys","description":"Manage API keys for programmatic access"},{"name":"MFA","description":"Multi-factor authentication"},{"name":"LLM","description":"Access LLM models for chat completion, embeddings, and more"},{"name":"RAG","description":"Query knowledge bases with RAG-powered chat — these endpoints answer natural-language questions over your documents."},{"name":"Conversations","description":"Manage chat conversation history"},{"name":"Responses","description":"OpenAI Responses API compatible endpoints (canonical /api/v1/responses)"},{"name":"Agents","description":"Pydantic AI agents with skills and MCP tools"},{"name":"Skills","description":"Skill templates for AI agents"},{"name":"MCP","description":"MCP server catalog for agents"},{"name":"Knowledge Bases","description":"Create and manage knowledge bases for RAG"},{"name":"Knowledge Source","description":"KnowledgeSource v4 — create a source, index a file (PDF/JSON/Markdown/CSV) into Qdrant, semantic/hybrid search with page-aware citations."},{"name":"Documents","description":"Upload, manage and index documents"},{"name":"Document Folders","description":"Organize documents in folders"},{"name":"Chunks","description":"Access and search document chunks"},{"name":"Docs","description":"Centralized documentary hub with RAG-powered search"},{"name":"Workflows","description":"Create and execute automation workflows"},{"name":"Form Favorites","description":"Manage favorite workflow forms for the current user"},{"name":"Webhooks","description":"Webhook triggers and secret management"},{"name":"Prompts","description":"Prompt templates, sequences, and categories"},{"name":"Tasks","description":"Track async task execution status"},{"name":"Users","description":"User profile and management"},{"name":"Teams","description":"Team management and membership"},{"name":"Roles & Permissions","description":"Read the current user permissions and roles"},{"name":"Sharing","description":"Share resources between users and teams"},{"name":"Budget","description":"User budget and usage tracking"},{"name":"User Memory","description":"Per-user memory and preferences"},{"name":"Dictation","description":"Speech-to-text dictation"},{"name":"Realtime Transcription","description":"WebSocket realtime speech-to-text"},{"name":"Identity","description":"Identity blocks, vocabulary, and spelling"},{"name":"Integrations","description":"External service integrations"},{"name":"SharePoint","description":"SharePoint document sync integration"},{"name":"Google Drive","description":"Google Drive document sync integration"},{"name":"External Sync","description":"External data source synchronization (Tourinsoft, WordPress)"},{"name":"Teams Bots","description":"Microsoft Teams bot integration"},{"name":"Apps","description":"App registry and third-party app management"},{"name":"Notifications","description":"Real-time notifications"},{"name":"Feedback","description":"User feedback (likes / dislikes / comments) on AI outputs across apps"},{"name":"Events","description":"Cross-app event stream"},{"name":"Stats","description":"Per-tenant usage statistics"}],"x-tagGroups":[{"name":"Getting Started","tags":["Auth","API Keys","MFA"]},{"name":"AI & LLM","tags":["LLM","RAG","Conversations","Responses","Agents","Skills","MCP"]},{"name":"Knowledge (RAG)","tags":["Knowledge Bases","Knowledge Source","Documents","Document Folders","Chunks","Docs"]},{"name":"Automation","tags":["Workflows","Form Favorites","Webhooks","Prompts","Tasks"]},{"name":"Users & Access","tags":["Users","Teams","Roles & Permissions","Sharing","Budget","User Memory"]},{"name":"Voice & Speech","tags":["Dictation","Realtime Transcription","Identity"]},{"name":"Integrations","tags":["Integrations","SharePoint","Google Drive","External Sync","Teams Bots","Apps"]},{"name":"Platform","tags":["Notifications","Feedback","Events","Stats"]}],"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api.superfasttt.ai","description":"Production"},{"url":"https://api.superfasttt.dev","description":"Preprod / Dev"},{"url":"http://localhost:8001","description":"Local"}],"externalDocs":{"description":"Developer integration guide","url":"/API_GUIDE.md"}}