{"openapi":"3.1.0","info":{"title":"AnomalyArmor API","description":"\n    ## AnomalyArmor Security Platform API\n\n    This API provides comprehensive database monitoring and schema change detection capabilities.\n\n    ### Key Features\n    - **Multi-Database Support**: PostgreSQL, MySQL, Databricks, Snowflake, Redshift, SQLite\n    - **Schema Discovery**: Automated schema detection and metadata capture\n    - **Change Detection**: Real-time schema drift monitoring with severity classification\n    - **Connection Testing**: Live database connectivity validation\n    - **Multi-Tenant**: Company-isolated data with role-based access control\n\n    ### Authentication\n    All endpoints require JWT authentication. Use `/auth/login` to obtain tokens.\n\n    ### Rate Limits\n    - Authentication: 5 req/min\n    - Asset operations: 100 req/min\n    - Schema discovery: 10 req/hour per asset\n\n    ### Support\n    - **Documentation**: Available at `/docs` (this page) and `/redoc`\n    - **Health Check**: `/api/v1/health`\n    - **OpenAPI Spec**: `/openapi.json`\n    ","contact":{"name":"AnomalyArmor Support","url":"https://anomalyarmor.ai/support"},"license":{"name":"Proprietary"},"version":"1.0.0"},"servers":[{"url":"http://localhost:8000","description":"Development server"},{"url":"https://api.anomalyarmor.ai","description":"Production server"}],"paths":{"/health":{"get":{"tags":["health"],"summary":"Health Check","description":"Check the health status of the API and database.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/health":{"get":{"tags":["health"],"summary":"Api Health Check","description":"Check the health status of the API and database (for /api/v1 prefix).","operationId":"api_health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/badges/{public_id}.svg":{"get":{"tags":["badges","badges"],"summary":"Get badge SVG (public)","description":"Returns an SVG badge showing pass/fail status. NO AUTHENTICATION REQUIRED. Designed for embedding in 3rd party tools.","operationId":"get_badge_svg_badges__public_id__svg_get","parameters":[{"name":"public_id","in":"path","required":true,"schema":{"type":"string","title":"Public Id"}}],"responses":{"200":{"description":"SVG badge image","content":{"image/svg+xml":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/unsubscribe":{"post":{"tags":["public","public"],"summary":"Unsubscribe Post","description":"Email preference update endpoint.\n\nHandles three cases:\n1. Email client one-click (RFC 8058): Returns 200 with empty body\n2. JavaScript toggle request: Returns 200 on success\n3. Legacy unsubscribe: Returns HTML result page\n\nSecurity: HMAC token prevents malicious attacks.","operationId":"unsubscribe_post_api_public_unsubscribe_post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email to update","format":"email","title":"Email"},"description":"Email to update"},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"HMAC signature for security","title":"Token"},"description":"HMAC signature for security"},{"name":"action","in":"query","required":false,"schema":{"type":"string","description":"Action: subscribe or unsubscribe","default":"unsubscribe","title":"Action"},"description":"Action: subscribe or unsubscribe"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public","public"],"summary":"Unsubscribe Get","description":"Email preferences page with subscribe/unsubscribe toggle.\n\nUsers clicking the unsubscribe link in email body land here.\nShows current subscription status and allows toggling on/off.\nThis prevents accidental unsubscribes and allows re-subscribing.\n\nGET is intentionally side-effect-free. Email scanners (Outlook SafeLink,\ncorporate link-preview bots) pre-fetch URLs from emails and would\nsilently unsubscribe users if this endpoint had side effects.\nState-changing operations go through POST /unsubscribe per RFC 8058.\n\nSecurity: HMAC token prevents malicious access.","operationId":"unsubscribe_get_api_public_unsubscribe_get","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","description":"Email to manage preferences for","format":"email","title":"Email"},"description":"Email to manage preferences for"},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"HMAC signature for security","title":"Token"},"description":"HMAC signature for security"}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/docs/{path}.md":{"get":{"tags":["public","public","public"],"summary":"Serve Clean Markdown","description":"Serve clean markdown files without JSX components.\n\nArgs:\n    path: Relative path to markdown file (without .md extension in URL)\n\nReturns:\n    Clean markdown content with proper content-type header\n\nRaises:\n    HTTPException: 404 if file not found, 403 if path traversal attempted","operationId":"serve_clean_markdown_api_public_docs__path__md_get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/magic-login":{"post":{"tags":["public","public"],"summary":"Magic Login","description":"Authenticate a prospect via magic link.\n\nLooks up the prospect by token, verifies eligibility, creates a Clerk\nuser if needed, and returns a sign-in ticket for frontend authentication.\n\nRefuses requests from email link-scanner bots (Outlook SafeLink, Gmail\nimage proxy, etc.). These pre-fetch URLs from emails before the human\nclicks and would otherwise create premature Clerk users and pollute the\nfirst-click timestamp.","operationId":"magic_login_api_public_magic_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/events":{"post":{"tags":["public","public"],"summary":"Track Event","description":"Ingest an anonymous analytics event.","operationId":"track_event_api_public_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackEventRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/beta/status":{"get":{"tags":["public","public"],"summary":"Beta Status Endpoint","description":"Get current beta signup status. No auth required.","operationId":"beta_status_endpoint_api_public_beta_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/beta/signup":{"post":{"tags":["public","public"],"summary":"Beta Signup Endpoint","description":"Register for beta. No auth required.","operationId":"beta_signup_endpoint_api_public_beta_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BetaSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/contracts/validate":{"post":{"tags":["public","public","contracts"],"summary":"Public Validate Contract","description":"Unauthenticated ODCS YAML validation for the marketing funnel.","operationId":"public_validate_contract_api_public_contracts_validate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["authentication","Authentication"],"summary":"Login","description":"Login with email and password.\n\nTECH-663: Rate limited to 5 attempts per minute per IP to prevent brute force.\n\nArgs:\n    http_request: FastAPI request for IP extraction\n    request: Login credentials\n    session: Database session\n\nReturns:\n    Login response with tokens\n\nRaises:\n    UnauthorizedError: If credentials are invalid\n    ForbiddenError: If account is locked","operationId":"login_api_v1_auth_login_post","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/v1/auth/tokens/current":{"put":{"tags":["authentication","Authentication"],"summary":"Refresh Token","description":"Refresh access token using refresh token.\n\nArgs:\n    request: Refresh token request\n    session: Database session\n\nReturns:\n    New tokens\n\nRaises:\n    UnauthorizedError: If token is invalid or expired","operationId":"refresh_token_api_v1_auth_tokens_current_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["authentication","Authentication"],"summary":"Logout","description":"Logout current user session.\n\nArgs:\n    current_user: Current authenticated user\n    session: Database session\n\nRaises:\n    HTTPException: If logout fails","operationId":"logout_api_v1_auth_logout_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["authentication","Authentication"],"summary":"Register","description":"Register a new user.\n\nTECH-663: Rate limited to 3 attempts per minute per IP.\n\nArgs:\n    http_request: FastAPI request for IP extraction\n    request: Registration data\n    session: Database session\n\nReturns:\n    Created user\n\nRaises:\n    ConflictError: If user already exists\n    BadRequestError: If password is too weak","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["authentication","Authentication"],"summary":"Get Current User Info","description":"Get current user information.\n\nArgs:\n    current_user: Current authenticated user\n    session: Database session\n\nReturns:\n    User information from database\n\nRaises:\n    HTTPException: If request fails","operationId":"get_current_user_info_api_v1_auth_me_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["authentication","Authentication"],"summary":"Update Profile","description":"Update current user profile.\n\nArgs:\n    request: Profile update data\n    current_user: Current authenticated user\n    session: Database session\n\nReturns:\n    Updated user\n\nRaises:\n    HTTPException: If update fails","operationId":"update_profile_api_v1_auth_me_patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["authentication","Authentication"],"summary":"Change Password","description":"Change current user password.\n\nArgs:\n    request: Password change data\n    current_user: Current authenticated user\n    session: Database session\n\nRaises:\n    NotFoundError: If user not found\n    UnauthorizedError: If old password is invalid\n    BadRequestError: If new password is too weak","operationId":"change_password_api_v1_auth_change_password_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences":{"get":{"tags":["user-preferences"],"summary":"Get My Preferences","description":"Get the current user's preferences.\n\nIf preferences don't exist, they will be created with defaults.","operationId":"get_my_preferences_api_v1_auth_preferences_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["user-preferences"],"summary":"Update My Preferences","description":"Update the current user's preferences.\n\nOnly provided fields will be updated. Omitted fields will retain their current values.","operationId":"update_my_preferences_api_v1_auth_preferences_patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferencesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["user-preferences"],"summary":"Reset My Preferences","description":"Reset the current user's preferences to defaults.","operationId":"reset_my_preferences_api_v1_auth_preferences_delete","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding":{"get":{"tags":["user-preferences"],"summary":"Get Onboarding Progress","description":"Get the current user's onboarding progress.\n\nReturns progress for each chapter (connect, discover, freshness, schema) and overall completion.","operationId":"get_onboarding_progress_api_v1_auth_preferences_onboarding_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["user-preferences"],"summary":"Update Chapter Progress","description":"Update a chapter's completion status.\n\nMark a chapter as completed or incomplete. Typically called when user\nfinishes a walkthrough or when replaying a chapter.","operationId":"update_chapter_progress_api_v1_auth_preferences_onboarding_patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChapterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/step":{"patch":{"tags":["user-preferences"],"summary":"Update Step Progress","description":"Update a chapter's current step for resume functionality.\n\nSaves the step the user is on so they can resume later.","operationId":"update_step_progress_api_v1_auth_preferences_onboarding_step_patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStepRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/reset":{"post":{"tags":["user-preferences"],"summary":"Reset Onboarding Progress","description":"Reset onboarding progress.\n\nReset a single chapter or all chapters. Does NOT delete any user data,\njust clears completion status so the walkthrough can be replayed.","operationId":"reset_onboarding_progress_api_v1_auth_preferences_onboarding_reset_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetOnboardingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/demo-asset":{"post":{"tags":["user-preferences"],"summary":"Ensure Demo Asset","description":"Ensure demo asset exists for onboarding walkthrough.\n\nTECH-775: Creates the demo BalloonBazaar asset if it doesn't exist,\nor returns the existing one. Called during onboarding walkthrough\nto show users the demo being added in real-time.\n\nReturns:\n    Demo asset info (id, public_id, name) or error if demo is disabled.","operationId":"ensure_demo_asset_api_v1_auth_preferences_onboarding_demo_asset_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/demo-lineage":{"post":{"tags":["user-preferences"],"summary":"Load Demo Lineage Endpoint","description":"Load demo lineage data for onboarding walkthrough.\n\nTECH-778: Creates pre-built lineage nodes and edges for the demo asset,\nallowing users to experience lineage features without uploading a manifest file.\nThe user clicks \"Load Sample Lineage\" and we handle everything on the backend.\n\nReturns:\n    Sync statistics (nodes_created, edges_created) or error if demo asset not found.","operationId":"load_demo_lineage_endpoint_api_v1_auth_preferences_onboarding_demo_lineage_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/demo-alert":{"post":{"tags":["user-preferences"],"summary":"Create Demo Alert","description":"Create a demo alert for onboarding walkthrough.\n\nTECH-778: Creates a simulated freshness alert so users can see what an\nalert looks like during the alerts onboarding chapter. The alert appears\nin the UI but doesn't trigger any actual notifications.\n\nThe alert is marked as a demo alert in context_data for later cleanup.\n\nReturns:\n    Demo alert info (id, title, severity) or existing alert if already created.","operationId":"create_demo_alert_api_v1_auth_preferences_onboarding_demo_alert_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["user-preferences"],"summary":"Delete Demo Alert","description":"Delete demo alert(s) for onboarding walkthrough.\n\nTECH-778: Cleanup endpoint to remove demo alerts. Called when user\ncompletes the alerts chapter or resets onboarding.\n\nReturns:\n    Count of deleted demo alerts.","operationId":"delete_demo_alert_api_v1_auth_preferences_onboarding_demo_alert_delete","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/demo-destination":{"post":{"tags":["user-preferences"],"summary":"Create Demo Destination","description":"Create a demo Slack destination for onboarding walkthrough.\n\nThis is an internal endpoint that creates destinations with is_demo=true.\nDemo destinations simulate delivery without calling external APIs.\n\nThe is_demo flag is NOT exposed in the public destinations API to prevent\nusers from silently suppressing real alert delivery.\n\nReturns:\n    Demo destination info (id, name, destination_type) or existing if already created.","operationId":"create_demo_destination_api_v1_auth_preferences_onboarding_demo_destination_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/onboarding/events":{"post":{"tags":["user-preferences"],"summary":"Track Onboarding Event","description":"Track an onboarding event for analytics.\n\nTECH-776: Fire-and-forget event tracking. Events are used for funnel analysis,\ntime-to-value metrics, and company-level onboarding health monitoring.\n\nThe is_replay flag is automatically set based on whether the user has\npreviously completed the chapter being tracked.","operationId":"track_onboarding_event_api_v1_auth_preferences_onboarding_events_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackOnboardingEventRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/preferences/{preference_key}":{"get":{"tags":["user-preferences"],"summary":"Get Preference Value","description":"Get a specific preference value by key.\n\nArgs:\n    preference_key: The key of the preference to retrieve\n\nReturns:\n    StandardResponse with the preference value or null if not found","operationId":"get_preference_value_api_v1_auth_preferences__preference_key__get","parameters":[{"name":"preference_key","in":"path","required":true,"schema":{"type":"string","title":"Preference Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider_type}/authorize":{"get":{"tags":["oauth","OAuth"],"summary":"Oauth Authorize","description":"Initiate OAuth authorization flow.\n\nReturns the authorization URL for the frontend to redirect to.\nThis is an authenticated endpoint (requires Bearer token), so the frontend\nmust call it via API, then redirect the browser to the returned URL.\n\nArgs:\n    provider_type: Provider type (github, gitlab, bitbucket)\n    provider_id: Git provider public ID\n    ctx: Application context with session, user, and company info\n    settings: Application settings\n\nReturns:\n    StandardResponse with authorization_url for browser redirect\n\nRaises:\n    HTTPException: If provider type not supported or credentials missing","operationId":"oauth_authorize_api_v1_oauth__provider_type__authorize_get","parameters":[{"name":"provider_type","in":"path","required":true,"schema":{"type":"string","title":"Provider Type"}},{"name":"provider_id","in":"query","required":true,"schema":{"type":"string","description":"Git provider public ID","title":"Provider Id"},"description":"Git provider public ID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/oauth/{provider_type}/callback":{"get":{"tags":["oauth","OAuth"],"summary":"Oauth Callback","description":"Handle OAuth callback and exchange code for token.\n\nNote: This endpoint does NOT use AppContext because it's publicly accessible\n(called by OAuth provider redirect, not authenticated). User/company validation\nis done via CSRF state token stored during authorization initiation.\n\nArgs:\n    provider_type: Provider type (github, gitlab, bitbucket)\n    code: Authorization code from OAuth provider\n    state: CSRF state token\n    session: Database session\n    settings: Application settings\n\nReturns:\n    Redirect to frontend with success/error\n\nRaises:\n    HTTPException: If OAuth flow fails","operationId":"oauth_callback_api_v1_oauth__provider_type__callback_get","parameters":[{"name":"provider_type","in":"path","required":true,"schema":{"type":"string","title":"Provider Type"}},{"name":"code","in":"query","required":true,"schema":{"type":"string","description":"OAuth authorization code","title":"Code"},"description":"OAuth authorization code"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF state token","title":"State"},"description":"CSRF state token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys":{"get":{"tags":["api-keys","api-keys"],"summary":"List Api Keys","description":"List API keys for the current organization.\n\nReturns all API keys created by users in the organization.\nBy default, only active (non-revoked) keys are returned.","operationId":"list_api_keys_api_v1_api_keys_get","parameters":[{"name":"include_revoked","in":"query","required":false,"schema":{"type":"boolean","description":"Include revoked keys","default":false,"title":"Include Revoked"},"description":"Include revoked keys"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["api-keys","api-keys"],"summary":"Create Api Key","description":"Create a new API key.\n\nThe full API key is only returned once in this response.\nStore it securely - you won't be able to retrieve it again.\n\nRequires sufficient permissions based on your subscription tier.","operationId":"create_api_key_api_v1_api_keys_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAPIKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/usage":{"get":{"tags":["api-keys","api-keys"],"summary":"Get Api Key Usage","description":"Get API key usage and limits for the current organization.\n\nReturns the current number of keys and rate limits based on your\nsubscription tier. API key count is unlimited; usage is controlled\nvia rate limits and monthly call limits.","operationId":"get_api_key_usage_api_v1_api_keys_usage_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{key_id}":{"delete":{"tags":["api-keys","api-keys"],"summary":"Revoke Api Key","description":"Revoke an API key.\n\nRevoked keys can no longer be used for authentication.\nThis action cannot be undone.","operationId":"revoke_api_key_api_v1_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["api-keys","api-keys"],"summary":"Get Api Key","description":"Get details of a specific API key.\n\nNote: The full key is never returned - only prefix and suffix for identification.","operationId":"get_api_key_api_v1_api_keys__key_id__get","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/":{"post":{"tags":["assets"],"summary":"Create new asset","description":"Create a new asset for monitoring and discovery","operationId":"create_asset_api_v1_assets__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["assets"],"summary":"List company assets","description":"List all assets for the user's company with optional filtering and pagination","operationId":"list_assets_api_v1_assets__get","parameters":[{"name":"company_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Company ID to filter by","title":"Company Id"},"description":"Company ID to filter by"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive assets","default":false,"title":"Include Inactive"},"description":"Include inactive assets"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Get asset by ID","description":"Retrieve a specific asset by its ID, short UUID, name, or qualified name","operationId":"get_asset_api_v1_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["assets"],"summary":"Update asset","description":"Update an existing asset's configuration","operationId":"update_asset_api_v1_assets__asset_id__put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["assets"],"summary":"Partially update asset","description":"Partially update an existing asset. Only provided fields are modified.","operationId":"patch_asset_api_v1_assets__asset_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete asset","description":"Delete an asset with comprehensive cascade cleanup. Returns cleanup statistics.","operationId":"delete_asset_api_v1_assets__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/search":{"post":{"tags":["assets"],"summary":"Search assets","description":"Search assets with filtering and pagination","operationId":"search_assets_api_v1_assets_search_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSearchSchema"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/companies/{company_id}/statistics":{"get":{"tags":["assets"],"summary":"Get asset statistics","description":"Get statistics about assets for a company","operationId":"get_asset_statistics_api_v1_assets_companies__company_id__statistics_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/summary":{"get":{"tags":["assets"],"summary":"Get asset summary","description":"Get summary statistics for a specific asset","operationId":"get_asset_summary_api_v1_assets__asset_id__summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/intelligence/status":{"get":{"tags":["assets"],"summary":"Get intelligence status","description":"Get intelligence analysis status for a specific asset","operationId":"get_intelligence_status_api_v1_assets__asset_id__intelligence_status_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/feature-status":{"get":{"tags":["assets"],"summary":"Get feature status","description":"Get comprehensive feature availability status for a specific asset","operationId":"get_feature_status_api_v1_assets__asset_id__feature_status_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/intelligence":{"get":{"tags":["assets"],"summary":"Get intelligence data","description":"Get AI-generated intelligence analysis for a specific asset","operationId":"get_asset_intelligence_api_v1_assets__asset_id__intelligence_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/security":{"put":{"tags":["assets"],"summary":"Update asset security settings","description":"Update an asset's query access level and feature modes (TECH-557)","operationId":"update_asset_security_api_v1_assets__asset_id__security_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSecuritySettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/settings/auto-tag":{"put":{"tags":["assets"],"summary":"Update asset auto-tag settings","description":"Enable or disable automatic tag generation for new tables (TECH-673)","operationId":"update_asset_auto_tag_api_v1_assets__asset_id__settings_auto_tag_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoTagSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/test-connection-parameters":{"post":{"tags":["connections"],"summary":"Test connection parameters","description":"Test database connection parameters without creating an asset","operationId":"test_connection_parameters_api_v1_assets_test_connection_parameters_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestParametersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/connection-tests":{"post":{"tags":["connections"],"summary":"Test asset connection","description":"Initiate a connection test for a specific asset as a distributed job","operationId":"test_asset_connection_api_v1_assets__asset_id__connection_tests_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/history":{"get":{"tags":["connections"],"summary":"Get connection history","description":"Get connection test history for an asset","operationId":"get_connection_history_api_v1_assets__asset_id__history_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of results to return","default":50,"title":"Limit"},"description":"Number of results to return"},{"name":"test_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by test type","title":"Test Type"},"description":"Filter by test type"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionTestResponse"},"title":"Response Get Connection History Api V1 Assets  Asset Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/connection-tests/latest":{"get":{"tags":["connections"],"summary":"Get latest connection test","description":"Get the most recent connection test for an asset","operationId":"get_latest_connection_test_api_v1_assets__asset_id__connection_tests_latest_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ConnectionTestResponse"},{"type":"null"}],"title":"Response Get Latest Connection Test Api V1 Assets  Asset Id  Connection Tests Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/health":{"get":{"tags":["connections"],"summary":"Get connection health metrics","description":"Get connection health metrics for an asset","operationId":"get_connection_health_api_v1_assets__asset_id__health_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"description":"Hours to look back for metrics","default":24,"title":"Hours Back"},"description":"Hours to look back for metrics"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/connection-tests/bulk":{"post":{"tags":["connections"],"summary":"Bulk test connections","description":"Test connections for multiple assets","operationId":"bulk_test_connections_api_v1_assets_connection_tests_bulk_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__core__assets__api__endpoints__connections__BulkConnectionTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConnectionTestResponse"},"title":"Response Bulk Test Connections Api V1 Assets Connection Tests Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/connection-tests/{connection_id}":{"get":{"tags":["connections"],"summary":"Get connection test details","description":"Get details of a specific connection test","operationId":"get_connection_test_api_v1_assets_connection_tests__connection_id__get","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/companies/{company_id}/connection-statistics":{"get":{"tags":["connections"],"summary":"Get connection statistics","description":"Get connection statistics for a company","operationId":"get_connection_statistics_api_v1_assets_companies__company_id__connection_statistics_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/schemas":{"get":{"tags":["schemas"],"summary":"Get asset schemas","description":"Get all schemas for an asset","operationId":"get_asset_schemas_api_v1_assets__asset_id__schemas_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Number of results to return","default":100,"title":"Limit"},"description":"Number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tables":{"get":{"tags":["schemas"],"summary":"Get asset tables","description":"Get all tables for an asset, optionally filtered by schema or catalog","operationId":"get_asset_tables_api_v1_assets__asset_id__tables_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"schema_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by schema ID","title":"Schema Id"},"description":"Filter by schema ID"},{"name":"catalog_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by catalog name (Databricks Unity Catalog)","title":"Catalog Name"},"description":"Filter by catalog name (Databricks Unity Catalog)"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive/deleted tables","default":false,"title":"Include Inactive"},"description":"Include inactive/deleted tables"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Number of results to return","default":1000,"title":"Limit"},"description":"Number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tables/{table_id}/columns":{"get":{"tags":["schemas"],"summary":"Get table columns","description":"Get all columns for a specific table within an asset","operationId":"get_table_columns_api_v1_assets__asset_id__tables__table_id__columns_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Table Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Number of results to return","default":1000,"title":"Limit"},"description":"Number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/tables/{table_id}":{"get":{"tags":["schemas"],"summary":"Get table details","description":"Get detailed information about a table including its columns","operationId":"get_table_details_api_v1_assets_tables__table_id__get","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Table Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/search-tables":{"post":{"tags":["schemas"],"summary":"Search tables","description":"Search tables by name or description","operationId":"search_tables_api_v1_assets__asset_id__search_tables_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"search_term","in":"query","required":true,"schema":{"type":"string","title":"Search Term"}},{"name":"table_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by table type","title":"Table Type"},"description":"Filter by table type"},{"name":"schema_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by schema name","title":"Schema Name"},"description":"Filter by schema name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results to return","default":100,"title":"Limit"},"description":"Maximum results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/statistics":{"get":{"tags":["schemas"],"summary":"Get schema statistics","description":"Get schema statistics for an asset","operationId":"get_schema_statistics_api_v1_assets__asset_id__statistics_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/schema-changes":{"get":{"tags":["schemas"],"summary":"Get schema changes","description":"Detect schema changes in the last N days","operationId":"get_schema_changes_api_v1_assets__asset_id__schema_changes_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days to look back for changes","default":7,"title":"Days Back"},"description":"Days to look back for changes"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/export":{"get":{"tags":["schemas"],"summary":"Export schema metadata","description":"Export complete schema metadata for an asset","operationId":"export_schema_metadata_api_v1_assets__asset_id__export_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","description":"Export format (json, csv, yaml)","default":"json","title":"Format Type"},"description":"Export format (json, csv, yaml)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/tables/{table_id}/lineage":{"get":{"tags":["schemas"],"summary":"Get table lineage","description":"Get data lineage information for a table","operationId":"get_table_lineage_api_v1_assets_tables__table_id__lineage_get","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Table Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/tables/{table_id}/monitoring":{"patch":{"tags":["table-monitoring"],"summary":"Toggle table monitoring","description":"Enable or disable monitoring for a specific table. Unmonitored tables don't count toward subscription limits.","operationId":"toggle_table_monitoring_api_v1_assets_tables__table_id__monitoring_patch","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string","title":"Table Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TableMonitoringRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/tables/monitoring/counts":{"get":{"tags":["table-monitoring"],"summary":"Get monitoring counts","description":"Get current table monitoring counts and limits for the company.","operationId":"get_monitoring_counts_api_v1_assets_tables_monitoring_counts_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/tables/monitoring/bulk":{"post":{"tags":["table-monitoring"],"summary":"Bulk update table monitoring","description":"Enable or disable monitoring for multiple tables at once.","operationId":"bulk_update_table_monitoring_api_v1_assets_tables_monitoring_bulk_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMonitoringRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/bulk":{"delete":{"tags":["assets-bulk","assets-bulk"],"summary":"Bulk Delete Assets","description":"Bulk delete multiple assets with cascade cleanup.\n\nTECH-622: Efficient bulk deletion for asset management.\nEach asset is deleted with full cascade cleanup (jobs, tables, schemas, etc.).\n\nReturns partial success information if some assets cannot be deleted.","operationId":"bulk_delete_assets_api_v1_assets_bulk_delete","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__core__assets__api__endpoints__assets_bulk__BulkDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/bulk/connection-tests":{"post":{"tags":["assets-bulk","assets-bulk"],"summary":"Bulk Connection Test","description":"Queue connection tests for multiple assets.\n\nTECH-622: Efficient bulk connection testing for asset health checks.\nEach asset's connection test is queued as a background workflow.\n\nReturns job IDs for tracking test progress.","operationId":"bulk_connection_test_api_v1_assets_bulk_connection_tests_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__core__assets__api__endpoints__assets_bulk__BulkConnectionTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness":{"get":{"tags":["freshness"],"summary":"Get Asset Freshness Overview","description":"Get freshness overview for an asset with pagination and filtering.\n\nReturns comprehensive freshness monitoring data including:\n- Summary statistics (total tables, ready/not-ready counts)\n- Individual table freshness status (paginated)\n- Active monitoring schedules\n- Detected patterns\n\nQuery Parameters:\n- limit: Maximum tables to return (default: 20, max: 100)\n- offset: Number of tables to skip (default: 0)\n- status_filters: Filter by status (ready,not_ready,unknown,error)\n- schema_filters: Filter by schema names\n- tag_filters: Filter by tag names\n- search_query: Search in table names and paths","operationId":"get_asset_freshness_overview_api_v1_assets__asset_id__freshness_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum tables to return","default":20,"title":"Limit"},"description":"Maximum tables to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of tables to skip","default":0,"title":"Offset"},"description":"Number of tables to skip"},{"name":"status_filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated status filters (ready,not_ready,unknown,error)","title":"Status Filters"},"description":"Comma-separated status filters (ready,not_ready,unknown,error)"},{"name":"schema_filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated schema filters","title":"Schema Filters"},"description":"Comma-separated schema filters"},{"name":"tag_filters","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated tag filters","title":"Tag Filters"},"description":"Comma-separated tag filters"},{"name":"search_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query for table names","title":"Search Query"},"description":"Search query for table names"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/schedules":{"post":{"tags":["freshness"],"summary":"Create Freshness Schedule","description":"Create freshness monitoring schedule for a table.\n\nAutomatically detects freshness column if not specified and starts\nmonitoring according to the specified interval.","operationId":"create_freshness_schedule_api_v1_assets__asset_id__freshness_schedules_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__data_quality__freshness__models__freshness_models__CreateScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/freshness/schedules/{schedule_id}":{"put":{"tags":["freshness"],"summary":"Update Freshness Schedule","description":"Update freshness monitoring schedule.","operationId":"update_freshness_schedule_api_v1_assets_freshness_schedules__schedule_id__put","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__data_quality__freshness__models__freshness_models__UpdateScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["freshness"],"summary":"Delete Freshness Schedule","description":"Delete freshness monitoring schedule.","operationId":"delete_freshness_schedule_api_v1_assets_freshness_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/schedules/bulk/enable":{"post":{"tags":["freshness"],"summary":"Bulk Enable Schedules","description":"Enable monitoring for multiple schedules at once.","operationId":"bulk_enable_schedules_api_v1_assets__asset_id__freshness_schedules_bulk_enable_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/schedules/bulk/disable":{"post":{"tags":["freshness"],"summary":"Bulk Disable Schedules","description":"Disable monitoring for multiple schedules at once.","operationId":"bulk_disable_schedules_api_v1_assets__asset_id__freshness_schedules_bulk_disable_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/schedules/bulk/delete":{"post":{"tags":["freshness"],"summary":"Bulk Delete Schedules","description":"Delete multiple schedules at once.","operationId":"bulk_delete_schedules_api_v1_assets__asset_id__freshness_schedules_bulk_delete_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/analyses":{"post":{"tags":["freshness"],"summary":"Trigger Freshness Analysis","description":"Trigger freshness pattern analysis for tables.\n\nAnalyzes historical data to detect update patterns and improve\nfreshness monitoring accuracy.\n\nSupports filtering by:\n- Specific table paths\n- Tag names (e.g., 'orders', 'customer_data')\n- Tag categories (e.g., 'business', 'compliance')","operationId":"trigger_freshness_analysis_api_v1_assets__asset_id__freshness_analyses_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/{table_path}/trend":{"get":{"tags":["freshness"],"summary":"Get Freshness Trend","description":"Get freshness trend data for mini graph visualization.\n\nReturns array of freshness status values over time for sparkline display.\nUsed by FreshnessTrendMiniGraph component.","operationId":"get_freshness_trend_api_v1_assets__asset_id__freshness__table_path__trend_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days of trend data","default":7,"title":"Days"},"description":"Number of days of trend data"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/trends/batch":{"post":{"tags":["freshness"],"summary":"Get Batch Freshness Trends","description":"Get trend data for multiple tables in one request.","operationId":"get_batch_freshness_trends_api_v1_assets__asset_id__freshness_trends_batch_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days of trend data","default":7,"title":"Days"},"description":"Number of days of trend data"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchFreshnessTrendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/{table_path}/jobs":{"get":{"tags":["freshness"],"summary":"Get Freshness Jobs","description":"Get recent freshness check job history.\n\nReturns recent job executions with timestamps, status, and results.\nUsed by RecentJobsTable component.","operationId":"get_freshness_jobs_api_v1_assets__asset_id__freshness__table_path__jobs_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of recent jobs","default":20,"title":"Limit"},"description":"Number of recent jobs"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/{table_path}/check":{"post":{"tags":["freshness"],"summary":"Trigger Freshness Check","description":"Trigger an immediate freshness check for a specific table.\n\nQueues a freshness check job and returns the job ID for polling.\nUsed by the refresh button in the UI.","operationId":"trigger_freshness_check_api_v1_assets__asset_id__freshness__table_path__check_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/{table_path}/columns":{"get":{"tags":["freshness"],"summary":"Get Table Columns For Freshness","description":"Get table columns filtered for freshness monitoring (timestamp/datetime columns).\n\nReturns columns from the table schema, filtering for timestamp/datetime types\nthat are suitable for freshness tracking.","operationId":"get_table_columns_for_freshness_api_v1_assets__asset_id__freshness__table_path__columns_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/stream":{"get":{"tags":["freshness"],"summary":"Stream Freshness Events","description":"Stream freshness update events via Server-Sent Events.\n\nProvides real-time updates when freshness checks complete.\nAuthentication via query parameter (EventSource doesn't support headers).\n\nEvent format:\n{\n    \"event\": \"freshness_updated\",\n    \"data\": {\n        \"asset_id\": \"uuid\",\n        \"table_path\": \"schema.table\",\n        \"data_freshness\": \"ready|not_ready|error\",\n        \"timestamp\": \"ISO8601\",\n        \"last_updated\": \"ISO8601\"\n    }\n}\n\nArgs:\n    request: FastAPI request object\n    asset_id: Asset UUID to monitor freshness updates for\n    token: Authentication token (JWT)\n    session: Database session\n\nReturns:\n    EventSourceResponse with freshness update events","operationId":"stream_freshness_events_api_v1_assets__asset_id__freshness_stream_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Authentication token (JWT)","title":"Token"},"description":"Authentication token (JWT)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/freshness/{table_path}":{"get":{"tags":["freshness"],"summary":"Get Table Freshness History","description":"Get freshness history for a specific table.\n\nReturns:\n- Historical freshness measurements\n- Detected update patterns\n- Trend analysis","operationId":"get_table_freshness_history_api_v1_assets__asset_id__freshness__table_path__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days of history","default":30,"title":"Days"},"description":"Number of days of history"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":10,"description":"Maximum records to return","default":100,"title":"Limit"},"description":"Maximum records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/row-count":{"get":{"tags":["row-count"],"summary":"Get Asset Row Count Overview","description":"Get row_count overview for an asset.\n\nReturns comprehensive row_count monitoring data including:\n- Summary statistics (healthy, warning, anomaly counts)\n- Individual schedule status (paginated)\n- Latest check results\n- Detected patterns","operationId":"get_asset_row_count_overview_api_v1_assets__asset_id__row_count_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum schedules to return","default":20,"title":"Limit"},"description":"Maximum schedules to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of schedules to skip","default":0,"title":"Offset"},"description":"Number of schedules to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/row-count/schedules":{"post":{"tags":["row-count"],"summary":"Create Row Count Schedule","description":"Create row_count monitoring schedule for a table.\n\nStarts row count monitoring according to the specified time window\nand check interval.","operationId":"create_row_count_schedule_api_v1_assets__asset_id__row_count_schedules_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRowCountScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/row-count/schedules/{schedule_id}":{"patch":{"tags":["row-count"],"summary":"Update Row Count Schedule","description":"Update row_count monitoring schedule.","operationId":"update_row_count_schedule_api_v1_assets_row_count_schedules__schedule_id__patch","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRowCountScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["row-count"],"summary":"Delete Row Count Schedule","description":"Delete row_count monitoring schedule.","operationId":"delete_row_count_schedule_api_v1_assets_row_count_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/row-count/{table_path}":{"get":{"tags":["row-count"],"summary":"Get Table Row Count Status","description":"Get row_count status for a specific table.\n\nReturns:\n- Schedule configuration\n- Latest check result\n- Detected pattern\n- Historical measurements","operationId":"get_table_row_count_status_api_v1_assets__asset_id__row_count__table_path__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"history_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days of history to include","default":30,"title":"History Days"},"description":"Days of history to include"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/row-count/{table_path}/check":{"post":{"tags":["row-count"],"summary":"Trigger Row Count Check","description":"Trigger an immediate row_count check for a table.\n\nQueues a row_count check job and returns the job ID for polling.","operationId":"trigger_row_count_check_api_v1_assets__asset_id__row_count__table_path__check_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/row-count/{table_path}/backfill":{"post":{"tags":["row-count"],"summary":"Trigger Row Count Backfill","description":"Trigger historical data backfill for a row count schedule.\n\nUses the schedule's timestamp column to query historical data from the\ncustomer's database, creating synthetic history records to skip the\nlearning phase.","operationId":"trigger_row_count_backfill_api_v1_assets__asset_id__row_count__table_path__backfill_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"path","required":true,"schema":{"type":"string","title":"Table Path"}},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"description":"How far back to query","default":90,"title":"Lookback Days"},"description":"How far back to query"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Bucket size: '1h', '6h', '12h', '24h', '7d'. Empty = match schedule window.","default":"","title":"Granularity"},"description":"Bucket size: '1h', '6h', '12h', '24h', '7d'. Empty = match schedule window."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/row-count/schedules/{schedule_id}/history":{"get":{"tags":["row-count"],"summary":"Get Row Count History","description":"Get row_count check history for a schedule.","operationId":"get_row_count_history_api_v1_assets_row_count_schedules__schedule_id__history_get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Days of history","default":30,"title":"Days"},"description":"Days of history"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":10,"description":"Maximum records","default":100,"title":"Limit"},"description":"Maximum records"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/row-count/schedules/{schedule_id}/forecast":{"get":{"tags":["row-count"],"summary":"Get Row Count Forecast","description":"Get forecast for future periods based on learned pattern.\n\nTECH-749: Prediction visualization for row_count charts.\n\nReturns forecast data points that can be displayed alongside historical data\nto show predicted future row counts with confidence bounds.\n\nThe forecast is generated from existing learned patterns and does not require\nadditional computation. Bounds widen further into the future to reflect\ngrowing uncertainty.\n\nReturns empty forecasts with reason if:\n- Pattern has not been learned yet (reason: \"no_pattern\")\n- Pattern confidence is below 70% (reason: \"insufficient_confidence\")\n- Schedule not found (reason: \"schedule_not_found\")","operationId":"get_row_count_forecast_api_v1_assets_row_count_schedules__schedule_id__forecast_get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"periods","in":"query","required":false,"schema":{"type":"integer","maximum":7,"minimum":1,"description":"Number of future periods to forecast","default":3,"title":"Periods"},"description":"Number of future periods to forecast"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors":{"get":{"tags":["drift"],"summary":"List Drift Monitors","description":"List drift monitors for an asset.","operationId":"list_drift_monitors_api_v1_assets__asset_id__drift_monitors_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum monitors to return","default":20,"title":"Limit"},"description":"Maximum monitors to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of monitors to skip","default":0,"title":"Offset"},"description":"Number of monitors to skip"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive monitors","default":false,"title":"Include Inactive"},"description":"Include inactive monitors"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["drift"],"summary":"Create Drift Monitor","description":"Create a drift monitor for a column.","operationId":"create_drift_monitor_api_v1_assets__asset_id__drift_monitors_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDriftMonitorRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/{monitor_id}":{"get":{"tags":["drift"],"summary":"Get Drift Monitor","description":"Get a specific drift monitor.","operationId":"get_drift_monitor_api_v1_assets__asset_id__drift_monitors__monitor_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["drift"],"summary":"Update Drift Monitor","description":"Update a drift monitor.","operationId":"update_drift_monitor_api_v1_assets__asset_id__drift_monitors__monitor_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDriftMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["drift"],"summary":"Delete Drift Monitor","description":"Soft delete a drift monitor.","operationId":"delete_drift_monitor_api_v1_assets__asset_id__drift_monitors__monitor_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/{monitor_id}/run":{"post":{"tags":["drift"],"summary":"Run Drift Check","description":"Manually trigger a drift check.","operationId":"run_drift_check_api_v1_assets__asset_id__drift_monitors__monitor_id__run_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/{monitor_id}/results":{"get":{"tags":["drift"],"summary":"Get Drift Results","description":"Get drift check results for a monitor.","operationId":"get_drift_results_api_v1_assets__asset_id__drift_monitors__monitor_id__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum results to return","default":20,"title":"Limit"},"description":"Maximum results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/{monitor_id}/baseline":{"post":{"tags":["drift"],"summary":"Set Drift Baseline","description":"Set a fixed baseline for a monitor.","operationId":"set_drift_baseline_api_v1_assets__asset_id__drift_monitors__monitor_id__baseline_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__data_quality__drift__api__drift__SetBaselineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/{monitor_id}/distributions":{"get":{"tags":["drift"],"summary":"Get Drift Distributions","description":"Get captured distributions for a monitor.","operationId":"get_drift_distributions_api_v1_assets__asset_id__drift_monitors__monitor_id__distributions_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_id","in":"path","required":true,"schema":{"type":"integer","title":"Monitor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum distributions to return","default":20,"title":"Limit"},"description":"Maximum distributions to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of distributions to skip","default":0,"title":"Offset"},"description":"Number of distributions to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/bulk/activate":{"post":{"tags":["drift"],"summary":"Bulk Activate Drift Monitors","description":"Activate multiple drift monitors at once.","operationId":"bulk_activate_drift_monitors_api_v1_assets__asset_id__drift_monitors_bulk_activate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDriftMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/bulk/deactivate":{"post":{"tags":["drift"],"summary":"Bulk Deactivate Drift Monitors","description":"Deactivate multiple drift monitors at once.","operationId":"bulk_deactivate_drift_monitors_api_v1_assets__asset_id__drift_monitors_bulk_deactivate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDriftMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/drift/monitors/bulk/delete":{"post":{"tags":["drift"],"summary":"Bulk Delete Drift Monitors","description":"Soft delete multiple drift monitors at once.","operationId":"bulk_delete_drift_monitors_api_v1_assets__asset_id__drift_monitors_bulk_delete_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDriftMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/freshness/sla-violations/":{"get":{"tags":["freshness-sla"],"summary":"Get Violations","description":"Get SLA violations for company, optionally filtered by asset or schedule.","operationId":"get_violations_api_v1_assets_freshness_sla_violations__get","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"schedule_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by schedule UUID","title":"Schedule Id"},"description":"Filter by schedule UUID"},{"name":"unacknowledged_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return unacknowledged violations","default":false,"title":"Unacknowledged Only"},"description":"Only return unacknowledged violations"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/freshness/sla-violations/{violation_id}/acknowledge":{"post":{"tags":["freshness-sla"],"summary":"Acknowledge Violation","description":"Acknowledge an SLA violation.","operationId":"acknowledge_violation_api_v1_assets_freshness_sla_violations__violation_id__acknowledge_post","parameters":[{"name":"violation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Violation UUID","title":"Violation Id"},"description":"Violation UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeViolationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/freshness/sla-violations/compliance-report":{"get":{"tags":["freshness-sla"],"summary":"Get Compliance Report","description":"Get compliance report for the last N days.","operationId":"get_compliance_report_api_v1_assets_freshness_sla_violations_compliance_report_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to include","default":30,"title":"Days"},"description":"Number of days to include"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/freshness/sla-violations/schedules/{schedule_id}/learning-progress":{"get":{"tags":["freshness-sla"],"summary":"Get Learning Progress","description":"Get learning progress for auto-learn mode schedule.","operationId":"get_learning_progress_api_v1_assets_freshness_sla_violations_schedules__schedule_id__learning_progress_get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","description":"Schedule UUID","title":"Schedule Id"},"description":"Schedule UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/schedules":{"post":{"tags":["data_quality"],"summary":"Create Data Quality Check Schedule","description":"Create a new automated data quality check schedule for an asset.\n\n    Supports multiple check types:\n    - **freshness**: Monitor data recency using timestamp columns or row counts\n    - **statistical**: Run statistical analysis for anomaly detection (future)\n\n    The schedule will automatically execute checks based on the specified interval.","operationId":"create_check_schedule_api_v1_assets__asset_id__data_quality_schedules_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__data_quality__models__schedules__CreateScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"201":{"description":"Schedule created successfully","content":{"application/json":{"example":{"success":true,"message":"Check schedule created successfully","data":{"id":123,"uuid":"550e8400-e29b-41d4-a716-446655440000","check_type":"freshness","enabled":true,"next_check_at":"2024-01-15T14:30:00Z"}}}}},"400":{"description":"Invalid request parameters","content":{"application/json":{"example":{"success":false,"message":"Invalid check configuration","error":"threshold_hours must be positive"}}}},"404":{"description":"Asset not found"},"409":{"description":"Schedule already exists for this table path and check type"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["data_quality"],"summary":"Get Asset Schedules","description":"Get all data quality check schedules for an asset.","operationId":"get_asset_schedules_api_v1_assets__asset_id__data_quality_schedules_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"check_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CheckType"},{"type":"null"}],"description":"Filter by check type","title":"Check Type"},"description":"Filter by check type"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/data-quality/schedules/{schedule_id}":{"put":{"tags":["data_quality"],"summary":"Update Check Schedule","description":"Update a data quality check schedule.","operationId":"update_check_schedule_api_v1_assets_data_quality_schedules__schedule_id__put","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["data_quality"],"summary":"Delete Check Schedule","description":"Delete a data quality check schedule.","operationId":"delete_check_schedule_api_v1_assets_data_quality_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/results":{"get":{"tags":["data_quality"],"summary":"Get Asset Results","description":"Get data quality check results for an asset.","operationId":"get_asset_results_api_v1_assets__asset_id__data_quality_results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"check_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CheckType"},{"type":"null"}],"description":"Filter by check type","title":"Check Type"},"description":"Filter by check type"},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days Back"},"description":"Number of days to look back"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results to return","default":100,"title":"Limit"},"description":"Maximum results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/summary":{"get":{"tags":["data_quality"],"summary":"Get Asset Summary","description":"Get summary statistics for data quality checks on an asset.","operationId":"get_asset_summary_api_v1_assets__asset_id__data_quality_summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"check_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/CheckType"},{"type":"null"}],"description":"Filter by check type","title":"Check Type"},"description":"Filter by check type"},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days Back"},"description":"Number of days to look back"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/data-quality/supported-types":{"get":{"tags":["data_quality"],"summary":"Get Supported Check Types","description":"Get list of supported data quality check types.","operationId":"get_supported_check_types_api_v1_assets_data_quality_supported_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/action-required":{"get":{"tags":["data-quality-action-required"],"summary":"Get Action Required Items","description":"Get failing/warning monitors across all DQ check types, sorted by severity.","operationId":"get_action_required_api_v1_assets__asset_id__data_quality_action_required_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"include_snoozed","in":"query","required":false,"schema":{"type":"boolean","description":"Include snoozed monitors in results","default":false,"title":"Include Snoozed"},"description":"Include snoozed monitors in results"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/snooze":{"post":{"tags":["data-quality-action-required"],"summary":"Snooze a Monitor","description":"Snooze a failing monitor to hide it from action required list.","operationId":"snooze_monitor_api_v1_assets__asset_id__data_quality_snooze_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnoozeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/snooze/{snooze_id}":{"delete":{"tags":["data-quality-action-required"],"summary":"Unsnooze a Monitor","description":"Remove a snooze to restore the monitor to the action required list.","operationId":"unsnooze_monitor_api_v1_assets__asset_id__data_quality_snooze__snooze_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"snooze_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Snooze Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/data-quality/table-health":{"get":{"tags":["data-quality-table-health"],"summary":"Get Table Health","description":"Get per-table health aggregation across all monitor types.","operationId":"get_table_health_api_v1_assets__asset_id__data_quality_table_health_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/validity-rules":{"get":{"tags":["validity"],"summary":"List Validity Rules","description":"Get all validity rules for an asset.","operationId":"list_validity_rules_api_v1_assets__asset_id__validity_rules_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by table path","title":"Table Path"},"description":"Filter by table path"},{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rule type","title":"Rule Type"},"description":"Filter by rule type"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["validity"],"summary":"Create Validity Rule","description":"Create a new validity rule for an asset.","operationId":"create_validity_rule_api_v1_assets__asset_id__validity_rules_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidityRuleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/validity-rules/summary":{"get":{"tags":["validity"],"summary":"Get Validity Summary","description":"Get validity check summary for an asset.","operationId":"get_validity_summary_api_v1_assets__asset_id__validity_rules_summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/validity-rules/{rule_id}":{"get":{"tags":["validity"],"summary":"Get Validity Rule","description":"Get a validity rule by ID with recent results.","operationId":"get_validity_rule_api_v1_assets__asset_id__validity_rules__rule_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["validity"],"summary":"Update Validity Rule","description":"Update a validity rule.","operationId":"update_validity_rule_api_v1_assets__asset_id__validity_rules__rule_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidityRuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["validity"],"summary":"Delete Validity Rule","description":"Delete a validity rule.","operationId":"delete_validity_rule_api_v1_assets__asset_id__validity_rules__rule_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/validity-rules/{rule_id}/check":{"post":{"tags":["validity"],"summary":"Trigger Validity Check","description":"Trigger an immediate validity check for a rule.","operationId":"trigger_validity_check_api_v1_assets__asset_id__validity_rules__rule_id__check_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ValidityCheckTrigger"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/validity-rules/{rule_id}/results":{"get":{"tags":["validity"],"summary":"Get Check Results","description":"Get historical check results for a validity rule.","operationId":"get_validity_results_api_v1_assets__asset_id__validity_rules__rule_id__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"integer","title":"Rule Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by start date","title":"Start Date"},"description":"Filter by start date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by end date","title":"End Date"},"description":"Filter by end date"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics":{"get":{"tags":["metrics"],"summary":"List Metrics","description":"Get all metrics for an asset.","operationId":"list_metrics_api_v1_assets__asset_id__metrics_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"table_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by table path","title":"Table Path"},"description":"Filter by table path"},{"name":"metric_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by metric type","title":"Metric Type"},"description":"Filter by metric type"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["metrics"],"summary":"Create Metric","description":"Create a new metric for an asset.","operationId":"create_metric_api_v1_assets__asset_id__metrics_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricDefinitionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/summary":{"get":{"tags":["metrics"],"summary":"Get Metrics Summary","description":"Get metrics summary for Data Quality tab header.","operationId":"get_metrics_summary_api_v1_assets__asset_id__metrics_summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}":{"get":{"tags":["metrics"],"summary":"Get Metric","description":"Get a metric by UUID with recent snapshots.","operationId":"get_metric_api_v1_assets__asset_id__metrics__metric_uuid__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"include_snapshots","in":"query","required":false,"schema":{"type":"boolean","description":"Include recent snapshots","default":true,"title":"Include Snapshots"},"description":"Include recent snapshots"},{"name":"snapshot_limit","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Max snapshots to include","default":30,"title":"Snapshot Limit"},"description":"Max snapshots to include"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["metrics"],"summary":"Update Metric","description":"Update a metric definition.","operationId":"update_metric_api_v1_assets__asset_id__metrics__metric_uuid__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["metrics"],"summary":"Delete Metric","description":"Soft delete a metric and deactivate its checks.","operationId":"delete_metric_api_v1_assets__asset_id__metrics__metric_uuid__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/backfill":{"post":{"tags":["metrics"],"summary":"Backfill Metric History","description":"Trigger historical data backfill for a metric with a time column.","operationId":"trigger_metric_backfill_api_v1_assets__asset_id__metrics__metric_uuid__backfill_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/capture":{"post":{"tags":["metrics"],"summary":"Trigger Capture","description":"Trigger an immediate metric capture.","operationId":"trigger_metric_capture_api_v1_assets__asset_id__metrics__metric_uuid__capture_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks":{"get":{"tags":["metrics"],"summary":"List Referential Checks","description":"Get all referential integrity checks for an asset.","operationId":"list_referential_checks_api_v1_assets__asset_id__referential_checks_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["metrics"],"summary":"Create Referential Check","description":"Create a new referential integrity check for an asset.","operationId":"create_referential_check_api_v1_assets__asset_id__referential_checks_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferentialCheckCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/suggestions":{"get":{"tags":["metrics"],"summary":"Get FK Check Suggestions","description":"Get suggestions for referential checks based on schema FK metadata.","operationId":"get_referential_check_suggestions_api_v1_assets__asset_id__referential_checks_suggestions_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/{check_uuid}":{"get":{"tags":["metrics"],"summary":"Get Referential Check","description":"Get a referential check by UUID with latest result.","operationId":"get_referential_check_api_v1_assets__asset_id__referential_checks__check_uuid__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["metrics"],"summary":"Update Referential Check","description":"Update a referential check configuration.","operationId":"update_referential_check_api_v1_assets__asset_id__referential_checks__check_uuid__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferentialCheckUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["metrics"],"summary":"Delete Referential Check","description":"Soft delete a referential check.","operationId":"delete_referential_check_api_v1_assets__asset_id__referential_checks__check_uuid__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/{check_uuid}/execute":{"post":{"tags":["metrics"],"summary":"Execute Referential Check","description":"Trigger immediate execution of a referential check.","operationId":"execute_referential_check_api_v1_assets__asset_id__referential_checks__check_uuid__execute_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/{check_uuid}/results":{"get":{"tags":["metrics"],"summary":"List Referential Check Results","description":"Get historical results for a referential check.","operationId":"list_referential_check_results_api_v1_assets__asset_id__referential_checks__check_uuid__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/bulk/activate":{"post":{"tags":["metrics"],"summary":"Bulk Activate Referential Checks","description":"Activate multiple referential checks at once.","operationId":"bulk_activate_referential_checks_api_v1_assets__asset_id__referential_checks_bulk_activate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkReferentialCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/bulk/deactivate":{"post":{"tags":["metrics"],"summary":"Bulk Deactivate Referential Checks","description":"Deactivate multiple referential checks at once.","operationId":"bulk_deactivate_referential_checks_api_v1_assets__asset_id__referential_checks_bulk_deactivate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkReferentialCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/bulk/delete":{"post":{"tags":["metrics"],"summary":"Bulk Delete Referential Checks","description":"Delete multiple referential checks at once.","operationId":"bulk_delete_referential_checks_api_v1_assets__asset_id__referential_checks_bulk_delete_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkReferentialCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/referential-checks/trends/batch":{"post":{"tags":["metrics"],"summary":"Get Batch Referential Check Trends","description":"Get trend data for multiple referential checks in one request.","operationId":"get_batch_referential_trends_api_v1_assets__asset_id__referential_checks_trends_batch_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days of trend data","default":7,"title":"Days"},"description":"Number of days of trend data"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchReferentialTrendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/checks":{"get":{"tags":["metrics"],"summary":"List Checks","description":"Get checks for a metric.","operationId":"list_metric_checks_api_v1_assets__asset_id__metrics__metric_uuid__checks_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["metrics"],"summary":"Create Check","description":"Create a check for a metric.","operationId":"create_metric_check_api_v1_assets__asset_id__metrics__metric_uuid__checks_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricCheckCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/checks/{check_uuid}":{"patch":{"tags":["metrics"],"summary":"Update Check","description":"Update a check configuration.","operationId":"update_metric_check_api_v1_assets__asset_id__metrics__metric_uuid__checks__check_uuid__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricCheckUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["metrics"],"summary":"Delete Check","description":"Deactivate a check.","operationId":"delete_metric_check_api_v1_assets__asset_id__metrics__metric_uuid__checks__check_uuid__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"check_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Check Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/results":{"get":{"tags":["metrics"],"summary":"List Check Results","description":"Get check results for a metric.","operationId":"list_check_results_api_v1_assets__asset_id__metrics__metric_uuid__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (PASS, FAIL, WARNING, ERROR)","title":"Status"},"description":"Filter by status (PASS, FAIL, WARNING, ERROR)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter results after this date","title":"Start Date"},"description":"Filter results after this date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter results before this date","title":"End Date"},"description":"Filter results before this date"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/trend":{"get":{"tags":["metrics"],"summary":"Get Metric Trend","description":"Get trend data for sparkline visualization.","operationId":"get_metric_trend_api_v1_assets__asset_id__metrics__metric_uuid__trend_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days of trend data","default":7,"title":"Days"},"description":"Number of days of trend data"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/trends/batch":{"post":{"tags":["metrics"],"summary":"Get Batch Metric Trends","description":"Get trend data for multiple metrics in one request.","operationId":"get_batch_metric_trends_api_v1_assets__asset_id__metrics_trends_batch_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of days of trend data","default":7,"title":"Days"},"description":"Number of days of trend data"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchTrendRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/bulk/activate":{"post":{"tags":["metrics"],"summary":"Bulk Activate Metrics","description":"Activate multiple metrics at once.","operationId":"bulk_activate_metrics_api_v1_assets__asset_id__metrics_bulk_activate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMetricRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/bulk/deactivate":{"post":{"tags":["metrics"],"summary":"Bulk Deactivate Metrics","description":"Deactivate multiple metrics at once.","operationId":"bulk_deactivate_metrics_api_v1_assets__asset_id__metrics_bulk_deactivate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMetricRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/bulk/delete":{"post":{"tags":["metrics"],"summary":"Bulk Delete Metrics","description":"Delete multiple metrics at once.","operationId":"bulk_delete_metrics_api_v1_assets__asset_id__metrics_bulk_delete_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMetricRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/snapshots":{"get":{"tags":["metrics"],"summary":"List Snapshots","description":"Get historical snapshots for a metric.","operationId":"list_metric_snapshots_api_v1_assets__asset_id__metrics__metric_uuid__snapshots_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/metrics/{metric_uuid}/snapshots/{snapshot_id}/exclude":{"patch":{"tags":["metrics"],"summary":"Exclude Snapshot","description":"Mark a snapshot as excluded from baseline calculations.","operationId":"exclude_snapshot_api_v1_assets__asset_id__metrics__metric_uuid__snapshots__snapshot_id__exclude_patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"metric_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Metric Uuid"}},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"integer","title":"Snapshot Id"}},{"name":"excluded","in":"query","required":false,"schema":{"type":"boolean","description":"Whether to exclude","default":true,"title":"Excluded"},"description":"Whether to exclude"},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Reason for exclusion","title":"Reason"},"description":"Reason for exclusion"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/custom-sql-monitors/test":{"post":{"tags":["custom_sql"],"summary":"Test Custom SQL Query","description":"Execute a custom SQL query without creating a monitor.\n\nRuns the query with a timeout and returns the numeric result value,\nor an error message if the query fails. Does not persist anything.","operationId":"test_query_api_v1_assets__asset_id__custom_sql_monitors_test_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCustomSqlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/custom-sql-monitors":{"post":{"tags":["custom_sql"],"summary":"Create Custom SQL Monitor","description":"Create a new custom SQL monitor for an asset.","operationId":"create_monitor_api_v1_assets__asset_id__custom_sql_monitors_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomSqlMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["custom_sql"],"summary":"List Custom SQL Monitors","description":"List all custom SQL monitors for an asset.","operationId":"list_monitors_api_v1_assets__asset_id__custom_sql_monitors_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/custom-sql-monitors/{monitor_uuid}":{"get":{"tags":["custom_sql"],"summary":"Get Custom SQL Monitor Detail","description":"Get details of a specific custom SQL monitor.","operationId":"get_monitor_api_v1_assets__asset_id__custom_sql_monitors__monitor_uuid__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_uuid","in":"path","required":true,"schema":{"type":"string","title":"Monitor Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["custom_sql"],"summary":"Update Custom SQL Monitor","description":"Update an existing custom SQL monitor.","operationId":"update_monitor_api_v1_assets__asset_id__custom_sql_monitors__monitor_uuid__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_uuid","in":"path","required":true,"schema":{"type":"string","title":"Monitor Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCustomSqlMonitorRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["custom_sql"],"summary":"Delete Custom SQL Monitor","description":"Delete a custom SQL monitor (soft delete).","operationId":"delete_monitor_api_v1_assets__asset_id__custom_sql_monitors__monitor_uuid__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_uuid","in":"path","required":true,"schema":{"type":"string","title":"Monitor Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/custom-sql-monitors/{monitor_uuid}/run":{"post":{"tags":["custom_sql"],"summary":"Run Custom SQL Monitor Now","description":"Execute a custom SQL monitor immediately and return the result.\n\nRuns inline (synchronous within request) with the monitor's configured\ntimeout. Does NOT queue a background job.","operationId":"run_monitor_api_v1_assets__asset_id__custom_sql_monitors__monitor_uuid__run_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_uuid","in":"path","required":true,"schema":{"type":"string","title":"Monitor Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/custom-sql-monitors/{monitor_uuid}/results":{"get":{"tags":["custom_sql"],"summary":"Get Custom SQL Monitor Results","description":"Get historical results for a custom SQL monitor.","operationId":"get_monitor_results_api_v1_assets__asset_id__custom_sql_monitors__monitor_uuid__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"monitor_uuid","in":"path","required":true,"schema":{"type":"string","title":"Monitor Uuid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage":{"get":{"tags":["lineage-query"],"summary":"Get Asset Lineage","description":"Get complete lineage graph for an asset.\n\nReturns all nodes and edges from the database.\nClient-side filtering can be used to show different views (asset/schema/table).\n\nArgs:\n    asset_id: Asset UUID\n\nReturns:\n    StandardResponse with LineageGraphResponse data","operationId":"get_asset_lineage_api_v1_assets__asset_id__lineage_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/upstream/{unique_id}":{"get":{"tags":["lineage-query"],"summary":"Get Upstream Lineage","description":"Get upstream (parent) lineage for a node.\n\nArgs:\n    asset_id: Asset UUID\n    unique_id: Node unique identifier\n    max_hops: Maximum number of hops to traverse\n\nReturns:\n    StandardResponse with upstream nodes","operationId":"get_upstream_lineage_api_v1_assets__asset_id__lineage_upstream__unique_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"max_hops","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum hops to traverse","default":10,"title":"Max Hops"},"description":"Maximum hops to traverse"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/downstream/{unique_id}":{"get":{"tags":["lineage-query"],"summary":"Get Downstream Lineage","description":"Get downstream (child) lineage for a node.\n\nArgs:\n    asset_id: Asset UUID\n    unique_id: Node unique identifier\n    max_hops: Maximum number of hops to traverse\n\nReturns:\n    StandardResponse with downstream nodes","operationId":"get_downstream_lineage_api_v1_assets__asset_id__lineage_downstream__unique_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"max_hops","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum hops to traverse","default":10,"title":"Max Hops"},"description":"Maximum hops to traverse"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/impact":{"get":{"tags":["lineage-query"],"summary":"Analyze Impact","description":"Analyze downstream impact of changes to a node.\n\nArgs:\n    asset_id: Asset UUID\n    unique_id: Node unique identifier\n    max_hops: Maximum hops to analyze\n\nReturns:\n    StandardResponse with ImpactAnalysisResponse data","operationId":"analyze_impact_api_v1_assets__asset_id__lineage_impact_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"unique_id","in":"query","required":true,"schema":{"type":"string","description":"Node unique identifier","title":"Unique Id"},"description":"Node unique identifier"},{"name":"max_hops","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Maximum hops to analyze","default":10,"title":"Max Hops"},"description":"Maximum hops to analyze"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/path":{"get":{"tags":["lineage-query"],"summary":"Find Path Between Nodes","description":"Find shortest path between two nodes.\n\nArgs:\n    asset_id: Asset UUID\n    from_unique_id: Source node unique ID\n    to_unique_id: Target node unique ID\n    max_hops: Maximum path length\n\nReturns:\n    StandardResponse with path data","operationId":"find_path_between_nodes_api_v1_assets__asset_id__lineage_path_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"from_unique_id","in":"query","required":true,"schema":{"type":"string","description":"Source node unique identifier","title":"From Unique Id"},"description":"Source node unique identifier"},{"name":"to_unique_id","in":"query","required":true,"schema":{"type":"string","description":"Target node unique identifier","title":"To Unique Id"},"description":"Target node unique identifier"},{"name":"max_hops","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum path length","default":20,"title":"Max Hops"},"description":"Maximum path length"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/batch-impact":{"post":{"tags":["lineage-query"],"summary":"Batch Impact Analysis","description":"Analyze downstream impact for multiple nodes in a single request.\n\nTECH-817: Returns downstream impact counts for each unique_id,\nenabling the schema changes page to show impact badges without\nN+1 API calls.\n\nArgs:\n    asset_id: Asset UUID\n    request: Batch request with unique_ids and max_hops","operationId":"batch_impact_analysis_api_v1_assets__asset_id__lineage_batch_impact_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchImpactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/upload":{"post":{"tags":["lineage-upload"],"summary":"Upload Manifest","description":"Upload DBT manifest.json file to sync lineage data.\n\nThis endpoint accepts a manifest.json file (from `dbt docs generate` or\n`dbt compile`), parses it, and syncs all lineage data to the database.\n\nOptionally triggers a targeted asset refresh to sync DBT models to the catalog.\n\nArgs:\n    asset_id: Asset UUID\n    ctx: Application context with user and session\n    file: Uploaded manifest.json file\n    sync_to_catalog: Whether to sync DBT models to asset catalog (default: True)\n    workflow_service: Workflow service for job submission\n\nReturns:\n    StandardResponse with sync statistics","operationId":"upload_manifest_api_v1_assets__asset_id__lineage_upload_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"sync_to_catalog","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Sync To Catalog"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_manifest_api_v1_assets__asset_id__lineage_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/dbt-cloud/sync":{"post":{"tags":["lineage-upload"],"summary":"Sync Dbt Cloud","description":"Sync lineage from DBT Cloud API.\n\nFetches the latest manifest from DBT Cloud and syncs lineage data.\n\nArgs:\n    asset_id: Asset UUID\n    ctx: Application context with user and session\n    request: DBT Cloud sync request containing account_id, api_token, and job_id\n\nReturns:\n    StandardResponse with sync statistics","operationId":"sync_dbt_cloud_api_v1_assets__asset_id__lineage_dbt_cloud_sync_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DBTCloudSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/source/{source_type}":{"delete":{"tags":["lineage-upload"],"summary":"Delete Lineage Source","description":"Delete all lineage data from a specific source.\n\nRemoves all nodes and edges created by the specified source (dbt, dbt_cloud, manual).\n\nArgs:\n    asset_id: Asset UUID\n    source_type: Source type to delete (dbt, dbt_cloud, manual)\n    ctx: Application context with user and session\n\nReturns:\n    StandardResponse with deletion statistics","operationId":"delete_lineage_source_api_v1_assets__asset_id__lineage_source__source_type__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"source_type","in":"path","required":true,"schema":{"type":"string","title":"Source Type"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/nodes":{"post":{"tags":["lineage-manual"],"summary":"Create Manual Node","description":"Create a manual lineage node.\n\nArgs:\n    asset_id: Asset UUID\n    request: Node creation request\n    ctx: Application context\n\nReturns:\n    StandardResponse with created node data","operationId":"create_manual_node_api_v1_assets__asset_id__lineage_nodes_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNodeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["lineage-manual"],"summary":"List Manual Nodes","description":"List lineage nodes for an asset.\n\nArgs:\n    asset_id: Asset UUID\n    ctx: Application context\n    source_type: Optional filter by source type (manual, dbt, dbt_cloud)\n\nReturns:\n    StandardResponse with list of nodes","operationId":"list_manual_nodes_api_v1_assets__asset_id__lineage_nodes_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/nodes/{unique_id}":{"put":{"tags":["lineage-manual"],"summary":"Update Manual Node","description":"Update a manual lineage node.\n\nOnly nodes with source_type='manual' can be updated.\n\nArgs:\n    asset_id: Asset UUID\n    unique_id: Node unique identifier\n    request: Node update request\n    ctx: Application context\n\nReturns:\n    StandardResponse with updated node data","operationId":"update_manual_node_api_v1_assets__asset_id__lineage_nodes__unique_id__put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lineage-manual"],"summary":"Delete Manual Node","description":"Delete a manual lineage node.\n\nOnly nodes with source_type='manual' can be deleted.\nDeletes cascade to edges.\n\nArgs:\n    asset_id: Asset UUID\n    unique_id: Node unique identifier\n    ctx: Application context\n\nReturns:\n    StandardResponse confirming deletion","operationId":"delete_manual_node_api_v1_assets__asset_id__lineage_nodes__unique_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"unique_id","in":"path","required":true,"schema":{"type":"string","title":"Unique Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/edges":{"post":{"tags":["lineage-manual"],"summary":"Create Manual Edge","description":"Create a manual lineage edge.\n\nArgs:\n    asset_id: Asset UUID\n    request: Edge creation request\n    ctx: Application context\n\nReturns:\n    StandardResponse with created edge data","operationId":"create_manual_edge_api_v1_assets__asset_id__lineage_edges_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEdgeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["lineage-manual"],"summary":"List Manual Edges","description":"List lineage edges for an asset.\n\nArgs:\n    asset_id: Asset UUID\n    ctx: Application context\n    source_type: Optional filter by source type (manual, dbt, dbt_cloud)\n\nReturns:\n    StandardResponse with list of edges","operationId":"list_manual_edges_api_v1_assets__asset_id__lineage_edges_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/lineage/edges/{edge_id}":{"put":{"tags":["lineage-manual"],"summary":"Update Lineage Edge","description":"Update a lineage edge.\n\nArgs:\n    asset_id: Asset UUID\n    edge_id: Edge database ID\n    request: Edge update request\n    ctx: Application context\n\nReturns:\n    StandardResponse with updated edge data","operationId":"update_lineage_edge_api_v1_assets__asset_id__lineage_edges__edge_id__put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"edge_id","in":"path","required":true,"schema":{"type":"integer","title":"Edge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEdgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lineage-manual"],"summary":"Delete Manual Edge","description":"Delete a manual lineage edge.\n\nOnly edges with source_type='manual' can be deleted.\n\nArgs:\n    asset_id: Asset UUID\n    edge_id: Edge database ID\n    ctx: Application context\n\nReturns:\n    StandardResponse confirming deletion","operationId":"delete_manual_edge_api_v1_assets__asset_id__lineage_edges__edge_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"edge_id","in":"path","required":true,"schema":{"type":"integer","title":"Edge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{asset_public_id}/export":{"get":{"tags":["contracts"],"summary":"Export Contract","description":"Export a single asset's config as ODCS v3.1.0 YAML.","operationId":"export_contract_api_v1_contracts__asset_public_id__export_get","parameters":[{"name":"asset_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Public Id"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportMode","description":"Portability mode. `extended` (default) preserves AA-specific config under customProperties.anomalyarmor. `odcs-pure` strips those extensions for maximum interop with other ODCS tools.","default":"extended"},"description":"Portability mode. `extended` (default) preserves AA-specific config under customProperties.anomalyarmor. `odcs-pure` strips those extensions for maximum interop with other ODCS tools."},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domain names to include (e.g. `freshness,validity`). Unknown names return 400.","title":"Include"},"description":"Comma-separated domain names to include (e.g. `freshness,validity`). Unknown names return 400."},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domain names to exclude. Applied after `include`.","title":"Exclude"},"description":"Comma-separated domain names to exclude. Applied after `include`."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/export-jobs":{"post":{"tags":["contracts"],"summary":"Submit Bulk Export Job","description":"Create a bulk-export job. Returns `{\"job_id\": \"<uuid>\"}`.\n\nScope `asset` is rejected here: single-asset exports use the sync\nendpoint and carrying that path through a job would add latency for\nno benefit.","operationId":"submit_bulk_export_job_api_v1_contracts_export_jobs_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkExportJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/export-jobs/{job_id}":{"get":{"tags":["contracts"],"summary":"Get Bulk Export Job Status","description":"Return the job's status + progress. The zip bytes are NOT included\nhere; clients fetch them from the `/download` sub-route once status\nis `completed`. Keeping the status payload small means pollers don't\ntransfer megabytes of artifact on every check.","operationId":"get_bulk_export_job_status_api_v1_contracts_export_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/export-jobs/{job_id}/download":{"get":{"tags":["contracts"],"summary":"Download Bulk Export Zip","description":"Stream the zip artifact for a completed job.\n\nFails with 404 on unknown job, 409 on incomplete jobs (so clients\ncan distinguish \"still running\" from \"doesn't exist\"). The zip is\nbase64-encoded inside result_data today; decode and return the\nraw bytes with `application/zip`.","operationId":"download_bulk_export_zip_api_v1_contracts_export_jobs__job_id__download_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/validate":{"post":{"tags":["contracts"],"summary":"Validate Contract","description":"Validate an ODCS v3.1.0 YAML document without applying it.\n\nAccepts the YAML as the raw request body so the CLI can pipe\n`cat contract.yaml | curl --data-binary @-` without JSON-escaping.","operationId":"validate_contract_api_v1_contracts_validate_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{asset_public_id}/plan":{"post":{"tags":["contracts"],"summary":"Plan Contract","description":"Plan an import: parse YAML + diff against current asset state.\n\nDoes not mutate anything. The request body is raw YAML (same\ncontent-type flexibility as `/validate`). Returns per-domain\nDomainDiff objects plus a count summary.","operationId":"plan_contract_api_v1_contracts__asset_public_id__plan_post","parameters":[{"name":"asset_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Public Id"}},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExportMode","description":"Portability mode. Matches the mode the existing state is compared against. Default `extended` preserves AA-specific fields; `odcs-pure` compares only ODCS-native config.","default":"extended"},"description":"Portability mode. Matches the mode the existing state is compared against. Default `extended` preserves AA-specific fields; `odcs-pure` compares only ODCS-native config."},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domains to include in the diff.","title":"Include"},"description":"Comma-separated domains to include in the diff."},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domains to exclude.","title":"Exclude"},"description":"Comma-separated domains to exclude."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/{asset_public_id}/apply":{"post":{"tags":["contracts"],"summary":"Apply Contract","description":"Apply an ODCS YAML to an asset's live config.\n\nRequest body is raw YAML. Validation failures short-circuit before\nany DB touch; on success, the orchestrator opens a single\ntransaction spanning every selected domain's import step.","operationId":"apply_contract_api_v1_contracts__asset_public_id__apply_post","parameters":[{"name":"asset_public_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Public Id"}},{"name":"prune","in":"query","required":false,"schema":{"type":"boolean","description":"When true, existing state missing from the incoming YAML is deleted. Default false keeps the apply warn-only.","default":false,"title":"Prune"},"description":"When true, existing state missing from the incoming YAML is deleted. Default false keeps the apply warn-only."},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domains to apply (others skipped).","title":"Include"},"description":"Comma-separated domains to apply (others skipped)."},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated domains to skip.","title":"Exclude"},"description":"Comma-separated domains to skip."},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/apply-jobs":{"post":{"tags":["contracts"],"summary":"Submit Bulk Apply Job","description":"Create a bulk-apply job. Returns `{\"job_id\": \"<uuid>\"}`.\n\nThe job runs `orchestrator.apply()` per asset inside a single\nprocess so resource usage scales with batch size; callers chunk\nlarge batches (>~500 assets) into separate jobs.","operationId":"submit_bulk_apply_job_api_v1_contracts_apply_jobs_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkApplyJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/contracts/apply-jobs/{job_id}":{"get":{"tags":["contracts"],"summary":"Get Bulk Apply Job Status","description":"Return the job's status + per-asset results summary.\n\nThe handler writes a compact list of per-asset entries into\n`result_data`: each carries `asset_public_id`, `applied` (domain →\nadded/modified/removed counts), `unsupported_domains`, and an\noptional `error` for failed assets. A UI can render \"Applied 42 of\n50\" plus a per-asset expandable detail directly from this payload.","operationId":"get_bulk_apply_job_status_api_v1_contracts_apply_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/database-types/":{"get":{"tags":["assets"],"summary":"Get available database types","description":"Get list of enabled database types.\n\nSOURCE OF TRUTH: assets_database_types table (is_enabled column).\nData is seeded from database/seed_data.sql\n\nOnly returns database types where is_enabled=True.\n\nReturns:\n    JSONResponse with cache headers (5 minute TTL for static data)","operationId":"get_database_types_api_v1_database_types__get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/schema-discovery":{"post":{"tags":["asset-jobs"],"summary":"Start Asset Discovery","description":"Start asset discovery job for an asset (TECH-194 migrated endpoint).\n\nThis endpoint delegates to the distributed jobs system.\nFor direct workflow submission, use POST /jobs/workflows with workflow_name=WORKFLOW_ASSET_DISCOVERY.\n\nArgs:\n    asset_id: Asset ID (UUID string) to discover schema for\n    ctx: Application context with user and session\n    workflow_service: Workflow service instance\n\nReturns:\n    Job submission response with job_id","operationId":"start_asset_discovery_api_v1_assets__asset_id__schema_discovery_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/active-jobs":{"get":{"tags":["asset-jobs"],"summary":"Get Active Jobs","description":"Get active jobs for an asset (TECH-194 migrated endpoint).\n\nQueries the distributed job system for active jobs related to this asset.\n\nArgs:\n    asset_id: Asset ID (UUID string) to get jobs for\n    ctx: Application context with user and session\n    workflow_service: Workflow service instance\n\nReturns:\n    List of active jobs for the asset","operationId":"get_active_jobs_api_v1_assets__asset_id__active_jobs_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scheduled-checks/":{"get":{"tags":["scheduled-checks"],"summary":"List Scheduled Checks","description":"List scheduled checks, optionally filtered by asset.\n\nReturns scheduled schema checks for the current company.\nIf asset_id is provided, returns only checks for that asset.","operationId":"list_scheduled_checks_api_v1_scheduled_checks__get","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset ID (UUID)","title":"Asset Id"},"description":"Filter by asset ID (UUID)"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["scheduled-checks"],"summary":"Create Scheduled Check","description":"Create a new scheduled check for an asset.","operationId":"create_scheduled_check_api_v1_scheduled_checks__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScheduledCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scheduled-checks/{check_id}":{"put":{"tags":["scheduled-checks"],"summary":"Update Scheduled Check","description":"Update an existing scheduled check.","operationId":"update_scheduled_check_api_v1_scheduled_checks__check_id__put","parameters":[{"name":"check_id","in":"path","required":true,"schema":{"type":"integer","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScheduledCheckRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["scheduled-checks"],"summary":"Delete Scheduled Check","description":"Delete a scheduled check.","operationId":"delete_scheduled_check_api_v1_scheduled_checks__check_id__delete","parameters":[{"name":"check_id","in":"path","required":true,"schema":{"type":"integer","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Intelligence Summary","description":"Get intelligence summary for an asset.","operationId":"get_intelligence_summary_api_v1_intelligence_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/insights":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Insights","description":"Get AI-generated insights for an asset with pagination.","operationId":"get_insights_api_v1_intelligence_insights_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by object type","title":"Object Type"},"description":"Filter by object type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum results to return","default":50,"title":"Limit"},"description":"Maximum results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/analyze":{"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Trigger Analysis","description":"Trigger intelligence analysis for an asset.","operationId":"trigger_analysis_api_v1_intelligence_analyze_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelligenceAnalysisRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/estimate-cost":{"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Estimate Analysis Cost","description":"Estimate the cost of intelligence analysis before running it.\n\nTECH-635: Provides accurate cost estimates using actual LLM model pricing.\nHelps users understand costs before committing to expensive operations.\n\nReturns:\n    Cost estimate with breakdown, strategy comparison, and recommendations","operationId":"estimate_analysis_cost_api_v1_intelligence_estimate_cost_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/search":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Search Intelligence","description":"Search intelligence data.\n\nTECH-625: Updated to use SQL-based pagination instead of in-memory slicing.","operationId":"search_intelligence_api_v1_intelligence_search_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results to return","default":20,"title":"Limit"},"description":"Number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"object_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Type"}},{"name":"search_query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Query"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/models":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Model Configs","description":"Get available LLM model configurations.","operationId":"get_model_configs_api_v1_intelligence_models_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by provider","title":"Provider"},"description":"Filter by provider"},{"name":"is_active","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by active status","default":true,"title":"Is Active"},"description":"Filter by active status"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/analytics":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Intelligence Analytics","description":"Get intelligence analytics and metrics.","operationId":"get_intelligence_analytics_api_v1_intelligence_analytics_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days for analytics","default":30,"title":"Days"},"description":"Number of days for analytics"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/sessions":{"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Create Qa Session","description":"Create a new Q&A session.\n\nTECH-570: Now supports two session scopes:\n- asset: Traditional single-database Q&A (asset_id required)\n- company: Cross-database Q&A across all company databases (asset_id must be None)\n\nArgs:\n    asset_id: Asset UUID from query parameter (required for asset scope)\n    request: Session creation details including scope\n    current_user: Authenticated user from dependency\n    qa_service: Q&A service instance\n\nReturns:\n    StandardResponse with created session data","operationId":"create_qa_session_api_v1_intelligence_qa_sessions_post","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Asset UUID for asset-scoped sessions (required unless scope=company)","title":"Asset Id"},"description":"Asset UUID for asset-scoped sessions (required unless scope=company)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QASessionCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"List Qa Sessions","description":"List all Q&A sessions for an asset.\n\nReturns sessions for the current company only (company isolation).","operationId":"list_qa_sessions_api_v1_intelligence_qa_sessions_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID to filter sessions","title":"Asset Id"},"description":"Asset UUID to filter sessions"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/company-sessions":{"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Create Company Qa Session","description":"Create a new company-scoped Q&A session for cross-database queries.\n\nTECH-570: Dedicated endpoint for company-scoped sessions that search across\nall company databases without requiring an asset_id.\n\nArgs:\n    request: Session creation details\n    current_user: Authenticated user from dependency\n    qa_service: Q&A service instance\n\nReturns:\n    StandardResponse with created session data","operationId":"create_company_qa_session_api_v1_intelligence_qa_company_sessions_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QACompanySessionCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"List Company Qa Sessions","description":"List all company-scoped Q&A sessions (TECH-570).\n\nReturns company-scoped sessions that search across all databases.\nGracefully returns empty list if Q&A tables don't exist.","operationId":"list_company_qa_sessions_api_v1_intelligence_qa_company_sessions_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":50,"title":"Limit"},"description":"Results per page"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/sessions/{session_id}":{"delete":{"tags":["intelligence-ddd","Intelligence"],"summary":"Delete Qa Session","description":"Delete a Q&A session (soft delete).\n\nTECH-570: asset_id is now optional - company-scoped sessions don't require it.\n\nMarks session and all messages as deleted.\nReturns 404 if session not found or access denied.","operationId":"delete_qa_session_api_v1_intelligence_qa_sessions__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","description":"Session ID","title":"Session Id"},"description":"Session ID"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Asset UUID for validation (optional for company-scoped sessions)","title":"Asset Id"},"description":"Asset UUID for validation (optional for company-scoped sessions)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["intelligence-ddd","Intelligence"],"summary":"Update Qa Session","description":"Update a Q&A session (e.g., rename).\n\nOnly the session owner can update. asset_id is optional for company-scoped sessions.\n\nReturns:\n    Updated session data","operationId":"update_qa_session_api_v1_intelligence_qa_sessions__session_id__patch","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","description":"Session ID","title":"Session Id"},"description":"Session ID"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Asset UUID for validation (optional for company-scoped sessions)","title":"Asset Id"},"description":"Asset UUID for validation (optional for company-scoped sessions)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QASessionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/sessions/{session_id}/messages":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Qa Messages","description":"Get all messages for a Q&A session.\n\nTECH-570: asset_id is now optional - company-scoped sessions don't require it.\n\nIncludes questions, answers, and job status.\nReturns 404 if session not found or access denied.","operationId":"get_qa_messages_api_v1_intelligence_qa_sessions__session_id__messages_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","description":"Session ID","title":"Session Id"},"description":"Session ID"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Asset UUID for validation (optional for company-scoped sessions)","title":"Asset Id"},"description":"Asset UUID for validation (optional for company-scoped sessions)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max messages to return","default":50,"title":"Limit"},"description":"Max messages to return"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Ask Qa Question","description":"Submit a question to a Q&A session.\n\nTECH-570: asset_id is now optional - company-scoped sessions don't require it.\n\nReturns 202 Accepted with job information.\nQuestion is processed asynchronously via distributed job system.\n\nNote: Error handling uses string matching to distinguish error types (service\nlayer limitation). Consider custom exception types for production robustness.","operationId":"ask_qa_question_api_v1_intelligence_qa_sessions__session_id__messages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","description":"Session ID","title":"Session Id"},"description":"Session ID"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Asset UUID for validation (optional for company-scoped sessions)","title":"Asset Id"},"description":"Asset UUID for validation (optional for company-scoped sessions)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QAQuestionRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/starter-questions":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Starter Questions","description":"Get suggested starter questions for an asset.\n\nReturns AI-generated questions based on schema analysis.","operationId":"get_starter_questions_api_v1_intelligence_qa_starter_questions_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/qa/{asset_id}/ask":{"post":{"tags":["intelligence-ddd","Intelligence"],"summary":"Ask Enhanced Qa Question","description":"Ask a question using enhanced Q&A with Knowledge Base RAG.\n\nThis endpoint uses the generated markdown knowledge base as context\nfor more accurate and comprehensive answers. It supports:\n- Single asset queries\n- Multi-asset context aggregation (cross_asset_mode)\n- Token budget management\n- Rich, contextual answers based on full intelligence\n\nReturns:\n    StandardResponse with answer, confidence, sources, and domains used","operationId":"ask_enhanced_qa_question_api_v1_intelligence_qa__asset_id__ask_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID to query","title":"Asset Id"},"description":"Asset UUID to query"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedQARequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/unanalyzed":{"get":{"tags":["intelligence-ddd","Intelligence"],"summary":"Get Unanalyzed Objects","description":"Get tables and columns that don't have intelligence records.\n\nTECH-672: Returns unanalyzed objects for UI indicators and bulk generation.\nObjects are identified by comparing discovered schema with intelligence records.\n\nReturns:\n    List of unanalyzed tables and columns with their identifiers.","operationId":"get_unanalyzed_objects_api_v1_intelligence_unanalyzed_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/{asset_id}/reset":{"delete":{"tags":["intelligence-ddd","Intelligence"],"summary":"Reset Intelligence","description":"Reset all intelligence data for an asset.\n\nTECH-602: Enables full reset of intelligence analysis for re-generation.\nDeletes all stored intelligence entries and optionally Q&A history.\n\nArgs:\n    asset_id: Asset UUID to reset\n    request: Options for what to delete\n\nReturns:\n    StandardResponse with deletion counts","operationId":"reset_intelligence_api_v1_intelligence__asset_id__reset_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID","title":"Asset Id"},"description":"Asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetIntelligenceRequest","default":{"delete_qa_history":true}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Prompts","description":"Get all prompts with optional filtering and pagination.","operationId":"get_prompts_api_v1_intelligence_prompts_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum items to return","default":50,"title":"Limit"},"description":"Maximum items to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Create Prompt","description":"Create a new prompt.","operationId":"create_prompt_api_v1_intelligence_prompts_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/categories":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Categories","description":"Get all prompt categories with counts.","operationId":"get_categories_api_v1_intelligence_prompts_categories_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/active/{category}":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Active Prompt","description":"Get the active default prompt for a category (public endpoint for services).","operationId":"get_active_prompt_api_v1_intelligence_prompts_active__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"subcategory","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Subcategory filter","title":"Subcategory"},"description":"Subcategory filter"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/statistics":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Usage Statistics","description":"Get usage statistics for prompts.","operationId":"get_usage_statistics_api_v1_intelligence_prompts_statistics_get","parameters":[{"name":"prompt_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific prompt ID","title":"Prompt Id"},"description":"Specific prompt ID"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to analyze","default":30,"title":"Days"},"description":"Number of days to analyze"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/usage-logs":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Usage Logs","description":"Get recent usage logs for prompts.\n\nTECH-662: Returns individual log entries for the admin usage logs tab.","operationId":"get_usage_logs_api_v1_intelligence_prompts_usage_logs_get","parameters":[{"name":"prompt_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by prompt key","title":"Prompt Key"},"description":"Filter by prompt key"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of logs","default":100,"title":"Limit"},"description":"Maximum number of logs"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/files":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"List File Prompts","description":"List all file-based prompts.\n\nTECH-660: Returns prompts loaded from backend/prompts/ directory.","operationId":"list_file_prompts_api_v1_intelligence_prompts_files_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/files/{category}/{subcategory}":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get File Prompt","description":"Get a specific file-based prompt with its content.\n\nTECH-660: Reads prompt content from the markdown file.","operationId":"get_file_prompt_api_v1_intelligence_prompts_files__category___subcategory__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","description":"Prompt category (e.g., 'intelligence')","title":"Category"},"description":"Prompt category (e.g., 'intelligence')"},{"name":"subcategory","in":"path","required":true,"schema":{"type":"string","description":"Prompt subcategory (e.g., 'table_analysis')","title":"Subcategory"},"description":"Prompt subcategory (e.g., 'table_analysis')"},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific version (default: active)","title":"Version"},"description":"Specific version (default: active)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/files/{category}/{subcategory}/active":{"put":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Set Active Version","description":"Set the active version for a file-based prompt.\n\nTECH-660: Updates the active.yaml manifest to switch versions.","operationId":"set_active_version_api_v1_intelligence_prompts_files__category___subcategory__active_put","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","description":"Prompt category","title":"Category"},"description":"Prompt category"},{"name":"subcategory","in":"path","required":true,"schema":{"type":"string","description":"Prompt subcategory","title":"Subcategory"},"description":"Prompt subcategory"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetActiveVersionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/files/reload":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Reload File Prompts","description":"Reload all file-based prompts from disk.\n\nTECH-660: Useful during development to pick up file changes.","operationId":"reload_file_prompts_api_v1_intelligence_prompts_files_reload_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/{prompt_id}":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Prompt","description":"Get a specific prompt by ID.","operationId":"get_prompt_api_v1_intelligence_prompts__prompt_id__get","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Update Prompt","description":"Update an existing prompt.","operationId":"update_prompt_api_v1_intelligence_prompts__prompt_id__put","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Delete Prompt","description":"Archive a prompt (soft delete).","operationId":"delete_prompt_api_v1_intelligence_prompts__prompt_id__delete","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/{prompt_id}/history":{"get":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Get Prompt History","description":"Get version history for a prompt.","operationId":"get_prompt_history_api_v1_intelligence_prompts__prompt_id__history_get","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum history entries","default":50,"title":"Limit"},"description":"Maximum history entries"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/{prompt_id}/duplicate":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Duplicate Prompt","description":"Create a copy of an existing prompt.","operationId":"duplicate_prompt_api_v1_intelligence_prompts__prompt_id__duplicate_post","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Request body with new_name","title":"Data"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/{prompt_id}/tests":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Test Prompt","description":"Test a prompt with sample inputs.","operationId":"test_prompt_api_v1_intelligence_prompts__prompt_id__tests_post","parameters":[{"name":"prompt_id","in":"path","required":true,"schema":{"type":"string","title":"Prompt Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptTest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/track-usage":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Track Usage","description":"Track usage of a prompt (called by services after using a prompt).","operationId":"track_usage_api_v1_intelligence_prompts_track_usage_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageTracking"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/format":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Format Prompt","description":"Format a prompt template with variables (public endpoint for services).","operationId":"format_prompt_api_v1_intelligence_prompts_format_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_format_prompt_api_v1_intelligence_prompts_format_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/prompts/unsaved-tests":{"post":{"tags":["prompts-ddd","Admin - Prompts"],"summary":"Test Unsaved Prompt","description":"Test an unsaved prompt with variables (for prompt editor).","operationId":"test_unsaved_prompt_api_v1_intelligence_prompts_unsaved_tests_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_test_unsaved_prompt_api_v1_intelligence_prompts_unsaved_tests_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/briefings/today":{"get":{"tags":["briefings","Briefings"],"summary":"Get Today Briefing","description":"Get today's briefing. Generates on-demand if not yet available.","operationId":"get_today_briefing_api_v1_briefings_today_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/messages":{"post":{"tags":["agent","Agent"],"summary":"Send Agent Message","description":"Send a message to the agent and get a response.\n\nIf session_id is None a new agent session is created automatically.\nThe agent loop runs synchronously and the full result is returned.","operationId":"send_agent_message_api_v1_intelligence_agent_messages_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/messages/stream":{"post":{"tags":["agent","Agent"],"summary":"Stream Agent Message","description":"Send a message to the agent and stream events via SSE.\n\nEvents are flushed as they happen, so the frontend can show\ntool execution progress in real time instead of waiting for\nthe full response.\n\nEvent types: text, tool_start, tool_result, error, done\n\nNOTE: ctx.session (from get_async_session via Depends) stays alive for the\nfull duration of the SSE stream. FastAPI/Starlette only runs dependency\ncleanup after the streaming response body is fully consumed.","operationId":"stream_agent_message_api_v1_intelligence_agent_messages_stream_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/sessions/{session_uuid}/cancel":{"post":{"tags":["agent","Agent"],"summary":"Cancel Agent Stream","description":"Cancel any in-progress streaming messages for a session.\n\nCalled by the frontend when the user clicks the stop button.\nMarks 'streaming' messages as 'cancelled' so they don't stay in limbo.","operationId":"cancel_agent_stream_api_v1_intelligence_agent_sessions__session_uuid__cancel_post","parameters":[{"name":"session_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Uuid"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/sessions":{"get":{"tags":["agent","Agent"],"summary":"List Agent Sessions","description":"List agent sessions for the current user.","operationId":"list_agent_sessions_api_v1_intelligence_agent_sessions_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/sessions/{session_id}/messages":{"get":{"tags":["agent","Agent"],"summary":"Get Agent Session Messages","description":"Get message history for an agent session.","operationId":"get_agent_session_messages_api_v1_intelligence_agent_sessions__session_id__messages_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Session UUID","title":"Session Id"},"description":"Session UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/sessions/{session_id}":{"delete":{"tags":["agent","Agent"],"summary":"Delete Agent Session","description":"Soft delete an agent session.","operationId":"delete_agent_session_api_v1_intelligence_agent_sessions__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Session UUID","title":"Session Id"},"description":"Session UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["agent","Agent"],"summary":"Update Agent Session","description":"Update an agent session (rename and/or pin).","operationId":"update_agent_session_api_v1_intelligence_agent_sessions__session_id__patch","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Session UUID","title":"Session Id"},"description":"Session UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/intelligence/agent/sessions/{session_id}/messages/{message_id}/feedback":{"post":{"tags":["agent","Agent"],"summary":"Set Agent Message Feedback","description":"Set feedback on an agent message.","operationId":"set_agent_message_feedback_api_v1_intelligence_agent_sessions__session_id__messages__message_id__feedback_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Session UUID","title":"Session Id"},"description":"Session UUID"},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","description":"Message UUID","title":"Message Id"},"description":"Message UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/apply":{"post":{"tags":["tags"],"summary":"Apply Tags","description":"Apply tags to an asset with review workflow.\n\nThis endpoint intelligently routes tags based on category:\n- AI_DISCOVERED tags: Added to review queue for approval\n- Other tags: Applied immediately\n\nThe UnifiedTagService (in intelligence domain) handles both review queue\nmanagement and direct tag application with proper audit tracking.","operationId":"apply_tags_api_v1_assets__asset_id__tags_apply_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__tags__api__v1__tags__ApplyTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags":{"get":{"tags":["tags"],"summary":"Get Asset Tags","description":"Get all tags for an asset with enhanced four-category system.\n\nReturns system-generated tags with category information, confidence scores,\nand user decisions.\n\nSource filter options:\n- 'user': Only tags created by users\n- 'ai': Only tags generated by AI/system (excludes user-created)\n\nDetection method options:\n- pattern_match: Rule-based pattern detection\n- llm_analysis: AI/LLM-based generation\n- user_created: Manually created by user\n- bulk_import: Imported from external source\n- derived: Derived from intelligence analysis\n- rollup: Propagated from child objects","operationId":"get_asset_tags_api_v1_assets__asset_id__tags_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"tag_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category: compliance, business, customer_impact, ai_discovered","title":"Tag Category"},"description":"Filter by category: compliance, business, customer_impact, ai_discovered"},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"description":"Minimum confidence score","title":"Min Confidence"},"description":"Minimum confidence score"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag source: 'user' for user-created tags, 'ai' for AI-generated tags","title":"Source"},"description":"Filter by tag source: 'user' for user-created tags, 'ai' for AI-generated tags"},{"name":"detection_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by detection method: pattern_match, llm_analysis, user_created, bulk_import, derived, rollup","title":"Detection Method"},"description":"Filter by detection method: pattern_match, llm_analysis, user_created, bulk_import, derived, rollup"},{"name":"include_schemas","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of schemas to include","title":"Include Schemas"},"description":"Comma-separated list of schemas to include"},{"name":"exclude_schemas","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of schemas to exclude","title":"Exclude Schemas"},"description":"Comma-separated list of schemas to exclude"},{"name":"include_tables","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of tables to include","title":"Include Tables"},"description":"Comma-separated list of tables to include"},{"name":"exclude_tables","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of table patterns to exclude","title":"Exclude Tables"},"description":"Comma-separated list of table patterns to exclude"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tags"],"summary":"Delete Asset Tags","description":"Delete tags for an asset.\n\nTECH-602: Bulk delete system-generated tags with optional category filter.\nUsed for re-generation workflows where users want to clear old tags.\n\nArgs:\n    asset_id: Asset UUID\n    category: Optional category filter (compliance, business, customer_impact, ai_discovered)\n    preserve_user_tags: If True (default), keep manually-created tags\n\nReturns:\n    Count of deleted tags","operationId":"delete_asset_tags_api_v1_assets__asset_id__tags_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Delete only this category","title":"Category"},"description":"Delete only this category"},{"name":"preserve_user_tags","in":"query","required":false,"schema":{"type":"boolean","description":"Keep manually-created tags","default":true,"title":"Preserve User Tags"},"description":"Keep manually-created tags"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/statistics":{"get":{"tags":["tags"],"summary":"Get Tag Statistics","description":"Get comprehensive tag statistics for an asset.","operationId":"get_tag_statistics_api_v1_assets__asset_id__tags_statistics_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/review-queue":{"get":{"tags":["tags"],"summary":"Get Review Queue","description":"Get dynamic tags pending review.","operationId":"get_review_queue_api_v1_assets__asset_id__tags_review_queue_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","default":"pending","title":"Status"},"description":"Filter by status"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/review":{"patch":{"tags":["tags"],"summary":"Review Dynamic Tag","description":"Review and approve/reject/modify a dynamic tag.","operationId":"review_dynamic_tag_api_v1_assets__asset_id__tags_review_patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagReviewDecision"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/decisions":{"post":{"tags":["tags"],"summary":"Process Tag Decisions","description":"Process bulk tag decisions (accept/reject) for an asset.","operationId":"process_tag_decisions_api_v1_assets__asset_id__tags_decisions_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDecisionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/generate":{"post":{"tags":["tags"],"summary":"Generate Tags","description":"Generate tags for an asset using distributed jobs.\n\nThis triggers AI-powered tag discovery and analysis.","operationId":"generate_tags_api_v1_assets__asset_id__tags_generate_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"scope","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TagGenerationScope","default":"full"}},{"name":"include_dynamic","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Dynamic"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/bulk-apply":{"post":{"tags":["tags"],"summary":"Bulk Apply Tags","description":"Apply tags to multiple objects in bulk with optional category.","operationId":"bulk_apply_tags_api_v1_assets__asset_id__tags_bulk_apply_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category for all tags","default":"business","title":"Category"},"description":"Category for all tags"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_bulk_apply_tags_api_v1_assets__asset_id__tags_bulk_apply_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/pending-review":{"get":{"tags":["tags"],"summary":"Get Pending Review Tags","description":"Get all tags awaiting review for an asset.","operationId":"get_pending_review_tags_api_v1_assets__asset_id__tags_pending_review_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/preferences":{"get":{"tags":["tags"],"summary":"Get Tag Preferences","description":"Get user's tag precision preference for an asset.","operationId":"get_tag_preferences_api_v1_assets__asset_id__tags_preferences_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["tags"],"summary":"Update Tag Preferences","description":"Update user's tag precision preference for an asset.","operationId":"update_tag_preferences_api_v1_assets__asset_id__tags_preferences_put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagPreferenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/custom":{"post":{"tags":["tags"],"summary":"Create Custom Tag","description":"Create a custom user tag for a database object.","operationId":"create_custom_tag_api_v1_assets__asset_id__tags_custom_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomTagCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/custom/{tag_id}":{"delete":{"tags":["tags"],"summary":"Delete Custom Tag","description":"Delete a custom user tag.","operationId":"delete_custom_tag_api_v1_assets__asset_id__tags_custom__tag_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/detect-pii":{"post":{"tags":["tags"],"summary":"Detect Pii Columns","description":"Auto-detect PII columns and optionally create tags.","operationId":"detect_pii_columns_api_v1_assets__asset_id__tags_detect_pii_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PIIDetectionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/ai-tag-status":{"get":{"tags":["tags"],"summary":"Get Ai Tag Generation Status","description":"Get AI tag generation status - whether intelligence data is available.","operationId":"get_ai_tag_generation_status_api_v1_assets__asset_id__tags_ai_tag_status_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/count":{"get":{"tags":["tags"],"summary":"Get Tag Count","description":"Get tag counts for an asset.\n\nTECH-602: Preview count before bulk delete operations.\n\nArgs:\n    asset_id: Asset UUID\n    category: Optional category filter\n\nReturns:\n    Tag counts by type (system_tags, user_tags, total)","operationId":"get_tag_count_api_v1_assets__asset_id__tags_count_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/available":{"get":{"tags":["tags"],"summary":"Get Available Tags","description":"Get available tags for autocomplete in the Add Tag dialog.\n\nTECH-617: Returns distinct tag names from both user and system tags\nfor autocomplete suggestions when creating custom tags.\n\nThe response includes:\n- tag_name: The tag identifier (e.g., \"financial_reporting\")\n- category: The tag category (e.g., \"business\", \"compliance\")\n- usage_count: How many times this tag has been used\n- source: Whether the tag originated from \"user\" or \"system\"\n\nArgs:\n    asset_id: Asset UUID\n\nReturns:\n    List of available tags sorted by usage count","operationId":"get_available_tags_api_v1_assets__asset_id__tags_available_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/coverage":{"get":{"tags":["tags"],"summary":"Get Tag Coverage","description":"Get tag coverage statistics for an asset.\n\nTECH-673: Shows what percentage of tables have been tagged, helping users\nunderstand when incremental tagging is beneficial.\n\nReturns:\n    StandardResponse with data matching TagCoverageResponse schema:\n    - total_tables: Total number of active tables\n    - tagged_tables: Number of tables with at least one tag\n    - untagged_tables: Number of tables without tags\n    - coverage_percent: Percentage of tables tagged","operationId":"get_tag_coverage_api_v1_assets__asset_id__tags_coverage_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/untagged":{"get":{"tags":["tags"],"summary":"Get Untagged Tables","description":"Get list of tables that have no tags yet.\n\nTECH-673: Identifies tables that would be processed by incremental tag generation.\n\nReturns:\n    List of table paths (schema.table format) that have no tags","operationId":"get_untagged_tables_api_v1_assets__asset_id__tags_untagged_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/tags/generate-incremental":{"post":{"tags":["tags"],"summary":"Generate Tags Incremental","description":"Generate tags only for untagged tables.\n\nTECH-673: Incremental tag generation that skips already-tagged tables,\nmaking it efficient for processing new tables after schema changes.","operationId":"generate_tags_incremental_api_v1_assets__asset_id__tags_generate_incremental_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"include_dynamic","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Dynamic"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/categories":{"get":{"tags":["tags"],"summary":"Get Tag Categories","description":"Get all tag categories with their descriptions.\n\nReturns the four-category system structure and available tags.","operationId":"get_tag_categories_api_v1_tags_categories_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/global-statistics":{"get":{"tags":["tags-global","tags-global"],"summary":"Get Global Tag Statistics","description":"Get tag statistics for a specific asset.","operationId":"get_global_tag_statistics_api_v1_tags_global_statistics_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/coverage-metrics":{"get":{"tags":["tags-global","tags-global"],"summary":"Get Coverage Metrics","description":"Get tag coverage funnel metrics and category distribution for a specific asset.","operationId":"get_coverage_metrics_api_v1_tags_coverage_metrics_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/export":{"get":{"tags":["tags-global","tags-global"],"summary":"Export Tags","description":"Export tags for an asset as a CSV file.\n\nReturns a streaming CSV download containing individual tag rows with\ntable name, column name, tag details, and review status.\n\nArgs:\n    asset_id: Asset UUID to export tags for\n    status: Optional decision status filter (accepted, rejected, pending)\n    ctx: Application context with session and company_id\n\nReturns:\n    StreamingResponse with CSV attachment","operationId":"export_tags_api_v1_tags_export_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Asset UUID to export tags for","title":"Asset Id"},"description":"Asset UUID to export tags for"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by decision status (accepted, rejected, pending)","title":"Status"},"description":"Filter by decision status (accepted, rejected, pending)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/{tag_name}/locations":{"get":{"tags":["tags-global","tags-global"],"summary":"Get Tag Locations","description":"Get all locations where a tag is applied on a specific asset.","operationId":"get_tag_locations_api_v1_tags__tag_name__locations_get","parameters":[{"name":"tag_name","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Tag name to search for","title":"Tag Name"},"description":"Tag name to search for"},{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/quality-metrics":{"get":{"tags":["tags-global","tags-global"],"summary":"Get Tag Quality Metrics","description":"Get tag quality metrics for LLM prompt iteration.","operationId":"get_tag_quality_metrics_api_v1_tags_quality_metrics_get","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Optional: filter by asset UUID","title":"Asset Id"},"description":"Optional: filter by asset UUID"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tags/refresh-statistics":{"post":{"tags":["tags-global","tags-global"],"summary":"Refresh Statistics Cache","description":"Manually trigger statistics refresh.","operationId":"refresh_statistics_cache_api_v1_tags_refresh_statistics_post","parameters":[{"name":"tag_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tag name to refresh","title":"Tag Name"},"description":"Optional tag name to refresh"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/workflows":{"post":{"tags":["jobs"],"summary":"Submit Workflow","description":"Submit a new workflow for execution.\n\nArgs:\n    request: Workflow submission request\n    ctx: Application context with user and session\n    workflow_service: Workflow service dependency\n\nReturns:\n    StandardResponse: Job ID and status\n\nRaises:\n    ValidationError: If workflow submission fails validation","operationId":"submit_workflow_api_v1_jobs_workflows_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowSubmissionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job Status","description":"Get status of a specific job.\n\nArgs:\n    job_id: Job identifier (UUID)\n    ctx: Application context with user and session\n    job_adapter: Job adapter dependency\n    asset_provider: Asset provider dependency\n\nReturns:\n    StandardResponse: Job status details\n\nRaises:\n    NotFoundError: If job not found or access denied","operationId":"get_job_status_api_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDetailEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Cancel Job","description":"Cancel a job.\n\nArgs:\n    job_id: Job identifier (UUID)\n    ctx: Application context with user and session\n    job_adapter: Job adapter dependency\n\nReturns:\n    StandardResponse: Cancellation result\n\nRaises:\n    NotFoundError: If job not found or cannot be cancelled","operationId":"cancel_job_api_v1_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/":{"get":{"tags":["jobs"],"summary":"List Jobs","description":"List jobs for the current user's company with efficient pagination.\n\nThis endpoint has been optimized for performance as part of TECH-100.\nIt now uses efficient count queries instead of loading all jobs into memory.\n\nArgs:\n    ctx: Application context with user and session\n    job_adapter: Job adapter dependency\n    asset_provider: Asset provider dependency\n    pagination: Pagination parameters (limit, offset)\n    status: Optional status filter\n    workflow_name: Optional workflow name filter\n    sort_by: Field to sort by\n    sort_order: Sort order (ASC or DESC)\n\nReturns:\n    StandardResponse: List of jobs with pagination metadata","operationId":"list_jobs_api_v1_jobs__get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by job status","title":"Status"},"description":"Filter by job status"},{"name":"workflow_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by workflow name","title":"Workflow Name"},"description":"Filter by workflow name"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(created_at|status|workflow_name|priority)$","default":"created_at","title":"Sort By"}},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","pattern":"^(ASC|DESC)$","default":"DESC","title":"Sort Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/system/status":{"get":{"tags":["jobs"],"summary":"Get System Status","description":"Get job system status.\n\nArgs:\n    ctx: Application context with user and session\n    workflow_service: Workflow service dependency\n    job_adapter: Job adapter dependency\n\nReturns:\n    StandardResponse: System status information","operationId":"get_system_status_api_v1_jobs_system_status_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/steps":{"get":{"tags":["jobs"],"summary":"Get Job Steps","description":"Get all steps/phases for a specific job.\n\nArgs:\n    job_id: Job identifier (UUID)\n    ctx: Application context with user and session\n\nReturns:\n    StandardResponse: List of job steps with timing and progress information\n\nRaises:\n    NotFoundError: If job not found\n    ForbiddenError: If access denied","operationId":"get_job_steps_api_v1_jobs__job_id__steps_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/recent/activity":{"get":{"tags":["jobs"],"summary":"Get Recent Activity","description":"Get recent job activity for the homepage activity feed.\n\nReturns the most recent completed or failed jobs for the current company,\nwith asset names and human-readable summaries.\n\nArgs:\n    ctx: Application context with user and session\n    job_adapter: Job adapter dependency\n    asset_provider: Asset provider dependency\n    limit: Maximum number of activities (1-50, default 10)\n\nReturns:\n    StandardResponse: List of recent activity items","operationId":"get_recent_activity_api_v1_jobs_recent_activity_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of activities to return","default":10,"title":"Limit"},"description":"Maximum number of activities to return"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/job-events/stream/{job_id}":{"get":{"tags":["job-events"],"summary":"Stream Job Events","description":"Stream job status updates via Server-Sent Events.\n\nProvides real-time job status updates with automatic reconnection support.\nAuthentication is via query parameter since EventSource doesn't support headers.\n\nArgs:\n    request: FastAPI request object\n    job_id: Job ID to monitor\n    token: Authentication token (JWT)\n\nReturns:\n    EventSourceResponse with job updates","operationId":"stream_job_events_api_v1_job_events_stream__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Authentication token (JWT)","title":"Token"},"description":"Authentication token (JWT)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Stream Job Events Api V1 Job Events Stream  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/job-events/homepage/stream":{"get":{"tags":["job-events"],"summary":"Stream Homepage Events","description":"Stream homepage refresh events via Server-Sent Events.\n\nSubscribes to Redis channel: homepage:refresh:{company_id}\nPushes events to client when jobs complete/fail/start for instant UI updates.\n\nAuthentication is via query parameter since EventSource doesn't support headers.\n\nArgs:\n    request: FastAPI request object\n    token: Authentication token (JWT)\n\nReturns:\n    EventSourceResponse with homepage refresh events","operationId":"stream_homepage_events_api_v1_job_events_homepage_stream_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Authentication token (JWT)","title":"Token"},"description":"Authentication token (JWT)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Stream Homepage Events Api V1 Job Events Homepage Stream Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/snapshots":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Capture Schema Snapshot","description":"Capture a new schema snapshot for an asset.","operationId":"capture_schema_snapshot_api_v1_schema_drift_assets__asset_id__snapshots_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"snapshot_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Name"}},{"name":"description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Asset Snapshots","description":"Get schema snapshots for an asset.","operationId":"get_asset_snapshots_api_v1_schema_drift_assets__asset_id__snapshots_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/detect-changes":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Detect Schema Changes","description":"Detect schema changes for an asset.","operationId":"detect_schema_changes_api_v1_schema_drift_assets__asset_id__detect_changes_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"baseline_snapshot_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Baseline Snapshot Id"}},{"name":"auto_capture_current","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Auto Capture Current"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/changes":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Asset Changes","description":"Get schema change events for an asset.\n\nQuery Parameters:\n    - limit: Maximum number of results (1-100, default 50)\n    - offset: Pagination offset (default 0)\n    - days_back: Filter to changes in last N days (1-365, optional)\n    - change_type: Filter by specific change type (optional)\n    - breaking_only: Show only breaking changes (default false)","operationId":"get_asset_changes_api_v1_schema_drift_assets__asset_id__changes_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"days_back","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":365,"minimum":1},{"type":"null"}],"description":"Filter changes from last N days","title":"Days Back"},"description":"Filter changes from last N days"},{"name":"change_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Type"}},{"name":"breaking_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Breaking Only"}},{"name":"table_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by table name (schema-qualified, e.g. 'public.users')","title":"Table Name"},"description":"Filter by table name (schema-qualified, e.g. 'public.users')"},{"name":"column_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by column name","title":"Column Name"},"description":"Filter by column name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schema-drift","schema-drift"],"summary":"Delete All Change Events","description":"Delete all schema change events for an asset (reset timeline).","operationId":"delete_all_change_events_api_v1_schema_drift_assets__asset_id__changes_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/analyze-impact":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Analyze Change Impact","description":"Analyze impact of schema changes.","operationId":"analyze_change_impact_api_v1_schema_drift_assets__asset_id__analyze_impact_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string","format":"uuid"},"title":"Change Event Ids"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/evolution-summary":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Schema Evolution Summary","description":"Get comprehensive schema evolution summary for an asset.","operationId":"get_schema_evolution_summary_api_v1_schema_drift_assets__asset_id__evolution_summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/versions":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Create Schema Version","description":"Create a new schema version.","operationId":"create_schema_version_api_v1_schema_drift_assets__asset_id__versions_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"snapshot_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Snapshot Id"}},{"name":"version_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Number"}},{"name":"version_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version Name"}},{"name":"description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},{"name":"is_major_version","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Is Major Version"}},{"name":"is_breaking_change","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Is Breaking Change"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Asset Versions","description":"Get schema versions for an asset.","operationId":"get_asset_versions_api_v1_schema_drift_assets__asset_id__versions_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/snapshots/{snapshot_id}":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Snapshot Details","description":"Get detailed information about a specific snapshot.","operationId":"get_snapshot_details_api_v1_schema_drift_assets__asset_id__snapshots__snapshot_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Snapshot Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/comparisons":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Asset Comparisons","description":"Get schema comparisons for an asset.","operationId":"get_asset_comparisons_api_v1_schema_drift_assets__asset_id__comparisons_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/changes/{change_id}":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Change Details","description":"Get detailed information about a specific change event.","operationId":"get_change_details_api_v1_schema_drift_assets__asset_id__changes__change_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"change_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Change Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schema-drift","schema-drift"],"summary":"Delete Change Event","description":"Delete a change event (admin operation).","operationId":"delete_change_event_api_v1_schema_drift_assets__asset_id__changes__change_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"change_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Change Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/statistics":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Asset Statistics","description":"Get schema drift statistics for an asset.","operationId":"get_asset_statistics_api_v1_schema_drift_assets__asset_id__statistics_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/compare-snapshots":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Compare Snapshots","description":"Compare two specific snapshots.","operationId":"compare_snapshots_api_v1_schema_drift_assets__asset_id__compare_snapshots_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"baseline_snapshot_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Baseline Snapshot Id"}},{"name":"current_snapshot_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Current Snapshot Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/changes/{change_id}/alert-state":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Update Change Alert State","description":"Update user response to a schema change event (dismiss/acknowledge).","operationId":"update_change_alert_state_api_v1_schema_drift_changes__change_id__alert_state_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Change Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaChangeResponseUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schema-drift","schema-drift"],"summary":"Remove Change Alert State","description":"Remove user alert state (restore to default).","operationId":"remove_change_alert_state_api_v1_schema_drift_changes__change_id__alert_state_delete","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Change Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/changes/bulk-response":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Bulk Update Change Alert State","description":"Bulk update user response for multiple schema change events.\n\nTECH-622: Efficient bulk operation for review queue.\nUpdates all provided change events in a single transaction.\n\nReturns partial success info. IDs that don't exist or user lacks access to\nare reported in failed_ids (intentionally no distinction for IDOR protection).","operationId":"bulk_update_change_alert_state_api_v1_schema_drift_changes_bulk_response_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkChangeResponseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/watchlists/tables":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get User Watchlists","description":"Get user's table watchlists.","operationId":"get_user_watchlists_api_v1_schema_drift_watchlists_tables_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["schema-drift","schema-drift"],"summary":"Add Table To Watchlist","description":"Add table to user's watchlist.","operationId":"add_table_to_watchlist_api_v1_schema_drift_watchlists_tables_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTableToWatchlistRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/watchlists/tables/{watchlist_id}":{"delete":{"tags":["schema-drift","schema-drift"],"summary":"Remove Table From Watchlist","description":"Remove table from user's watchlist.","operationId":"remove_table_from_watchlist_api_v1_schema_drift_watchlists_tables__watchlist_id__delete","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/baseline-status":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Baseline Status","description":"Get baseline status for an asset.","operationId":"get_baseline_status_api_v1_schema_drift_assets__asset_id__baseline_status_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/baseline":{"post":{"tags":["schema-drift","schema-drift"],"summary":"Set Baseline Snapshot","description":"Set or update baseline snapshot for an asset.","operationId":"set_baseline_snapshot_api_v1_schema_drift_assets__asset_id__baseline_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__schema_drift__api__v1__endpoints__SetBaselineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/baseline-overview":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Baseline Overview","description":"Get baseline status overview for all company assets.","operationId":"get_baseline_overview_api_v1_schema_drift_assets_baseline_overview_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/events/{event_id}/alerts":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Event Alert History","description":"Get alert history for a specific schema change event.\n\nReturns all alerts that were sent for this schema change event,\nincluding delivery status and timestamps.","operationId":"get_event_alert_history_api_v1_schema_drift_events__event_id__alerts_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/assets/{asset_id}/schema-changes-dashboard":{"get":{"tags":["schema-drift","schema-drift"],"summary":"Get Schema Changes Dashboard","description":"Optimized single-call endpoint for schema changes dashboard.\n\nReturns everything needed to render the page in one request:\n- Asset metadata\n- Change events with pagination\n- Table list with change counts (single JOIN query)\n- Schema list\n- Summary statistics\n\nThis eliminates the waterfall of 4-5 sequential API calls, reducing\nload time from 800-1500ms to 150-300ms (70-80% improvement).\n\nQuery Parameters:\n    - limit: Maximum number of change events (1-500, default 50)\n    - offset: Pagination offset for changes (default 0)\n    - days_back: Filter changes and stats from last N days (1-365, default 7)\n    - include_inactive: Include deleted/inactive tables (default false)","operationId":"get_schema_changes_dashboard_api_v1_schema_drift_assets__asset_id__schema_changes_dashboard_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":7,"title":"Days Back"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/monitoring/assets/{asset_id}/schedule":{"get":{"tags":["schema-drift","schema-monitoring"],"summary":"Get Schema Monitoring","description":"Get scheduled schema monitoring status for an asset.\n\nReturns the current monitoring configuration including:\n- Whether monitoring is enabled\n- Schedule type (hourly, daily, etc.)\n- Next scheduled check time\n- Last check time and status","operationId":"get_schema_monitoring_api_v1_schema_drift_monitoring_assets__asset_id__schedule_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["schema-drift","schema-monitoring"],"summary":"Create Schema Monitoring","description":"Enable scheduled schema monitoring for an asset.\n\nCreates or updates a monitoring schedule that automatically runs\nschema discovery at the configured interval. When changes are\ndetected, alerts are triggered via the existing alerting system.","operationId":"create_schema_monitoring_api_v1_schema_drift_monitoring_assets__asset_id__schedule_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMonitoringScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["schema-drift","schema-monitoring"],"summary":"Update Schema Monitoring","description":"Update scheduled schema monitoring for an asset.\n\nAllows updating the schedule type or enabling/disabling monitoring.","operationId":"update_schema_monitoring_api_v1_schema_drift_monitoring_assets__asset_id__schedule_patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMonitoringScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schema-drift","schema-monitoring"],"summary":"Disable Schema Monitoring","description":"Disable scheduled schema monitoring for an asset.\n\nSets is_active=False rather than deleting, preserving configuration\nand history for potential re-enablement.","operationId":"disable_schema_monitoring_api_v1_schema_drift_monitoring_assets__asset_id__schedule_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/monitoring/assets/{asset_id}/schedule/history":{"get":{"tags":["schema-drift","schema-monitoring"],"summary":"Get Schema Monitoring History","description":"Get recent run history for an asset's schema monitoring.\n\nReturns the last N monitoring runs with their status and results.","operationId":"get_schema_monitoring_history_api_v1_schema_drift_monitoring_assets__asset_id__schedule_history_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema-drift/monitoring/company/schedules":{"get":{"tags":["schema-drift","schema-monitoring"],"summary":"Get Company Monitoring Schedules","description":"Get all schema monitoring schedules for the company.\n\nReturns all configured monitoring schedules with their current status.\nUseful for the monitoring overview page.","operationId":"get_company_monitoring_schedules_api_v1_schema_drift_monitoring_company_schedules_get","parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/":{"get":{"tags":["alert-destinations"],"summary":"List Alert Destinations","description":"Get all alert destinations for the current company.\n\nArgs:\n    active_only: Filter to only active destinations\n    destination_type: Filter by destination type (email, slack, webhook, etc.)\n    pagination: Pagination parameters (limit, offset)","operationId":"list_alert_destinations_api_v1_alert_destinations__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}},{"name":"destination_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["alert-destinations"],"summary":"Create Alert Destination","description":"Create a new alert destination.\n\nRequest body validated by CreateDestinationRequest schema.","operationId":"create_alert_destination_api_v1_alert_destinations__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__schemas__CreateDestinationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/{destination_id}":{"get":{"tags":["alert-destinations"],"summary":"Get Alert Destination","description":"Get a specific alert destination by ID.","operationId":"get_alert_destination_api_v1_alert_destinations__destination_id__get","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"reveal_config","in":"query","required":false,"schema":{"type":"boolean","description":"Return full config without masking sensitive fields","default":false,"title":"Reveal Config"},"description":"Return full config without masking sensitive fields"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["alert-destinations"],"summary":"Update Alert Destination","description":"Update an alert destination.","operationId":"update_alert_destination_api_v1_alert_destinations__destination_id__put","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__schemas__UpdateDestinationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alert-destinations"],"summary":"Delete Alert Destination","description":"Delete an alert destination.","operationId":"delete_alert_destination_api_v1_alert_destinations__destination_id__delete","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/{destination_id}/rules":{"get":{"tags":["alert-destinations"],"summary":"Get Destination Rules","description":"Get all rules that use this destination.\n\nReturns a list of rules attached to this destination, useful for showing\nimpact when deleting a destination.","operationId":"get_destination_rules_api_v1_alert_destinations__destination_id__rules_get","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/{destination_id}/test":{"post":{"tags":["alert-destinations"],"summary":"Test Alert Destination","description":"Test alert destination by sending actual test notifications.\n\nFor email destinations, sends a real test email.\nFor other destinations, performs format validation only.","operationId":"test_alert_destination_api_v1_alert_destinations__destination_id__test_post","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/{destination_id}/verify/send":{"post":{"tags":["alert-destinations"],"summary":"Send Verification Code","description":"Send email verification code to destination.\n\nGenerates a 6-digit verification code and sends it to the email destination.","operationId":"send_verification_code_api_v1_alert_destinations__destination_id__verify_send_post","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/{destination_id}/verify":{"post":{"tags":["alert-destinations"],"summary":"Verify Email Code","description":"Verify email destination with code.\n\nVerifies the 6-digit code sent to the email address.","operationId":"verify_email_code_api_v1_alert_destinations__destination_id__verify_post","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_verify_email_code_api_v1_alert_destinations__destination_id__verify_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/test-webhook":{"post":{"tags":["alert-destinations"],"summary":"Test Webhook Proxy","description":"Proxy a test message to a Slack webhook URL.\n\nThis endpoint exists to bypass CORS restrictions when testing\nwebhook payloads from the browser. Development mode only.","operationId":"test_webhook_proxy_api_v1_alert_destinations_test_webhook_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_test_webhook_proxy_api_v1_alert_destinations_test_webhook_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-destinations/test-bot-api":{"post":{"tags":["alert-destinations"],"summary":"Test Bot Api","description":"Test sending a message via Slack Bot API (chat.postMessage).\n\nThis endpoint is used to test interactive Block Kit messages that\nrequire a bot token instead of an incoming webhook.","operationId":"test_bot_api_api_v1_alert_destinations_test_bot_api_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_test_bot_api_api_v1_alert_destinations_test_bot_api_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/":{"post":{"tags":["alert-rules"],"summary":"Create Alert Rule","description":"Create a new alert rule with destinations.","operationId":"create_alert_rule_api_v1_alert_rules__post","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Asset UUID for resolving tags/lineage filters (required if using filters)","title":"Asset Id"},"description":"Asset UUID for resolving tags/lineage filters (required if using filters)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__alert_rules__CreateAlertRuleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["alert-rules"],"summary":"List Alert Rules","description":"Get all alert rules for the current company.","operationId":"list_alert_rules_api_v1_alert_rules__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}},{"name":"destination_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by destination ID","title":"Destination Id"},"description":"Filter by destination ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/meta/schema-change-types":{"get":{"tags":["alert-rules"],"summary":"Get Schema Change Types Meta","description":"Return the ChangeType enum grouped by category for the rule config UI.\n\nDerives labels from `to_display_case` and breaking status from\n`ChangeType.is_breaking_change`. This endpoint is the single source of\ntruth for the ChangeType vocabulary; the frontend does not maintain a\nhand-written mirror (TECH-963).","operationId":"get_schema_change_types_meta_api_v1_alert_rules_meta_schema_change_types_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}":{"get":{"tags":["alert-rules"],"summary":"Get Alert Rule","description":"Get alert rule details with destinations.","operationId":"get_alert_rule_api_v1_alert_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["alert-rules"],"summary":"Update Alert Rule","description":"Update alert rule configuration.","operationId":"update_alert_rule_api_v1_alert_rules__rule_id__put","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__alert_rules__UpdateAlertRuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alert-rules"],"summary":"Delete Alert Rule","description":"Delete an alert rule.","operationId":"delete_alert_rule_api_v1_alert_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}/toggle":{"post":{"tags":["alert-rules"],"summary":"Toggle Alert Rule","description":"Toggle an alert rule's active status.","operationId":"toggle_alert_rule_api_v1_alert_rules__rule_id__toggle_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToggleAlertRuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}/test":{"post":{"tags":["alert-rules"],"summary":"Test Alert Rule","description":"Test an alert rule by sending a test notification to all destinations.","operationId":"test_alert_rule_api_v1_alert_rules__rule_id__test_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/test-all":{"post":{"tags":["alert-rules"],"summary":"Test All Alert Rules","description":"Test all active alert rules for the current company.","operationId":"test_all_alert_rules_api_v1_alert_rules_test_all_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}/destinations":{"post":{"tags":["alert-rules"],"summary":"Add Destination To Rule","description":"Add a destination to an alert rule.","operationId":"add_destination_to_rule_api_v1_alert_rules__rule_id__destinations_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddDestinationRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}/destinations/{destination_id}":{"delete":{"tags":["alert-rules"],"summary":"Remove Destination From Rule","description":"Remove a destination from an alert rule.","operationId":"remove_destination_from_rule_api_v1_alert_rules__rule_id__destinations__destination_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/{rule_id}/refresh":{"post":{"tags":["alert-rules"],"summary":"Refresh Dynamic Rule","description":"Manually refresh a dynamic alert rule.","operationId":"refresh_dynamic_rule_api_v1_alert_rules__rule_id__refresh_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/preview":{"post":{"tags":["alert-rules"],"summary":"Preview Alert Targets","description":"Preview which tables will be monitored by an alert rule.","operationId":"preview_alert_targets_api_v1_alert_rules_preview_post","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Asset UUID for resolving tags/lineage filters (required if using filters)","title":"Asset Id"},"description":"Asset UUID for resolving tags/lineage filters (required if using filters)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewAlertTargetsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/bulk/preview":{"post":{"tags":["alert-rules-bulk"],"summary":"Bulk Preview","description":"Preview which tables will be affected by a bulk rule generation.\n\nShows matching tables and identifies those that already have rules.","operationId":"bulk_preview_api_v1_alert_rules_bulk_preview_post","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID to search within","title":"Asset Id"},"description":"Asset UUID to search within"},{"name":"event_types","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Event types to check for existing rules (comma-separated)","title":"Event Types"},"description":"Event types to check for existing rules (comma-separated)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/bulk/generate":{"post":{"tags":["alert-rules-bulk"],"summary":"Bulk Generate","description":"Generate multiple alert rules from a filter and template.\n\nCreates one rule per matching table. Transaction ensures all-or-nothing.","operationId":"bulk_generate_api_v1_alert_rules_bulk_generate_post","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID to create rules within","title":"Asset Id"},"description":"Asset UUID to create rules within"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkGenerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/bulk/":{"patch":{"tags":["alert-rules-bulk"],"summary":"Bulk Update","description":"Update multiple alert rules at once.\n\nAllowed updates: is_active, cooldown_minutes, max_alerts_per_day\n\nTransaction guarantee: All-or-nothing. If any rule fails validation\n(not found, not authorized), the entire operation is rolled back.","operationId":"bulk_update_api_v1_alert_rules_bulk__patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alert-rules-bulk"],"summary":"Bulk Delete","description":"Delete multiple alert rules at once.\n\nTransaction guarantee: All-or-nothing. If any rule fails validation\n(not found, not authorized), the entire operation is rolled back.","operationId":"bulk_delete_api_v1_alert_rules_bulk__delete","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__alert_rules_bulk__BulkDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/bulk/enable":{"post":{"tags":["alert-rules-bulk"],"summary":"Bulk Enable","description":"Enable multiple alert rules at once.","operationId":"bulk_enable_api_v1_alert_rules_bulk_enable_post","parameters":[{"name":"rule_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Rule IDs to enable","title":"Rule Ids"},"description":"Rule IDs to enable"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-rules/bulk/disable":{"post":{"tags":["alert-rules-bulk"],"summary":"Bulk Disable","description":"Disable multiple alert rules at once.","operationId":"bulk_disable_api_v1_alert_rules_bulk_disable_post","parameters":[{"name":"rule_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Rule IDs to disable","title":"Rule Ids"},"description":"Rule IDs to disable"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/history":{"get":{"tags":["alert-history"],"summary":"List Alert History","description":"Get alert history for the current company.\n\nArgs:\n    ctx: Application context\n    history_dal: AlertHistoryDAL instance\n    date_range: Date range filter (24hours, 7days, 30days, 90days)\n    severity: Optional severity filter\n    asset_type: Optional asset type filter\n    pagination: Pagination parameters\n\nReturns:\n    List of alert history records","operationId":"list_alert_history_api_v1_alerts_history_get","parameters":[{"name":"date_range","in":"query","required":false,"schema":{"type":"string","description":"Date range filter","default":"7days","title":"Date Range"},"description":"Date range filter"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Severity filter","title":"Severity"},"description":"Severity filter"},{"name":"asset_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Asset type filter","title":"Asset Type"},"description":"Asset type filter"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/inbox":{"get":{"tags":["alert-inbox"],"summary":"List Inbox Alerts","description":"Get active alerts for inbox view.\n\nReturns paginated list of alerts that need attention (NEW or ACKNOWLEDGED).","operationId":"list_inbox_alerts_api_v1_alerts_inbox_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by alert state","title":"State"},"description":"Filter by alert state"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"rule_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by rule ID","title":"Rule Id"},"description":"Filter by rule ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/inbox/counts":{"get":{"tags":["alert-inbox"],"summary":"Get Inbox Counts","description":"Get alert counts for inbox badges.","operationId":"get_inbox_counts_api_v1_alerts_inbox_counts_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/overview":{"get":{"tags":["alert-inbox"],"summary":"Get Overview Metrics","description":"Get dashboard overview metrics.","operationId":"get_overview_metrics_api_v1_alerts_overview_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|30d|90d)$","default":"30d","title":"Period"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/overview/trends":{"get":{"tags":["alert-inbox"],"summary":"Get Overview Trends","description":"Get alert volume trends for charts.\n\nArgs:\n    period: Time period for trends (24h, 7d, 30d, 90d)\n    asset_id: Asset public UUID (frontend sends UUID strings)\n\nReturns:\n    Trend data with data points and severity breakdown","operationId":"get_overview_trends_api_v1_alerts_overview_trends_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","pattern":"^(24h|7d|30d|90d)$","default":"7d","title":"Period"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset UUID","title":"Asset Id"},"description":"Filter by asset UUID"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/filters":{"get":{"tags":["alert-inbox"],"summary":"Get Filter Options","description":"Get available filter options for inbox.\n\nReturns lists of available severities, states, event types, assets, and rules.\nCached for 5 minutes.","operationId":"get_filter_options_api_v1_alerts_filters_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}":{"get":{"tags":["alert-inbox"],"summary":"Get Alert Detail","description":"Get detailed information about a specific alert.","operationId":"get_alert_detail_api_v1_alerts__alert_id__get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/investigation":{"get":{"tags":["alert-inbox"],"summary":"Get Alert Investigation","description":"Get investigation results for an alert.\n\nReturns the automated investigation if one exists, or 404 if not yet available.\nIf investigation is still running, returns status=running with partial data.","operationId":"get_alert_investigation_api_v1_alerts__alert_id__investigation_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/bulk/acknowledge":{"post":{"tags":["alert-inbox"],"summary":"Bulk Acknowledge Alerts","description":"Bulk acknowledge multiple alerts.","operationId":"bulk_acknowledge_alerts_api_v1_alerts_bulk_acknowledge_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/bulk/resolve":{"post":{"tags":["alert-inbox"],"summary":"Bulk Resolve Alerts","description":"Bulk resolve multiple alerts.","operationId":"bulk_resolve_alerts_api_v1_alerts_bulk_resolve_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/bulk/dismiss":{"post":{"tags":["alert-inbox"],"summary":"Bulk Dismiss Alerts","description":"Bulk dismiss multiple alerts.","operationId":"bulk_dismiss_alerts_api_v1_alerts_bulk_dismiss_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/bulk/delete":{"post":{"tags":["alert-inbox"],"summary":"Bulk Delete Alerts","description":"Permanently delete alert history records.","operationId":"bulk_delete_alerts_api_v1_alerts_bulk_delete_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/acknowledge":{"post":{"tags":["alert-inbox"],"summary":"Acknowledge Alert","description":"Acknowledge an alert.","operationId":"acknowledge_alert_api_v1_alerts__alert_id__acknowledge_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AcknowledgeRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/resolve":{"post":{"tags":["alert-inbox"],"summary":"Resolve Alert","description":"Resolve an alert.","operationId":"resolve_alert_api_v1_alerts__alert_id__resolve_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ResolveRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/dismiss":{"post":{"tags":["alert-inbox"],"summary":"Dismiss Alert","description":"Dismiss an alert.","operationId":"dismiss_alert_api_v1_alerts__alert_id__dismiss_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DismissRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/note":{"post":{"tags":["alert-inbox"],"summary":"Add Alert Note","description":"Add or update notes on an alert.","operationId":"add_alert_note_api_v1_alerts__alert_id__note_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/resolution":{"get":{"tags":["alert-inbox"],"summary":"Get Alert Resolution","description":"Get resolution data for a resolved/dismissed alert.","operationId":"get_alert_resolution_api_v1_alerts__alert_id__resolution_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/suggestions":{"get":{"tags":["alert-inbox"],"summary":"Get Resolution Suggestions","description":"Get resolution suggestions for an alert based on historical patterns.","operationId":"get_resolution_suggestions_api_v1_alerts__alert_id__suggestions_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/resolution/feedback":{"post":{"tags":["alert-inbox"],"summary":"Submit Resolution Feedback","description":"Submit feedback on a resolution suggestion.","operationId":"submit_resolution_feedback_api_v1_alerts__alert_id__resolution_feedback_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents":{"get":{"tags":["Incidents"],"summary":"List Incidents","description":"List incidents for the current company with optional filters.","operationId":"list_incidents_api_v1_incidents_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (open, acknowledged, resolved, dismissed, snoozed)","title":"Status"},"description":"Filter by status (open, acknowledged, resolved, dismissed, snoozed)"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum results","default":50,"title":"Limit"},"description":"Maximum results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}":{"get":{"tags":["Incidents"],"summary":"Get Incident","description":"Get full incident detail including activity timeline, linked asset/rule, and notifications.","operationId":"get_incident_api_v1_incidents__incident_id__get","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Incidents"],"summary":"Delete Incident","description":"Delete an incident and all related alert history logs.","operationId":"delete_incident_api_v1_incidents__incident_id__delete","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/acknowledge":{"post":{"tags":["Incidents"],"summary":"Acknowledge Incident","description":"Acknowledge an incident.","operationId":"acknowledge_incident_api_v1_incidents__incident_id__acknowledge_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AcknowledgeIncidentRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/resolve":{"post":{"tags":["Incidents"],"summary":"Resolve Incident","description":"Resolve an incident.","operationId":"resolve_incident_api_v1_incidents__incident_id__resolve_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ResolveIncidentRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/dismiss":{"post":{"tags":["Incidents"],"summary":"Dismiss Incident","description":"Dismiss an incident.","operationId":"dismiss_incident_api_v1_incidents__incident_id__dismiss_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DismissIncidentRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/snooze":{"post":{"tags":["Incidents"],"summary":"Snooze Incident","description":"Snooze an incident for a specified duration.","operationId":"snooze_incident_api_v1_incidents__incident_id__snooze_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnoozeIncidentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/assign":{"patch":{"tags":["Incidents"],"summary":"Assign Incident","description":"Assign or unassign an incident to a user.","operationId":"assign_incident_api_v1_incidents__incident_id__assign_patch","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignIncidentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/{incident_id}/comment":{"post":{"tags":["Incidents"],"summary":"Add Incident Comment","description":"Add a comment to the incident activity timeline.","operationId":"add_incident_comment_api_v1_incidents__incident_id__comment_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/operating-schedules/":{"post":{"tags":["operating-schedules"],"summary":"Create Operating Schedule","description":"Create a new operating schedule.","operationId":"create_operating_schedule_api_v1_operating_schedules__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__operating_schedules__CreateScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["operating-schedules"],"summary":"List Operating Schedules","description":"List all operating schedules for the current company.","operationId":"list_operating_schedules_api_v1_operating_schedules__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/operating-schedules/{schedule_id}":{"get":{"tags":["operating-schedules"],"summary":"Get Operating Schedule","description":"Get operating schedule details.","operationId":"get_operating_schedule_api_v1_operating_schedules__schedule_id__get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["operating-schedules"],"summary":"Update Operating Schedule","description":"Update an operating schedule.","operationId":"update_operating_schedule_api_v1_operating_schedules__schedule_id__put","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__domains__feature__alerts__api__v1__operating_schedules__UpdateScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["operating-schedules"],"summary":"Delete Operating Schedule","description":"Delete an operating schedule.\n\nRules referencing this schedule will have their operating_schedule_id\nset to NULL (ON DELETE SET NULL), making them unrestricted.","operationId":"delete_operating_schedule_api_v1_operating_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-blackouts/":{"post":{"tags":["alert-blackouts"],"summary":"Create Alert Blackout","description":"Create a new blackout window.","operationId":"create_alert_blackout_api_v1_alert_blackouts__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlackoutRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["alert-blackouts"],"summary":"List Alert Blackouts","description":"List all blackout windows for the current company.","operationId":"list_alert_blackouts_api_v1_alert_blackouts__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alert-blackouts/{blackout_id}":{"get":{"tags":["alert-blackouts"],"summary":"Get Alert Blackout","description":"Get blackout window details.","operationId":"get_alert_blackout_api_v1_alert_blackouts__blackout_id__get","parameters":[{"name":"blackout_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Blackout Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["alert-blackouts"],"summary":"Update Alert Blackout","description":"Update a blackout window.","operationId":"update_alert_blackout_api_v1_alert_blackouts__blackout_id__put","parameters":[{"name":"blackout_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Blackout Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlackoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alert-blackouts"],"summary":"Delete Alert Blackout","description":"Delete a blackout window.","operationId":"delete_alert_blackout_api_v1_alert_blackouts__blackout_id__delete","parameters":[{"name":"blackout_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Blackout Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/estimate-cost":{"post":{"tags":["billing"],"summary":"Estimate Operation Cost","description":"Estimate cost for an AI operation before execution.\n\nThis endpoint helps users understand the cost implications before\nrunning expensive AI operations. The estimate includes:\n- Total cost to be charged\n- Platform margin based on subscription tier\n- Current wallet balance\n- Whether sufficient funds are available","operationId":"estimate_operation_cost_api_v1_billing_estimate_cost_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CostEstimateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/summary":{"get":{"tags":["billing"],"summary":"Get Usage Summary","description":"Get usage summary for a time period.\n\nReturns aggregated transaction data including:\n- Total deposits\n- Total AI operation costs\n- Total refunds\n- Total adjustments\n- Transaction count","operationId":"get_usage_summary_api_v1_billing_usage_summary_get","parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Start of period","title":"Start Date"},"description":"Start of period"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"End of period","title":"End Date"},"description":"End of period"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/comprehensive-summary":{"get":{"tags":["billing"],"summary":"Get Comprehensive Usage Summary","description":"Get comprehensive usage summary including tables, assets, and subscription info.\n\nThis endpoint provides a complete overview of usage metrics that the frontend\nbilling components expect.","operationId":"get_comprehensive_usage_summary_api_v1_billing_usage_comprehensive_summary_get","parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Start of period","title":"Start Date"},"description":"Start of period"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"End of period","title":"End Date"},"description":"End of period"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/tables":{"get":{"tags":["billing"],"summary":"Get Table Usage","description":"Get current table usage and limits for the company.\n\nTECH-716: Updated to include feature breakdown for unified pool metering.","operationId":"get_table_usage_api_v1_billing_usage_tables_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/tables/limit-checks":{"post":{"tags":["billing"],"summary":"Create Table Limit Check","description":"Check if company can monitor another table.","operationId":"create_table_limit_check_api_v1_billing_usage_tables_limit_checks_post","parameters":[{"name":"table_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Table Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/intelligence":{"get":{"tags":["billing"],"summary":"Get Intelligence Usage","description":"Get current intelligence query usage and limits for the company.\n\nReturns:\n    StandardResponse with data containing:\n    - current_usage: Current monthly usage count\n    - query_limit: Maximum queries allowed per month\n    - is_unlimited: Whether tier has unlimited queries\n    - remaining_queries: Queries remaining this month\n    - percentage_used: Percentage of limit used (0-100)\n    - tier_name: Subscription tier name","operationId":"get_intelligence_usage_api_v1_billing_usage_intelligence_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/ai-spend":{"get":{"tags":["billing"],"summary":"Get Ai Spend Usage","description":"Get the company's month-to-date AI dollar spend vs its cost ceiling.\n\nTECH-987.3: backs the free-tier AI spend ($/ceiling) meter. Reads the\nper-company ceiling spend from ``AICostCeilingService`` (the same source the\nenforcement path uses). ``ceiling`` is null for uncapped (paid) plans.\n\nReturns:\n    StandardResponse with data containing:\n    - spend: month-to-date AI spend in USD\n    - ceiling: monthly ceiling in USD (null = uncapped)\n    - is_unlimited: True when there is no ceiling (paid plans)\n    - percentage_used: 0-100 (0 when uncapped)\n    - enforced: whether the ceiling currently blocks (rollout flag)","operationId":"get_ai_spend_usage_api_v1_billing_usage_ai_spend_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/usage/assets":{"get":{"tags":["billing"],"summary":"Get Asset Usage","description":"Get current asset (database connection) usage and limits for the company.\n\nTECH-576: Added for billing page asset usage display.\n\nReturns:\n    StandardResponse with data containing:\n    - current: Current number of active assets\n    - limit: Maximum assets allowed for subscription tier\n    - is_unlimited: Whether tier has unlimited assets\n    - can_add: Whether user can add more assets\n    - percentage: Percentage of limit used (0-100)\n    - tier_name: Subscription tier name","operationId":"get_asset_usage_api_v1_billing_usage_assets_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/invoices":{"get":{"tags":["billing"],"summary":"List Invoices","description":"List invoices for the current company.\n\nTECH-585: Fetches invoice history from Stripe.\n\nReturns paginated list of paid invoices with:\n- Invoice number and ID\n- Amount and currency\n- Payment date\n- Links to hosted invoice and PDF","operationId":"list_invoices_api_v1_billing_invoices_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of invoices to return","default":20,"title":"Limit"},"description":"Number of invoices to return"},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for pagination (invoice ID)","title":"Starting After"},"description":"Cursor for pagination (invoice ID)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/invoices/{invoice_id}":{"get":{"tags":["billing"],"summary":"Get Invoice","description":"Get details for a specific invoice.\n\nTECH-585: Retrieves full invoice details including line items from Stripe.\n\nArgs:\n    invoice_id: Stripe invoice ID (e.g., 'in_xxx')\n\nReturns:\n    Invoice details with line items","operationId":"get_invoice_api_v1_billing_invoices__invoice_id__get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/invoices/{invoice_id}/pdf":{"get":{"tags":["billing"],"summary":"Get Invoice Pdf","description":"Redirect to the Stripe-hosted invoice PDF.\n\nTECH-585: Provides download link for invoice PDF.\n\nArgs:\n    invoice_id: Stripe invoice ID\n\nReturns:\n    Redirect to Stripe PDF URL","operationId":"get_invoice_pdf_api_v1_billing_invoices__invoice_id__pdf_get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events":{"get":{"tags":["billing-events"],"summary":"List Billing Events","description":"List billing webhook events with filtering and pagination.\n\nReturns paginated list of webhook events for the current user's company\nwith optional filtering by event type, status, and date range.","operationId":"list_billing_events_api_v1_billing_events_get","parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type (e.g., payment_intent, invoice)","title":"Event Type"},"description":"Filter by event type (e.g., payment_intent, invoice)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by processing status","title":"Status"},"description":"Filter by processing status"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter events after this date","title":"Start Date"},"description":"Filter events after this date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter events before this date","title":"End Date"},"description":"Filter events before this date"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/{event_id}":{"get":{"tags":["billing-events"],"summary":"Get Billing Event","description":"Get detailed information about a specific billing event.\n\nReturns complete event data including processing logs and metadata.","operationId":"get_billing_event_api_v1_billing_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/{event_id}/replays":{"post":{"tags":["billing-events"],"summary":"Create Billing Event Replay","description":"Replay a failed billing event.\n\nAttempts to reprocess a failed webhook event. Only events with 'failed' status\nand retry_count < 3 can be replayed.","operationId":"create_billing_event_replay_api_v1_billing_events__event_id__replays_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/stats/summary":{"get":{"tags":["billing-events"],"summary":"Get Events Summary","description":"Get summary statistics for billing events.\n\nReturns counts and statistics for webhook events over the specified period.","operationId":"get_events_summary_api_v1_billing_events_stats_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to include in summary","default":30,"title":"Days"},"description":"Number of days to include in summary"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/reconciliations":{"post":{"tags":["billing-events"],"summary":"Create Billing Reconciliation","description":"Perform billing reconciliation for a specific date.\n\nCompares database records with Stripe data to identify discrepancies.","operationId":"create_billing_reconciliation_api_v1_billing_events_reconciliations_post","parameters":[{"name":"reconciliation_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Date to reconcile (YYYY-MM-DD)","title":"Reconciliation Date"},"description":"Date to reconcile (YYYY-MM-DD)"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/reconciliation/history":{"get":{"tags":["billing-events"],"summary":"Get Reconciliation History","description":"Get reconciliation history for the company.\n\nReturns paginated list of historical reconciliation results.","operationId":"get_reconciliation_history_api_v1_billing_events_reconciliation_history_get","parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start of date range","title":"Start Date"},"description":"Start of date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End of date range","title":"End Date"},"description":"End of date range"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":50,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/events/reconciliation/discrepancies":{"get":{"tags":["billing-events"],"summary":"Get Discrepancy Report","description":"Get discrepancy report showing billing inconsistencies.\n\nReturns analysis of discrepancies between Stripe and database records.","operationId":"get_discrepancy_report_api_v1_billing_events_reconciliation_discrepancies_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to analyze","default":30,"title":"Days"},"description":"Number of days to analyze"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/gate-events":{"post":{"tags":["billing-gate-events"],"summary":"Log Gate Event","description":"Log a feature gate event for conversion analytics.","operationId":"log_gate_event_api_v1_billing_gate_events_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GateEventRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/stripe/health":{"get":{"tags":["Stripe Webhooks"],"summary":"Stripe Webhook Health","description":"Health check endpoint for Stripe webhook integration.","operationId":"stripe_webhook_health_api_v1_billing_stripe_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/pricing":{"get":{"tags":["pricing"],"summary":"Get Pricing","description":"Get all subscription pricing from database.\n\nThis is a PUBLIC endpoint - no authentication required.\nUsers need to see pricing during signup and upgrade flows.\n\nThe database is the single source of truth for pricing.\nDo NOT use hardcoded TIER_PRICING constants - use this API.\n\nReturns:\n    List of plans with pricing, limits, and Stripe price IDs","operationId":"get_pricing_api_v1_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/pricing/plan/{plan_name}":{"get":{"tags":["pricing"],"summary":"Get Plan Pricing","description":"Get pricing for a specific plan.\n\nThis is a PUBLIC endpoint - no authentication required.\n\nArgs:\n    plan_name: Plan identifier (e.g., 'starter', 'growth')\n\nReturns:\n    Pricing details for the specified plan","operationId":"get_plan_pricing_api_v1_pricing_plan__plan_name__get","parameters":[{"name":"plan_name","in":"path","required":true,"schema":{"type":"string","title":"Plan Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/trial-codes/validate":{"post":{"tags":["trial-codes"],"summary":"Validate Trial Code","description":"Validate a trial code without redeeming it.\n\nThis endpoint is PUBLIC (no authentication required) to allow\nusers to check code validity before signing up or signing in.\n\nSecurity note: Only returns whether code is valid and trial duration.\nDoes not expose sensitive code details.","operationId":"validate_trial_code_api_v1_billing_trial_codes_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateTrialCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/trial-codes/redeem":{"post":{"tags":["trial-codes"],"summary":"Redeem Trial Code","description":"Redeem a trial code for the current user's company.\n\nThis will:\n1. Validate the code\n2. Record the redemption\n3. Update the company's subscription to FREE_TRIAL status with trial_end date","operationId":"redeem_trial_code_api_v1_billing_trial_codes_redeem_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemTrialCodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/trial-codes/complete-signup-with-code":{"post":{"tags":["trial-codes"],"summary":"Complete Signup With Code","description":"Complete signup for a user who signed up with a trial code.\n\nTECH-657: Called AFTER Clerk authentication. Handles two cases:\n1. User has no company yet: Creates company and subscription\n2. User already has company (from Clerk webhook): Updates existing subscription\n\nThe Clerk webhook typically creates the company before this endpoint is called,\nso case 2 is the common path. We check if the subscription is eligible for\ntrial code application (free_trial, trialing, or incomplete status).\n\nTransaction Flow:\n1. Validate code\n2. Get or create company and subscription\n3. Update subscription with target plan from code if specified\n4. Record redemption\n5. Commit only if ALL steps succeed","operationId":"complete_signup_with_code_api_v1_billing_trial_codes_complete_signup_with_code_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteSignupWithCodeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/trial-codes/redeem-with-cancel":{"post":{"tags":["trial-codes"],"summary":"Redeem With Cancel","description":"Redeem a trial code for an existing paying customer.\n\nTECH-657: Cancels the Stripe subscription (triggers prorated credit),\nthen applies the trial with the target plan.\n\nTransaction Safety (order prevents data loss):\n1. Validate code\n2. Record redemption (marks code as used)\n3. Update subscription to trial with target plan\n4. Clear Stripe IDs in DB\n5. COMMIT DB FIRST (ensures trial is active before touching Stripe)\n6. Cancel Stripe subscription (external call, may fail)\n\nWhy commit before Stripe cancel:\n- If DB commit fails: Customer keeps Stripe subscription (safe rollback)\n- If Stripe cancel fails after commit: Customer has trial + Stripe sub\n  (recoverable via manual cancellation, customer is not left without access)\n- Previous approach risk: If Stripe succeeds but commit fails, customer\n  loses Stripe sub AND doesn't get trial (unrecoverable data loss)","operationId":"redeem_with_cancel_api_v1_billing_trial_codes_redeem_with_cancel_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemWithCancelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/checkout-sessions":{"post":{"tags":["subscriptions"],"summary":"Create Checkout Session","description":"Create a Stripe checkout session for subscription purchase.\n\nArgs:\n    request: Checkout session request data\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Checkout session URL and ID","operationId":"create_checkout_session_api_v1_subscriptions_checkout_sessions_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/portal-sessions":{"post":{"tags":["subscriptions"],"summary":"Create Customer Portal Session","description":"Create a Stripe customer portal session for subscription management.\n\nArgs:\n    request: Portal session request data\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Customer portal URL","operationId":"create_customer_portal_session_api_v1_subscriptions_portal_sessions_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/current":{"get":{"tags":["subscriptions"],"summary":"Get Current Subscription","description":"Get current subscription information for the user's company.\n\nArgs:\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Current subscription details","operationId":"get_current_subscription_api_v1_subscriptions_current_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/usage":{"get":{"tags":["subscriptions"],"summary":"Get Usage And Limits","description":"Get current usage and limits for the user's company.\n\nArgs:\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Usage limits and current usage data including subscription tier,\n    team members, api calls, and assets with current/limit values.","operationId":"get_usage_and_limits_api_v1_subscriptions_usage_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/tiers":{"get":{"tags":["subscriptions"],"summary":"Get Subscription Tiers","description":"Get available subscription tiers and their features.\n\nThis is a public endpoint - no authentication required.\nUsers need to view tiers and pricing during signup flow.\n\nReturns:\n    List of subscription tiers with pricing and features","operationId":"get_subscription_tiers_api_v1_subscriptions_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/subscriptions/cancellations":{"post":{"tags":["subscriptions"],"summary":"Create Subscription Cancellation","description":"Cancel the current subscription at the end of the billing period.\n\nArgs:\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Cancellation confirmation","operationId":"create_subscription_cancellation_api_v1_subscriptions_cancellations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/reactivations":{"post":{"tags":["subscriptions"],"summary":"Create Subscription Reactivation","description":"Reactivate a cancelled subscription before the period ends.\n\nArgs:\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Reactivation confirmation","operationId":"create_subscription_reactivation_api_v1_subscriptions_reactivations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/features":{"get":{"tags":["subscriptions"],"summary":"Get Subscription Features","description":"Get available features for the user's current subscription tier.\n\nArgs:\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Available features and their limits","operationId":"get_subscription_features_api_v1_subscriptions_features_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/subscriptions/downgrade-validations":{"post":{"tags":["subscriptions"],"summary":"Validate Downgrade","description":"Validate if the company can downgrade to a target tier.\n\nTECH-576: Checks if current usage exceeds the target plan's limits.\nReturns validation result with blockers if downgrade is not possible.\n\nArgs:\n    request: Contains the target_tier to validate against\n    ctx: Application context with user, session, and company_id\n\nReturns:\n    Validation result with can_downgrade flag and any blockers","operationId":"validate_downgrade_api_v1_subscriptions_downgrade_validations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowngradeValidationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/settings":{"get":{"tags":["company-settings","company-settings"],"summary":"Get Company Settings","description":"Get company settings for the current user's company.","operationId":"get_company_settings_api_v1_company_settings_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["company-settings","company-settings"],"summary":"Update Company Settings","description":"Update company settings.","operationId":"update_company_settings_api_v1_company_settings_patch","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Settings Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/settings/{category}":{"get":{"tags":["company-settings","company-settings"],"summary":"Get Category Settings","description":"Get settings for a specific category.","operationId":"get_category_settings_api_v1_company_settings__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/settings/{category}/{key}":{"put":{"tags":["company-settings","company-settings"],"summary":"Update Single Setting","description":"Update a single setting.","operationId":"update_single_setting_api_v1_company_settings__category___key__put","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["company-settings","company-settings"],"summary":"Delete Setting","description":"Delete a specific setting.","operationId":"delete_setting_api_v1_company_settings__category___key__delete","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}},{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/security":{"put":{"tags":["company-settings","company-settings"],"summary":"Update Security Settings","description":"Update company security settings and profile (TECH-557).\n\nUpdates the default query access level and/or company name.\nThe access level affects all new assets that don't have an explicit override.","operationId":"update_security_settings_api_v1_company_security_put","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecuritySettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/company/onboarding/complete":{"post":{"tags":["company-settings","company-settings"],"summary":"Complete Onboarding","description":"Mark company onboarding as complete.\n\nCall this endpoint when the user has completed the onboarding flow\n(e.g., finished the product tour, added first connection, etc.).\nThis prevents the welcome tour from auto-triggering on subsequent logins.","operationId":"complete_onboarding_api_v1_company_onboarding_complete_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/security/egress-ips":{"get":{"tags":["network-security","network-security"],"summary":"Get Egress Ips","description":"Return the static outbound IPs customers should allowlist.\n\nAll AnomalyArmor traffic egresses through the NAT gateway's Elastic IP, so\nthis list is stable across deploys. Add these to your database security\ngroup or firewall inbound rules for the database port.","operationId":"get_egress_ips_api_v1_security_egress_ips_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/database/status":{"get":{"tags":["database-performance","database-performance"],"summary":"Get Performance Status","description":"Check if performance monitoring is enabled and working.","operationId":"get_performance_status_api_v1_monitoring_database_status_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/database/summary":{"get":{"tags":["database-performance","database-performance"],"summary":"Get Performance Summary","description":"Get performance monitoring summary with key metrics.","operationId":"get_performance_summary_api_v1_monitoring_database_summary_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of results","default":10,"title":"Limit"},"description":"Maximum number of results"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/database/slow-queries":{"get":{"tags":["database-performance","database-performance"],"summary":"Get Slow Queries","description":"Get detailed slow query analysis.","operationId":"get_slow_queries_api_v1_monitoring_database_slow_queries_get","parameters":[{"name":"min_duration_ms","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum avg duration in ms","default":100,"title":"Min Duration Ms"},"description":"Minimum avg duration in ms"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum number of results","default":50,"title":"Limit"},"description":"Maximum number of results"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/database/index-usage":{"get":{"tags":["database-performance","database-performance"],"summary":"Get Index Usage Stats","description":"Get index usage statistics to identify unused indexes.","operationId":"get_index_usage_stats_api_v1_monitoring_database_index_usage_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip","default":0,"title":"Offset"},"description":"Number of results to skip"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum number of results","default":20,"title":"Limit"},"description":"Maximum number of results"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/monitoring/frontend-errors/report":{"post":{"tags":["frontend-errors"],"summary":"Report Frontend Toast","description":"Report a frontend toast for team notification.\n\nThis endpoint receives frontend toasts and sends them to Slack\nif configured. Rate limiting is applied to prevent spam.\n\nArgs:\n    toast_report: Toast details from frontend\n    current_user: Optional authenticated user context\n\nReturns:\n    Success response","operationId":"report_frontend_toast_api_v1_monitoring_frontend_errors_report_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrontendToastReport"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/connect-github":{"post":{"tags":["git-integration","Git Integration"],"summary":"Connect Github","description":"One-click GitHub connect: creates platform-managed provider.\n\nFrontend flow: POST /connect-github -> get provider_id ->\nredirect to GET /oauth/github/authorize?provider_id={id}","operationId":"connect_github_api_v1_git_providers_connect_github_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/install-github-app":{"post":{"tags":["git-integration","Git Integration"],"summary":"Install Github App","description":"Start GitHub App installation flow.\n\nReturns the GitHub App installation URL for frontend redirect.\nCreates CSRF state for callback validation.","operationId":"install_github_app_api_v1_git_providers_install_github_app_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/github-app/callback":{"get":{"tags":["git-integration","Git Integration"],"summary":"Github App Callback","description":"Handle GitHub App installation callback.\n\nPublic endpoint (called by GitHub redirect, not authenticated).\nValidates CSRF state, verifies installation, creates provider.","operationId":"github_app_callback_api_v1_git_providers_github_app_callback_get","parameters":[{"name":"installation_id","in":"query","required":true,"schema":{"type":"integer","description":"GitHub App installation ID","title":"Installation Id"},"description":"GitHub App installation ID"},{"name":"setup_action","in":"query","required":false,"schema":{"type":"string","description":"Setup action (install, update)","default":"install","title":"Setup Action"},"description":"Setup action (install, update)"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF state token","title":"State"},"description":"CSRF state token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/{provider_id}/disconnect":{"post":{"tags":["git-integration","Git Integration"],"summary":"Disconnect Git Provider","description":"Disconnect a git provider by revoking its OAuth token and deleting credentials.\n\nFor OAuth App providers: revokes the GitHub OAuth token (best-effort),\ndeletes the credential record, and clears credential_id on the provider.\nFor GitHub App providers: clears the installation_id (user can reinstall).\n\nThe provider record is kept so users can reconnect without losing repo configs.\n\nArgs:\n    provider_id: Provider public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"disconnect_git_provider_api_v1_git_providers__provider_id__disconnect_post","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/":{"post":{"tags":["git-integration","Git Integration"],"summary":"Create Git Provider","description":"Create a new git provider connection.\n\nArgs:\n    provider_data: Provider creation data\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with created provider","operationId":"create_git_provider_api_v1_git_providers__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitProviderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["git-integration","Git Integration"],"summary":"List Git Providers","description":"List all git providers for the current company with pagination.\n\nArgs:\n    active_only: Only return active providers\n    pagination: Pagination parameters (limit, offset)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with paginated list of providers","operationId":"list_git_providers_api_v1_git_providers__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/{provider_id}":{"get":{"tags":["git-integration","Git Integration"],"summary":"Get Git Provider","description":"Get a git provider by ID.\n\nArgs:\n    provider_id: Provider public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with provider details","operationId":"get_git_provider_api_v1_git_providers__provider_id__get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["git-integration","Git Integration"],"summary":"Update Git Provider","description":"Update a git provider.\n\nArgs:\n    provider_id: Provider public ID (UUID)\n    provider_data: Provider update data\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"update_git_provider_api_v1_git_providers__provider_id__patch","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitProviderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["git-integration","Git Integration"],"summary":"Delete Git Provider","description":"Delete (soft delete) a git provider.\n\nArgs:\n    provider_id: Provider public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"delete_git_provider_api_v1_git_providers__provider_id__delete","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-providers/{provider_id}/repositories":{"get":{"tags":["git-integration","Git Integration"],"summary":"List Provider Repositories","description":"List repositories accessible through this git provider.\n\nSupports both OAuth App (credential-based) and GitHub App (installation-based).\n\nArgs:\n    provider_id: Provider public ID (UUID)\n    visibility: Repository visibility filter (all, public, private)\n    sort: Sort order (created, updated, pushed, full_name)\n    pagination: Pagination parameters (limit, offset)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with list of repositories","operationId":"list_provider_repositories_api_v1_git_providers__provider_id__repositories_get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"visibility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Repository visibility (all, public, private)","title":"Visibility"},"description":"Repository visibility (all, public, private)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort order (created, updated, pushed)","default":"updated","title":"Sort"},"description":"Sort order (created, updated, pushed)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/":{"post":{"tags":["git-integration","Git Integration"],"summary":"Create Git Repository","description":"Create a new git repository configuration.\n\nArgs:\n    repository_data: Repository creation data\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with created repository","operationId":"create_git_repository_api_v1_git_repositories__post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitRepositoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["git-integration","Git Integration"],"summary":"List Git Repositories","description":"List all git repositories for the current company with pagination.\n\nArgs:\n    active_only: Only return active repositories\n    pagination: Pagination parameters (limit, offset)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with paginated list of repositories","operationId":"list_git_repositories_api_v1_git_repositories__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Items to skip","default":0,"title":"Offset"},"description":"Items to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/{repository_id}":{"get":{"tags":["git-integration","Git Integration"],"summary":"Get Git Repository","description":"Get a git repository by ID.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with repository details","operationId":"get_git_repository_api_v1_git_repositories__repository_id__get","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["git-integration","Git Integration"],"summary":"Update Git Repository","description":"Update a git repository.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    repository_data: Repository update data\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"update_git_repository_api_v1_git_repositories__repository_id__patch","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitRepositoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["git-integration","Git Integration"],"summary":"Delete Git Repository","description":"Delete (soft delete) a git repository.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"delete_git_repository_api_v1_git_repositories__repository_id__delete","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/{repository_id}/analyze":{"post":{"tags":["git-integration","Git Integration"],"summary":"Trigger Repository Analysis","description":"Trigger analysis of a git repository (async background task).\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    analysis_request: Analysis configuration\n    background_tasks: FastAPI background tasks\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse indicating analysis job started with job_id","operationId":"trigger_repository_analysis_api_v1_git_repositories__repository_id__analyze_post","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/{repository_id}/generate-webhook-secret":{"post":{"tags":["git-integration","Git Integration"],"summary":"Generate Webhook Secret","description":"Generate a new webhook secret for a repository.\n\nCreates a cryptographically secure secret, stores it on the repository,\nand returns it once. The secret is NOT included in list/get responses.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with the generated webhook secret","operationId":"generate_webhook_secret_api_v1_git_repositories__repository_id__generate_webhook_secret_post","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/{repository_id}/analysis-status":{"get":{"tags":["git-integration","Git Integration"],"summary":"Get Repository Analysis Status","description":"Get analysis status for a repository.\n\nReturns the most recent job status from the distributed jobs system,\nalong with repository metadata and cache statistics.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with analysis status details including job information","operationId":"get_repository_analysis_status_api_v1_git_repositories__repository_id__analysis_status_get","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/repositories":{"post":{"tags":["git-integration","Git Integration"],"summary":"Link Repository To Asset","description":"Link a git repository to an asset.\n\nArgs:\n    asset_id: Asset public ID (UUID or name)\n    link_data: Link creation data\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with created link","operationId":"link_repository_to_asset_api_v1_assets__asset_id__repositories_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRepositoryLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["git-integration","Git Integration"],"summary":"List Repositories For Asset","description":"List all repositories linked to an asset.\n\nArgs:\n    asset_id: Asset public ID (UUID or name)\n    enabled_only: Only return enabled links\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with list of linked repositories","operationId":"list_repositories_for_asset_api_v1_assets__asset_id__repositories_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Enabled Only"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/repositories/{link_id}":{"patch":{"tags":["git-integration","Git Integration"],"summary":"Update Asset Repository Link","description":"Update asset-repository link configuration.\n\nArgs:\n    asset_id: Asset public ID (UUID or name)\n    link_id: Link ID (stringified internal ID)\n    link_config: Link configuration updates\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"update_asset_repository_link_api_v1_assets__asset_id__repositories__link_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRepositoryConfig"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["git-integration","Git Integration"],"summary":"Unlink Repository From Asset","description":"Unlink a repository from an asset.\n\nArgs:\n    asset_id: Asset public ID (UUID or name)\n    link_id: Link ID (stringified internal ID)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with success message","operationId":"unlink_repository_from_asset_api_v1_assets__asset_id__repositories__link_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/git-repositories/{repository_id}/assets":{"get":{"tags":["git-integration","Git Integration"],"summary":"List Assets For Repository","description":"List all assets linked to a specific repository.\n\nArgs:\n    repository_id: Repository public ID (UUID)\n    enabled_only: Only return enabled links\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with list of linked assets","operationId":"list_assets_for_repository_api_v1_git_repositories__repository_id__assets_get","parameters":[{"name":"repository_id","in":"path","required":true,"schema":{"type":"string","title":"Repository Id"}},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Enabled Only"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/code-changes":{"get":{"tags":["code-changes","Code Changes"],"summary":"Get Asset Code Changes","description":"Get correlated code changes for an asset.\n\nReturns git events (commits and PRs) from linked repositories that\nare correlated with this asset, scored by relevance.\n\nArgs:\n    asset_id: Asset internal ID\n    since: Number of days to look back (default 7, max 90)\n    ctx: Application context with session, user, and company info\n\nReturns:\n    StandardResponse with list of correlated code changes","operationId":"get_asset_code_changes_api_v1_assets__asset_id__code_changes_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Days to look back","default":7,"title":"Since"},"description":"Days to look back"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/authorize":{"get":{"tags":["slack","Slack Integration"],"summary":"Slack Oauth Authorize","description":"Initiate Slack OAuth authorization flow.\n\nRedirects user to Slack authorization page to install the app\nin their workspace.","operationId":"slack_oauth_authorize_api_v1_integrations_slack_oauth_authorize_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/get-url":{"get":{"tags":["slack","Slack Integration"],"summary":"Slack Oauth Get Url","description":"Get Slack OAuth authorization URL.\n\nReturns the OAuth URL for the frontend to redirect to.\nThis endpoint requires authentication to associate the OAuth flow\nwith the current user and company.","operationId":"slack_oauth_get_url_api_v1_integrations_slack_oauth_get_url_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/callback":{"get":{"tags":["slack","Slack Integration"],"summary":"Slack Oauth Callback","description":"Handle Slack OAuth callback.\n\nCalled by Slack after user authorizes the app. Exchanges the code\nfor a bot token and stores it.\n\nNote: This endpoint is publicly accessible (called by Slack redirect),\nso it uses the CSRF state for validation instead of AppContext.","operationId":"slack_oauth_callback_api_v1_integrations_slack_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OAuth authorization code","title":"Code"},"description":"OAuth authorization code"},{"name":"state","in":"query","required":true,"schema":{"type":"string","description":"CSRF state token","title":"State"},"description":"CSRF state token"},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Error code if user denied authorization","title":"Error"},"description":"Error code if user denied authorization"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections":{"get":{"tags":["slack","Slack Integration"],"summary":"Get Slack Oauth Connections","description":"Get Slack OAuth connections for the current company.\n\nReturns a list of connected Slack workspaces.","operationId":"get_slack_oauth_connections_api_v1_integrations_slack_oauth_connections_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections/{connection_id}":{"delete":{"tags":["slack","Slack Integration"],"summary":"Disconnect Slack Oauth","description":"Disconnect a Slack OAuth connection.\n\nRemoves the stored credentials and any associated destinations.\nDestinations using this OAuth connection will be deleted to prevent\norphaned destinations that would fail when sending alerts.","operationId":"disconnect_slack_oauth_api_v1_integrations_slack_oauth_connections__connection_id__delete","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections/{connection_id}/channels":{"get":{"tags":["slack","Slack Integration"],"summary":"List Slack Channels","description":"List available Slack channels for an OAuth connection.\n\nUses the stored bot token to fetch public channels from the workspace.","operationId":"list_slack_channels_api_v1_integrations_slack_oauth_connections__connection_id__channels_get","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections/{connection_id}/destinations":{"post":{"tags":["slack","Slack Integration"],"summary":"Create Slack Destination From Oauth","description":"Create an alert destination from a Slack OAuth connection.\n\nCreates a new alert destination that uses the OAuth bot token\nto send messages to the specified channel.","operationId":"create_slack_destination_from_oauth_api_v1_integrations_slack_oauth_connections__connection_id__destinations_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_create_slack_destination_from_oauth_api_v1_integrations_slack_oauth_connections__connection_id__destinations_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections/{connection_id}/validate":{"post":{"tags":["slack","Slack Integration"],"summary":"Validate Slack Connection","description":"Validate a Slack OAuth connection.\n\nTests that the stored bot token is still valid by calling Slack's auth.test API.\nThis does not send any messages, it only verifies the connection is working.","operationId":"validate_slack_connection_api_v1_integrations_slack_oauth_connections__connection_id__validate_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/oauth/connections/{connection_id}/test":{"post":{"tags":["slack","Slack Integration"],"summary":"Test Slack Connection","description":"Send a test message to verify Slack OAuth connection works.\n\nSends a simple test message to the specified channel.","operationId":"test_slack_connection_api_v1_integrations_slack_oauth_connections__connection_id__test_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"integer","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_test_slack_connection_api_v1_integrations_slack_oauth_connections__connection_id__test_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/interactions":{"post":{"tags":["slack","Slack Integration"],"summary":"Slack Interactions","description":"Handle Slack interactive component callbacks.\n\nThis endpoint receives button clicks, dropdown selections, and other\ninteractive actions from Slack messages. It verifies the request signature\nusing SLACK_SIGNING_SECRET, then routes actions to the appropriate handler.\n\nPublic endpoint - Slack calls this directly, no auth context.","operationId":"slack_interactions_api_v1_integrations_slack_interactions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sdk/assets":{"get":{"tags":["public-api","public-assets"],"summary":"List Assets","description":"List assets with optional filters.\n\nReturns a paginated list of assets in your organization.\nUse filters to narrow down the results.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nassets = client.assets.list(source=\"postgresql\", limit=100)\n```","operationId":"list_assets_api_v1_sdk_assets_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source type (e.g., postgresql, databricks)","title":"Source"},"description":"Filter by source type (e.g., postgresql, databricks)"},{"name":"asset_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset type (e.g., table, view)","title":"Asset Type"},"description":"Filter by asset type (e.g., table, view)"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in asset names","title":"Search"},"description":"Search in asset names"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of assets to return","default":50,"title":"Limit"},"description":"Maximum number of assets to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of assets to skip","default":0,"title":"Offset"},"description":"Number of assets to skip"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-assets"],"summary":"Create Asset","description":"Create a new asset (data source connection).\n\nRequires read-write API key scope. Does NOT auto-trigger schema discovery;\ncall POST /assets/{id}/discover explicitly when ready.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nasset = client.assets.create(\n    name=\"Production Warehouse\",\n    asset_type=\"snowflake\",\n    host=\"abc123.snowflakecomputing.com\",\n    database_name=\"ANALYTICS\",\n    username=\"readonly_user\",\n    password=\"...\",\n)\n```","operationId":"create_asset_api_v1_sdk_assets_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/assets/{asset_id}":{"get":{"tags":["public-api","public-assets"],"summary":"Get Asset","description":"Get a single asset by ID or qualified name.\n\nAccepts (in order of precedence):\n- Full UUID (e.g., \"550e8400-e29b-41d4-a716-446655440000\")\n- Short UUID prefix, 8+ chars (e.g., \"550e8400\")\n- Qualified name (e.g., \"postgresql.mydb\")\n- Asset name (e.g., \"My Analytics DB\")\n- Database name (e.g., \"mydb\")\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\n# By short UUID\nasset = client.assets.get(\"550e8400\")\n\n# By name\nasset = client.assets.get(\"My Analytics DB\")\n\n# By qualified name\nasset = client.assets.get(\"postgresql.mydb\")\n```","operationId":"get_asset_api_v1_sdk_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/assets/{asset_id}/test-connection":{"post":{"tags":["public-api","public-assets"],"summary":"Test Asset Connection","description":"Test connection to an asset.\n\nInitiates an async connection test job. Returns a job_id that can be\npolled via GET /sdk/jobs/{job_id} for status.\n\n**SDK Usage:**\n```python\nclient = Client()\njob = client.assets.test_connection(\"asset-uuid\")\n# Poll for result\nwhile job.status == \"running\":\n    job = client.jobs.get(job.job_id)\nprint(f\"Success: {job.result.is_successful}\")\n```","operationId":"test_asset_connection_api_v1_sdk_assets__asset_id__test_connection_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/assets/{asset_id}/discover":{"post":{"tags":["public-api","public-assets"],"summary":"Trigger Discovery","description":"Trigger schema discovery for an asset.\n\nQueues an async schema discovery job that crawls database metadata.\nReturns a job_id that can be polled via GET /sdk/jobs/{job_id}.\n\n**SDK Usage:**\n```python\nclient = Client()\njob = client.assets.trigger_discovery(\"asset-uuid\")\n# Poll for completion\nstatus = client.jobs.get(job.job_id)\n```","operationId":"trigger_discovery_api_v1_sdk_assets__asset_id__discover_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/summary":{"get":{"tags":["public-api","public-freshness"],"summary":"Get Freshness Summary","description":"Get a summary of freshness across all assets.\n\nReturns counts and rates for fresh, stale, and unknown assets.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.freshness.summary()\nprint(f\"Freshness rate: {summary.freshness_rate}%\")\n```","operationId":"get_freshness_summary_api_v1_sdk_freshness_summary_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/schedules":{"get":{"tags":["public-api","public-freshness"],"summary":"List Freshness Schedules","description":"List freshness monitoring schedules.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nschedules = client.freshness.list_schedules(asset_id=\"my-asset-uuid\")\nfor s in schedules:\n    print(f\"{s.table_path}: check every {s.check_interval}\")\n```","operationId":"list_freshness_schedules_api_v1_sdk_freshness_schedules_get","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset UUID or name","title":"Asset Id"},"description":"Filter by asset UUID or name"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-freshness"],"summary":"Create Freshness Schedule","description":"Create a freshness monitoring schedule.\n\n**SDK Usage:**\n```python\nclient = Client()\nschedule = client.freshness.create_schedule(\n    asset_id=\"my-asset-uuid\",\n    table_path=\"public.orders\",\n    check_interval=\"1h\",\n    expected_interval_hours=24,\n)\nprint(f\"Created schedule: {schedule.id}\")\n```","operationId":"create_freshness_schedule_api_v1_sdk_freshness_schedules_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFreshnessScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/schedules/bulk":{"post":{"tags":["public-api","public-freshness"],"summary":"Bulk Create Freshness Schedules","description":"Create multiple freshness monitoring schedules at once.\n\n**SDK Usage:**\n```python\nclient = Client()\nresult = client.freshness.bulk_create_schedules(\n    asset_id=\"my-asset-uuid\",\n    schedules=[\n        {\"table_path\": \"gold.orders\", \"check_interval\": \"1h\"},\n        {\"table_path\": \"gold.customers\", \"check_interval\": \"1h\"},\n    ],\n)\nprint(f\"Created {result['created']} of {len(result['results'])} schedules\")\n```","operationId":"bulk_create_freshness_schedules_api_v1_sdk_freshness_schedules_bulk_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateFreshnessScheduleRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/schedules/{schedule_id}":{"patch":{"tags":["public-api","public-freshness"],"summary":"Update Freshness Schedule","description":"Update a freshness schedule.\n\n**SDK Usage:**\n```python\nclient = Client()\nclient.freshness.update_schedule(\n    schedule_id=\"123\",\n    is_active=False,\n)\n```","operationId":"update_freshness_schedule_api_v1_sdk_freshness_schedules__schedule_id__patch","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFreshnessScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-freshness"],"summary":"Delete Freshness Schedule","description":"Delete a freshness schedule.\n\n**SDK Usage:**\n```python\nclient = Client()\nclient.freshness.delete_schedule(\"123\")\n```","operationId":"delete_freshness_schedule_api_v1_sdk_freshness_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/dry-run":{"post":{"tags":["public-api","public-freshness"],"summary":"Freshness Dry Run","description":"Dry-run a freshness threshold against historical data.\n\nTests a proposed freshness threshold against a table's actual update history\nto predict how many alerts would fire. This helps users tune thresholds\nbefore enabling monitoring.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nresult = client.freshness.dry_run(\n    asset_id=\"my-asset-uuid\",\n    table_path=\"public.orders\",\n    expected_interval_hours=2.0,\n    lookback_days=7,\n)\n\nprint(f\"Alert rate: {result.alert_rate_percent}%\")\nprint(f\"Recommendation: {result.recommendation}\")\n```","operationId":"freshness_dry_run_api_v1_sdk_freshness_dry_run_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessDryRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/{asset_id}":{"get":{"tags":["public-api","public-freshness"],"summary":"Get Asset Freshness","description":"Get freshness status for a specific asset.\n\nThe asset_id can be either a UUID or qualified name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nfreshness = client.freshness.get(\"postgresql.mydb.public.users\")\nif freshness.is_stale:\n    print(f\"Stale for {freshness.hours_since_update} hours\")\n```\n\n**CLI Usage:**\n```bash\narmor freshness get postgresql.mydb.public.users\n```","operationId":"get_asset_freshness_api_v1_sdk_freshness__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness":{"get":{"tags":["public-api","public-freshness"],"summary":"List Freshness","description":"List freshness status for all assets.\n\nReturns freshness information for all monitored assets.\nUse the status filter to show only stale or fresh assets.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\n# Get all stale assets\nstale = client.freshness.list(status=\"stale\")\nfor item in stale:\n    print(f\"{item.qualified_name}: {item.hours_since_update}h stale\")\n```","operationId":"list_freshness_api_v1_sdk_freshness_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: fresh, stale, unknown, disabled","title":"Status"},"description":"Filter by status: fresh, stale, unknown, disabled"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/freshness/{asset_id}/refresh":{"post":{"tags":["public-api","public-freshness"],"summary":"Trigger Freshness Refresh","description":"Trigger a freshness check for an asset.\n\nRequires read-write or admin scope.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nresult = client.freshness.refresh(\"postgresql.mydb.public.users\")\nprint(f\"Job ID: {result.job_id}\")\n```\n\n**CLI Usage:**\n```bash\narmor freshness refresh postgresql.mydb.public.users\n```","operationId":"trigger_freshness_refresh_api_v1_sdk_freshness__asset_id__refresh_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/summary":{"get":{"tags":["public-api","public-schema"],"summary":"Get Schema Summary","description":"Get a summary of schema changes across all assets.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.schema.summary()\nif summary.critical_count > 0:\n    print(f\"Warning: {summary.critical_count} critical schema changes!\")\n```","operationId":"get_schema_summary_api_v1_sdk_schema_summary_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/changes":{"get":{"tags":["public-api","public-schema"],"summary":"List Schema Changes","description":"List schema changes with optional filters.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\n# Get unacknowledged critical changes\nchanges = client.schema.changes(severity=\"critical\", unacknowledged_only=True)\n```\n\n**CLI Usage:**\n```bash\narmor schema changes --severity critical --unacknowledged\n```","operationId":"list_schema_changes_api_v1_sdk_schema_changes_get","parameters":[{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset ID or qualified name","title":"Asset Id"},"description":"Filter by asset ID or qualified name"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity: critical, warning, info","title":"Severity"},"description":"Filter by severity: critical, warning, info"},{"name":"unacknowledged_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show unacknowledged changes","default":false,"title":"Unacknowledged Only"},"description":"Only show unacknowledged changes"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/{asset_id}/baseline":{"post":{"tags":["public-api","public-schema"],"summary":"Create Schema Baseline","description":"Create a schema baseline for drift detection.\n\nCaptures the current schema as the baseline. Any future schema changes\nwill be compared against this baseline.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nbaseline = client.schema.create_baseline(\n    asset_id=\"my-asset-uuid\",\n    description=\"Initial production baseline\",\n)\nprint(f\"Captured {baseline.table_count} tables\")\n```","operationId":"create_schema_baseline_api_v1_sdk_schema__asset_id__baseline_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBaselineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/{asset_id}/monitoring":{"post":{"tags":["public-api","public-schema"],"summary":"Enable Schema Monitoring","description":"Enable scheduled schema monitoring for an asset.\n\nCreates or updates a monitoring schedule that automatically runs\nschema drift detection at the configured interval.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nconfig = client.schema.enable_monitoring(\n    asset_id=\"my-asset-uuid\",\n    schedule_type=\"daily\",\n)\nprint(f\"Next check: {config.next_check_at}\")\n```","operationId":"enable_schema_monitoring_api_v1_sdk_schema__asset_id__monitoring_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableSchemaMonitoringRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-schema"],"summary":"Disable Schema Monitoring","description":"Disable schema monitoring for an asset (keeps baseline).\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nclient.schema.disable_monitoring(asset_id=\"my-asset-uuid\")\n```","operationId":"disable_schema_monitoring_api_v1_sdk_schema__asset_id__monitoring_delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/dry-run":{"post":{"tags":["public-api","public-schema"],"summary":"Schema Dry Run","description":"Dry-run schema drift detection against current baseline.\n\nCompares the current schema against the baseline to preview what changes\nwould be detected without actually triggering alerts or persisting changes.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nresult = client.schema.dry_run(\n    asset_id=\"my-asset-uuid\",\n    schedule_type=\"daily\",\n)\n\nprint(f\"Changes detected: {result.changes_detected}\")\nprint(f\"Total changes: {result.total_changes}\")\nprint(f\"Recommendation: {result.recommendation}\")\n```","operationId":"schema_dry_run_api_v1_sdk_schema_dry_run_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDryRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/schema/{asset_id}":{"get":{"tags":["public-api","public-schema"],"summary":"Get Asset Schema","description":"Get current schema and recent changes for an asset.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nschema = client.schema.get(\"postgresql.mydb.public.users\")\n```","operationId":"get_asset_schema_api_v1_sdk_schema__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/lineage/{asset_id}":{"get":{"tags":["public-api","public-lineage"],"summary":"Get Asset Lineage","description":"Get lineage graph for an asset.\n\nReturns upstream (dependencies) and downstream (dependents) assets.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nlineage = client.lineage.get(\"postgresql.mydb.public.users\", depth=2)\nfor upstream in lineage.upstream:\n    print(f\"Depends on: {upstream.qualified_name}\")\n```\n\n**CLI Usage:**\n```bash\narmor lineage get postgresql.mydb.public.users --depth 2\n```","operationId":"get_asset_lineage_api_v1_sdk_lineage__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","maximum":5,"minimum":1,"description":"How many levels of lineage to fetch","default":1,"title":"Depth"},"description":"How many levels of lineage to fetch"},{"name":"direction","in":"query","required":false,"schema":{"type":"string","description":"Direction: upstream, downstream, or both","default":"both","title":"Direction"},"description":"Direction: upstream, downstream, or both"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/lineage":{"get":{"tags":["public-api","public-lineage"],"summary":"List Lineage Roots","description":"List all assets that have lineage information.\n\nReturns assets that are either sources or targets in the lineage graph.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nroots = client.lineage.list()\n```","operationId":"list_lineage_roots_api_v1_sdk_lineage_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/summary":{"get":{"tags":["public-api","public-alerts"],"summary":"Get Alerts Summary","description":"Get a summary of alerts and rules.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.alerts.summary()\nif summary.unresolved_alerts > 0:\n    print(f\"You have {summary.unresolved_alerts} unresolved alerts\")\n```","operationId":"get_alerts_summary_api_v1_sdk_alerts_summary_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts":{"get":{"tags":["public-api","public-alerts"],"summary":"List Alerts","description":"List alerts with optional filters.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\n# Get unresolved critical alerts\nalerts = client.alerts.list(severity=\"critical\", status=\"triggered\")\n\n# Get alerts from yesterday\nfrom datetime import datetime, timedelta\nyesterday = datetime.now() - timedelta(days=1)\nalerts = client.alerts.list(from_date=yesterday.isoformat())\n```\n\n**CLI Usage:**\n```bash\narmor alerts list --severity critical --status triggered\narmor alerts list --from-date 2026-01-29T00:00:00Z\n```","operationId":"list_alerts_api_v1_sdk_alerts_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: triggered, acknowledged, resolved","title":"Status"},"description":"Filter by status: triggered, acknowledged, resolved"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity: info, warning, critical","title":"Severity"},"description":"Filter by severity: info, warning, critical"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset ID or qualified name","title":"Asset Id"},"description":"Filter by asset ID or qualified name"},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter alerts triggered on or after this timestamp (ISO 8601)","examples":["2026-01-29T00:00:00Z"],"title":"From Date"},"description":"Filter alerts triggered on or after this timestamp (ISO 8601)"},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter alerts triggered on or before this timestamp (ISO 8601)","examples":["2026-01-30T23:59:59Z"],"title":"To Date"},"description":"Filter alerts triggered on or before this timestamp (ISO 8601)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/inbox":{"get":{"tags":["public-api","public-alerts"],"summary":"List Inbox Alerts Sdk","description":"List inbox alerts that can be acknowledged/resolved/dismissed.\n\nUnlike the list endpoint, inbox alerts are the actual alert instances\nthat support lifecycle actions like acknowledge(), resolve(), dismiss().\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\n# Get all new alerts\nalerts = client.alerts.list_inbox(state=\"new\")\nfor alert in alerts:\n    print(f\"[{alert.severity}] {alert.title}\")\n    # Acknowledge this alert\n    client.alerts.acknowledge(alert.id, notes=\"Investigating\")\n```","operationId":"list_inbox_alerts_sdk_api_v1_sdk_alerts_inbox_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state: new, acknowledged, resolved, dismissed","title":"State"},"description":"Filter by state: new, acknowledged, resolved, dismissed"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity: info, warning, critical","title":"Severity"},"description":"Filter by severity: info, warning, critical"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type: freshness_sla_violation, schema_change, etc.","title":"Event Type"},"description":"Filter by event type: freshness_sla_violation, schema_change, etc."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/rules":{"get":{"tags":["public-api","public-alerts"],"summary":"List Alert Rules","description":"List alert rules.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nrules = client.alerts.rules()\n```","operationId":"list_alert_rules_api_v1_sdk_alerts_rules_get","parameters":[{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show enabled rules","default":false,"title":"Enabled Only"},"description":"Only show enabled rules"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-alerts"],"summary":"Create alert rule","description":"Create a new alert rule.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nrule = client.alerts.create_rule(\n    name=\"Critical Freshness Alerts\",\n    destination_ids=[\"dest-uuid-1\"],\n    event_types=[\"freshness_alert\"],\n    severities=[\"critical\"]\n)\n```","operationId":"create_alert_rule_api_v1_sdk_alerts_rules_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__shared__api__v1__public__alerts__CreateAlertRuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/rules/{rule_id}":{"get":{"tags":["public-api","public-alerts"],"summary":"Get alert rule","description":"Get a specific alert rule by ID.","operationId":"get_alert_rule_api_v1_sdk_alerts_rules__rule_id__get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["public-api","public-alerts"],"summary":"Update alert rule","description":"Update an alert rule.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nrule = client.alerts.update_rule(\n    rule_id=\"uuid\",\n    name=\"Updated Name\",\n    is_active=False\n)\n```","operationId":"update_alert_rule_api_v1_sdk_alerts_rules__rule_id__put","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__shared__api__v1__public__alerts__UpdateAlertRuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-alerts"],"summary":"Delete alert rule","description":"Delete an alert rule.","operationId":"delete_alert_rule_api_v1_sdk_alerts_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/destinations":{"get":{"tags":["public-api","public-alerts"],"summary":"List alert destinations","description":"List alert destinations.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\ndestinations = client.alerts.list_destinations()\n```","operationId":"list_alert_destinations_api_v1_sdk_alerts_destinations_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show active destinations","default":false,"title":"Active Only"},"description":"Only show active destinations"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-alerts"],"summary":"Create alert destination","description":"Create a new alert destination.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\ndest = client.alerts.create_destination(\n    name=\"Slack #alerts\",\n    destination_type=\"slack\",\n    config={\"webhook_url\": \"https://hooks.slack.com/...\"}\n)\n```","operationId":"create_alert_destination_api_v1_sdk_alerts_destinations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__shared__api__v1__public__alerts__CreateDestinationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/destinations/{destination_id}":{"get":{"tags":["public-api","public-alerts"],"summary":"Get alert destination","description":"Get a specific alert destination by ID.","operationId":"get_alert_destination_api_v1_sdk_alerts_destinations__destination_id__get","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-alerts"],"summary":"Delete alert destination","description":"Delete an alert destination.","operationId":"delete_alert_destination_api_v1_sdk_alerts_destinations__destination_id__delete","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["public-api","public-alerts"],"summary":"Update alert destination","description":"Update an alert destination.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\ndest = client.alerts.update_destination(\n    \"dest-uuid\",\n    name=\"Updated Name\",\n    is_active=False,\n)\n```","operationId":"update_alert_destination_api_v1_sdk_alerts_destinations__destination_id__put","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__shared__api__v1__public__alerts__UpdateDestinationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/destinations/{destination_id}/test":{"post":{"tags":["public-api","public-alerts"],"summary":"Test alert destination","description":"Test an alert destination by sending a test notification.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nresult = client.alerts.test_destination(\"dest-uuid\")\nprint(result[\"message\"])\n```","operationId":"test_alert_destination_sdk_api_v1_sdk_alerts_destinations__destination_id__test_post","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/acknowledge":{"post":{"tags":["public-api","public-alerts"],"summary":"Acknowledge an alert","description":"Acknowledge an alert - mark as seen/being worked on.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.alerts.acknowledge(\"alert-uuid\", notes=\"Looking into this\")\n```","operationId":"acknowledge_alert_api_v1_sdk_alerts__alert_id__acknowledge_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/resolve":{"post":{"tags":["public-api","public-alerts"],"summary":"Resolve an alert","description":"Resolve an alert - mark as fixed.\n\nAccepts optional resolution metadata: action_category, root_cause_category,\npr_url, and other fields from ResolutionFields.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.alerts.resolve(\n    \"alert-uuid\",\n    notes=\"Fixed the pipeline\",\n    action_category=\"updated_sql\",\n    root_cause_category=\"pipeline_failure\",\n    pr_url=\"https://github.com/org/repo/pull/123\",\n)\n```","operationId":"resolve_alert_api_v1_sdk_alerts__alert_id__resolve_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/dismiss":{"post":{"tags":["public-api","public-alerts"],"summary":"Dismiss an alert","description":"Dismiss an alert - mark as false positive or expected behavior.\n\nAccepts optional resolution metadata: action_category, root_cause_category,\npr_url, and other fields from ResolutionFields.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.alerts.dismiss(\n    \"alert-uuid\",\n    notes=\"Expected maintenance\",\n    action_category=\"expected_behavior\",\n    root_cause_category=\"expected_behavior\",\n)\n```","operationId":"dismiss_alert_api_v1_sdk_alerts__alert_id__dismiss_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DismissAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/snooze":{"post":{"tags":["public-api","public-alerts"],"summary":"Snooze an alert","description":"Snooze an alert for a specified duration.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n# Snooze for 24 hours\nresult = client.alerts.snooze(\"alert-uuid\", duration_hours=24)\n```","operationId":"snooze_alert_api_v1_sdk_alerts__alert_id__snooze_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnoozeAlertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/history":{"get":{"tags":["public-api","public-alerts"],"summary":"Get alert resolution history","description":"Get resolution history for an alert.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nhistory = client.alerts.history(\"alert-uuid\")\nfor entry in history:\n    print(f\"{entry['action']} at {entry['timestamp']}\")\n```","operationId":"get_alert_history_api_v1_sdk_alerts__alert_id__history_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/{alert_id}/investigation":{"get":{"tags":["public-api","public-alerts"],"summary":"Get investigation for alert","description":"Get investigation for a specific alert.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ninvestigation = client.alerts.investigation(\"alert-uuid\")\n```","operationId":"get_alert_investigation_sdk_api_v1_sdk_alerts__alert_id__investigation_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/trends":{"get":{"tags":["public-api","public-alerts"],"summary":"Get alert trends","description":"Get alert volume trends over time.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ntrends = client.alerts.trends(period=\"30d\")\n```","operationId":"get_alert_trends_api_v1_sdk_alerts_trends_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Period: 24h, 7d, 30d, 90d","default":"7d","title":"Period"},"description":"Period: 24h, 7d, 30d, 90d"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/preview":{"post":{"tags":["public-api","public-alerts"],"summary":"Preview Alerts","description":"Preview which alerts match given filter criteria.\n\nAnalyzes historical alerts to show how many would match the specified\nfilters. Useful for tuning alert rules or understanding alert patterns.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\n\nresult = client.alerts.preview(\n    event_types=[\"freshness_stale\"],\n    severities=[\"critical\"],\n    lookback_hours=24,\n)\n\nprint(f\"Matching alerts: {result.alerts_would_match}\")\nprint(f\"By severity: {result.alerts_by_severity}\")\n```","operationId":"preview_alerts_api_v1_sdk_alerts_preview_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertPreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/rules/{rule_id}/destinations":{"get":{"tags":["public-api","public-alerts"],"summary":"List rule destinations","description":"List destinations linked to a specific alert rule.","operationId":"list_rule_destinations_api_v1_sdk_alerts_rules__rule_id__destinations_get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-alerts"],"summary":"Link destinations to rule","description":"Link one or more destinations to an alert rule.","operationId":"link_destinations_to_rule_api_v1_sdk_alerts_rules__rule_id__destinations_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkDestinationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/rules/{rule_id}/destinations/{destination_id}":{"delete":{"tags":["public-api","public-alerts"],"summary":"Unlink destination from rule","description":"Unlink a destination from an alert rule.","operationId":"unlink_destination_from_rule_api_v1_sdk_alerts_rules__rule_id__destinations__destination_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","title":"Destination Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/destinations/bulk":{"post":{"tags":["public-api","public-alerts"],"summary":"Bulk create destinations","description":"Create multiple alert destinations in a single request (all-or-nothing).","operationId":"bulk_create_destinations_api_v1_sdk_alerts_destinations_bulk_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateDestinationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/briefings/today":{"get":{"tags":["public-api","public-briefings"],"summary":"Get Briefing Today","description":"Get today's briefing. Generates on-demand if not yet available.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nbriefing = client.briefings.today()\n```","operationId":"get_briefing_today_api_v1_sdk_briefings_today_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/coverage/company":{"get":{"tags":["public-api","public-coverage"],"summary":"Get Company Coverage","description":"Get company-wide coverage rollup across all assets.\n\nReturns average score, per-asset breakdown, tier distribution,\nand lowest-coverage assets for prioritization.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ncoverage = client.coverage.company()\nprint(f\"Company score: {coverage.company_score}\")\n```","operationId":"get_company_coverage_api_v1_sdk_coverage_company_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/coverage/{asset_id}":{"get":{"tags":["public-api","public-coverage"],"summary":"Get Asset Coverage","description":"Get coverage score, tier, and per-feature breakdown for an asset.\n\nReturns weighted score (0-100), current tier, per-feature breakdown\nwith counts and percentages, and actions to reach the next tier.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ncoverage = client.coverage.get(\"asset-uuid\")\nprint(f\"Tier: {coverage.tier_label} (score: {coverage.score})\")\n```","operationId":"get_asset_coverage_api_v1_sdk_coverage__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/coverage/{asset_id}/gaps":{"get":{"tags":["public-api","public-coverage"],"summary":"Get Coverage Gaps","description":"Get prioritized monitoring gaps for an asset.\n\nReturns unmonitored tables ranked by importance with suggested\nmonitoring types. Use POST /coverage/{asset_id}/apply to implement.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ngaps = client.coverage.gaps(\"asset-uuid\")\nfor rec in gaps.recommendations:\n    print(f\"{rec.table_path}: {rec.suggested_monitoring}\")\n```","operationId":"get_coverage_gaps_api_v1_sdk_coverage__asset_id__gaps_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/coverage/{asset_id}/apply":{"post":{"tags":["public-api","public-coverage"],"summary":"Apply Coverage Recommendations","description":"Apply monitoring recommendations in batch.\n\nImplements suggested monitoring (freshness, metrics, schema_drift)\nusing existing shared operations. Returns every created resource ID\nfor undo capability.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.coverage.apply(\"asset-uuid\", types=[\"freshness\", \"metrics\"])\nprint(f\"Applied: {len(result.applied)}, Failed: {len(result.failed)}\")\n```","operationId":"apply_coverage_recommendations_api_v1_sdk_coverage__asset_id__apply_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyRecommendationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations":{"post":{"tags":["public-api","public-investigations"],"summary":"Trigger Investigation","description":"Trigger an investigation for an alert.\n\nReturns immediately with investigation ID. Poll GET /investigations/{id}\nfor results. Investigation runs asynchronously (typically completes in <30s).","operationId":"trigger_investigation_api_v1_sdk_alerts_investigations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerInvestigationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public-api","public-investigations"],"summary":"List Investigations","description":"List investigations for the company.","operationId":"list_investigations_api_v1_sdk_alerts_investigations_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations/{investigation_id}/reinvestigate":{"post":{"tags":["public-api","public-investigations"],"summary":"Reinvestigate","description":"Re-run investigation with fresh data.\n\nMarks the previous investigation as superseded and creates a new one.","operationId":"reinvestigate_api_v1_sdk_alerts_investigations__investigation_id__reinvestigate_post","parameters":[{"name":"investigation_id","in":"path","required":true,"schema":{"type":"string","title":"Investigation Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations/{investigation_id}":{"get":{"tags":["public-api","public-investigations"],"summary":"Get Investigation","description":"Get investigation results by investigation ID.","operationId":"get_investigation_api_v1_sdk_alerts_investigations__investigation_id__get","parameters":[{"name":"investigation_id","in":"path","required":true,"schema":{"type":"string","title":"Investigation Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations/bulk":{"post":{"tags":["public-api","public-investigations"],"summary":"Bulk Investigate","description":"Trigger investigations for multiple alerts (max 20).\n\nReturns investigation IDs for each. Investigations run in parallel.","operationId":"bulk_investigate_api_v1_sdk_alerts_investigations_bulk_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkInvestigateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations/{investigation_id}/feedback":{"post":{"tags":["public-api","public-investigations"],"summary":"Submit Investigation Feedback","description":"Submit feedback on investigation quality.","operationId":"submit_investigation_feedback_api_v1_sdk_alerts_investigations__investigation_id__feedback_post","parameters":[{"name":"investigation_id","in":"path","required":true,"schema":{"type":"string","title":"Investigation Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestigationFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/alerts/investigations/explain":{"post":{"tags":["public-api","public-investigations"],"summary":"Explain Asset","description":"TECH-982: synchronous asset investigation returning an EvidenceCapsule.\n\nRuns the same correlator pipeline as alert-driven investigations but\ndoes not persist an AlertInvestigation row. Use when you have an\nasset and a question but no firing alert.","operationId":"explain_asset_api_v1_sdk_alerts_investigations_explain_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplainAssetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/health/summary":{"get":{"tags":["public-api","public-health"],"summary":"Get Health Summary","description":"Get unified health summary across all monitoring dimensions.\n\nAggregates data from alerts, freshness, and schema drift summaries.\nDesigned for AI skills to answer \"is my data healthy?\" in a single call.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nhealth = client.health.summary()\nprint(f\"Status: {health.overall_status}\")\n```","operationId":"get_health_summary_api_v1_sdk_health_summary_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/incidents":{"get":{"tags":["public-api","public-incidents"],"summary":"List Incidents","description":"List incidents for the current company with optional filters.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nincidents = client.alerts.list_incidents(status=\"open\", severity=\"critical\")\n```","operationId":"list_incidents_api_v1_sdk_incidents_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum results","default":50,"title":"Limit"},"description":"Maximum results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/incidents/{incident_id}":{"get":{"tags":["public-api","public-incidents"],"summary":"Get Incident","description":"Get full incident detail including activity timeline.\n\n**SDK Usage:**\n```python\nincident = client.alerts.get_incident(\"incident-uuid\")\n```","operationId":"get_incident_api_v1_sdk_incidents__incident_id__get","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/incidents/{incident_id}/comment":{"post":{"tags":["public-api","public-incidents"],"summary":"Add Incident Comment","description":"Add a comment to the incident activity timeline.\n\n**SDK Usage:**\n```python\nclient.alerts.comment_on_incident(\"incident-uuid\", \"Investigating root cause\")\n```","operationId":"add_incident_comment_api_v1_sdk_incidents__incident_id__comment_post","parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Incident Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCommentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/intelligence/ask":{"post":{"tags":["public-api","public-intelligence"],"summary":"Ask intelligence question","description":"Ask a question using Intelligence Q&A with Knowledge Base RAG.\n\nThis endpoint provides programmatic access to AnomalyArmor's intelligence\nQ&A system. It uses the generated markdown knowledge base as context\nfor accurate and comprehensive answers.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nanswer = client.intelligence.ask(\n    asset=\"postgresql.analytics\",\n    question=\"list upstream tables for schema.table_name\"\n)\nprint(answer.answer)\n```\n\n**CLI Usage:**\n```bash\naa intelligence ask postgresql.analytics \"list upstream tables for schema.table_name\"\n```","operationId":"intelligence_ask_api_v1_sdk_intelligence_ask_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelligenceAskRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/intelligence/generate":{"post":{"tags":["public-api","public-intelligence"],"summary":"Generate intelligence for an asset","description":"Trigger intelligence generation for an asset.\n\nThis endpoint triggers AI analysis of the asset's schema to generate\ndescriptions, summaries, and a knowledge base for Q&A.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nresult = client.intelligence.generate(asset=\"postgresql.analytics\")\nprint(f\"Job ID: {result.job_id}\")\n```\n\n**CLI Usage:**\n```bash\narmor intelligence generate postgresql.analytics\n```","operationId":"intelligence_generate_api_v1_sdk_intelligence_generate_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelligenceGenerateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/intelligence/{asset_id}/knowledge-base":{"get":{"tags":["public-api","public-intelligence"],"summary":"Get Asset Knowledge Base","description":"Load knowledge base context for an asset.\n\nReturns the full markdown KB content for LLM system prompt enrichment.\nMCP clients call this once per session to load asset intelligence.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nkb = client.intelligence.knowledge_base(\"asset-uuid\")\nif kb.available:\n    print(kb.markdown)  # Full asset KB for LLM context\n```","operationId":"get_asset_knowledge_base_api_v1_sdk_intelligence__asset_id__knowledge_base_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/jobs/{job_id}":{"get":{"tags":["public-api","public-jobs"],"summary":"Get job status","description":"Get the status of a job.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nstatus = client.jobs.status(\"b74fc72f-0332-427e-b508-e718f7b71a5d\")\nprint(f\"Status: {status.status}\")\n```\n\n**CLI Usage:**\n```bash\narmor jobs status b74fc72f-0332-427e-b508-e718f7b71a5d\n```","operationId":"get_job_status_api_v1_sdk_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-jobs"],"summary":"Cancel a job","description":"Cancel a running or pending job.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nclient.jobs.cancel(\"b74fc72f-0332-427e-b508-e718f7b71a5d\")\n```","operationId":"cancel_job_api_v1_sdk_jobs__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/tags":{"post":{"tags":["public-api","public-tags"],"summary":"Create Tag","description":"Create a custom tag for an asset.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\ntag = client.tags.create(\n    asset=\"postgresql.analytics\",\n    name=\"financial_reporting\",\n    category=\"business\"\n)\n```\n\n**CLI Usage:**\n```bash\naa tags create \"financial_reporting\" --asset postgresql.analytics\n```","operationId":"create_tag_api_v1_sdk_tags_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTagRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public-api","public-tags"],"summary":"List Tags","description":"List tags for an asset.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\ntags = client.tags.list(asset=\"postgresql.analytics\")\nfor tag in tags:\n    print(f\"{tag.name} ({tag.category})\")\n```\n\n**CLI Usage:**\n```bash\naa tags list --asset postgresql.analytics\n```","operationId":"list_tags_api_v1_sdk_tags_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset identifier (UUID or qualified name)","title":"Asset Id"},"description":"Asset identifier (UUID or qualified name)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/tags/apply":{"post":{"tags":["public-api","public-tags"],"summary":"Apply Tags","description":"Apply multiple tags to an asset.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nresult = client.tags.apply(\n    asset=\"postgresql.analytics\",\n    tag_names=[\"financial_reporting\", \"pii_data\"]\n)\n```\n\n**CLI Usage:**\n```bash\naa tags apply \"financial_reporting,pii_data\" --asset postgresql.analytics\n```","operationId":"apply_tags_api_v1_sdk_tags_apply_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__shared__api__v1__public__tags__ApplyTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/tags/bulk-apply":{"post":{"tags":["public-api","public-tags"],"summary":"Bulk Apply Tags","description":"Apply a tag to multiple assets.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nresult = client.tags.bulk_apply(\n    tag_name=\"financial_reporting\",\n    asset_ids=[\"postgresql.analytics\", \"postgresql.warehouse\"]\n)\n```\n\n**CLI Usage:**\n```bash\naa tags apply \"financial_reporting\" --assets \"postgresql.analytics,postgresql.warehouse\"\n```","operationId":"bulk_apply_tags_api_v1_sdk_tags_bulk_apply_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkApplyTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/badges":{"post":{"tags":["public-api","public-badges"],"summary":"Create badge","description":"Create a new report badge.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nbadge = client.badges.create(\n    asset=\"postgresql.analytics\",\n    label=\"Data Quality\",\n    tag_filters=[\"financial_reporting\"]\n)\nprint(f\"Badge URL: {badge.badge_url}\")\n```\n\n**CLI Usage:**\n```bash\naa badges create \"Data Quality\" --asset postgresql.analytics --tags \"financial_reporting\"\n```","operationId":"create_badge_api_v1_sdk_badges_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBadgeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["public-api","public-badges"],"summary":"List badges","description":"List all badges for the company.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\n\nclient = Client()\nbadges = client.badges.list()\nfor badge in badges:\n    print(f\"{badge.label}: {badge.badge_url}\")\n```\n\n**CLI Usage:**\n```bash\naa badges list\n```","operationId":"list_badges_api_v1_sdk_badges_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return active badges","default":true,"title":"Active Only"},"description":"Only return active badges"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/badges/{badge_id}":{"get":{"tags":["public-api","public-badges"],"summary":"Get badge","description":"Get badge details by public UUID.","operationId":"get_badge_api_v1_sdk_badges__badge_id__get","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"string","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["public-api","public-badges"],"summary":"Update badge","description":"Update a badge configuration.","operationId":"update_badge_api_v1_sdk_badges__badge_id__put","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"string","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBadgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-badges"],"summary":"Delete badge","description":"Delete a badge.","operationId":"delete_badge_api_v1_sdk_badges__badge_id__delete","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"string","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/badges/{badge_id}/status":{"get":{"tags":["public-api","public-badges"],"summary":"Get badge status","description":"Get the current status of a badge.\n\nReturns the badge status (passing, failing, unknown) based on\ncurrent data quality metrics.","operationId":"get_badge_status_api_v1_sdk_badges__badge_id__status_get","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"string","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/dry-run":{"post":{"tags":["public-api","public-metrics"],"summary":"Metrics Dry Run","description":"Dry-run a metric threshold against historical snapshots.\n\nTests how often a proposed threshold would have triggered alerts based on\nhistorical metric values.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.metrics.dry_run(\n    asset_id=\"asset-uuid\",\n    metric_id=\"metric-uuid\",\n    threshold_type=\"upper\",\n    threshold_value=1000,\n    lookback_days=7,\n)\nprint(f\"Alert rate: {result.alert_rate_percent}%\")\nprint(f\"Recommendation: {result.recommendation}\")\n```","operationId":"metrics_dry_run_api_v1_sdk_metrics_dry_run_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsDryRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/{asset_id}/summary":{"get":{"tags":["public-api","public-metrics"],"summary":"Get Metrics Summary","description":"Get metrics summary for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.metrics.summary(\"asset-uuid\")\nprint(f\"Active metrics: {summary.active_metrics}\")\n```","operationId":"get_metrics_summary_api_v1_sdk_metrics__asset_id__summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/{asset_id}":{"get":{"tags":["public-api","public-metrics"],"summary":"List Metrics","description":"List metrics for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nmetrics = client.metrics.list(\"asset-uuid\")\nfor m in metrics:\n    print(f\"{m.metric_type}: {m.latest_value}\")\n```","operationId":"list_metrics_api_v1_sdk_metrics__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by metric type","title":"Metric Type"},"description":"Filter by metric type"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-metrics"],"summary":"Create Metric","description":"Create a new metric.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nmetric = client.metrics.create(\n    \"asset-uuid\",\n    metric_type=\"null_percent\",\n    table_path=\"catalog.schema.table\",\n    column_name=\"email\",\n)\n```","operationId":"create_metric_api_v1_sdk_metrics__asset_id__post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricDefinitionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/{asset_id}/{metric_id}":{"get":{"tags":["public-api","public-metrics"],"summary":"Get Metric","description":"Get metric details with optional snapshots.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nmetric = client.metrics.get(\"asset-uuid\", \"metric-uuid\")\nprint(f\"Latest value: {metric.latest_value}\")\n```","operationId":"get_metric_api_v1_sdk_metrics__asset_id___metric_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"include_snapshots","in":"query","required":false,"schema":{"type":"boolean","description":"Include recent snapshots","default":true,"title":"Include Snapshots"},"description":"Include recent snapshots"},{"name":"snapshot_limit","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Max snapshots","default":30,"title":"Snapshot Limit"},"description":"Max snapshots"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["public-api","public-metrics"],"summary":"Update Metric","description":"Update a metric.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nmetric = client.metrics.update(\"asset-uuid\", \"metric-uuid\", is_active=False)\n```","operationId":"update_metric_api_v1_sdk_metrics__asset_id___metric_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-metrics"],"summary":"Delete Metric","description":"Delete a metric.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nclient.metrics.delete(\"asset-uuid\", \"metric-uuid\")\n```","operationId":"delete_metric_api_v1_sdk_metrics__asset_id___metric_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/{asset_id}/{metric_id}/capture":{"post":{"tags":["public-api","public-metrics"],"summary":"Trigger Metric Capture","description":"Trigger an immediate metric capture.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.metrics.capture(\"asset-uuid\", \"metric-uuid\")\nprint(f\"Captured {result['snapshot_count']} snapshots\")\n```","operationId":"trigger_metric_capture_api_v1_sdk_metrics__asset_id___metric_id__capture_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/metrics/{asset_id}/{metric_id}/snapshots":{"get":{"tags":["public-api","public-metrics"],"summary":"List Metric Snapshots","description":"List snapshots for a metric.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsnapshots = client.metrics.snapshots(\"asset-uuid\", \"metric-uuid\")\nfor s in snapshots:\n    print(f\"{s.captured_at}: {s.value}\")\n```","operationId":"list_metric_snapshots_api_v1_sdk_metrics__asset_id___metric_id__snapshots_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/validity/{asset_id}/summary":{"get":{"tags":["public-api","public-validity"],"summary":"Get Validity Summary","description":"Get validity summary for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.validity.summary(\"asset-uuid\")\nprint(f\"Failing rules: {summary.failing_rules}\")\n```","operationId":"get_validity_summary_api_v1_sdk_validity__asset_id__summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/validity/{asset_id}":{"get":{"tags":["public-api","public-validity"],"summary":"List Validity Rules","description":"List validity rules for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nrules = client.validity.list(\"asset-uuid\")\nfor r in rules:\n    print(f\"{r.rule_type} on {r.column_name}: {r.latest_status}\")\n```","operationId":"list_validity_rules_api_v1_sdk_validity__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rule type","title":"Rule Type"},"description":"Filter by rule type"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-validity"],"summary":"Create Validity Rule","description":"Create a new validity rule.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nrule = client.validity.create(\n    \"asset-uuid\",\n    rule_type=\"NOT_NULL\",\n    table_path=\"catalog.schema.table\",\n    column_name=\"email\",\n    severity=\"critical\",\n)\n```","operationId":"create_validity_rule_api_v1_sdk_validity__asset_id__post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidityRuleCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/validity/{asset_id}/{rule_id}":{"get":{"tags":["public-api","public-validity"],"summary":"Get Validity Rule","description":"Get validity rule details with recent results.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nrule = client.validity.get(\"asset-uuid\", \"rule-uuid\")\nprint(f\"Latest status: {rule.latest_status}\")\n```","operationId":"get_validity_rule_api_v1_sdk_validity__asset_id___rule_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["public-api","public-validity"],"summary":"Update Validity Rule","description":"Update a validity rule.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nrule = client.validity.update(\"asset-uuid\", \"rule-uuid\", severity=\"warning\")\n```","operationId":"update_validity_rule_api_v1_sdk_validity__asset_id___rule_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidityRuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-validity"],"summary":"Delete Validity Rule","description":"Delete a validity rule.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nclient.validity.delete(\"asset-uuid\", \"rule-uuid\")\n```","operationId":"delete_validity_rule_api_v1_sdk_validity__asset_id___rule_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/validity/{asset_id}/{rule_id}/check":{"post":{"tags":["public-api","public-validity"],"summary":"Trigger Validity Check","description":"Trigger an immediate validity check.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.validity.check(\"asset-uuid\", \"rule-uuid\")\nif result.status == \"fail\":\n    print(f\"{result.invalid_count} invalid records found\")\n```","operationId":"trigger_validity_check_api_v1_sdk_validity__asset_id___rule_id__check_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ValidityCheckTrigger"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/validity/{asset_id}/{rule_id}/results":{"get":{"tags":["public-api","public-validity"],"summary":"List Validity Check Results","description":"List historical results for a validity rule.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresults = client.validity.results(\"asset-uuid\", \"rule-uuid\")\nfor r in results:\n    print(f\"{r.checked_at}: {r.status}\")\n```","operationId":"list_validity_check_results_api_v1_sdk_validity__asset_id___rule_id__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/referential/{asset_id}/summary":{"get":{"tags":["public-api","public-referential"],"summary":"Get Referential Summary","description":"Get referential integrity summary for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nsummary = client.referential.summary(\"asset-uuid\")\nprint(f\"Failing checks: {summary.failing_checks}\")\n```","operationId":"get_referential_summary_api_v1_sdk_referential__asset_id__summary_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/referential/{asset_id}":{"get":{"tags":["public-api","public-referential"],"summary":"List Referential Checks","description":"List referential integrity checks for an asset.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nchecks = client.referential.list(\"asset-uuid\")\nfor c in checks:\n    print(f\"{c.child_table_path} -> {c.parent_table_path}: {c.latest_status}\")\n```","operationId":"list_referential_checks_api_v1_sdk_referential__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by active status","title":"Is Active"},"description":"Filter by active status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["public-api","public-referential"],"summary":"Create Referential Check","description":"Create a new referential integrity check.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ncheck = client.referential.create(\n    \"asset-uuid\",\n    child_table_path=\"catalog.schema.orders\",\n    child_column_name=\"customer_id\",\n    parent_table_path=\"catalog.schema.customers\",\n    parent_column_name=\"id\",\n)\n```","operationId":"create_referential_check_api_v1_sdk_referential__asset_id__post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferentialCheckCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/referential/{asset_id}/{check_id}":{"get":{"tags":["public-api","public-referential"],"summary":"Get Referential Check","description":"Get referential check details with latest result.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ncheck = client.referential.get(\"asset-uuid\", \"check-uuid\")\nprint(f\"Orphan count: {check.latest_result.orphan_count}\")\n```","operationId":"get_referential_check_api_v1_sdk_referential__asset_id___check_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["public-api","public-referential"],"summary":"Update Referential Check","description":"Update a referential check.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\ncheck = client.referential.update(\"asset-uuid\", \"check-uuid\", is_active=False)\n```","operationId":"update_referential_check_api_v1_sdk_referential__asset_id___check_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferentialCheckUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["public-api","public-referential"],"summary":"Delete Referential Check","description":"Delete a referential check.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nclient.referential.delete(\"asset-uuid\", \"check-uuid\")\n```","operationId":"delete_referential_check_api_v1_sdk_referential__asset_id___check_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/referential/{asset_id}/{check_id}/execute":{"post":{"tags":["public-api","public-referential"],"summary":"Execute Referential Check","description":"Execute a referential check immediately.\n\nRequires read-write or admin scope.\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresult = client.referential.execute(\"asset-uuid\", \"check-uuid\")\nif result.orphan_count > 0:\n    print(f\"Found {result.orphan_count} orphaned records\")\n```","operationId":"execute_referential_check_api_v1_sdk_referential__asset_id___check_id__execute_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/referential/{asset_id}/{check_id}/results":{"get":{"tags":["public-api","public-referential"],"summary":"List Referential Check Results","description":"List historical results for a referential check.\n\nAccepts asset UUID, qualified name (e.g., \"postgresql.mydb\"), or asset name.\n\n**SDK Usage:**\n```python\nfrom anomalyarmor import Client\nclient = Client()\nresults = client.referential.results(\"asset-uuid\", \"check-uuid\")\nfor r in results:\n    print(f\"{r.checked_at}: {r.orphan_count} orphans\")\n```","operationId":"list_referential_check_results_api_v1_sdk_referential__asset_id___check_id__results_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results","default":100,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/recommendations/freshness":{"get":{"tags":["public-api","public-recommendations"],"summary":"Get Freshness Recommendations","description":"Get freshness monitoring recommendations for an asset.\n\nAnalyzes historical update patterns to suggest:\n- Which tables need freshness monitoring\n- Appropriate check intervals based on detected patterns\n- Staleness thresholds based on observed update frequency\n\nRecommendations are ranked by confidence score, with higher confidence\nindicating more reliable patterns detected from historical data.","operationId":"get_freshness_recommendations_api_v1_sdk_recommendations_freshness_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID or identifier","title":"Asset Id"},"description":"Asset UUID or identifier"},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Minimum confidence threshold","default":0.5,"title":"Min Confidence"},"description":"Minimum confidence threshold"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum recommendations to return","default":20,"title":"Limit"},"description":"Maximum recommendations to return"},{"name":"include_monitored","in":"query","required":false,"schema":{"type":"boolean","description":"Include already-monitored tables","default":false,"title":"Include Monitored"},"description":"Include already-monitored tables"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/recommendations/metrics":{"get":{"tags":["public-api","public-recommendations"],"summary":"Get Metrics Recommendations","description":"Get metric recommendations based on schema analysis.\n\nAnalyzes column types, naming patterns, and constraints to suggest:\n- Appropriate metric types for each column\n- Check types (validity, referential, metric)\n- Priority based on business importance\n\nUses pattern matching from COMPLIANCE_PATTERNS and PII_TYPE_MAPPING\nto identify columns that warrant monitoring.","operationId":"get_metrics_recommendations_api_v1_sdk_recommendations_metrics_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID or identifier","title":"Asset Id"},"description":"Asset UUID or identifier"},{"name":"table_path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to specific table","title":"Table Path"},"description":"Filter to specific table"},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Minimum confidence threshold","default":0.5,"title":"Min Confidence"},"description":"Minimum confidence threshold"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Maximum recommendations to return","default":50,"title":"Limit"},"description":"Maximum recommendations to return"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/recommendations/coverage":{"get":{"tags":["public-api","public-recommendations"],"summary":"Get Coverage Recommendations","description":"Get coverage recommendations identifying unmonitored high-value tables.\n\nAnalyzes all tables in the asset and identifies:\n- Tables without monitoring that should have it\n- Importance scores based on naming patterns, size, and domain\n- Suggested monitoring types for each table\n\nUses IMPACT_PATTERNS and HeuristicIntelligenceService for\ntable importance scoring.","operationId":"get_coverage_recommendations_api_v1_sdk_recommendations_coverage_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID or identifier","title":"Asset Id"},"description":"Asset UUID or identifier"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum recommendations to return","default":20,"title":"Limit"},"description":"Maximum recommendations to return"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/recommendations/thresholds":{"get":{"tags":["public-api","public-recommendations"],"summary":"Get Threshold Recommendations","description":"Get threshold adjustment recommendations based on alert history.\n\nAnalyzes historical alerts to identify:\n- Thresholds causing too many false positives\n- Thresholds that could be tightened\n- Projected alert reduction from suggested changes\n\nRecommendations are based on alert frequency and metric variance analysis.","operationId":"get_threshold_recommendations_api_v1_sdk_recommendations_thresholds_get","parameters":[{"name":"asset_id","in":"query","required":true,"schema":{"type":"string","description":"Asset UUID or identifier","title":"Asset Id"},"description":"Asset UUID or identifier"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"description":"Historical window in days","default":30,"title":"Days"},"description":"Historical window in days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum recommendations to return","default":10,"title":"Limit"},"description":"Maximum recommendations to return"},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/slack/connections":{"get":{"tags":["public-api","public-slack"],"summary":"List Slack Connections","description":"List Slack OAuth connections for the current company.\n\n**SDK Usage:**\n```python\nconnections = client.alerts.list_slack_connections()\n```","operationId":"list_slack_connections_api_v1_sdk_slack_connections_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/slack/connections/{connection_id}/channels":{"get":{"tags":["public-api","public-slack"],"summary":"List Slack Channels","description":"List available Slack channels for an OAuth connection.\n\n**SDK Usage:**\n```python\nchannels = client.alerts.get_slack_channels(connection_id=\"...\")\n```","operationId":"list_slack_channels_api_v1_sdk_slack_connections__connection_id__channels_get","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/slack/connections/{connection_id}/destinations":{"post":{"tags":["public-api","public-slack"],"summary":"Create Slack Destination","description":"Create a Slack alert destination from an OAuth connection.\n\n**SDK Usage:**\n```python\ndest = client.alerts.create_slack_destination(\n    connection_id=\"...\",\n    channel_id=\"C0123456\",\n    channel_name=\"alerts-prod-critical\",\n)\n```","operationId":"create_slack_destination_api_v1_sdk_slack_connections__connection_id__destinations_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSlackDestinationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/slack/connections/{connection_id}/destinations/bulk":{"post":{"tags":["public-api","public-slack"],"summary":"Bulk Create Slack Destinations","description":"Bulk create Slack alert destinations from an OAuth connection (max 20).\n\n**SDK Usage:**\n```python\ndests = client.alerts.bulk_create_slack_destinations(\n    connection_id=\"...\",\n    channels=[\n        {\"channel_id\": \"C01\", \"channel_name\": \"alerts-critical\"},\n        {\"channel_id\": \"C02\", \"channel_name\": \"alerts-warning\"},\n    ],\n)\n```","operationId":"bulk_create_slack_destinations_api_v1_sdk_slack_connections__connection_id__destinations_bulk_post","parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateSlackDestinationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sdk/slack/oauth-url":{"get":{"tags":["public-api","public-slack"],"summary":"Get Slack Oauth Url","description":"Get the Slack OAuth authorization URL.\n\nUser must open the returned URL in their browser to authorize.\n\n**SDK Usage:**\n```python\nresult = client.alerts.get_slack_oauth_url()\nprint(f\"Open: {result['auth_url']}\")\n```","operationId":"get_slack_oauth_url_api_v1_sdk_slack_oauth_url_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/session":{"post":{"tags":["public-demo"],"summary":"Mint Demo Session","description":"Mint a fresh ephemeral aa_demo_* API key for the caller's IP.\n\nPublic (no auth). Per-IP rate-limited. Returns a read-only key that\nexpires one hour after mint.","operationId":"mint_demo_session_api_v1_demo_session_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/api/v1/badges":{"get":{"tags":["badges"],"summary":"List badges","description":"List all report badges for the current company.","operationId":"list_badges_api_v1_badges_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}},{"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"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["badges"],"summary":"Create badge","description":"Create a new report badge.","operationId":"create_badge_api_v1_badges_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/badges/{badge_id}":{"get":{"tags":["badges"],"summary":"Get badge","description":"Get a specific badge by ID.","operationId":"get_badge_api_v1_badges__badge_id__get","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"integer","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["badges"],"summary":"Update badge","description":"Update an existing badge.","operationId":"update_badge_api_v1_badges__badge_id__put","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"integer","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["badges"],"summary":"Delete badge","description":"Delete a badge.","operationId":"delete_badge_api_v1_badges__badge_id__delete","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"integer","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/badges/{badge_id}/status":{"get":{"tags":["badges"],"summary":"Get badge status","description":"Get the current status of a badge (for preview).","operationId":"get_badge_status_api_v1_badges__badge_id__status_get","parameters":[{"name":"badge_id","in":"path","required":true,"schema":{"type":"integer","title":"Badge Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/badges/preview":{"post":{"tags":["badges"],"summary":"Preview badge","description":"Preview badge status before creation.","operationId":"preview_badge_api_v1_badges_preview_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgePreviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/members":{"get":{"tags":["team","team"],"summary":"List Team Members","description":"List all company members (all authenticated users can view).\n\nReturns list of active users in the company with their roles.","operationId":"list_team_members_api_v1_team_members_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/seat-usage":{"get":{"tags":["team","team"],"summary":"Get Seat Usage","description":"Get current seat usage and limit.","operationId":"get_seat_usage_api_v1_team_seat_usage_get","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/invitations":{"post":{"tags":["team","team"],"summary":"Invite User","description":"Send user invitation (owner/admin only).\n\nCreates an invitation and sends an email to the specified address.\nThe invited user will receive a link to join the company.","operationId":"invite_user_api_v1_team_invitations_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["team","team"],"summary":"List Pending Invitations","description":"List pending invitations (owner/admin only).","operationId":"list_pending_invitations_api_v1_team_invitations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/invitations/{invitation_id}":{"delete":{"tags":["team","team"],"summary":"Revoke Invitation","description":"Revoke pending invitation (owner/admin only).","operationId":"revoke_invitation_api_v1_team_invitations__invitation_id__delete","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"integer","title":"Invitation Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/invitations/{invitation_id}/resend":{"post":{"tags":["team","team"],"summary":"Resend Invitation","description":"Resend invitation email and extend expiry (owner/admin only).","operationId":"resend_invitation_api_v1_team_invitations__invitation_id__resend_post","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"integer","title":"Invitation Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/members/{user_id}":{"delete":{"tags":["team","team"],"summary":"Remove Member","description":"Remove team member (owner/admin only).\n\nDeactivates the user's account. Cannot remove the company owner\nor yourself.","operationId":"remove_member_api_v1_team_members__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/members/{user_id}/role":{"patch":{"tags":["team","team"],"summary":"Change Member Role","description":"Change member role (owner only).\n\nOnly the company owner can change roles. Cannot change your own role\nor assign the owner role (ownership transfer is a separate operation).","operationId":"change_member_role_api_v1_team_members__user_id__role_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/invitations/validate":{"get":{"tags":["team","team"],"summary":"Validate Invitation","description":"Validate an invitation token (public, no auth required).\n\nUsed by the accept invitation page to show invitation details before\nthe user logs in or creates an account.","operationId":"validate_invitation_api_v1_team_invitations_validate_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Invitation token from email","title":"Token"},"description":"Invitation token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/team/invitations/accept":{"post":{"tags":["team","team"],"summary":"Accept Invitation","description":"Accept an invitation for an existing authenticated user.\n\nThis endpoint is for users who already have an account and want to\njoin a company via invitation. New users are auto-linked during signup.","operationId":"accept_invitation_api_v1_team_invitations_accept_post","parameters":[{"name":"Authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint that provides basic API information.\n\nReturns:\n    dict: Basic API information including documentation and health check URLs","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Root  Get"}}}}}}},"/api/v1/version":{"get":{"summary":"Get Version","description":"Get deployment version information.\n\nReturns version metadata including Git SHA, build timestamp, and environment.\nUseful for verifying deployments and debugging cache issues.","operationId":"get_version_api_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Get Version Api V1 Version Get"}}}}}}},"/env.js":{"get":{"summary":"Get Env Js","description":"Serve frontend environment configuration.\n\nThis endpoint serves the runtime environment configuration file\nthat the frontend loads to get dynamic environment variables.\nAlways generates production configuration from environment variables.\n\nReturns application/javascript MIME type for browser script execution.","operationId":"get_env_js_env_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AcceptInvitationRequest":{"properties":{"token":{"type":"string","title":"Token","description":"Invitation token from email link"}},"type":"object","required":["token"],"title":"AcceptInvitationRequest","description":"Request to accept an invitation."},"AcknowledgeAlertRequest":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Optional notes"}},"type":"object","title":"AcknowledgeAlertRequest","description":"Request to acknowledge an alert."},"AcknowledgeIncidentRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"AcknowledgeIncidentRequest","description":"Request to acknowledge an incident."},"AcknowledgeRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"AcknowledgeRequest","description":"Request to acknowledge an alert."},"AcknowledgeViolationRequest":{"properties":{"root_cause":{"$ref":"#/components/schemas/RootCauseCategory","description":"Root cause category"},"resolution_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution Notes","description":"Detailed resolution notes"}},"type":"object","required":["root_cause"],"title":"AcknowledgeViolationRequest","description":"Request to acknowledge an SLA violation."},"AddCommentRequest":{"properties":{"comment":{"type":"string","maxLength":5000,"minLength":1,"title":"Comment"}},"type":"object","required":["comment"],"title":"AddCommentRequest","description":"Request to add a comment to an incident."},"AddDestinationRequest":{"properties":{"destination_id":{"type":"string","format":"uuid","title":"Destination Id"}},"type":"object","required":["destination_id"],"title":"AddDestinationRequest","description":"Request schema for adding a destination to a rule."},"AddNoteRequest":{"properties":{"notes":{"type":"string","maxLength":2000,"minLength":1,"title":"Notes"}},"type":"object","required":["notes"],"title":"AddNoteRequest","description":"Request to add notes to an alert."},"AddTableToWatchlistRequest":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"table_name":{"type":"string","title":"Table Name"},"notification_preference":{"$ref":"#/components/schemas/NotificationPreference","default":"all"}},"type":"object","required":["asset_id","table_name"],"title":"AddTableToWatchlistRequest","description":"Request body for adding table to watchlist."},"AgentFeedbackRequest":{"properties":{"feedback":{"anyOf":[{"type":"string","pattern":"^(thumbs-up|thumbs-down|bug)$"},{"type":"null"}],"title":"Feedback"},"bug_report":{"anyOf":[{"$ref":"#/components/schemas/BugReportDetail"},{"type":"null"}]}},"type":"object","title":"AgentFeedbackRequest"},"AgentHistoryTurn":{"properties":{"role":{"type":"string","maxLength":32,"title":"Role"},"content":{"type":"string","maxLength":10000,"minLength":1,"title":"Content"}},"type":"object","required":["role","content"],"title":"AgentHistoryTurn","description":"One prior conversation turn replayed by the public demo (R1)."},"AgentMessageRequest":{"properties":{"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"message":{"type":"string","maxLength":10000,"minLength":1,"title":"Message"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"auto_approve":{"type":"boolean","title":"Auto Approve","default":true},"history":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentHistoryTurn"},"type":"array"},{"type":"null"}],"title":"History"}},"type":"object","required":["message"],"title":"AgentMessageRequest"},"AgentSessionUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":500,"minLength":1},{"type":"null"}],"title":"Title"},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"}},"type":"object","title":"AgentSessionUpdateRequest"},"AlertPreviewRequest":{"properties":{"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id","description":"Scope to specific asset (UUID or name)"},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Event types to match (freshness_sla_violation, schema_change, etc.)"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities","description":"Severity levels to match (info, warning, critical)"},"lookback_hours":{"type":"integer","maximum":168.0,"minimum":1.0,"title":"Lookback Hours","description":"Hours of alert history to analyze","default":24}},"type":"object","title":"AlertPreviewRequest","description":"Request to preview alert rule matches."},"AnalysisRequest":{"properties":{"force_full_scan":{"type":"boolean","title":"Force Full Scan","description":"Force full scan instead of incremental","default":false},"analyze_codeowners":{"type":"boolean","title":"Analyze Codeowners","description":"Analyze CODEOWNERS file","default":true},"analyze_git_blame":{"type":"boolean","title":"Analyze Git Blame","description":"Analyze git-blame data","default":true}},"type":"object","title":"AnalysisRequest","description":"Schema for requesting repository analysis."},"AnalysisType":{"type":"string","enum":["insight_generation","tag_suggestion","schema_analysis","data_quality","pattern_discovery","recommendation"],"title":"AnalysisType","description":"Types of intelligence analysis that can be performed."},"ApplyRecommendationsRequest":{"properties":{"types":{"items":{"type":"string","enum":["freshness","metrics","schema_drift"]},"type":"array","title":"Types","description":"Monitoring types to apply. Empty list means apply all. Valid: freshness, metrics, schema_drift"},"table_paths":{"items":{"type":"string"},"type":"array","title":"Table Paths","description":"Limit to specific tables. Empty means all recommended tables."}},"type":"object","title":"ApplyRecommendationsRequest","description":"Request to apply monitoring recommendations in batch."},"AssetCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"asset_type":{"type":"string","maxLength":50,"minLength":1,"title":"Asset Type"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":1.0},{"type":"null"}],"title":"Port"},"database_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"ssl_enabled":{"type":"boolean","title":"Ssl Enabled","default":false},"ssl_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssl Mode"},"ssl_ca_cert":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssl Ca Cert"},"default_catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Catalog"},"http_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Path"},"extra_params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Params"},"connection_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Connection Config"}},"type":"object","required":["name","asset_type"],"title":"AssetCreate","description":"Schema for creating a new asset."},"AssetDisplayMode":{"type":"string","enum":["list","grid","table"],"title":"AssetDisplayMode","description":"Asset display mode enumeration."},"AssetRepositoryConfig":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled","description":"Enable/disable analysis"},"min_confidence_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Min Confidence Threshold","description":"Minimum confidence threshold"},"lookback_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Lookback Days","description":"Lookback period in days"}},"type":"object","title":"AssetRepositoryConfig","description":"Schema for updating asset-repository configuration."},"AssetRepositoryLinkCreate":{"properties":{"repository_id":{"type":"string","title":"Repository Id","description":"Repository public ID (UUID)"},"enabled":{"type":"boolean","title":"Enabled","description":"Enable analysis for this asset","default":true},"min_confidence_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"string"}],"title":"Min Confidence Threshold","description":"Minimum confidence threshold (0.0-1.0)","default":"0.15"},"lookback_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lookback Days","description":"Git history lookback period in days","default":90}},"type":"object","required":["repository_id"],"title":"AssetRepositoryLinkCreate","description":"Schema for creating asset-repository link."},"AssetResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Public UUID of the asset"},"name":{"type":"string","title":"Name","description":"Display name"},"asset_type":{"type":"string","title":"Asset Type","description":"Type: table, view, etc."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether monitoring is active"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"connection_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Status"},"discovery_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery State"},"last_refresh_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Refresh At"},"table_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Table Count"},"column_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Column Count"},"schema_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Schema Count"},"catalog_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Catalog Count"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"database_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"ssl_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ssl Enabled"},"default_catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Catalog"},"http_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Path"},"extra_params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Params"},"schema_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Status"},"schema_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Message"},"schema_change_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Change Status"},"schema_change_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Change Message"},"schema_change_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Change Summary"},"freshness_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Status"},"freshness_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Message"},"freshness_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Summary"},"lineage_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lineage Status"},"lineage_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lineage Message"},"tags_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags Status"},"tags_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags Message"},"tags_counts":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Tags Counts"},"intelligence_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intelligence Status"},"intelligence_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intelligence Message"},"data_quality_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Quality Status"},"data_quality_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Quality Message"},"query_access_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Access Level"},"tags_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags Mode"},"intelligence_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intelligence Mode"},"auto_tag_enabled":{"type":"boolean","title":"Auto Tag Enabled","default":false},"effective_access_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Access Level"},"features":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","required":["id","name","asset_type","is_active","created_at"],"title":"AssetResponse","description":"Schema for asset responses."},"AssetSearchSchema":{"properties":{"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"search_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search Term"},"asset_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Type"},"connection_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Status"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Items to skip","default":0},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Items per page","default":20}},"type":"object","title":"AssetSearchSchema","description":"Schema for asset search parameters."},"AssetSecuritySettingsUpdate":{"properties":{"query_access_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Access Level","description":"Query access level (schema_only, aggregates, full) or null for company default"},"tags_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags Mode","description":"Tags mode (basic, improved)"},"intelligence_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intelligence Mode","description":"Intelligence mode (basic, improved)"}},"type":"object","title":"AssetSecuritySettingsUpdate","description":"Schema for updating asset security settings."},"AssetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"connection_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Connection Config"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"extra_params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Params"}},"type":"object","title":"AssetUpdate","description":"Schema for updating an existing asset."},"AssignIncidentRequest":{"properties":{"assignee_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assignee Id","description":"User ID to assign, or null to unassign"}},"type":"object","title":"AssignIncidentRequest","description":"Request to assign or unassign an incident."},"AutoTagSettingsUpdate":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether to automatically generate tags for new tables daily"}},"type":"object","required":["enabled"],"title":"AutoTagSettingsUpdate","description":"Schema for updating asset auto-tag settings."},"BadgeCreate":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id","description":"Asset public ID (UUID) to scope the badge"},"label":{"type":"string","maxLength":100,"minLength":1,"title":"Label","description":"Badge display label"},"tag_filters":{"items":{"type":"string"},"type":"array","title":"Tag Filters","description":"Tag names to filter tables"},"schema_drift_enabled":{"type":"boolean","title":"Schema Drift Enabled","description":"Check for schema drift issues","default":true},"freshness_enabled":{"type":"boolean","title":"Freshness Enabled","description":"Check for freshness issues","default":true},"include_upstream":{"type":"boolean","title":"Include Upstream","description":"Include upstream dependency issues","default":false}},"type":"object","required":["asset_id","label"],"title":"BadgeCreate","description":"Request schema for creating a new report badge."},"BadgePreviewRequest":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id","description":"Asset public ID (UUID) to scope the preview"},"tag_filters":{"items":{"type":"string"},"type":"array","title":"Tag Filters","description":"Tag names to filter tables"},"schema_drift_enabled":{"type":"boolean","title":"Schema Drift Enabled","default":true},"freshness_enabled":{"type":"boolean","title":"Freshness Enabled","default":true},"include_upstream":{"type":"boolean","title":"Include Upstream","default":false}},"type":"object","required":["asset_id","tag_filters"],"title":"BadgePreviewRequest","description":"Request schema for previewing badge status before creation."},"BadgeUpdate":{"properties":{"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"label":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Label"},"tag_filters":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Filters"},"schema_drift_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Drift Enabled"},"freshness_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Freshness Enabled"},"include_upstream":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Upstream"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"BadgeUpdate","description":"Request schema for updating an existing badge."},"BatchFreshnessTrendRequest":{"properties":{"table_paths":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Table Paths","description":"List of table paths to fetch trends for"}},"type":"object","required":["table_paths"],"title":"BatchFreshnessTrendRequest","description":"Request body for batch freshness trend endpoint."},"BatchImpactRequest":{"properties":{"unique_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Unique Ids","description":"List of lineage node unique identifiers (format: catalog.schema.table)"},"max_hops":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Hops","description":"Maximum hops to traverse for each node","default":10}},"type":"object","required":["unique_ids"],"title":"BatchImpactRequest","description":"Request body for batch downstream impact analysis.\n\nTECH-817: Enables the schema changes page to show downstream impact\ncounts for multiple tables in a single request."},"BatchReferentialTrendRequest":{"properties":{"check_uuids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Check Uuids","description":"List of referential check UUIDs to fetch trends for"}},"type":"object","required":["check_uuids"],"title":"BatchReferentialTrendRequest","description":"Request body for batch referential check trend data fetch."},"BatchTrendRequest":{"properties":{"metric_uuids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Metric Uuids","description":"List of metric UUIDs to fetch trends for"}},"type":"object","required":["metric_uuids"],"title":"BatchTrendRequest","description":"Request body for batch trend data fetch."},"BetaSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"warehouse_type":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Warehouse Type","description":"Self-reported warehouse type (snowflake, databricks, postgres, etc.)"}},"type":"object","required":["email"],"title":"BetaSignupRequest","description":"Request body for beta signup."},"Body_bulk_apply_tags_api_v1_assets__asset_id__tags_bulk_apply_post":{"properties":{"tag_names":{"items":{"type":"string"},"type":"array","title":"Tag Names"},"object_paths":{"items":{"type":"string"},"type":"array","title":"Object Paths"}},"type":"object","required":["tag_names","object_paths"],"title":"Body_bulk_apply_tags_api_v1_assets__asset_id__tags_bulk_apply_post"},"Body_create_slack_destination_from_oauth_api_v1_integrations_slack_oauth_connections__connection_id__destinations_post":{"properties":{"channel_id":{"type":"string","title":"Channel Id","description":"Slack channel ID"},"channel_name":{"type":"string","title":"Channel Name","description":"Slack channel name"}},"type":"object","required":["channel_id","channel_name"],"title":"Body_create_slack_destination_from_oauth_api_v1_integrations_slack_oauth_connections__connection_id__destinations_post"},"Body_format_prompt_api_v1_intelligence_prompts_format_post":{"properties":{"prompt_id":{"type":"string","title":"Prompt Id","description":"Prompt ID to format"},"variables":{"additionalProperties":true,"type":"object","title":"Variables","description":"Variables to substitute"}},"type":"object","required":["prompt_id","variables"],"title":"Body_format_prompt_api_v1_intelligence_prompts_format_post"},"Body_test_bot_api_api_v1_alert_destinations_test_bot_api_post":{"properties":{"bot_token":{"type":"string","title":"Bot Token"},"channel":{"type":"string","title":"Channel"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["bot_token","channel","payload"],"title":"Body_test_bot_api_api_v1_alert_destinations_test_bot_api_post"},"Body_test_slack_connection_api_v1_integrations_slack_oauth_connections__connection_id__test_post":{"properties":{"channel_id":{"type":"string","title":"Channel Id","description":"Slack channel ID to test"}},"type":"object","required":["channel_id"],"title":"Body_test_slack_connection_api_v1_integrations_slack_oauth_connections__connection_id__test_post"},"Body_test_unsaved_prompt_api_v1_intelligence_prompts_unsaved_tests_post":{"properties":{"prompt":{"additionalProperties":true,"type":"object","title":"Prompt","description":"Prompt data to test"},"variables":{"additionalProperties":true,"type":"object","title":"Variables","description":"Variables to substitute"}},"type":"object","required":["prompt","variables"],"title":"Body_test_unsaved_prompt_api_v1_intelligence_prompts_unsaved_tests_post"},"Body_test_webhook_proxy_api_v1_alert_destinations_test_webhook_post":{"properties":{"webhook_url":{"type":"string","title":"Webhook Url"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["webhook_url","payload"],"title":"Body_test_webhook_proxy_api_v1_alert_destinations_test_webhook_post"},"Body_upload_manifest_api_v1_assets__asset_id__lineage_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_manifest_api_v1_assets__asset_id__lineage_upload_post"},"Body_verify_email_code_api_v1_alert_destinations__destination_id__verify_post":{"properties":{"verification_code":{"type":"string","title":"Verification Code"}},"type":"object","required":["verification_code"],"title":"Body_verify_email_code_api_v1_alert_destinations__destination_id__verify_post"},"BugReportDetail":{"properties":{"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description"},"expected_behavior":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Expected Behavior"},"severity":{"type":"string","pattern":"^(low|medium|high|critical)$","title":"Severity","default":"medium"},"steps_to_reproduce":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Steps To Reproduce"}},"type":"object","required":["description"],"title":"BugReportDetail"},"BulkActionRequest":{"properties":{"alert_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Alert Ids"}},"type":"object","required":["alert_ids"],"title":"BulkActionRequest","description":"Request for bulk actions."},"BulkApplyJobRequest":{"properties":{"asset_public_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Asset Public Ids"},"yaml_body":{"type":"string","minLength":1,"title":"Yaml Body"},"prune":{"type":"boolean","title":"Prune","default":false},"include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include"},"exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude"}},"type":"object","required":["asset_public_ids","yaml_body"],"title":"BulkApplyJobRequest","description":"Request body for POST /contracts/apply-jobs.\n\n`asset_public_ids` is required (non-empty); the job applies the\nsame contract to each. `yaml_body` is the raw ODCS document;\nparsing happens in the job so a retry re-validates on every run.\n`prune`/`include`/`exclude` mirror the single-asset apply\nendpoint's query params."},"BulkApplyTagsRequest":{"properties":{"tag_name":{"type":"string","minLength":1,"title":"Tag Name","description":"Tag name to apply"},"asset_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Asset Ids","description":"Asset identifiers (UUIDs or qualified names)"},"category":{"type":"string","title":"Category","description":"Tag category for new tags","default":"business"}},"type":"object","required":["tag_name","asset_ids"],"title":"BulkApplyTagsRequest","description":"Request to apply a tag to multiple assets."},"BulkChangeResponseRequest":{"properties":{"change_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Change Ids","description":"List of change event public UUIDs to update"},"state":{"$ref":"#/components/schemas/SchemaChangeUserResponse"}},"type":"object","required":["change_ids","state"],"title":"BulkChangeResponseRequest","description":"Request body for bulk updating user response to multiple schema change events.\n\nTECH-622: Provides efficient bulk operations for the review queue."},"BulkCreateDestinationsRequest":{"properties":{"destinations":{"items":{"$ref":"#/components/schemas/app__shared__api__v1__public__alerts__CreateDestinationRequest"},"type":"array","maxItems":20,"minItems":1,"title":"Destinations","description":"Destinations to create"}},"type":"object","required":["destinations"],"title":"BulkCreateDestinationsRequest","description":"Request to bulk create alert destinations."},"BulkCreateFreshnessScheduleItem":{"properties":{"table_path":{"type":"string","maxLength":255,"minLength":1,"title":"Table Path","description":"Table path (e.g., schema.table_name)"},"check_interval":{"type":"string","pattern":"^\\d+[mhdw]$","title":"Check Interval","description":"Check interval: '5m', '1h', '6h', '1d', '1w'","default":"1h"},"monitoring_mode":{"type":"string","pattern":"^(auto_learn|explicit)$","title":"Monitoring Mode","description":"'auto_learn' or 'explicit'","default":"auto_learn"},"expected_interval_hours":{"anyOf":[{"type":"number","maximum":720.0,"minimum":0.1},{"type":"null"}],"title":"Expected Interval Hours","description":"Hours until data is considered stale (for explicit mode)"},"freshness_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Column","description":"Column to check for freshness (auto-detected if not provided)"}},"type":"object","required":["table_path"],"title":"BulkCreateFreshnessScheduleItem","description":"Single item in a bulk freshness schedule creation request."},"BulkCreateFreshnessScheduleRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset UUID or qualified name"},"schedules":{"items":{"$ref":"#/components/schemas/BulkCreateFreshnessScheduleItem"},"type":"array","maxItems":100,"minItems":1,"title":"Schedules","description":"List of schedules to create (max 100)"}},"type":"object","required":["asset_id","schedules"],"title":"BulkCreateFreshnessScheduleRequest","description":"Request to create multiple freshness schedules at once."},"BulkCreateSlackDestinationsRequest":{"properties":{"channels":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":20,"minItems":1,"title":"Channels","description":"List of channels: [{channel_id, channel_name, name?}]"}},"type":"object","required":["channels"],"title":"BulkCreateSlackDestinationsRequest","description":"Request to create multiple Slack alert destinations."},"BulkDriftMonitorRequest":{"properties":{"monitor_uuids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Monitor Uuids","description":"List of drift monitor UUIDs to operate on"}},"type":"object","required":["monitor_uuids"],"title":"BulkDriftMonitorRequest","description":"Request body for bulk drift monitor operations (TECH-965).\n\nAccepts monitor UUIDs (not internal numeric IDs) to preserve the\ndual-ID pattern enforced by TECH-846."},"BulkExportJobRequest":{"properties":{"scope":{"$ref":"#/components/schemas/BulkExportScope"},"scope_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Name"},"asset_public_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Public Ids"},"mode":{"type":"string","title":"Mode","default":"extended"},"include":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Include"},"exclude":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude"}},"type":"object","required":["scope"],"title":"BulkExportJobRequest","description":"Request body for POST /contracts/export-jobs.\n\n`scope_name` is required when `scope == warehouse`.\n`asset_public_ids` is required (non-empty) when `scope == assets`.\n`mode` defaults to `extended`; `include` / `exclude` filter the\nper-asset orchestrator exactly like the single-asset endpoint."},"BulkExportScope":{"type":"string","enum":["asset","assets","warehouse","all"],"title":"BulkExportScope","description":"Asset-selection scope. Matches the wire names from TECH-976.\n\n`ASSET` is listed for completeness so the job handler can reject it\nwith a clear error, pointing callers at the sync single-asset endpoint.\n\n`ASSETS` takes an explicit list of asset public ids; it is the scope\nthe UI picks when the user checks rows in the asset list."},"BulkFilter":{"properties":{"schema_filter":{"anyOf":[{"$ref":"#/components/schemas/SchemaFilter"},{"type":"null"}],"description":"Filter by schema name pattern"},"table_pattern_filter":{"anyOf":[{"$ref":"#/components/schemas/TablePatternFilter"},{"type":"null"}],"description":"Filter by table name pattern"},"tag_filter":{"anyOf":[{"$ref":"#/components/schemas/TagFilter"},{"type":"null"}],"description":"Filter by tags"},"lineage_filter":{"anyOf":[{"$ref":"#/components/schemas/LineageFilter"},{"type":"null"}],"description":"Filter by lineage relationships"}},"type":"object","title":"BulkFilter","description":"Combined filter for bulk table selection.\n\nAt least one filter must be specified. Multiple filters are combined with OR."},"BulkGenerateRequest":{"properties":{"filter":{"$ref":"#/components/schemas/BulkFilter"},"rule_template":{"$ref":"#/components/schemas/RuleTemplate"},"skip_existing":{"type":"boolean","title":"Skip Existing","description":"Skip tables that already have rules with same event_types","default":true},"is_dynamic":{"type":"boolean","title":"Is Dynamic","description":"When true, rules will automatically include new tables matching the filter","default":false}},"type":"object","required":["filter","rule_template"],"title":"BulkGenerateRequest","description":"Request to generate bulk alert rules."},"BulkInvestigateRequest":{"properties":{"alert_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Alert Ids","description":"Alert public UUIDs (max 20)"}},"type":"object","required":["alert_ids"],"title":"BulkInvestigateRequest","description":"Request to trigger investigations for multiple alerts."},"BulkMetricRequest":{"properties":{"metric_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Metric Ids","description":"List of metric UUIDs to operate on"}},"type":"object","required":["metric_ids"],"title":"BulkMetricRequest","description":"Request for bulk metric operations."},"BulkMonitoringRequest":{"properties":{"table_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Table Ids","description":"List of public UUIDs of tables to update"},"is_monitored":{"type":"boolean","title":"Is Monitored","description":"Target monitoring status for all tables"}},"type":"object","required":["table_ids","is_monitored"],"title":"BulkMonitoringRequest","description":"Request schema for bulk table monitoring updates."},"BulkPreviewRequest":{"properties":{"filter":{"$ref":"#/components/schemas/BulkFilter"}},"type":"object","required":["filter"],"title":"BulkPreviewRequest","description":"Request to preview bulk rule generation."},"BulkReferentialCheckRequest":{"properties":{"check_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Check Ids","description":"List of referential check UUIDs to operate on"}},"type":"object","required":["check_ids"],"title":"BulkReferentialCheckRequest","description":"Request for bulk referential check operations."},"BulkScheduleRequest":{"properties":{"schedule_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Schedule Ids","description":"List of schedule UUIDs to operate on"}},"type":"object","required":["schedule_ids"],"title":"BulkScheduleRequest","description":"Request for bulk schedule operations."},"BulkUpdateRequest":{"properties":{"rule_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":500,"minItems":1,"title":"Rule Ids"},"updates":{"additionalProperties":true,"type":"object","title":"Updates","description":"Fields to update: is_active, cooldown_minutes, max_alerts_per_day"}},"type":"object","required":["rule_ids","updates"],"title":"BulkUpdateRequest","description":"Request to update multiple rules."},"BusinessPriority":{"type":"string","enum":["critical","high","medium","low"],"title":"BusinessPriority","description":"Business priority values."},"ChangePasswordRequest":{"properties":{"old_password":{"type":"string","title":"Old Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["old_password","new_password"],"title":"ChangePasswordRequest","description":"Change password request model."},"ChangeRoleRequest":{"properties":{"role":{"$ref":"#/components/schemas/CompanyRole","description":"New role for the user"}},"type":"object","required":["role"],"title":"ChangeRoleRequest","description":"Request to change a user's role."},"CheckInterval":{"type":"string","enum":["hourly","daily","weekly"],"title":"CheckInterval","description":"Check interval options for validity rules.\n\nThese values match what the scheduler queries for in get_due_for_check."},"CheckScheduleUpdate":{"properties":{"check_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Interval"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"check_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Check Config"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"CheckScheduleUpdate","description":"Update model for check schedules."},"CheckType":{"type":"string","enum":["freshness","statistical","anomaly","row_count","consistency","custom_sql"],"title":"CheckType","description":"Types of data quality checks."},"CompanyRole":{"type":"string","enum":["owner","admin","member","viewer"],"title":"CompanyRole","description":"Company roles for team management.\n\nValidated at API layer via Pydantic, stored as VARCHAR in DB."},"CompleteSignupWithCodeRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Trial code to redeem"},"company_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Company Name","description":"Optional company name. Defaults to email domain."}},"type":"object","required":["code"],"title":"CompleteSignupWithCodeRequest","description":"Request to complete signup with a trial code (TECH-657).\n\nCalled AFTER Clerk authentication to create company and subscription."},"ConnectionTestParametersRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"asset_type":{"type":"string","title":"Asset Type"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port"},"database_name":{"type":"string","title":"Database Name"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password","default":""},"default_catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Catalog"},"ssl_enabled":{"type":"boolean","title":"Ssl Enabled","default":false},"ssl_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssl Mode"},"ssl_ca_cert":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssl Ca Cert"},"http_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Path"},"extra_params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Params"}},"type":"object","required":["name","asset_type","host","port","database_name","username"],"title":"ConnectionTestParametersRequest","description":"Request schema for testing connection parameters without creating an asset."},"ConnectionTestRequest":{"properties":{"test_type":{"type":"string","title":"Test Type","default":"manual"}},"type":"object","title":"ConnectionTestRequest","description":"Request schema for connection test."},"ConnectionTestResponse":{"properties":{"id":{"type":"integer","title":"Id"},"asset_id":{"type":"integer","title":"Asset Id"},"test_type":{"type":"string","title":"Test Type"},"status":{"type":"string","title":"Status"},"started_at":{"type":"string","title":"Started At"},"is_successful":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Successful"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"}},"type":"object","required":["id","asset_id","test_type","status","started_at"],"title":"ConnectionTestResponse","description":"Response schema for connection test."},"CostEstimateRequest":{"properties":{"operation_type":{"type":"string","maxLength":50,"minLength":1,"title":"Operation Type"},"model":{"type":"string","maxLength":50,"minLength":1,"title":"Model"},"estimated_tokens":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Estimated Tokens"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"}},"type":"object","required":["operation_type","model"],"title":"CostEstimateRequest","description":"Schema for requesting cost estimate."},"CostEstimationRequest":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id","description":"Asset public ID (UUID) to estimate cost for"},"strategy":{"type":"string","title":"Strategy","description":"Analysis strategy (quick, targeted, bottom_up, comprehensive)","default":"bottom_up"},"provider":{"type":"string","title":"Provider","description":"LLM provider (anthropic, openai, google)","default":"anthropic"},"model_name":{"type":"string","title":"Model Name","description":"Model to use for estimation","default":"claude-3-sonnet"}},"type":"object","required":["asset_id"],"title":"CostEstimationRequest","description":"Request to estimate intelligence analysis cost."},"CreateAPIKeyRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Human-readable name for the key"},"scope":{"type":"string","title":"Scope","description":"Permission scope: read-only, read-write, or admin","default":"read-only"}},"type":"object","required":["name"],"title":"CreateAPIKeyRequest","description":"Request to create a new API key.","example":{"name":"Airflow Production","scope":"read-only"}},"CreateAssetRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Display name"},"asset_type":{"type":"string","maxLength":50,"minLength":1,"title":"Asset Type","description":"Database type: snowflake, postgresql, databricks, bigquery, redshift, mysql, clickhouse, athena"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host","description":"Database host"},"port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":1.0},{"type":"null"}],"title":"Port","description":"Database port"},"database_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database Name","description":"Database name (required)"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username","description":"Database username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password","description":"Database password"},"ssl_enabled":{"type":"boolean","title":"Ssl Enabled","description":"Enable SSL","default":false},"default_catalog":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Catalog","description":"Default catalog (Databricks/Snowflake)"},"http_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Path","description":"HTTP path (Databricks)"},"extra_params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Params","description":"Extra connection parameters"},"connection_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Connection Config","description":"Connection config dict (alternative to flat fields)"}},"type":"object","required":["name","asset_type"],"title":"CreateAssetRequest","description":"Request to create a new asset (data source connection)."},"CreateBadgeRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset identifier (public UUID or qualified name)"},"label":{"type":"string","maxLength":100,"title":"Label","description":"Badge label text","default":"AnomalyArmor"},"tag_filters":{"items":{"type":"string"},"type":"array","title":"Tag Filters","description":"Tag names to filter monitored objects"},"schema_drift_enabled":{"type":"boolean","title":"Schema Drift Enabled","description":"Enable schema drift monitoring","default":true},"freshness_enabled":{"type":"boolean","title":"Freshness Enabled","description":"Enable freshness monitoring","default":true},"include_upstream":{"type":"boolean","title":"Include Upstream","description":"Include upstream dependencies","default":false}},"type":"object","required":["asset_id"],"title":"CreateBadgeRequest","description":"Request to create a report badge."},"CreateBaselineRequest":{"properties":{"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description","description":"Optional description for the baseline"}},"type":"object","title":"CreateBaselineRequest","description":"Request to create schema baseline via SDK."},"CreateBlackoutRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"start_time":{"type":"string","title":"Start Time","description":"ISO 8601 datetime string"},"end_time":{"type":"string","title":"End Time","description":"ISO 8601 datetime string"},"recurrence":{"type":"string","title":"Recurrence","description":"'none' or 'yearly'","default":"none"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","start_time","end_time"],"title":"CreateBlackoutRequest","description":"Request schema for creating a blackout window."},"CreateCheckoutRequest":{"properties":{"tier":{"type":"string","title":"Tier","description":"Subscription tier"},"billing_period":{"type":"string","title":"Billing Period","description":"Billing period: 'monthly' or 'annual'","default":"monthly"},"success_url":{"type":"string","title":"Success Url","description":"URL to redirect after successful payment"},"cancel_url":{"type":"string","title":"Cancel Url","description":"URL to redirect after cancelled payment"}},"type":"object","required":["tier","success_url","cancel_url"],"title":"CreateCheckoutRequest","description":"Request model for creating Stripe checkout session."},"CreateCustomSqlMonitorRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Human-readable name for this monitor","example":"Zero-Dollar Orders"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional description of what this monitor checks"},"sql_query":{"type":"string","minLength":1,"title":"Sql Query","description":"SELECT query that returns a single numeric value","example":"SELECT COUNT(*) FROM orders WHERE total_amount = 0"},"table_path":{"type":"string","maxLength":500,"minLength":1,"title":"Table Path","description":"Primary table being monitored (for asset association)","example":"public.orders"},"upper_bound":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Upper Bound","description":"Alert if value exceeds this threshold","example":10.0},"lower_bound":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lower Bound","description":"Alert if value drops below this threshold","example":0.0},"check_interval":{"type":"string","pattern":"^(hourly|daily|weekly|monthly|\\d+[mhd]|@[a-z_]+|\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+)$","title":"Check Interval","description":"How often to run (hourly, daily, weekly, or cron expression)","example":"daily"},"timeout_seconds":{"type":"integer","maximum":300.0,"minimum":1.0,"title":"Timeout Seconds","description":"Query execution timeout in seconds","default":60},"enabled":{"type":"boolean","title":"Enabled","description":"Whether the monitor should be active immediately","default":true}},"type":"object","required":["name","sql_query","table_path","check_interval"],"title":"CreateCustomSqlMonitorRequest","description":"Request to create a custom SQL monitor."},"CreateDriftMonitorRequest":{"properties":{"table_path":{"type":"string","title":"Table Path","description":"Table path (schema.table)"},"column_name":{"type":"string","title":"Column Name","description":"Column to monitor"},"column_type":{"type":"string","enum":["numeric","categorical"],"title":"Column Type","description":"Column type: 'numeric' or 'categorical'"},"baseline_mode":{"type":"string","enum":["rolling","fixed"],"title":"Baseline Mode","description":"Baseline mode: 'rolling' or 'fixed'","default":"rolling"},"baseline_window_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Baseline Window Days","description":"Days to look back for rolling baseline (1-365)","default":7},"test_types":{"items":{"type":"string"},"type":"array","title":"Test Types","description":"Tests to run: 'psi', 'ks', 'chi_squared'","default":["psi"]},"psi_threshold":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Psi Threshold","description":"PSI threshold for drift (0 < x <= 1)","default":0.25},"ks_threshold":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Ks Threshold","description":"KS p-value threshold (0 < x <= 1)","default":0.05},"chi_squared_threshold":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Chi Squared Threshold","description":"Chi-squared p-value threshold (0 < x <= 1)","default":0.05},"capture_interval":{"type":"string","enum":["hourly","daily","weekly"],"title":"Capture Interval","description":"Capture interval: 'hourly', 'daily', 'weekly'","default":"daily"},"histogram_bins":{"type":"integer","maximum":100.0,"minimum":5.0,"title":"Histogram Bins","description":"Bins for numeric histograms (5-100)","default":20},"max_categories":{"type":"integer","maximum":10000.0,"minimum":10.0,"title":"Max Categories","description":"Max categories for categorical (10-10000)","default":1000}},"type":"object","required":["table_path","column_name","column_type"],"title":"CreateDriftMonitorRequest","description":"Request to create a drift monitor."},"CreateEdgeRequest":{"properties":{"source_unique_id":{"type":"string","title":"Source Unique Id","description":"Source node unique ID"},"target_unique_id":{"type":"string","title":"Target Unique Id","description":"Target node unique ID"},"edge_type":{"type":"string","title":"Edge Type","description":"Edge type","default":"direct"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","description":"Confidence score","default":1.0}},"type":"object","required":["source_unique_id","target_unique_id"],"title":"CreateEdgeRequest","description":"Request schema for creating a manual lineage edge."},"CreateFreshnessScheduleRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset UUID or qualified name"},"table_path":{"type":"string","maxLength":255,"minLength":1,"title":"Table Path","description":"Table path (e.g., schema.table_name)"},"check_interval":{"type":"string","pattern":"^\\d+[mhdw]$","title":"Check Interval","description":"Check interval: '5m', '1h', '6h', '1d', '1w'"},"expected_interval_hours":{"anyOf":[{"type":"number","maximum":720.0,"minimum":0.1},{"type":"null"}],"title":"Expected Interval Hours","description":"Hours until data is considered stale (required for explicit mode)"},"freshness_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Column","description":"Column to check for freshness (auto-detected if not provided)"},"monitoring_mode":{"type":"string","pattern":"^(auto_learn|explicit)$","title":"Monitoring Mode","description":"'auto_learn' or 'explicit'","default":"auto_learn"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether to enable monitoring","default":true}},"type":"object","required":["asset_id","table_path","check_interval"],"title":"CreateFreshnessScheduleRequest","description":"Request to create a freshness schedule via SDK.\n\nFor auto_learn mode: expected_interval_hours is optional (system learns automatically)\nFor explicit mode: expected_interval_hours is required to define the SLA"},"CreateMonitoringScheduleRequest":{"properties":{"schedule_type":{"type":"string","title":"Schedule Type","description":"Schedule interval: '5m', '30m', '1h', '4h', '6h', '12h', '1d', '1w', or legacy aliases: 'hourly', 'every_4_hours', 'daily', 'weekly'. Set to 'cron' when using cron_expression."},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression","description":"Standard 5-field cron expression for custom schedules (e.g. '0 */6 * * *' for every 6 hours). When provided, schedule_type is automatically set to 'cron'."}},"type":"object","required":["schedule_type"],"title":"CreateMonitoringScheduleRequest","description":"Request body for creating/updating a monitoring schedule."},"CreateNodeRequest":{"properties":{"unique_id":{"type":"string","title":"Unique Id","description":"Unique identifier for the node"},"schema":{"type":"string","title":"Schema","description":"Schema name"},"table_name":{"type":"string","title":"Table Name","description":"Table name"},"database":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database","description":"Database name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer","description":"Layer (bronze/silver/gold)"},"node_type":{"type":"string","title":"Node Type","description":"Node type","default":"model"}},"type":"object","required":["unique_id","schema","table_name"],"title":"CreateNodeRequest","description":"Request schema for creating a manual lineage node."},"CreateRowCountScheduleRequest":{"properties":{"table_path":{"type":"string","title":"Table Path","description":"Table path (schema.table_name)"},"timestamp_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp Column","description":"Column to filter rows by time period. If NULL, counts all rows."},"time_window_hours":{"type":"integer","enum":[1,6,12,24,168],"title":"Time Window Hours","description":"Time window for row count measurement (1, 6, 12, 24, or 168 hours)","default":24},"check_interval":{"type":"string","title":"Check Interval","description":"Check interval (e.g., '1h', '6h', '1d')","default":"1h"},"monitoring_mode":{"type":"string","enum":["auto_learn","explicit"],"title":"Monitoring Mode","description":"Monitoring mode: 'auto_learn' for ML-based or 'explicit' for manual thresholds","default":"auto_learn"},"expected_min_rows":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Min Rows","description":"For explicit mode: alert when row count falls below this value"},"expected_max_rows":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Max Rows","description":"For explicit mode: optional upper bound for alerting"},"sensitivity":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Sensitivity","description":"Sensitivity (1-4): 1=tight (more alerts), 4=loose (fewer alerts)","default":2},"freshness_schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Schedule Id","description":"Optional link to freshness schedule UUID (for auto-creation)"},"operating_period_mode":{"type":"string","title":"Operating Period Mode","description":"Operating-period awareness (TECH-984): 'off', 'auto', or 'schedule' (segments the baseline by the linked operating schedule)","default":"off"},"operating_schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating Schedule Id","description":"Operating schedule public UUID, required when operating_period_mode is 'schedule'"}},"type":"object","required":["table_path"],"title":"CreateRowCountScheduleRequest","description":"Request to create row_count monitoring schedule."},"CreateScheduledCheckRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"check_type":{"type":"string","enum":["schema_change","metrics","data_quality"],"title":"Check Type","default":"schema_change"},"schedule_config":{"$ref":"#/components/schemas/ScheduleConfig"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["asset_id","schedule_config"],"title":"CreateScheduledCheckRequest","description":"Request to create a scheduled check."},"CreateSlackDestinationRequest":{"properties":{"channel_id":{"type":"string","title":"Channel Id","description":"Slack channel ID"},"channel_name":{"type":"string","title":"Channel Name","description":"Slack channel name"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional display name"}},"type":"object","required":["channel_id","channel_name"],"title":"CreateSlackDestinationRequest","description":"Request to create a Slack alert destination."},"CreateTagRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset identifier (public UUID or qualified name)"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Tag name"},"category":{"type":"string","title":"Category","description":"Tag category: compliance, business, customer_impact, ai_discovered","default":"business"},"object_path":{"type":"string","minLength":1,"title":"Object Path","description":"Object path (e.g., 'schema.table' or 'schema.table.column')"},"object_type":{"type":"string","title":"Object Type","description":"Object type: table, column","default":"table"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Tag description"}},"type":"object","required":["asset_id","name","object_path"],"title":"CreateTagRequest","description":"Request to create a custom tag."},"CustomTagCreate":{"properties":{"object_type":{"type":"string","title":"Object Type"},"object_path":{"type":"string","title":"Object Path"},"tag_name":{"type":"string","title":"Tag Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":"business"}},"type":"object","required":["object_type","object_path","tag_name"],"title":"CustomTagCreate","description":"Create a custom tag for a specific database object."},"DBTCloudSyncRequest":{"properties":{"account_id":{"type":"string","title":"Account Id","description":"DBT Cloud account ID"},"api_token":{"type":"string","title":"Api Token","description":"DBT Cloud API token"},"job_id":{"type":"string","title":"Job Id","description":"DBT Cloud job ID to fetch manifest from"}},"type":"object","required":["account_id","api_token","job_id"],"title":"DBTCloudSyncRequest","description":"Request model for DBT Cloud sync."},"DashboardView":{"type":"string","enum":["overview","detailed","minimal"],"title":"DashboardView","description":"Dashboard view enumeration."},"Direction":{"type":"string","enum":["both","increase_only","decrease_only"],"title":"Direction","description":"Direction constraint for threshold evaluation.\n\nControls whether to flag increases, decreases, or both as anomalies."},"DismissAlertRequest":{"properties":{"action_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Action Category"},"action_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Action Detail"},"root_cause_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Root Cause Category"},"root_cause_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Root Cause Detail"},"pr_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Pr Url"},"job_run_id":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Job Run Id"},"external_link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Link"},"suggestion_pattern_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggestion Pattern Id"},"suggestion_was_helpful":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suggestion Was Helpful"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Optional notes"}},"type":"object","title":"DismissAlertRequest","description":"Request to dismiss an alert with optional resolution metadata."},"DismissIncidentRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"DismissIncidentRequest","description":"Request to dismiss an incident."},"DismissRequest":{"properties":{"action_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Action Category"},"action_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Action Detail"},"root_cause_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Root Cause Category"},"root_cause_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Root Cause Detail"},"pr_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Pr Url"},"job_run_id":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Job Run Id"},"external_link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Link"},"suggestion_pattern_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggestion Pattern Id"},"suggestion_was_helpful":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suggestion Was Helpful"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"DismissRequest","description":"Request to dismiss an alert."},"DowngradeValidationRequest":{"properties":{"target_tier":{"type":"string","title":"Target Tier","description":"Target subscription tier to downgrade to"}},"type":"object","required":["target_tier"],"title":"DowngradeValidationRequest","description":"Request model for validating plan downgrade."},"EnableSchemaMonitoringRequest":{"properties":{"schedule_type":{"type":"string","title":"Schedule Type","description":"Schedule interval: '5m', '1h', '6h', '1d', '1w', or legacy aliases: 'hourly', 'every_4_hours', 'daily', 'weekly'","default":"daily"},"auto_create_baseline":{"type":"boolean","title":"Auto Create Baseline","description":"Create baseline if none exists","default":true}},"type":"object","title":"EnableSchemaMonitoringRequest","description":"Request to enable schema monitoring via SDK."},"EnhancedQARequest":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":3,"title":"Question","description":"Natural language question to ask"},"cross_asset_mode":{"type":"boolean","title":"Cross Asset Mode","description":"Query across all company databases","default":false},"include_related_assets":{"type":"boolean","title":"Include Related Assets","description":"Include related assets in context (deprecated)","default":false},"related_asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Related Asset Ids","description":"Optional list of related asset UUIDs to include (deprecated)"}},"type":"object","required":["question"],"title":"EnhancedQARequest","description":"Request for enhanced Q&A using knowledge base."},"ExplainAssetRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset public UUID"},"question":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Question","description":"Natural-language question to anchor the capsule"},"event_type":{"type":"string","title":"Event Type","description":"One of: anomaly, freshness, schema_change, validity","default":"anomaly"}},"type":"object","required":["asset_id"],"title":"ExplainAssetRequest","description":"TECH-982: request body for `POST /alerts/investigations/explain`.\n\nRun a synchronous investigation against an asset without persisting a\nrow. Used by the `armor-investigate` skill."},"ExplicitSLA":{"properties":{"update_frequency":{"type":"string","title":"Update Frequency","description":"hourly, daily, weekly, weekdays"},"expected_time":{"type":"string","title":"Expected Time","description":"Expected update time (HH:MM:SS)"},"expected_days":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Expected Days","description":"Expected days for weekly schedules"},"sla_hours":{"type":"number","exclusiveMinimum":0.0,"title":"Sla Hours","description":"Alert threshold in hours"},"warning_hours":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Warning Hours","description":"Warning threshold (optional)"}},"type":"object","required":["update_frequency","expected_time","sla_hours"],"title":"ExplicitSLA","description":"User-provided explicit SLA configuration."},"ExportMode":{"type":"string","enum":["extended","odcs-pure"],"title":"ExportMode","description":"Portability mode for exports.\n\nValues match the CLI `--mode` flag and the REST `mode` query parameter\nexactly, so string round-trips via FastAPI's query parser work without\ncustom coercion."},"FreshnessAnalysisRequest":{"properties":{"table_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Table Paths","description":"Specific tables to analyze"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Filter by tag names (e.g., 'orders', 'customer_data')"},"tag_categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Categories","description":"Filter by tag categories (e.g., 'business', 'compliance')"},"force_refresh":{"type":"boolean","title":"Force Refresh","description":"Force refresh of cached data","default":false}},"type":"object","title":"FreshnessAnalysisRequest","description":"Request for freshness analysis.\n\nNote: Validation is handled by FreshnessValidationService"},"FreshnessDryRunRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset UUID or qualified name"},"table_path":{"type":"string","title":"Table Path","description":"Table to test (e.g., 'schema.table')"},"expected_interval_hours":{"type":"number","maximum":720.0,"minimum":0.1,"title":"Expected Interval Hours","description":"Threshold in hours to test"},"lookback_days":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Lookback Days","description":"Days of history to analyze","default":7}},"type":"object","required":["asset_id","table_path","expected_interval_hours"],"title":"FreshnessDryRunRequest","description":"Request to dry-run a freshness threshold."},"FrontendToastReport":{"properties":{"toast_message":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Toast Message","description":"Toast message shown to user"},"toast_type":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Toast Type","description":"Type of toast: error, warning, success, info"},"error_message":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Error Message","description":"Error message (prefer toast_message for new code)"},"user_email":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"User Email","description":"Email of the user who saw the toast"},"company_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company Name","description":"Company name of the user"},"page":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Page","description":"URL or page name where toast appeared"},"component":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Component","description":"Component that triggered toast"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp","description":"ISO timestamp of toast"}},"type":"object","title":"FrontendToastReport","description":"Frontend toast report payload."},"GateEventRequest":{"properties":{"event_type":{"type":"string","enum":["gate_impression","gate_upgrade_click","gate_checkout_complete"],"title":"Event Type","description":"Event type"},"feature":{"type":"string","title":"Feature","description":"PlanFeatureKey value"},"current_plan":{"type":"string","title":"Current Plan","description":"User's current plan name"},"target_plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Plan","description":"Target upgrade plan"}},"type":"object","required":["event_type","feature","current_plan"],"title":"GateEventRequest","description":"Request body for logging a gate event."},"GitProviderCreate":{"properties":{"provider_type":{"$ref":"#/components/schemas/ProviderType","description":"Git provider type (github, gitlab, bitbucket)"},"base_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Base Url","description":"Base URL for git provider (e.g., https://github.com)"},"oauth_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Id","description":"OAuth app client ID (user-provided, e.g., GitHub OAuth app)"},"oauth_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Secret","description":"OAuth app client secret (user-provided)"},"oauth_scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Oauth Scopes","description":"OAuth scopes to request (e.g., ['repo', 'read:user'] for GitHub)"}},"type":"object","required":["provider_type","base_url"],"title":"GitProviderCreate","description":"Schema for creating a git provider."},"GitProviderUpdate":{"properties":{"base_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Base Url","description":"Base URL for git provider"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether provider is active"},"oauth_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Id","description":"OAuth app client ID (user-provided, e.g., GitHub OAuth app)"},"oauth_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Client Secret","description":"OAuth app client secret (user-provided)"},"oauth_scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Oauth Scopes","description":"OAuth scopes to request (e.g., ['repo', 'read:user'] for GitHub)"}},"type":"object","title":"GitProviderUpdate","description":"Schema for updating a git provider."},"GitRepositoryCreate":{"properties":{"provider_id":{"type":"string","title":"Provider Id","description":"Git provider public ID (UUID)"},"repository_name":{"type":"string","maxLength":255,"minLength":1,"title":"Repository Name","description":"Repository name"},"repository_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Repository Url","description":"Full repository URL (e.g., https://github.com/org/repo)"},"default_branch":{"type":"string","maxLength":100,"minLength":1,"title":"Default Branch","description":"Default branch name","default":"main"},"sync_method":{"$ref":"#/components/schemas/SyncMethod","description":"Sync method (webhook, polling, manual)","default":"polling"},"polling_interval_minutes":{"type":"integer","maximum":1440.0,"minimum":5.0,"title":"Polling Interval Minutes","description":"Polling interval in minutes (5-1440)","default":60}},"type":"object","required":["provider_id","repository_name","repository_url"],"title":"GitRepositoryCreate","description":"Schema for creating a git repository."},"GitRepositoryUpdate":{"properties":{"repository_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Repository Name","description":"Repository name"},"repository_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Repository Url","description":"Repository URL"},"default_branch":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Default Branch","description":"Default branch name"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether repository is active"},"sync_method":{"anyOf":[{"$ref":"#/components/schemas/SyncMethod"},{"type":"null"}],"description":"Sync method"},"polling_interval_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":5.0},{"type":"null"}],"title":"Polling Interval Minutes","description":"Polling interval in minutes"},"webhook_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Webhook Enabled","description":"Enable webhook sync"}},"type":"object","title":"GitRepositoryUpdate","description":"Schema for updating a git repository."},"GroupingConfig":{"properties":{"enabled":{"type":"boolean","title":"Enabled","description":"Whether to enable alert grouping for this rule","default":false},"window_minutes":{"type":"integer","maximum":1440.0,"minimum":5.0,"title":"Window Minutes","description":"Time window for collecting alerts to group (5-1440 minutes)","default":60},"min_alerts_to_group":{"type":"integer","maximum":100.0,"minimum":2.0,"title":"Min Alerts To Group","description":"Minimum alerts before grouping kicks in (2-100)","default":2}},"type":"object","title":"GroupingConfig","description":"Configuration for alert grouping/digest behavior.\n\nWhen enabled, alerts are grouped into digest notifications to prevent alert fatigue.\nThe first alert always sends immediately; subsequent alerts within the window are grouped.\n\nExample:\n    {\n        \"enabled\": true,\n        \"window_minutes\": 60,\n        \"min_alerts_to_group\": 2\n    }"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HelpLevel":{"type":"string","enum":["none","light","heavy"],"title":"HelpLevel","description":"User help level preference for contextual help system.\n\nControls how much contextual help is shown in the UI:\n- NONE: No help displayed (power users)\n- LIGHT: Help icons linking to docs (default)\n- HEAVY: Verbose inline explanations (new users, onboarding)"},"IntelligenceAnalysisRequest":{"properties":{"asset_id":{"type":"string","format":"uuid","title":"Asset Id","description":"Asset public ID (UUID) to analyze"},"analysis_type":{"$ref":"#/components/schemas/AnalysisType","description":"Type of analysis to run"},"force_refresh":{"type":"boolean","title":"Force Refresh","description":"Force refresh of cached results","default":false},"include_catalogs":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Catalogs","description":"Comma-separated list of catalogs to include (Databricks/Snowflake)"},"include_schemas":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Schemas","description":"Comma-separated list of schemas to include"},"include_tables":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Tables","description":"Comma-separated list of tables to include"}},"type":"object","required":["asset_id","analysis_type"],"title":"IntelligenceAnalysisRequest","description":"Request to run intelligence analysis."},"IntelligenceAskRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset identifier (public UUID or qualified name like 'postgresql.mydb')"},"question":{"type":"string","maxLength":2000,"minLength":3,"title":"Question","description":"Natural language question to ask"},"include_related_assets":{"type":"boolean","title":"Include Related Assets","description":"Include related assets in context","default":false}},"type":"object","required":["asset_id","question"],"title":"IntelligenceAskRequest","description":"Request to ask an intelligence question."},"IntelligenceGenerateRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset identifier (public UUID, short UUID, or asset name)"},"include_schemas":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Schemas","description":"Comma-separated list of schemas to analyze (default: all)"},"include_tables":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Include Tables","description":"Comma-separated list of specific tables to analyze (e.g., 'schema.table1,schema.table2')"},"force_refresh":{"type":"boolean","title":"Force Refresh","description":"Force regeneration even if intelligence exists","default":false}},"type":"object","required":["asset_id"],"title":"IntelligenceGenerateRequest","description":"Request to generate intelligence for an asset."},"InvestigationFeedbackRequest":{"properties":{"is_helpful":{"type":"boolean","title":"Is Helpful","description":"Whether the investigation was helpful"},"comment":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Comment","description":"Optional feedback comment"}},"type":"object","required":["is_helpful"],"title":"InvestigationFeedbackRequest","description":"Request to submit investigation feedback."},"InviteUserRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"Email address of the user to invite"},"role":{"$ref":"#/components/schemas/CompanyRole","description":"Role to assign to the invited user","default":"member"}},"type":"object","required":["email"],"title":"InviteUserRequest","description":"Request to invite a user to the team."},"JobDetailEnvelope":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/JobDetailResponse"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["success"],"title":"JobDetailEnvelope","description":"Typed ``StandardResponse`` envelope for the job detail endpoint."},"JobDetailResponse":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Unique job identifier"},"workflow_name":{"type":"string","title":"Workflow Name","description":"Name of the workflow"},"status":{"type":"string","title":"Status","description":"Raw job status (not normalized)"},"job_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type","description":"Workflow name alias"},"priority":{"type":"string","title":"Priority","description":"Job priority level","default":"normal"},"worker_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Worker Id","description":"Worker that ran the job"},"progress_percent":{"type":"integer","title":"Progress Percent","description":"Job progress percentage","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Job creation timestamp"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At","description":"Job start timestamp"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"Job completion timestamp"},"estimated_duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Duration","description":"Estimated duration in seconds"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Sanitized job context"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Job filters"},"result_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Data","description":"Raw job result payload"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result","description":"Parsed job result payload"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if the job failed"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"Process/user identifier that created the job"},"asset_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Uuid","description":"Public UUID of the asset this job processed"}},"additionalProperties":true,"type":"object","required":["job_id","workflow_name","status","created_at"],"title":"JobDetailResponse","description":"Response model for the single-job detail endpoint (``get_job_status``).\n\nMirrors the payload ``get_job_status`` returns (the DAL row minus internal\nIDs, plus ``asset_uuid`` and the ``job_type`` alias the DAL adds). Unlike\n``JobStatusResponse``, ``status`` is NOT normalized here (the detail endpoint\nreturns the raw DB status), and ``result_data`` is included (the frontend\nreads it for completion / skip detection). Declaring it as a\n``response_model`` lands the schema in the spec so the frontend can alias it\n(TECH-1003 / TECH-998 ``core-dsq``).\n\n``extra=\"allow\"`` is deliberate: the DAL builds this dict, so any field it\nadds in the future passes through unchanged instead of being silently\ndropped by response-model serialization. Only the fields below are typed for\nthe frontend; anything else is preserved verbatim."},"JobListEnvelope":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{"$ref":"#/components/schemas/JobListPageData"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["success"],"title":"JobListEnvelope","description":"Typed ``StandardResponse`` envelope for the job list endpoint."},"JobListPageData":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/JobStatusResponse"},"type":"array","title":"Jobs","description":"Page of jobs"},"pagination":{"$ref":"#/components/schemas/OffsetPaginationMeta","description":"Pagination metadata"}},"type":"object","required":["pagination"],"title":"JobListPageData","description":"Data payload for the paginated job list endpoint.\n\nMirrors the exact shape returned by ``list_jobs``: the page of jobs plus\noffset-based pagination metadata. Declaring it as a ``response_model``\nlands ``JobStatusResponse`` in the OpenAPI spec so the frontend can alias\nthe generated schema (TECH-1003 / TECH-998)."},"JobPriority":{"type":"string","enum":["low","normal","high","urgent"],"title":"JobPriority","description":"Job priority levels for queue ordering."},"JobStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id","description":"Unique job identifier"},"workflow_name":{"type":"string","title":"Workflow Name","description":"Name of the workflow"},"status":{"type":"string","title":"Status","description":"Current job status (normalized for display)"},"priority":{"type":"string","title":"Priority","description":"Job priority level","default":"normal"},"job_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type","description":"Type of job (refresh, intelligence, asset_discovery)"},"progress_percent":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Progress Percent","description":"Job progress percentage","default":0},"progress_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Progress Message","description":"Current progress message"},"current_phase":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Phase","description":"Current workflow phase"},"total_phases":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Phases","description":"Total workflow phases"},"created_at":{"type":"string","title":"Created At","description":"Job creation timestamp (timezone-aware)"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At","description":"Job start timestamp (timezone-aware)"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At","description":"Job completion timestamp"},"estimated_duration":{"type":"integer","title":"Estimated Duration","description":"Estimated duration in seconds","default":0},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if job failed"},"asset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Name","description":"Name of the asset this job is processing"},"asset_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Type","description":"Type of the asset this job is processing"},"asset_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Uuid","description":"UUID of the asset this job is processing"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Job context containing configuration parameters"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Job filters and options"},"result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result","description":"Job result data"}},"type":"object","required":["job_id","workflow_name","status","created_at"],"title":"JobStatusResponse","description":"Response model for job status information.\n\nNote: The 'status' field is normalized for user display. Internal statuses\nlike 'claimed' are mapped to user-friendly equivalents (e.g., 'running')."},"LineageFilter":{"properties":{"upstream_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upstream Of","description":"Unique ID or table path to find upstream nodes of"},"downstream_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Downstream Of","description":"Unique ID or table path to find downstream nodes of"},"max_hops":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Max Hops","description":"Maximum hops to traverse (1-10, null=unlimited)"}},"type":"object","title":"LineageFilter","description":"Filter for selecting tables by lineage relationships.\n\nExample:\n    {\n        \"upstream_of\": \"dbt://models/gold/customer_summary\",\n        \"downstream_of\": null,\n        \"max_hops\": 5\n    }"},"LinkDestinationsRequest":{"properties":{"destination_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Destination Ids","description":"Destination UUIDs to link"}},"type":"object","required":["destination_ids"],"title":"LinkDestinationsRequest","description":"Request to link destinations to a rule."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest","description":"Login request model."},"LoginResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"},"user_id":{"type":"integer","title":"User Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"}},"type":"object","required":["access_token","refresh_token","user_id","email","role"],"title":"LoginResponse","description":"Login response model."},"MagicLoginRequest":{"properties":{"t":{"type":"string","maxLength":11,"minLength":8,"title":"T","description":"Magic link token"}},"type":"object","required":["t"],"title":"MagicLoginRequest","description":"Request body for magic link authentication."},"MetricCheckCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Optional friendly name"},"threshold_type":{"$ref":"#/components/schemas/ThresholdType"},"threshold_value":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Threshold Value","description":"Value for stddev/percentage/absolute thresholds"},"threshold_min":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Threshold Min","description":"Lower bound for static_bounds"},"threshold_max":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Threshold Max","description":"Upper bound for static_bounds"},"lookback_window_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lookback Window Days","default":30},"direction":{"$ref":"#/components/schemas/Direction","default":"both"}},"type":"object","required":["threshold_type"],"title":"MetricCheckCreate","description":"Request schema for creating a metric check.\n\nIncludes validation to ensure threshold fields are consistent with threshold_type\n(TECH-686 correction #7).\nNote: metric_definition_id is extracted from the URL path, not the request body."},"MetricCheckUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"threshold_value":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string"},{"type":"null"}],"title":"Threshold Value"},"threshold_min":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Threshold Min"},"threshold_max":{"anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}],"title":"Threshold Max"},"lookback_window_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Lookback Window Days"},"direction":{"anyOf":[{"$ref":"#/components/schemas/Direction"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"MetricCheckUpdate","description":"Request schema for updating a metric check.\n\nNote: Threshold values must be positive when provided. The service layer\nshould validate threshold consistency with the existing threshold_type.\n\nIMPORTANT: This schema validates only values provided in the request.\nFor partial updates (e.g., updating only threshold_min), the service layer\nMUST validate the final merged state to ensure threshold_min < threshold_max\nafter applying the update to the existing check configuration."},"MetricDefinitionCreate":{"properties":{"table_path":{"type":"string","maxLength":500,"title":"Table Path","description":"Fully qualified table path"},"column_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Column Name","description":"Column name (NULL for table-level metrics)"},"time_column":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Time Column","description":"Column containing timestamp/date for time-windowed queries. When set, metric queries filter by this column using capture_interval bounds."},"metric_type":{"$ref":"#/components/schemas/MetricType","description":"Type of metric to track"},"capture_interval":{"type":"string","maxLength":100,"title":"Capture Interval","description":"Capture interval (hourly, daily, weekly, or cron)"},"group_by_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By Columns","description":"Optional dimensional grouping columns"},"sensitivity":{"type":"integer","maximum":5.0,"minimum":1.0,"title":"Sensitivity","description":"Stddev multiplier for anomaly detection (1-5)","default":3},"percentile_value":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Percentile Value","description":"For PERCENTILE metric type: the percentile to track (0.0-1.0)"},"operating_period_mode":{"type":"string","enum":["off","auto","schedule"],"title":"Operating Period Mode","description":"Operating-period awareness (TECH-984): 'off' pools all history, 'schedule' segments by operating_schedule_id, 'auto' learns a calendar from history","default":"off"},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id","description":"Public UUID of the operating schedule (required for 'schedule' mode)"}},"type":"object","required":["table_path","metric_type","capture_interval"],"title":"MetricDefinitionCreate","description":"Request schema for creating a metric definition.\n\nTECH-689: Includes percentile_value for PERCENTILE metric type.\nNote: asset_id is extracted from the URL path, not the request body."},"MetricDefinitionUpdate":{"properties":{"capture_interval":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Capture Interval"},"time_column":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Time Column","description":"Column for time-windowed queries. Pass empty string to clear."},"sensitivity":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Sensitivity"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"operating_period_mode":{"anyOf":[{"type":"string","enum":["off","auto","schedule"]},{"type":"null"}],"title":"Operating Period Mode","description":"Operating-period awareness mode (TECH-984)"},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id","description":"Public UUID of the operating schedule ('schedule' mode)"}},"type":"object","title":"MetricDefinitionUpdate","description":"Request schema for updating a metric definition.\n\nNote on clearing optional fields:\n    To clear time_column (remove time-windowed filtering), pass an empty string \"\".\n    The service layer converts empty strings to NULL in the database."},"MetricType":{"type":"string","enum":["distinct_count","null_percentage","mean","sum","min","max","duplicate_count","duplicate_percent","percentile"],"title":"MetricType","description":"Types of metrics that can be tracked.\n\nStatistical metrics compute aggregate values over time with ML-based anomaly detection."},"MetricsDryRunRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset UUID or qualified name"},"metric_id":{"type":"string","title":"Metric Id","description":"Metric UUID to test"},"threshold_type":{"type":"string","title":"Threshold Type","description":"Type of threshold: 'upper', 'lower', 'deviation'"},"threshold_value":{"type":"number","title":"Threshold Value","description":"Threshold value to test (absolute or percent deviation)"},"lookback_days":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Lookback Days","description":"Days of history to analyze","default":7}},"type":"object","required":["asset_id","metric_id","threshold_type","threshold_value"],"title":"MetricsDryRunRequest","description":"Request to dry-run metric threshold alert."},"NotificationPreference":{"type":"string","enum":["all","breaking_only","none"],"title":"NotificationPreference","description":"Notification preference for watchlist entries."},"OffsetPaginationMeta":{"properties":{"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"},"total":{"type":"integer","title":"Total"},"has_next":{"type":"boolean","title":"Has Next"},"has_prev":{"type":"boolean","title":"Has Prev"}},"type":"object","required":["offset","limit","total","has_next","has_prev"],"title":"OffsetPaginationMeta","description":"Offset-based pagination metadata."},"PIIDetectionRequest":{"properties":{"auto_apply":{"type":"boolean","title":"Auto Apply","default":false},"confidence_threshold":{"type":"number","title":"Confidence Threshold","default":0.8}},"type":"object","title":"PIIDetectionRequest","description":"Request for PII detection in database columns."},"PortalRequest":{"properties":{"return_url":{"type":"string","title":"Return Url","description":"URL to return to from portal"}},"type":"object","required":["return_url"],"title":"PortalRequest","description":"Request model for creating customer portal session."},"PreviewAlertTargetsRequest":{"properties":{"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"tag_filter":{"anyOf":[{"$ref":"#/components/schemas/TagFilter"},{"type":"null"}]},"lineage_filter":{"anyOf":[{"$ref":"#/components/schemas/LineageFilter"},{"type":"null"}]}},"type":"object","title":"PreviewAlertTargetsRequest","description":"Request schema for previewing alert rule targets."},"PromptCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Prompt name"},"description":{"type":"string","title":"Description","description":"Prompt description"},"category":{"type":"string","title":"Category","description":"Prompt category"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"System message for LLM"},"user_prompt_template":{"type":"string","title":"User Prompt Template","description":"User prompt template with variables"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory","description":"Subcategory for more specific classification"},"model_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Preferences","description":"Preferred models and settings"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters","description":"LLM parameters (temperature, max_tokens, etc)"},"input_variables":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Variables","description":"List of expected template variables"},"output_format":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Format","description":"Expected output structure"},"status":{"type":"string","title":"Status","description":"Prompt status","default":"draft"},"is_default":{"type":"boolean","title":"Is Default","description":"Set as default for category","default":false},"test_inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Test Inputs","description":"Sample inputs for testing"},"expected_outputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Expected Outputs","description":"Expected outputs for validation"}},"type":"object","required":["name","description","category","user_prompt_template"],"title":"PromptCreate","description":"Model for creating a new prompt."},"PromptTest":{"properties":{"test_inputs":{"additionalProperties":true,"type":"object","title":"Test Inputs","description":"Input variables for testing"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Model to use for testing"}},"type":"object","required":["test_inputs"],"title":"PromptTest","description":"Model for testing a prompt."},"PromptUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"user_prompt_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt Template"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"model_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Preferences"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"input_variables":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Variables"},"output_format":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Format"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"test_inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Test Inputs"},"expected_outputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Expected Outputs"}},"type":"object","title":"PromptUpdate","description":"Model for updating a prompt."},"ProviderType":{"type":"string","enum":["github","gitlab","bitbucket"],"title":"ProviderType","description":"Supported git provider types."},"QACompanySessionCreateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Session title (defaults to 'Q&A Session - All Databases')"},"visibility":{"$ref":"#/components/schemas/SessionVisibility","description":"Session visibility","default":"private"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id","description":"Team ID for team sessions"}},"type":"object","title":"QACompanySessionCreateRequest","description":"Request to create a company-scoped Q&A session.\n\nTECH-570: Dedicated request model for company-scoped sessions\n(no asset_id required)."},"QAQuestionRequest":{"properties":{"question":{"type":"string","maxLength":5000,"minLength":1,"title":"Question","description":"Question text"},"context_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context Filters","description":"Context filters"},"selected_objects":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Selected Objects","description":"Selected database objects"}},"type":"object","required":["question"],"title":"QAQuestionRequest","description":"Request to ask a question."},"QASessionCreateRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Session title"},"visibility":{"$ref":"#/components/schemas/SessionVisibility","description":"Session visibility","default":"private"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id","description":"Team ID for team sessions"},"scope":{"$ref":"#/components/schemas/SessionScope","description":"Session scope: 'asset' for single database, 'company' for all databases","default":"asset"}},"type":"object","title":"QASessionCreateRequest","description":"Request to create a Q&A session.\n\nTECH-570: Added scope parameter for company-scoped sessions."},"QASessionUpdateRequest":{"properties":{"title":{"type":"string","maxLength":500,"minLength":1,"title":"Title","description":"New session title"}},"type":"object","required":["title"],"title":"QASessionUpdateRequest","description":"Request to update a Q&A session."},"RedeemTrialCodeRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Trial code to redeem"}},"type":"object","required":["code"],"title":"RedeemTrialCodeRequest","description":"Request to redeem a trial code."},"RedeemWithCancelRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Trial code to redeem"}},"type":"object","required":["code"],"title":"RedeemWithCancelRequest","description":"Request to redeem a trial code with subscription cancellation (TECH-657).\n\nFor existing paying customers: cancels Stripe subscription and applies trial."},"ReferentialCheckCreate":{"properties":{"child_table_path":{"type":"string","maxLength":500,"title":"Child Table Path","description":"Fully qualified child table path"},"child_column_name":{"type":"string","maxLength":255,"title":"Child Column Name","description":"FK column in child table"},"parent_table_path":{"type":"string","maxLength":500,"title":"Parent Table Path","description":"Fully qualified parent table path"},"parent_column_name":{"type":"string","maxLength":255,"title":"Parent Column Name","description":"PK column in parent table"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Friendly name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"},"capture_interval":{"type":"string","maxLength":100,"title":"Capture Interval","description":"Capture interval (hourly, daily, weekly, or cron)","default":"daily"},"max_orphan_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Orphan Count","description":"Alert if orphan count exceeds this value"},"max_orphan_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Max Orphan Percent","description":"Alert if orphan percentage exceeds this value (0-100)"},"min_child_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Child Count","description":"Each parent should have at least this many children"},"max_child_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Child Count","description":"Each parent should have at most this many children"}},"type":"object","required":["child_table_path","child_column_name","parent_table_path","parent_column_name"],"title":"ReferentialCheckCreate","description":"Request schema for creating a referential integrity check.\n\nValidates FK relationships between child and parent tables.\nNote: asset_id is extracted from the URL path, not the request body."},"ReferentialCheckUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"capture_interval":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Capture Interval"},"max_orphan_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Orphan Count"},"max_orphan_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Max Orphan Percent"},"min_child_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Min Child Count"},"max_child_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Child Count"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ReferentialCheckUpdate","description":"Request schema for updating a referential check."},"RefreshTokenRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshTokenRequest","description":"Refresh token request model."},"RefreshTokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"Bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"RefreshTokenResponse","description":"Refresh token response model."},"RegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"}},"type":"object","required":["email","password"],"title":"RegisterRequest","description":"User registration request model.\n\nThis endpoint is currently disabled. The frontend uses Clerk OAuth.\ncompany_id is accepted by the schema but rejected by the endpoint in all cases\nuntil an invitation-based join flow is implemented."},"ResetIntelligenceRequest":{"properties":{"delete_qa_history":{"type":"boolean","title":"Delete Qa History","description":"Also delete Q&A conversation history","default":true}},"type":"object","title":"ResetIntelligenceRequest","description":"Request to reset intelligence data for an asset."},"ResetOnboardingRequest":{"properties":{"chapter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chapter","description":"Chapter ID to reset, or None to reset all chapters"}},"type":"object","title":"ResetOnboardingRequest","description":"Request to reset onboarding progress."},"ResolveAlertRequest":{"properties":{"action_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Action Category"},"action_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Action Detail"},"root_cause_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Root Cause Category"},"root_cause_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Root Cause Detail"},"pr_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Pr Url"},"job_run_id":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Job Run Id"},"external_link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Link"},"suggestion_pattern_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggestion Pattern Id"},"suggestion_was_helpful":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suggestion Was Helpful"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Optional resolution notes"}},"type":"object","title":"ResolveAlertRequest","description":"Request to resolve an alert with optional resolution metadata."},"ResolveIncidentRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ResolveIncidentRequest","description":"Request to resolve an incident."},"ResolveRequest":{"properties":{"action_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Action Category"},"action_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Action Detail"},"root_cause_category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Root Cause Category"},"root_cause_detail":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Root Cause Detail"},"pr_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Pr Url"},"job_run_id":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Job Run Id"},"external_link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Link"},"suggestion_pattern_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Suggestion Pattern Id"},"suggestion_was_helpful":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suggestion Was Helpful"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ResolveRequest","description":"Request to resolve an alert."},"RootCauseCategory":{"type":"string","enum":["data_source_issue","pipeline_failure","schema_change","configuration_error","infrastructure_issue","known_maintenance","business_process_change","other"],"title":"RootCauseCategory","description":"Root cause categories for violations."},"RuleTemplate":{"properties":{"name_pattern":{"type":"string","maxLength":255,"minLength":1,"title":"Name Pattern","description":"Name pattern with variables: {schema}, {table}, {full_name}"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description","description":"Optional description pattern with variables"},"event_types":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Event Types","description":"Event types to monitor"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities","description":"Severity levels to match (null = all)"},"cooldown_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Cooldown Minutes","default":60},"max_alerts_per_day":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Max Alerts Per Day","default":50},"destination_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Destination Ids"}},"type":"object","required":["name_pattern","event_types","destination_ids"],"title":"RuleTemplate","description":"Template for generating alert rules.\n\nSupports variable substitution using {schema}, {table}, {full_name}."},"RuleType":{"type":"string","enum":["regex_match","allowed_values","range_bounds","format","length_bounds"],"title":"RuleType","description":"Types of validity rules."},"ScheduleConfig":{"properties":{"minute":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Minute"},"hour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hour"},"day_of_week":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Of Month"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"interval_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Interval Minutes"}},"type":"object","title":"ScheduleConfig","description":"Schedule configuration from frontend."},"ScheduleRule":{"properties":{"days":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Days","description":"ISO 8601 days (1=Mon, 7=Sun)"},"start":{"type":"string","pattern":"^\\d{2}:\\d{2}$","title":"Start","description":"Start time in HH:MM format"},"end":{"type":"string","pattern":"^\\d{2}:\\d{2}$","title":"End","description":"End time in HH:MM format"}},"type":"object","required":["days","start","end"],"title":"ScheduleRule","description":"A single schedule rule defining active hours for specific days.\n\nDays use ISO 8601 numbering: 1=Monday, 7=Sunday.\nTimes are in the schedule's configured timezone."},"ScheduleRulesConfig":{"properties":{"rules":{"items":{"$ref":"#/components/schemas/ScheduleRule"},"type":"array","minItems":1,"title":"Rules","description":"List of schedule rules"}},"type":"object","required":["rules"],"title":"ScheduleRulesConfig","description":"Configuration for operating schedule rules.\n\nExample:\n    {\n        \"rules\": [\n            {\"days\": [1,2,3,4,5], \"start\": \"09:00\", \"end\": \"18:00\"},\n            {\"days\": [6], \"start\": \"10:00\", \"end\": \"14:00\"}\n        ]\n    }"},"SchemaChangeConfig":{"properties":{"trigger_on":{"type":"string","enum":["any","breaking","non_breaking","specific_types"],"title":"Trigger On"},"change_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Change Types"}},"additionalProperties":false,"type":"object","required":["trigger_on"],"title":"SchemaChangeConfig","description":"Per-rule trigger configuration for schema_change event-type rules.\n\nScopes which kinds of detected schema change should fire the rule.\nNormalization rules enforced by validators:\n\n- `trigger_on=\"any\"` with no `change_types` is the default-equivalent state.\n  Callers should normally send `null` for that case; the API accepts either.\n- `trigger_on=\"specific_types\"` requires a non-empty `change_types` list\n  whose values all appear in the backend `ChangeType` enum.\n- Any other value of `trigger_on` must not carry `change_types`.\n\nThe evaluation service reads this alongside the schema alert service's\n`change_types_present` context projection (TECH-963)."},"SchemaChangeResponseUpdate":{"properties":{"state":{"$ref":"#/components/schemas/SchemaChangeUserResponse"}},"type":"object","required":["state"],"title":"SchemaChangeResponseUpdate","description":"Request body for updating user response to a schema change event."},"SchemaChangeUserResponse":{"type":"string","enum":["DISMISSED","ACKNOWLEDGED"],"title":"SchemaChangeUserResponse","description":"User response to a schema change event.\n\nThis represents the user's action/acknowledgement state for individual\nschema change events, NOT the alert inbox lifecycle state.\n\nFor alert inbox states (NEW, ACKNOWLEDGED, DISMISSED, RESOLVED, SNOOZED),\nsee: app.domains.feature.alerts.values.alert_state.AlertState"},"SchemaDryRunRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset UUID or qualified name"},"schedule_type":{"type":"string","title":"Schedule Type","description":"Schedule interval: '5m', '1h', '6h', '1d', '1w', or legacy aliases: 'hourly', 'daily', 'weekly'","default":"daily"},"include_column_changes":{"type":"boolean","title":"Include Column Changes","default":true},"include_type_changes":{"type":"boolean","title":"Include Type Changes","default":true},"include_table_additions":{"type":"boolean","title":"Include Table Additions","default":true},"include_table_deletions":{"type":"boolean","title":"Include Table Deletions","default":true}},"type":"object","required":["asset_id"],"title":"SchemaDryRunRequest","description":"Request to dry-run schema drift detection."},"SchemaFilter":{"properties":{"schema_pattern":{"type":"string","maxLength":255,"minLength":1,"title":"Schema Pattern","description":"Schema name pattern (SQL LIKE syntax: % for any, _ for single char)"}},"type":"object","required":["schema_pattern"],"title":"SchemaFilter","description":"Filter for selecting tables by schema name pattern.\n\nUses SQL LIKE syntax (% for any chars, _ for single char).\n\nExample:\n    {\n        \"schema_pattern\": \"analytics%\"\n    }"},"SecuritySettingsUpdate":{"properties":{"default_query_access_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Query Access Level"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","title":"SecuritySettingsUpdate","description":"Schema for security settings update."},"SessionScope":{"type":"string","enum":["asset","company"],"title":"SessionScope","description":"Session scope options.\n\nTECH-570: Controls whether Q&A searches single asset or all company assets."},"SessionVisibility":{"type":"string","enum":["private","team","public"],"title":"SessionVisibility","description":"Session visibility options."},"SetActiveVersionRequest":{"properties":{"version":{"type":"string","title":"Version","description":"Version to activate (e.g., 'v1', 'v2')"}},"type":"object","required":["version"],"title":"SetActiveVersionRequest","description":"Request model for setting active version."},"SettingUpdate":{"properties":{"category":{"type":"string","title":"Category"},"key":{"type":"string","title":"Key"},"value":{"title":"Value"},"value_type":{"type":"string","title":"Value Type","default":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["category","key","value"],"title":"SettingUpdate","description":"Schema for setting updates."},"Severity":{"type":"string","enum":["error","warning"],"title":"Severity","description":"Severity levels for validity rules."},"SnoozeAlertRequest":{"properties":{"duration_hours":{"type":"integer","maximum":720.0,"minimum":1.0,"title":"Duration Hours","description":"Hours to snooze (1-720, max 30 days)"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Optional notes"}},"type":"object","required":["duration_hours"],"title":"SnoozeAlertRequest","description":"Request to snooze an alert."},"SnoozeIncidentRequest":{"properties":{"duration_hours":{"type":"integer","maximum":720.0,"minimum":1.0,"title":"Duration Hours","description":"Snooze duration in hours"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["duration_hours"],"title":"SnoozeIncidentRequest","description":"Request to snooze an incident."},"SnoozeRequest":{"properties":{"monitor_type":{"type":"string","title":"Monitor Type","description":"Monitor type: metric, referential, drift, row_count"},"monitor_id":{"type":"integer","title":"Monitor Id","description":"Internal monitor ID"},"snooze_mode":{"type":"string","title":"Snooze Mode","description":"Snooze mode: 1h, 24h, 7d, until_next_capture, permanent"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Optional reason for snoozing"}},"type":"object","required":["monitor_type","monitor_id","snooze_mode"],"title":"SnoozeRequest","description":"Request body for snoozing a monitor."},"StandardResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["success"],"title":"StandardResponse","description":"Standard API response wrapper."},"SuggestionFeedbackRequest":{"properties":{"pattern_id":{"type":"string","format":"uuid","title":"Pattern Id"},"was_helpful":{"type":"boolean","title":"Was Helpful"}},"type":"object","required":["pattern_id","was_helpful"],"title":"SuggestionFeedbackRequest","description":"Request to submit feedback on a resolution suggestion."},"SyncMethod":{"type":"string","enum":["webhook","polling","manual"],"title":"SyncMethod","description":"Repository synchronization method."},"TableMonitoringRequest":{"properties":{"is_monitored":{"type":"boolean","title":"Is Monitored","description":"Whether to monitor this table for alerts and anomalies"}},"type":"object","required":["is_monitored"],"title":"TableMonitoringRequest","description":"Request schema for toggling table monitoring."},"TablePatternFilter":{"properties":{"table_pattern":{"type":"string","maxLength":255,"minLength":1,"title":"Table Pattern","description":"Table name pattern (SQL LIKE syntax, must include wildcard)"},"schema_pattern":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Schema Pattern","description":"Optional schema pattern to restrict search"}},"type":"object","required":["table_pattern"],"title":"TablePatternFilter","description":"Filter for selecting tables by table name pattern.\n\nUses SQL LIKE syntax (% for any chars, _ for single char).\nMust include at least one wildcard character.\n\nExample:\n    {\n        \"table_pattern\": \"%_fact\",\n        \"schema_pattern\": \"analytics\"  # Optional: restrict to specific schema\n    }"},"TagCategory":{"type":"string","enum":["compliance","business","customer_impact","ai_discovered"],"title":"TagCategory","description":"Tag category enumeration for four-category system."},"TagDecisionsRequest":{"properties":{"decisions":{"additionalProperties":{"type":"string"},"type":"object","title":"Decisions"}},"type":"object","required":["decisions"],"title":"TagDecisionsRequest","description":"Batch tag decision updates from the user."},"TagFilter":{"properties":{"tag_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Names","description":"List of tag names to match"},"tag_categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Categories","description":"List of tag categories to match"},"match_mode":{"type":"string","enum":["any","all"],"title":"Match Mode","description":"'any' for OR logic, 'all' for AND logic","default":"any"}},"type":"object","title":"TagFilter","description":"Filter for selecting tables by tags.\n\nExample:\n    {\n        \"tag_names\": [\"revenue\", \"orders\"],\n        \"tag_categories\": [\"business\"],\n        \"match_mode\": \"any\"\n    }"},"TagGenerationScope":{"type":"string","enum":["full","incremental","tables_only"],"title":"TagGenerationScope","description":"Scope of tag generation operation (distinct from TagScope which is object level)."},"TagPreferenceUpdate":{"properties":{"precision_level":{"type":"integer","title":"Precision Level"}},"type":"object","required":["precision_level"],"title":"TagPreferenceUpdate","description":"Update tag precision preferences for the current user."},"TagReviewDecision":{"properties":{"queue_id":{"type":"integer","title":"Queue Id"},"decision":{"type":"string","title":"Decision"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"category_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Override"},"description_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description Override"}},"type":"object","required":["queue_id","decision"],"title":"TagReviewDecision","description":"Review decision for a pending tag."},"TestCustomSqlRequest":{"properties":{"sql_query":{"type":"string","minLength":1,"title":"Sql Query","description":"SELECT query that returns a single numeric value"},"timeout_seconds":{"type":"integer","maximum":300.0,"minimum":1.0,"title":"Timeout Seconds","description":"Query execution timeout in seconds","default":30}},"type":"object","required":["sql_query"],"title":"TestCustomSqlRequest","description":"Request to test a custom SQL query without creating a monitor."},"ThresholdType":{"type":"string","enum":["stddev","percentage_change","absolute_change","any_change","static_bounds"],"title":"ThresholdType","description":"Types of threshold evaluations for anomaly detection."},"ToggleAlertRuleRequest":{"properties":{"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["is_active"],"title":"ToggleAlertRuleRequest","description":"Request schema for toggling an alert rule."},"TrackEventRequest":{"properties":{"anonymous_id":{"type":"string","maxLength":64,"minLength":1,"title":"Anonymous Id"},"event":{"type":"string","maxLength":100,"minLength":1,"title":"Event"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["anonymous_id","event"],"title":"TrackEventRequest"},"TrackOnboardingEventRequest":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"Event type (CHAPTER_STARTED, STEP_ADVANCED, CHAPTER_COMPLETED, etc.)"},"chapter":{"type":"string","title":"Chapter","description":"Chapter ID (connect, discover, freshness, schema)"},"step":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Step","description":"0-indexed step number within chapter"},"step_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Step Id","description":"Human-readable step identifier"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional event context as JSON"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"UUID grouping events in a single session"}},"type":"object","required":["event_type","chapter"],"title":"TrackOnboardingEventRequest","description":"Request to track an onboarding event.\n\nTECH-776: Fire-and-forget event tracking for onboarding analytics."},"TriggerInvestigationRequest":{"properties":{"alert_id":{"type":"string","title":"Alert Id","description":"Alert public UUID to investigate"}},"type":"object","required":["alert_id"],"title":"TriggerInvestigationRequest","description":"Request to trigger an on-demand investigation."},"UpdateBadgeRequest":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Label"},"tag_filters":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Filters"},"schema_drift_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Drift Enabled"},"freshness_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Freshness Enabled"},"include_upstream":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Upstream"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateBadgeRequest","description":"Request to update a badge."},"UpdateBlackoutRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time","description":"ISO 8601 datetime string"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Time","description":"ISO 8601 datetime string"},"recurrence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recurrence"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateBlackoutRequest","description":"Request schema for updating a blackout window."},"UpdateChapterRequest":{"properties":{"chapter":{"type":"string","title":"Chapter","description":"Chapter ID (connect, discover, freshness, schema)"},"completed":{"type":"boolean","title":"Completed","description":"Whether the chapter is completed","default":true}},"type":"object","required":["chapter"],"title":"UpdateChapterRequest","description":"Request to update a chapter's completion status."},"UpdateCustomSqlMonitorRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sql_query":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Sql Query"},"upper_bound":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Upper Bound"},"lower_bound":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lower Bound"},"check_interval":{"anyOf":[{"type":"string","pattern":"^(hourly|daily|weekly|monthly|\\d+[mhd]|@[a-z_]+|\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+)$"},{"type":"null"}],"title":"Check Interval"},"timeout_seconds":{"anyOf":[{"type":"integer","maximum":300.0,"minimum":1.0},{"type":"null"}],"title":"Timeout Seconds"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"UpdateCustomSqlMonitorRequest","description":"Request to update a custom SQL monitor. All fields optional."},"UpdateDriftMonitorRequest":{"properties":{"baseline_mode":{"anyOf":[{"type":"string","enum":["rolling","fixed"]},{"type":"null"}],"title":"Baseline Mode"},"baseline_window_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Baseline Window Days"},"test_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Test Types"},"psi_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Psi Threshold"},"ks_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ks Threshold"},"chi_squared_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Chi Squared Threshold"},"capture_interval":{"anyOf":[{"type":"string","enum":["hourly","daily","weekly"]},{"type":"null"}],"title":"Capture Interval"},"histogram_bins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Histogram Bins"},"max_categories":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Categories"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateDriftMonitorRequest","description":"Request to update a drift monitor."},"UpdateEdgeRequest":{"properties":{"edge_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Type","description":"Edge type"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence","description":"Confidence score"}},"type":"object","title":"UpdateEdgeRequest","description":"Request schema for updating a lineage edge."},"UpdateFreshnessScheduleRequest":{"properties":{"check_interval":{"anyOf":[{"type":"string","pattern":"^\\d+[mhdw]$"},{"type":"null"}],"title":"Check Interval"},"expected_interval_hours":{"anyOf":[{"type":"number","maximum":720.0,"minimum":0.1},{"type":"null"}],"title":"Expected Interval Hours"},"freshness_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Column"},"monitoring_mode":{"anyOf":[{"type":"string","pattern":"^(auto_learn|explicit)$"},{"type":"null"}],"title":"Monitoring Mode"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateFreshnessScheduleRequest","description":"Request to update a freshness schedule via SDK.\n\nNote: Validation for explicit mode requirements is handled by the service layer,\nwhich has access to existing schedule state. This allows PATCH semantics where\nusers can switch to explicit mode while relying on existing expected_interval_hours."},"UpdateMonitoringScheduleRequest":{"properties":{"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type","description":"Schedule interval: '5m', '1h', '1d', '1w', or legacy aliases. Set to 'cron' when using cron_expression."},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Enable or disable the monitoring schedule"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression","description":"Standard 5-field cron expression"}},"type":"object","title":"UpdateMonitoringScheduleRequest","description":"Request body for updating a monitoring schedule."},"UpdateNodeRequest":{"properties":{"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema","description":"Schema name"},"table_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Table Name","description":"Table name"},"database":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database","description":"Database name"},"layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer","description":"Layer (bronze/silver/gold)"}},"type":"object","title":"UpdateNodeRequest","description":"Request schema for updating a manual lineage node."},"UpdateProfileRequest":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"notify_product_newsletters":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Product Newsletters"},"notify_billing_alerts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Billing Alerts"}},"type":"object","title":"UpdateProfileRequest","description":"Update profile request model."},"UpdateRowCountScheduleRequest":{"properties":{"timestamp_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp Column","description":"Column to filter rows by time period"},"time_window_hours":{"anyOf":[{"type":"integer","enum":[1,6,12,24,168]},{"type":"null"}],"title":"Time Window Hours","description":"Time window for row count measurement"},"check_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Interval","description":"Check interval (e.g., '1h', '6h', '1d')"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Enable/disable monitoring"},"monitoring_mode":{"anyOf":[{"type":"string","enum":["auto_learn","explicit"]},{"type":"null"}],"title":"Monitoring Mode","description":"Monitoring mode: 'auto_learn' or 'explicit'"},"expected_min_rows":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Min Rows","description":"For explicit mode: minimum expected rows"},"expected_max_rows":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Max Rows","description":"For explicit mode: maximum expected rows"},"sensitivity":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sensitivity","description":"Sensitivity level (1-4)"},"operating_period_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating Period Mode","description":"Operating-period awareness (TECH-984): 'off', 'auto', or 'schedule'"},"operating_schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operating Schedule Id","description":"Operating schedule public UUID ('schedule' mode)"}},"type":"object","title":"UpdateRowCountScheduleRequest","description":"Request to update row_count monitoring schedule."},"UpdateScheduledCheckRequest":{"properties":{"schedule_config":{"anyOf":[{"$ref":"#/components/schemas/ScheduleConfig"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"schedule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Type"}},"type":"object","title":"UpdateScheduledCheckRequest","description":"Request to update a scheduled check."},"UpdateStepRequest":{"properties":{"chapter":{"type":"string","title":"Chapter","description":"Chapter ID (connect, discover, freshness, schema)"},"current_step":{"type":"integer","minimum":0.0,"title":"Current Step","description":"0-indexed step the user is on"},"current_step_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step Id","description":"Step ID string for stable resume across step changes"}},"type":"object","required":["chapter","current_step"],"title":"UpdateStepRequest","description":"Request to update a chapter's current step (for resume functionality)."},"UsageTracking":{"properties":{"prompt_id":{"type":"string","title":"Prompt Id","description":"Prompt ID"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"asset_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Asset Id"},"model_used":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Used"},"input_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Data"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"tokens_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Used"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms"},"was_successful":{"type":"boolean","title":"Was Successful","default":true},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["prompt_id"],"title":"UsageTracking","description":"Model for tracking prompt usage."},"UserLanguage":{"type":"string","enum":["en","en","es","es","fr","fr","de","de","ja","ja"],"title":"UserLanguage","description":"User language enumeration."},"UserPreferenceTheme":{"type":"string","enum":["light","dark","system"],"title":"UserPreferenceTheme","description":"User preference theme enumeration."},"UserPreferencesUpdate":{"properties":{"theme":{"anyOf":[{"$ref":"#/components/schemas/UserPreferenceTheme"},{"type":"null"}]},"language":{"anyOf":[{"$ref":"#/components/schemas/UserLanguage"},{"type":"null"}]},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"date_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Format"},"time_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Format"},"email_notifications":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Notifications"},"email_daily_digest":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Daily Digest"},"email_weekly_summary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Weekly Summary"},"email_alert_critical":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Alert Critical"},"email_alert_high":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Alert High"},"email_alert_medium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Alert Medium"},"email_alert_low":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Alert Low"},"notify_onboarding_tips":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Onboarding Tips"},"notify_usage_alerts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify Usage Alerts"},"default_dashboard_view":{"anyOf":[{"$ref":"#/components/schemas/DashboardView"},{"type":"null"}]},"items_per_page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Items Per Page"},"show_tooltips":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Tooltips"},"compact_view":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Compact View"},"help_level":{"anyOf":[{"$ref":"#/components/schemas/HelpLevel"},{"type":"null"}]},"show_cookie_button":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Cookie Button"},"show_learning_menu":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Show Learning Menu"},"enable_keyboard_shortcuts":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Keyboard Shortcuts"},"auto_refresh_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Refresh Interval"},"default_asset_view":{"anyOf":[{"$ref":"#/components/schemas/AssetDisplayMode"},{"type":"null"}]},"custom_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Settings"}},"type":"object","title":"UserPreferencesUpdate","description":"Schema for updating user preferences.\n\nAll fields are optional for partial updates."},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"type":"string","title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company_id":{"type":"integer","title":"Company Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Locked"},"is_superuser":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Superuser"},"is_allowlisted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Allowlisted"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"clerk_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clerk User Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"notify_product_newsletters":{"type":"boolean","title":"Notify Product Newsletters","default":true},"notify_billing_alerts":{"type":"boolean","title":"Notify Billing Alerts","default":true},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false},"is_impersonation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Impersonation"},"impersonated_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Impersonated By"}},"type":"object","required":["id","email","company_id"],"title":"UserResponse","description":"User response model."},"ValidateTrialCodeRequest":{"properties":{"code":{"type":"string","maxLength":50,"minLength":3,"title":"Code","description":"Trial code to validate"}},"type":"object","required":["code"],"title":"ValidateTrialCodeRequest","description":"Request to validate a trial code."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidityCheckTrigger":{"properties":{"sample_limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Sample Limit","description":"Max invalid samples","default":10}},"type":"object","title":"ValidityCheckTrigger","description":"Request schema for triggering a validity check."},"ValidityRuleCreate":{"properties":{"table_path":{"type":"string","title":"Table Path","description":"Fully qualified table path"},"column_name":{"type":"string","title":"Column Name","description":"Column to validate"},"rule_type":{"$ref":"#/components/schemas/RuleType","description":"Type of validation rule"},"rule_config":{"additionalProperties":true,"type":"object","title":"Rule Config","description":"Rule-specific configuration"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name","description":"Optional rule name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Custom error message"},"severity":{"$ref":"#/components/schemas/Severity","description":"Severity level","default":"error"},"alert_threshold_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Alert Threshold Percent","description":"Alert threshold percentage (manual mode)"},"detection_mode":{"type":"string","enum":["manual","auto"],"title":"Detection Mode","description":"'manual' (fixed threshold) or 'auto' (learned baseline)","default":"manual"},"sensitivity":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Sensitivity","description":"1-4 stddev threshold for auto mode","default":2},"operating_period_mode":{"type":"string","enum":["off","auto","schedule"],"title":"Operating Period Mode","description":"Operating-period awareness (TECH-984): 'off' pools all history, 'schedule' segments by operating_schedule_id, 'auto' learns a calendar from history","default":"off"},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id","description":"Public UUID of the operating schedule (required for 'schedule' mode)"},"treat_null_as_valid":{"type":"boolean","title":"Treat Null As Valid","description":"Whether NULL values pass validation","default":true},"check_interval":{"$ref":"#/components/schemas/CheckInterval","description":"Check frequency (hourly, daily, weekly)","default":"daily"}},"type":"object","required":["table_path","column_name","rule_type","rule_config"],"title":"ValidityRuleCreate","description":"Request schema for creating a validity rule."},"ValidityRuleUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"rule_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Rule Config"},"severity":{"anyOf":[{"$ref":"#/components/schemas/Severity"},{"type":"null"}]},"alert_threshold_percent":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string"},{"type":"null"}],"title":"Alert Threshold Percent","description":"Alert threshold percentage (manual mode)"},"detection_mode":{"anyOf":[{"type":"string","enum":["manual","auto"]},{"type":"null"}],"title":"Detection Mode","description":"'manual' (fixed threshold) or 'auto' (learned baseline)"},"sensitivity":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Sensitivity","description":"1-4 stddev threshold for auto mode"},"operating_period_mode":{"anyOf":[{"type":"string","enum":["off","auto","schedule"]},{"type":"null"}],"title":"Operating Period Mode","description":"Operating-period awareness mode (TECH-984)"},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id","description":"Public UUID of the operating schedule ('schedule' mode)"},"treat_null_as_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Treat Null As Valid"},"check_interval":{"anyOf":[{"$ref":"#/components/schemas/CheckInterval"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ValidityRuleUpdate","description":"Request schema for updating a validity rule."},"WorkflowSubmissionRequest":{"properties":{"workflow_name":{"type":"string","title":"Workflow Name","description":"Name of the workflow to execute"},"context":{"additionalProperties":true,"type":"object","title":"Context","description":"Workflow execution context"},"filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filters","description":"Optional filters for workflow"},"priority":{"$ref":"#/components/schemas/JobPriority","description":"Job priority level","default":"normal"},"estimated_duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Duration","description":"Estimated duration in seconds"}},"type":"object","required":["workflow_name"],"title":"WorkflowSubmissionRequest","description":"Request model for submitting a new workflow."},"app__domains__core__assets__api__endpoints__assets_bulk__BulkConnectionTestRequest":{"properties":{"asset_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"minItems":1,"title":"Asset Ids","description":"List of asset public UUIDs to test"}},"type":"object","required":["asset_ids"],"title":"BulkConnectionTestRequest","description":"Request to test connections for multiple assets."},"app__domains__core__assets__api__endpoints__assets_bulk__BulkDeleteRequest":{"properties":{"asset_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Asset Ids","description":"List of asset public UUIDs to delete"}},"type":"object","required":["asset_ids"],"title":"BulkDeleteRequest","description":"Request to delete multiple assets."},"app__domains__core__assets__api__endpoints__connections__BulkConnectionTestRequest":{"properties":{"asset_ids":{"items":{"type":"integer"},"type":"array","title":"Asset Ids"}},"type":"object","required":["asset_ids"],"title":"BulkConnectionTestRequest","description":"Request schema for bulk connection testing."},"app__domains__feature__alerts__api__v1__alert_rules__CreateAlertRuleRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true},"cooldown_minutes":{"type":"integer","maximum":10080.0,"minimum":1.0,"title":"Cooldown Minutes","default":60},"max_alerts_per_day":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Max Alerts Per Day","default":50},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities"},"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"tag_filter":{"anyOf":[{"$ref":"#/components/schemas/TagFilter"},{"type":"null"}]},"lineage_filter":{"anyOf":[{"$ref":"#/components/schemas/LineageFilter"},{"type":"null"}]},"grouping":{"anyOf":[{"$ref":"#/components/schemas/GroupingConfig"},{"type":"null"}]},"destination_ids":{"items":{"type":"string","format":"uuid"},"type":"array","minItems":1,"title":"Destination Ids"},"is_notify_code_authors":{"type":"boolean","title":"Is Notify Code Authors","default":false},"code_author_min_confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Code Author Min Confidence","default":0.7},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id"},"schema_change_config":{"anyOf":[{"$ref":"#/components/schemas/SchemaChangeConfig"},{"type":"null"}]}},"type":"object","required":["name","destination_ids"],"title":"CreateAlertRuleRequest","description":"Request schema for creating an alert rule."},"app__domains__feature__alerts__api__v1__alert_rules__UpdateAlertRuleRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"cooldown_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":1.0},{"type":"null"}],"title":"Cooldown Minutes"},"max_alerts_per_day":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Max Alerts Per Day"},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities"},"asset_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Asset Ids"},"grouping":{"anyOf":[{"$ref":"#/components/schemas/GroupingConfig"},{"type":"null"}]},"is_notify_code_authors":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Notify Code Authors"},"code_author_min_confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Code Author Min Confidence"},"operating_schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Operating Schedule Id"},"schema_change_config":{"anyOf":[{"$ref":"#/components/schemas/SchemaChangeConfig"},{"type":"null"}]}},"type":"object","title":"UpdateAlertRuleRequest","description":"Request schema for updating an alert rule."},"app__domains__feature__alerts__api__v1__alert_rules_bulk__BulkDeleteRequest":{"properties":{"rule_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":500,"minItems":1,"title":"Rule Ids"}},"type":"object","required":["rule_ids"],"title":"BulkDeleteRequest","description":"Request to delete multiple rules."},"app__domains__feature__alerts__api__v1__operating_schedules__CreateScheduleRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"timezone":{"type":"string","maxLength":50,"title":"Timezone","default":"UTC"},"schedule_rules":{"$ref":"#/components/schemas/ScheduleRulesConfig"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","schedule_rules"],"title":"CreateScheduleRequest","description":"Request schema for creating an operating schedule."},"app__domains__feature__alerts__api__v1__operating_schedules__UpdateScheduleRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"timezone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Timezone"},"schedule_rules":{"anyOf":[{"$ref":"#/components/schemas/ScheduleRulesConfig"},{"type":"null"}]},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"UpdateScheduleRequest","description":"Request schema for updating an operating schedule."},"app__domains__feature__alerts__api__v1__schemas__CreateDestinationRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Destination name"},"destination_type":{"type":"string","title":"Destination Type","description":"Type of destination"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Destination configuration"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether destination is active","default":true}},"type":"object","required":["name","destination_type","config"],"title":"CreateDestinationRequest","description":"Request schema for creating an alert destination."},"app__domains__feature__alerts__api__v1__schemas__UpdateDestinationRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"Destination name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Destination configuration"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether destination is active"}},"type":"object","title":"UpdateDestinationRequest","description":"Request schema for updating an alert destination."},"app__domains__feature__data_quality__drift__api__drift__SetBaselineRequest":{"properties":{"distribution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distribution Id","description":"Distribution ID to use as baseline"},"use_current_distribution":{"type":"boolean","title":"Use Current Distribution","description":"Use the most recent distribution as baseline","default":false}},"type":"object","title":"SetBaselineRequest","description":"Request to set a fixed baseline."},"app__domains__feature__data_quality__freshness__models__freshness_models__CreateScheduleRequest":{"properties":{"table_path":{"type":"string","title":"Table Path","description":"Table path (schema.table_name)"},"check_interval":{"type":"string","title":"Check Interval","description":"Check interval (5m, 1h, 1d)"},"freshness_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Column","description":"Column to track freshness"},"monitoring_mode":{"type":"string","title":"Monitoring Mode","description":"Monitoring mode: auto_learn or explicit","default":"auto_learn"},"explicit_sla":{"anyOf":[{"$ref":"#/components/schemas/ExplicitSLA"},{"type":"null"}],"description":"Explicit SLA config (required if monitoring_mode=explicit)"},"buffer_multiplier":{"anyOf":[{"type":"number","maximum":2.0,"exclusiveMinimum":1.0},{"type":"null"}],"title":"Buffer Multiplier","description":"Buffer multiplier for auto-learn mode"},"business_priority":{"anyOf":[{"$ref":"#/components/schemas/BusinessPriority"},{"type":"null"}],"description":"Business priority: critical, high, medium, low"},"business_impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Impact","description":"Description of business impact"},"notification_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array","minItems":1},{"type":"null"}],"title":"Notification Recipients","description":"Email addresses to notify on SLA violations"}},"type":"object","required":["table_path","check_interval"],"title":"CreateScheduleRequest","description":"Request to create freshness monitoring schedule.\n\nNote: Validation is handled by FreshnessValidationService"},"app__domains__feature__data_quality__freshness__models__freshness_models__UpdateScheduleRequest":{"properties":{"check_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Interval","description":"Check interval (5m, 1h, 1d)"},"freshness_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Column","description":"Column to track freshness"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Enable/disable monitoring"},"monitoring_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitoring Mode","description":"Monitoring mode: 'auto_learn' or 'explicit'"},"expected_interval_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expected Interval Hours","description":"Expected update interval in hours (for explicit mode)"},"expected_update_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Update Time","description":"Expected update time pattern (e.g., '05:00' for daily at 5am, ':05' for hourly at 5 past)"}},"type":"object","title":"UpdateScheduleRequest","description":"Request to update freshness monitoring schedule.\n\nNote: Validation is handled by FreshnessValidationService"},"app__domains__feature__data_quality__models__schedules__CreateScheduleRequest":{"properties":{"table_path":{"type":"string","maxLength":500,"minLength":1,"title":"Table Path","description":"Full path to the table to monitor","example":"public.user_events"},"check_type":{"$ref":"#/components/schemas/CheckType","description":"Type of data quality check to perform"},"check_interval":{"type":"string","pattern":"^(hourly|daily|weekly|monthly|\\d+[mhd]|@[a-z_]+|\\S+\\s+\\S+\\s+\\S+\\s+\\S+\\s+\\S+)$","title":"Check Interval","description":"How often to run the check (cron expression or human-readable)","example":"daily"},"enabled":{"type":"boolean","title":"Enabled","description":"Whether the schedule should be active immediately","default":true},"check_config":{"additionalProperties":true,"type":"object","title":"Check Config","description":"Configuration specific to the check type","example":{"freshness_column":"updated_at","threshold_hours":24,"use_row_count":false}},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata for the schedule","example":{"alert_recipients":["team@company.com"]}}},"type":"object","required":["table_path","check_type","check_interval","check_config"],"title":"CreateScheduleRequest","description":"Request model for creating check schedules.","examples":[{"check_config":{"freshness_column":"created_at","threshold_hours":24},"check_interval":"daily","check_type":"freshness","enabled":true,"metadata":{"description":"Monitor user activity freshness","owner":"data-team"},"table_path":"public.user_events"},{"check_config":{"threshold_hours":2,"use_row_count":true},"check_interval":"hourly","check_type":"freshness","enabled":true,"table_path":"analytics.revenue_data"},{"check_config":{"check_columns":["response_time","error_rate"],"confidence_threshold":0.95,"statistical_tests":["outlier_detection","trend_analysis"]},"check_interval":"daily","check_type":"statistical","enabled":false,"table_path":"metrics.performance_stats"}]},"app__domains__feature__schema_drift__api__v1__endpoints__SetBaselineRequest":{"properties":{"snapshot_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Snapshot Id"}},"type":"object","title":"SetBaselineRequest","description":"Request body for setting baseline snapshot."},"app__domains__feature__tags__api__v1__tags__ApplyTagsRequest":{"properties":{"tag_ids":{"items":{"type":"integer"},"type":"array","title":"Tag Ids"},"category":{"anyOf":[{"$ref":"#/components/schemas/TagCategory"},{"type":"null"}]}},"type":"object","required":["tag_ids"],"title":"ApplyTagsRequest","description":"Request to apply tags to database objects."},"app__shared__api__v1__public__alerts__CreateAlertRuleRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Rule name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Rule description"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the rule is active","default":true},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Event types to alert on"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities","description":"Severity levels"},"destination_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Destination Ids","description":"Destination IDs"},"tag_filter_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Filter Mode","description":"Tag filter mode: any or all"},"tag_filter_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Filter Tags","description":"Tags to filter by"},"is_notify_code_authors":{"type":"boolean","title":"Is Notify Code Authors","description":"Whether to notify code authors when this rule triggers","default":false},"code_author_min_confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Code Author Min Confidence","description":"Minimum git blame confidence to notify (0.0-1.0)","default":0.7}},"type":"object","required":["name","destination_ids"],"title":"CreateAlertRuleRequest","description":"Request to create an alert rule."},"app__shared__api__v1__public__alerts__CreateDestinationRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Destination name"},"destination_type":{"type":"string","title":"Destination Type","description":"Type: email, slack, webhook, etc."},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Configuration for the destination"}},"type":"object","required":["name","destination_type","config"],"title":"CreateDestinationRequest","description":"Request to create an alert destination."},"app__shared__api__v1__public__alerts__UpdateAlertRuleRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"Rule name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Rule description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Whether the rule is active"},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Event types to alert on"},"severities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Severities","description":"Severity levels"},"tag_filter_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Filter Mode","description":"Tag filter mode: any or all"},"tag_filter_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tag Filter Tags","description":"Tags to filter by"},"is_notify_code_authors":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Notify Code Authors","description":"Whether to notify code authors when this rule triggers"},"code_author_min_confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Code Author Min Confidence","description":"Minimum git blame confidence to notify (0.0-1.0)"}},"type":"object","title":"UpdateAlertRuleRequest","description":"Request to update an alert rule."},"app__shared__api__v1__public__alerts__UpdateDestinationRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name","description":"New name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Updated config"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","description":"Active status"}},"type":"object","title":"UpdateDestinationRequest","description":"Request to update an alert destination."},"app__shared__api__v1__public__tags__ApplyTagsRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset identifier (public UUID or qualified name)"},"tag_names":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Tag Names","description":"Tag names to apply"},"object_paths":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Object Paths","description":"Object paths to apply tags to (e.g., ['schema.table1', 'schema.table2'])"},"category":{"type":"string","title":"Category","description":"Tag category for new tags","default":"business"}},"type":"object","required":["asset_id","tag_names","object_paths"],"title":"ApplyTagsRequest","description":"Request to apply tags to database objects."}}}}