{"openapi":"3.1.0","info":{"title":"AI Visibility Intelligence API","description":"API for measuring and analyzing AI model brand recommendations","version":"1.0.0"},"paths":{"/api/v1/auth/register":{"post":{"tags":["Authentication"],"summary":"Register","description":"Register a new user account.\n\nCreates a new user with hashed password and a default account.","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRegister"}}},"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/start-trial":{"post":{"tags":["Authentication"],"summary":"Start Trial","description":"Create (or refresh) a trial account from the landing page email submit.\n\nGenerates a verification link that acts as a passwordless login.","operationId":"start_trial_api_v1_auth_start_trial_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartTrialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Authenticate user and return JWT token.\n\nValidates credentials and returns access token with user info.\nAlso creates a UserSession record for session tracking.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","description":"Logout endpoint (client-side token deletion).\n\nJWT tokens are stateless, so logout is handled by the client\nremoving the token from storage.","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/verify-email/{token}":{"get":{"tags":["Authentication"],"summary":"Verify Email","description":"Verify user email address with verification token.\n\nMarks user as verified if token is valid.","operationId":"verify_email_api_v1_auth_verify_email__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/resend-verification":{"post":{"tags":["Authentication"],"summary":"Resend Verification","description":"Resend verification email to user.\n\nRate limited to 10 requests per hour to prevent abuse.","operationId":"resend_verification_api_v1_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/forgot-password":{"post":{"tags":["Authentication"],"summary":"Forgot Password","description":"Generate password reset token for user.\n\nStores reset token in database for later validation.\n\nRate limited to 3 requests per hour per IP to prevent email bombing.","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["Authentication"],"summary":"Reset Password","description":"Reset user password with reset token.\n\nValidates token and updates password if valid.\n\nRate limited to 10 attempts per hour per IP to prevent token brute-force attacks.","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/set-password":{"post":{"tags":["Authentication"],"summary":"Set Password","description":"Set password for passwordless users (after email verification).\n\nThis allows users who signed up via magic link to set a password\nfor traditional login in the future.","operationId":"set_password_api_v1_auth_set_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login-secure":{"post":{"tags":["Authentication"],"summary":"Login Secure","description":"Secure login with httpOnly cookies.\n\nSets two cookies:\n- access_token: Short-lived (15 minutes), httpOnly, secure, sameSite=strict\n- refresh_token: Long-lived (7 days), httpOnly, secure, sameSite=strict\n\nAlso creates a UserSession database record for session tracking.\n\nRate limited to 5 attempts per minute per IP to prevent brute force attacks.","operationId":"login_secure_api_v1_auth_login_secure_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh Token","description":"Refresh access token using refresh token from cookie.\n\nUses database-backed refresh tokens for durable session management.","operationId":"refresh_token_api_v1_auth_refresh_post","parameters":[{"name":"refresh_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout-secure":{"post":{"tags":["Authentication"],"summary":"Logout Secure","description":"Secure logout - clears cookies and invalidates refresh token in database.","operationId":"logout_secure_api_v1_auth_logout_secure_post","parameters":[{"name":"refresh_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Secure","description":"Get current user from httpOnly cookie.","operationId":"get_current_user_secure_api_v1_auth_me_get","parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/profile":{"get":{"tags":["Account Management"],"summary":"Get Profile","description":"Get current user profile.","operationId":"get_profile_api_v1_account_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Account Management"],"summary":"Update Profile","description":"Update user profile (name, email).\n\nNote: Changing email will require re-verification.","operationId":"update_profile_api_v1_account_profile_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/change-password":{"post":{"tags":["Account Management"],"summary":"Change Password","description":"Change user password.","operationId":"change_password_api_v1_account_change_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/api-keys":{"post":{"tags":["Account Management"],"summary":"Create Api Key","description":"Create a new API key for programmatic access.\n\n**IMPORTANT:** The secret key is only shown once. Save it securely!","operationId":"create_api_key_api_v1_account_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Account Management"],"summary":"List Api Keys","description":"List all API keys for current user/account.","operationId":"list_api_keys_api_v1_account_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__account__ApiKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/api-keys/{api_key_id}":{"delete":{"tags":["Account Management"],"summary":"Delete Api Key","description":"Delete an API key.","operationId":"delete_api_key_api_v1_account_api_keys__api_key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/api-keys/{api_key_id}/deactivate":{"patch":{"tags":["Account Management"],"summary":"Deactivate Api Key","description":"Deactivate an API key (can be reactivated later).","operationId":"deactivate_api_key_api_v1_account_api_keys__api_key_id__deactivate_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/sessions":{"get":{"tags":["Account Management"],"summary":"List Sessions","description":"List all active sessions for current user.","operationId":"list_sessions_api_v1_account_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/sessions/revoke":{"post":{"tags":["Account Management"],"summary":"Revoke Sessions","description":"Revoke user sessions.\n\nIf session_id is provided, revokes that specific session.\nIf session_id is None, revokes all sessions except the current one.","operationId":"revoke_sessions_api_v1_account_sessions_revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/delete":{"post":{"tags":["Account Management"],"summary":"Delete Account","description":"Permanently delete user account and all associated data.\n\n**WARNING:** This action is irreversible!","operationId":"delete_account_api_v1_account_delete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["Users"],"summary":"Get Current User Info","description":"Get current authenticated user information.\n\nIncludes subscription_tier from the user's account (defaults to 'free').","operationId":"get_current_user_info_api_v1_users_me_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"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"}}}}}},"put":{"tags":["Users"],"summary":"Update Current User","description":"Update current authenticated user information.\n\nReturns updated user data including subscription_tier.","operationId":"update_current_user_api_v1_users_me_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"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/brands":{"get":{"tags":["Brands"],"summary":"List Brands","description":"List all brands for the current account with has_data flag.","operationId":"list_brands_api_v1_brands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_BrandResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Brands"],"summary":"Create Brand","description":"Create a new brand for the current account.","operationId":"create_brand_api_v1_brands_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__brand__BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}":{"get":{"tags":["Brands"],"summary":"Get Brand","description":"Get a specific brand by ID.","operationId":"get_brand_api_v1_brands__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__brand__BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Brands"],"summary":"Update Brand","description":"Update a brand.","operationId":"update_brand_api_v1_brands__brand_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__brand__BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Brands"],"summary":"Delete Brand","description":"Delete a brand.","operationId":"delete_brand_api_v1_brands__brand_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-models":{"get":{"tags":["AI Models"],"summary":"List Ai Models","description":"List all active AI models available to the account.\n\nReturns a paginated list of AI models that can be used for query execution.\nOnly includes active models that are enabled in the system.","operationId":"list_ai_models_api_v1_ai_models_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_AIModelResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ai-models/{model_id}":{"get":{"tags":["AI Models"],"summary":"Get Ai Model","description":"Get a specific AI model by ID.","operationId":"get_ai_model_api_v1_ai_models__model_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AIModelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/competitors":{"get":{"tags":["Competitors"],"summary":"List Competitors","description":"List all competitors for the current account.","operationId":"list_competitors_api_v1_competitors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompetitorResponse"},"title":"Response List Competitors Api V1 Competitors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Competitors"],"summary":"Create Competitor","description":"Create a new competitor.","operationId":"create_competitor_api_v1_competitors_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/competitors/{competitor_id}":{"get":{"tags":["Competitors"],"summary":"Get Competitor","description":"Get a specific competitor by ID.","operationId":"get_competitor_api_v1_competitors__competitor_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"competitor_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competitor Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Competitors"],"summary":"Update Competitor","description":"Update a competitor.","operationId":"update_competitor_api_v1_competitors__competitor_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"competitor_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competitor Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Competitors"],"summary":"Delete Competitor","description":"Delete a competitor.","operationId":"delete_competitor_api_v1_competitors__competitor_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"competitor_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Competitor Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/categories":{"get":{"tags":["Queries"],"summary":"List Categories","description":"List all query categories for the current account with optimized pagination using window functions.","operationId":"list_categories_api_v1_queries_categories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_QueryCategoryResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Queries"],"summary":"Create Category","description":"Create a new query category.","operationId":"create_category_api_v1_queries_categories_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCategoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/categories/{category_id}":{"get":{"tags":["Queries"],"summary":"Get Category","description":"Get a specific query category by ID.","operationId":"get_category_api_v1_queries_categories__category_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Queries"],"summary":"Update Category","description":"Update a query category.","operationId":"update_category_api_v1_queries_categories__category_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCategoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCategoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Queries"],"summary":"Delete Category","description":"Delete a query category.","operationId":"delete_category_api_v1_queries_categories__category_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries":{"get":{"tags":["Queries"],"summary":"List Queries","description":"List all queries for the current account with optimized pagination using window functions.","operationId":"list_queries_api_v1_queries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category ID","title":"Category Id"},"description":"Filter by category 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":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_QueryResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Queries"],"summary":"Create Query","description":"Create a new query.","operationId":"create_query_api_v1_queries_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/queries/{query_id}":{"get":{"tags":["Queries"],"summary":"Get Query","description":"Get a specific query by ID.","operationId":"get_query_api_v1_queries__query_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Queries"],"summary":"Update Query","description":"Update a query.","operationId":"update_query_api_v1_queries__query_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Queries"],"summary":"Delete Query","description":"Delete a query.","operationId":"delete_query_api_v1_queries__query_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query_id","in":"path","required":true,"schema":{"type":"string","title":"Query Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scores/visibility":{"get":{"tags":["Analytics"],"summary":"Get Visibility Score","description":"Get current visibility score with PRD v4 metrics.\n\nReturns both new wedge metrics (a_sov, recommendedness_index, etc.) and\nlegacy metrics for backward compatibility during transition.\n\nArgs:\n    period: Time period (7days, 30days, 90days)\n    brand_id: Optional brand ID to filter by (defaults to account's first brand)\n    account: Current authenticated account\n    db: Database session\n\nReturns:\n    VisibilityScoreResponse with PRD v4 wedge metrics + legacy fields","operationId":"get_visibility_score_api_v1_scores_visibility_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/PeriodEnum"}],"description":"Time period for analysis","default":"30days","title":"Period"},"description":"Time period for analysis"},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by specific brand ID","title":"Brand Id"},"description":"Filter by specific brand ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityScoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scores/competitive":{"get":{"tags":["Analytics"],"summary":"Get Competitive Scores","description":"Get competitive heatmap comparing brand vs competitors across models.\n\nAggregates visibility scores for user's brand and all competitors,\nbroken down by AI model (ChatGPT, Gemini, Perplexity, Grok, Claude).\n\nArgs:\n    period: Time period (7days, 30days, 90days)\n    brand_id: Optional brand ID to filter by (defaults to account's first brand)\n    account: Current authenticated account\n    db: Database session\n\nReturns:\n    List of CompetitiveBrandScore with per-model scores and averages","operationId":"get_competitive_scores_api_v1_scores_competitive_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/PeriodEnum"}],"description":"Time period for analysis","default":"30days","title":"Period"},"description":"Time period for analysis"},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by specific brand ID","title":"Brand Id"},"description":"Filter by specific brand ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompetitiveBrandScore"},"title":"Response Get Competitive Scores Api V1 Scores Competitive Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scores/timeline":{"get":{"tags":["Analytics"],"summary":"Get Timeline","description":"Get timeline of visibility scores over specified period.\n\nArgs:\n    period: Time period (7days, 30days, 90days)\n\nReturns:\n    Daily timeline data points","operationId":"get_timeline_api_v1_scores_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/PeriodEnum"}],"description":"Time period for timeline","default":"7days","title":"Period"},"description":"Time period for timeline"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TimelineDataPoint"},"title":"Response Get Timeline Api V1 Scores Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scores/wins-losses":{"get":{"tags":["Analytics"],"summary":"Get Wins Losses","description":"Get top wins and losses for the period by analyzing judge results.\n\nAnalyzes per-query, per-model performance changes:\n- Wins: New mentions, rank improvements, stronger recommendations\n- Losses: Lost mentions, rank drops, weaker recommendations\n\nArgs:\n    period: Time period (7days, 30days, 90days)\n    brand_id: Optional brand ID to filter by (defaults to account's first brand)\n\nReturns:\n    Top 5 wins and top 5 losses with query, model, change, and reason","operationId":"get_wins_losses_api_v1_scores_wins_losses_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"allOf":[{"$ref":"#/components/schemas/PeriodEnum"}],"description":"Time period for wins/losses","default":"7days","title":"Period"},"description":"Time period for wins/losses"},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by specific brand ID","title":"Brand Id"},"description":"Filter by specific brand ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scores/insights":{"get":{"tags":["Analytics"],"summary":"Get Insights","description":"Get actionable insights by analyzing judge results and trends.\n\nGenerates 3 priority insights across categories:\n- Performance trends (improving/declining visibility)\n- Competitive positioning (rank, mentions vs competitors)\n- Opportunities (models/queries to focus on)\n\nArgs:\n    type: Insight type (currently only 'overview' supported)\n    brand_id: Optional brand ID to filter by (defaults to account's first brand)\n    account: Current authenticated account\n    db: Database session\n\nReturns:\n    List of 3 insight objects with title, description, variant, icon","operationId":"get_insights_api_v1_scores_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"overview","title":"Type"}},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by specific brand ID","title":"Brand Id"},"description":"Filter by specific brand ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/":{"post":{"tags":["Executions"],"summary":"Trigger Execution","description":"Trigger a new query execution against ChatGPT.\n\nSupports idempotency via Idempotency-Key header to prevent duplicate executions.","operationId":"trigger_execution_api_v1_executions__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionTrigger"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Execution Api V1 Executions  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Executions"],"summary":"List Executions","description":"List executions for the current account with optional filters.\n\nArgs:\n    status_filter: Filter by execution status (processing, completed, failed, timeout)\n    ai_model_id: Filter by AI model ID\n    limit: Maximum number of results (default: 100, max: 1000)\n    offset: Number of results to skip for pagination\n    account: Current authenticated account\n    db: Database session\n\nReturns:\n    List of executions with deterministic ordering (created_at DESC, id DESC)","operationId":"list_executions_api_v1_executions__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"ai_model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Model Id"}},{"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":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExecutionStatus"},"title":"Response List Executions Api V1 Executions  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{job_id}":{"get":{"tags":["Executions"],"summary":"Get Execution Status","description":"Get execution status and details by job ID.","operationId":"get_execution_status_api_v1_executions__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/judge":{"post":{"tags":["Judges"],"summary":"Trigger Manual Judge","description":"Manually trigger judge pipeline for an execution.\n\nUseful for debugging and re-judging after prompt updates.\n\nArgs:\n    execution_id: UUID of the execution to judge\n    account: Current authenticated account\n    db: Database session\n\nReturns:\n    Dict with mention_result_id, recommendation_result_id, and message\n\nRaises:\n    404: Execution not found or doesn't belong to account\n    400: Execution status is not \"completed\"","operationId":"trigger_manual_judge_api_v1_executions__execution_id__judge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Trigger Manual Judge Api V1 Executions  Execution Id  Judge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/answers":{"get":{"tags":["Answers"],"summary":"List Answers","description":"List query executions with judge results and pagination.","operationId":"list_answers_api_v1_answers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by run execution ID","title":"Run Id"},"description":"Filter by run execution ID"},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by AI model name","title":"Model"},"description":"Filter by AI model name"},{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"mentioned","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by mention status","title":"Mentioned"},"description":"Filter by mention status"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in query text or answer","title":"Search"},"description":"Search in query text or answer"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_AnswerResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/analyze-brand":{"post":{"tags":["Wizard"],"summary":"Analyze Brand Endpoint","description":"Analyze a brand using AI to suggest verticals and competitors.\n\nUses Claude (via Anthropic API or AWS Bedrock) to:\n1. Categorize the brand into 1-3 relevant verticals\n2. Suggest 3-4 direct competitors for each vertical\n3. Provide confidence level and reasoning\n\nThis powers the improved wizard onboarding flow.","operationId":"analyze_brand_endpoint_api_v1_wizard_analyze_brand_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAnalysisRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/wizard/generate-queries":{"post":{"tags":["Wizard"],"summary":"Generate Queries Endpoint","description":"Generate AI-suggested search queries based on brand, verticals, and competitors.\n\nUses Claude (via Anthropic API or AWS Bedrock) to generate 4-6 relevant search queries:\n- Non-branded queries: General category searches (e.g., \"best data warehouse tools\")\n- Branded queries: Brand-specific or comparison searches (e.g., \"Snowflake vs Databricks\")\n\nThis helps users quickly get started with relevant tracking queries.","operationId":"generate_queries_endpoint_api_v1_wizard_generate_queries_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryGenerationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryGenerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/packs":{"get":{"tags":["prompts"],"summary":"List Prompt Packs","description":"List available prompt packs by vertical.","operationId":"list_prompt_packs_api_v1_prompts_packs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/packs/import":{"post":{"tags":["prompts"],"summary":"Import Prompt Pack","description":"Import prompt pack from YAML.","operationId":"import_prompt_pack_api_v1_prompts_packs_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptPackUpload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/packs/{vertical}/export":{"get":{"tags":["prompts"],"summary":"Export Prompt Pack","description":"Export prompt pack as YAML file.","operationId":"export_prompt_pack_api_v1_prompts_packs__vertical__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"path","required":true,"schema":{"type":"string","title":"Vertical"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/intents":{"get":{"tags":["prompts"],"summary":"List Intents","description":"List intents with optional filtering.","operationId":"list_intents_api_v1_prompts_intents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"query","required":false,"schema":{"type":"string","title":"Vertical"}},{"name":"cluster","in":"query","required":false,"schema":{"type":"string","title":"Cluster"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["prompts"],"summary":"Create Intent","description":"Create new intent.","operationId":"create_intent_api_v1_prompts_intents_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prompts/intents/{intent_id}":{"put":{"tags":["prompts"],"summary":"Update Intent","description":"Update intent.","operationId":"update_intent_api_v1_prompts_intents__intent_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["prompts"],"summary":"Delete Intent","description":"Delete intent.","operationId":"delete_intent_api_v1_prompts_intents__intent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks":{"get":{"tags":["playbooks"],"summary":"List Playbooks","description":"List playbook instances with optional filtering.","operationId":"list_playbooks_api_v1_playbooks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"trigger_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Type"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaybookInstanceResponse"},"title":"Response List Playbooks Api V1 Playbooks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks/generate":{"post":{"tags":["playbooks"],"summary":"Generate Playbook","description":"Generate AI-powered playbook recommendation.","operationId":"generate_playbook_api_v1_playbooks_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookGenerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks/instances":{"post":{"tags":["playbooks"],"summary":"Create Playbook Instance","description":"Create new playbook instance.","operationId":"create_playbook_instance_api_v1_playbooks_instances_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookInstanceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookInstanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks/instances/{instance_id}":{"put":{"tags":["playbooks"],"summary":"Update Playbook Instance","description":"Update playbook instance status/notes.","operationId":"update_playbook_instance_api_v1_playbooks_instances__instance_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instance Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookInstanceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaybookInstanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["playbooks"],"summary":"Delete Playbook Instance","description":"Delete/dismiss a playbook instance.","operationId":"delete_playbook_instance_api_v1_playbooks_instances__instance_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instance Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks/instances/{instance_id}/impact":{"get":{"tags":["playbooks"],"summary":"Get Playbook Impact","description":"Get before/after metrics for completed playbook.","operationId":"get_playbook_impact_api_v1_playbooks_instances__instance_id__impact_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Instance Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/playbooks/templates":{"get":{"tags":["playbooks"],"summary":"List Playbook Templates","description":"List available playbook templates.","operationId":"list_playbook_templates_api_v1_playbooks_templates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PlaybookTemplate"},"title":"Response List Playbook Templates Api V1 Playbooks Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/fact-card":{"get":{"tags":["fact_cards"],"summary":"Get Fact Card","description":"Get brand fact card.","operationId":"get_fact_card_api_v1_brands__brand_id__fact_card_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["fact_cards"],"summary":"Create Or Update Fact Card","description":"Create or update brand fact card.","operationId":"create_or_update_fact_card_api_v1_brands__brand_id__fact_card_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactCardCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/fact-card/validate":{"post":{"tags":["fact_cards"],"summary":"Validate Fact Card","description":"Validate brand fact card (schema + URLs).","operationId":"validate_fact_card_api_v1_brands__brand_id__fact_card_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/fact-card/export":{"get":{"tags":["fact_cards"],"summary":"Export Fact Card","description":"Export fact card as aiv.json file.","operationId":"export_fact_card_api_v1_brands__brand_id__fact_card_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"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/connect":{"post":{"tags":["integrations"],"summary":"Connect Slack","description":"Initiate Slack OAuth flow.\n\nReturns:\n    OAuth authorization URL","operationId":"connect_slack_api_v1_integrations_slack_connect_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"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/callback":{"post":{"tags":["integrations"],"summary":"Slack Oauth Callback","description":"Handle Slack OAuth callback.\n\nArgs:\n    callback_data: OAuth callback with code\n\nReturns:\n    Slack integration record","operationId":"slack_oauth_callback_api_v1_integrations_slack_callback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackOAuthCallback"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/config":{"put":{"tags":["integrations"],"summary":"Update Slack Config","description":"Update Slack integration configuration.","operationId":"update_slack_config_api_v1_integrations_slack_config_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConfig"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/slack/test":{"post":{"tags":["integrations"],"summary":"Test Slack Alert","description":"Send test Slack alert.","operationId":"test_slack_alert_api_v1_integrations_slack_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTestAlert"}}}},"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/":{"get":{"tags":["integrations"],"summary":"Get Slack Integration","description":"Get current Slack integration status.","operationId":"get_slack_integration_api_v1_integrations_slack__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackIntegrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Disconnect Slack","description":"Disconnect Slack integration.","operationId":"disconnect_slack_api_v1_integrations_slack__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/load":{"post":{"tags":["demo"],"summary":"Load Demo Data","description":"Load sample data asynchronously.\n\nTriggers Celery task to import demo data from combined_run.jsonl.\n\nReturns job_id for progress tracking.","operationId":"load_demo_data_api_v1_demo_load_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Load Demo Data Api V1 Demo Load Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/status/{job_id}":{"get":{"tags":["demo"],"summary":"Get Import Status","description":"Get import job status and progress.\n\nReturns progress percentage, inserted count, and status.","operationId":"get_import_status_api_v1_demo_status__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Import Status Api V1 Demo Status  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/data":{"delete":{"tags":["demo"],"summary":"Delete Demo Data","description":"Delete all demo data for current account.\n\nRemoves all records with run_id starting with 'demo-'.","operationId":"delete_demo_data_api_v1_demo_data_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Demo Data Api V1 Demo Data Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/demo/status":{"get":{"tags":["demo"],"summary":"Get Demo Status","description":"Check if demo data exists for current account.\n\nReturns count of demo records.","operationId":"get_demo_status_api_v1_demo_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Demo Status Api V1 Demo Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dashboard":{"get":{"tags":["admin"],"summary":"Get Dashboard Overview","description":"Get comprehensive dashboard overview with statistics from all areas.\n\nReturns:\n    Dashboard data including accounts, users, activities, brands, and recent signups","operationId":"get_dashboard_overview_api_v1_admin_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/schema-validation/stats":{"get":{"tags":["admin"],"summary":"Get Validation Stats","description":"Get schema validation statistics.\n\nReturns total validated, failures count, and failure rate by error type.\n\nArgs:\n    days: Number of days to look back (default 7)\n\nReturns:\n    Validation statistics including error counts and rates","operationId":"get_validation_stats_api_v1_admin_schema_validation_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Validation Stats Api V1 Admin Schema Validation Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/schema-validation/errors":{"get":{"tags":["admin"],"summary":"Get Validation Errors","description":"Get detailed validation errors.\n\nArgs:\n    limit: Maximum number of errors to return (default 50)\n    error_type: Filter by error type (optional)\n\nReturns:\n    List of validation errors with details","operationId":"get_validation_errors_api_v1_admin_schema_validation_errors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"error_type","in":"query","required":false,"schema":{"type":"string","title":"Error Type"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Validation Errors Api V1 Admin Schema Validation Errors Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/metrics":{"get":{"tags":["admin"],"summary":"Get Admin Metrics","description":"Get comprehensive admin metrics.\n\nReturns:\n    - Time-to-First-Run (TTF) percentiles (p50, p90, p95)\n    - Activation rate (% users with run in 24h)\n    - Wizard completion rate\n    - Prompt pack usage\n    - Playbook engagement\n\nArgs:\n    days: Number of days to analyze (default 7)","operationId":"get_admin_metrics_api_v1_admin_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Admin Metrics Api V1 Admin Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/recent-signups":{"get":{"tags":["admin"],"summary":"Get Recent Signups","description":"Return recent signups with basic activity signals.\n\nIncludes account metadata, counts of runs/queries, and last activity time.","operationId":"get_recent_signups_api_v1_admin_recent_signups_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Recent Signups Api V1 Admin Recent Signups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/brands":{"get":{"tags":["admin"],"summary":"List Brands","description":"List all brands with optional filtering.\n\nArgs:\n    vertical: Filter by vertical\n    tier: Filter by tier (Leader, Challenger, Emerging)\n    limit: Maximum number of results\n    offset: Number of results to skip","operationId":"list_brands_api_v1_admin_brands_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/app__routers__admin__BrandResponse"},"title":"Response List Brands Api V1 Admin Brands Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/brands/{brand_id}":{"get":{"tags":["admin"],"summary":"Get Brand","description":"Get a specific brand by ID.","operationId":"get_brand_api_v1_admin_brands__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__admin__BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Update Brand","description":"Update a brand's information.\n\nOnly provided fields will be updated.","operationId":"update_brand_api_v1_admin_brands__brand_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__admin__BrandResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/brands/search/{query}":{"get":{"tags":["admin"],"summary":"Search Brands","description":"Search brands by name, website, or vertical.","operationId":"search_brands_api_v1_admin_brands_search__query__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"query","in":"path","required":true,"schema":{"type":"string","title":"Query"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/brands/stats/overview":{"get":{"tags":["admin"],"summary":"Get Brand Stats","description":"Get overview statistics for brand library.","operationId":"get_brand_stats_api_v1_admin_brands_stats_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/brands/{brand_id}/generate-faqs":{"post":{"tags":["admin"],"summary":"Generate And Persist Faqs","description":"Generate and persist FAQs for a brand (admin only).\n\nPublic endpoints generate FAQs on-the-fly without persisting to avoid\nunauthorized database mutations. This admin endpoint allows authenticated\nusers to generate and save FAQs to the database.","operationId":"generate_and_persist_faqs_api_v1_admin_brands__brand_id__generate_faqs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/accounts":{"get":{"tags":["admin"],"summary":"List Accounts","description":"List all accounts with optional filtering.\n\nArgs:\n    plan_type: Filter by plan type (free, pro, enterprise)\n    status: Filter by status (active, suspended, cancelled)\n    search: Search by account name or owner email\n    limit: Maximum number of results (default 50, max 500)\n    offset: Number of results to skip for pagination\n\nReturns:\n    List of accounts with owner information","operationId":"list_accounts_api_v1_admin_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"plan_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/accounts/{account_id}":{"get":{"tags":["admin"],"summary":"Get Account","description":"Get detailed information about a specific account.","operationId":"get_account_api_v1_admin_accounts__account_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin"],"summary":"Update Account","description":"Update account information.","operationId":"update_account_api_v1_admin_accounts__account_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/accounts/stats/overview":{"get":{"tags":["admin"],"summary":"Get Account Stats","description":"Get overview statistics for all accounts.","operationId":"get_account_stats_api_v1_admin_accounts_stats_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/activities":{"get":{"tags":["admin"],"summary":"List Activities","description":"List analytics events/activities with optional filtering.\n\nArgs:\n    account_id: Filter by specific account\n    user_id: Filter by specific user\n    event_name: Filter by event type\n    days: Number of days to look back (default 7)\n    limit: Maximum number of results (default 100, max 1000)\n    offset: Number of results to skip for pagination\n\nReturns:\n    List of analytics events with user/account information","operationId":"list_activities_api_v1_admin_activities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"}},{"name":"event_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Name"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"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":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/activities/stats":{"get":{"tags":["admin"],"summary":"Get Activity Stats","description":"Get activity statistics for the specified period.","operationId":"get_activity_stats_api_v1_admin_activities_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tags":{"get":{"tags":["admin-tags"],"summary":"List Tags","description":"List all tag definitions with optional filtering.\n\nRequires admin or account owner permissions.","operationId":"list_tags_api_admin_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag category","title":"Category"},"description":"Filter by tag category"},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only return active tags","default":true,"title":"Active Only"},"description":"Only return active tags"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagDefinitionResponse"},"title":"Response List Tags Api Admin Tags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-tags"],"summary":"Create Tag","description":"Create a new tag definition.\n\nRequires admin or account owner permissions.","operationId":"create_tag_api_admin_tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tags/{tag_slug}":{"get":{"tags":["admin-tags"],"summary":"Get Tag","description":"Get a single tag definition by slug.\n\nRequires admin or account owner permissions.","operationId":"get_tag_api_admin_tags__tag_slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_slug","in":"path","required":true,"schema":{"type":"string","title":"Tag Slug"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-tags"],"summary":"Update Tag","description":"Update a tag definition.\n\nRequires admin or account owner permissions.","operationId":"update_tag_api_admin_tags__tag_slug__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_slug","in":"path","required":true,"schema":{"type":"string","title":"Tag Slug"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagDefinitionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-tags"],"summary":"Delete Tag","description":"Delete a tag definition (soft delete by default, sets active=False).\n\nUse hard_delete=true to permanently remove the tag.\nRequires admin or account owner permissions.","operationId":"delete_tag_api_admin_tags__tag_slug__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_slug","in":"path","required":true,"schema":{"type":"string","title":"Tag Slug"}},{"name":"hard_delete","in":"query","required":false,"schema":{"type":"boolean","description":"Permanently delete instead of soft delete","default":false,"title":"Hard Delete"},"description":"Permanently delete instead of soft delete"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tags/categories/list":{"get":{"tags":["admin-tags"],"summary":"List Categories","description":"Get list of all unique tag categories in use.\n\nRequires admin or account owner permissions.","operationId":"list_categories_api_admin_tags_categories_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Categories Api Admin Tags Categories List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/run-configs":{"get":{"tags":["Run Configs"],"summary":"List Run Configs","description":"List all run configurations for the current account.\n\nSupports filtering and pagination.","operationId":"list_run_configs_api_v1_run_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"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":"schedule","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by schedule type","title":"Schedule"},"description":"Filter by schedule type"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_RunConfigResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Run Configs"],"summary":"Create Run Config","description":"Create a new run configuration.\n\nValidates schedule values and config_json structure.","operationId":"create_run_config_api_v1_run_configs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConfigCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/run-configs/{config_id}":{"get":{"tags":["Run Configs"],"summary":"Get Run Config","description":"Get a specific run configuration by ID.","operationId":"get_run_config_api_v1_run_configs__config_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Run Configs"],"summary":"Update Run Config","description":"Update a run configuration.\n\nFor config_json, merges the provided data with existing data rather than replacing.","operationId":"update_run_config_api_v1_run_configs__config_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Run Configs"],"summary":"Delete Run Config","description":"Soft delete a run configuration by marking it inactive.\n\nDoes not actually delete the record to preserve history.","operationId":"delete_run_config_api_v1_run_configs__config_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs":{"post":{"tags":["Run Executions"],"summary":"Trigger Run","description":"Trigger async execution of a run configuration.\n\nReturns immediately with run_id. Query /runs/{run_id}/status for progress.","operationId":"trigger_run_api_v1_runs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunExecutionCreate"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Run Executions"],"summary":"List Runs","description":"List run executions for the current account.\n\nSupports filtering by status and run_config_id.","operationId":"list_runs_api_v1_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"run_config_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by run config ID","title":"Run Config Id"},"description":"Filter by run config ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_RunExecutionListResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}":{"get":{"tags":["Run Executions"],"summary":"Get Run","description":"Get detailed run execution information.","operationId":"get_run_api_v1_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/status":{"get":{"tags":["Run Executions"],"summary":"Get Run Status","description":"Lightweight endpoint for frequent polling.\n\nUses Redis for real-time progress, falls back to DB.","operationId":"get_run_status_api_v1_runs__run_id__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunExecutionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/executions":{"get":{"tags":["Run Executions"],"summary":"List Run Executions","description":"List all query executions for a specific run.\n\nIncludes status, timing, and error information.","operationId":"list_run_executions_api_v1_runs__run_id__executions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by execution status","title":"Status"},"description":"Filter by execution status"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ExecutionResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/cancel":{"post":{"tags":["Run Executions"],"summary":"Cancel Run","description":"Cancel a running execution.\n\nMarks run as cancelled and attempts to terminate Celery tasks.","operationId":"cancel_run_api_v1_runs__run_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/api-keys":{"post":{"tags":["SDK"],"summary":"Create Api Key","description":"Create a new SDK API key for the current account with enhanced security.","operationId":"create_api_key_api_sdk_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKApiKeyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["SDK"],"summary":"List Api Keys","description":"List all API keys for the current account.","operationId":"list_api_keys_api_sdk_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKApiKeyList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/api-keys/{api_key_id}/domains":{"post":{"tags":["SDK"],"summary":"Register Domain","description":"Register a domain or app bundle for an API key.\nThis allows the SDK to track events from the specified domain/bundle.","operationId":"register_domain_api_sdk_api_keys__api_key_id__domains_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKDomainCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKDomainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["SDK"],"summary":"List Domains","description":"List all registered domains and app bundles for an API key.","operationId":"list_domains_api_sdk_api_keys__api_key_id__domains_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SDKDomainResponse"},"title":"Response List Domains Api Sdk Api Keys  Api Key Id  Domains Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/api-keys/{api_key_id}/domains/{domain_id}":{"delete":{"tags":["SDK"],"summary":"Delete Domain","description":"Remove a registered domain or app bundle from an API key.","operationId":"delete_domain_api_sdk_api_keys__api_key_id__domains__domain_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Api Key Id"}},{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Domain Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/health":{"get":{"tags":["SDK"],"summary":"Health Check","description":"Health check endpoint for SDK clients.\nValidates API key if provided, otherwise returns basic status.","operationId":"health_check_api_sdk_v1_health_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Health Check Api Sdk V1 Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/track":{"post":{"tags":["SDK"],"summary":"Track Event","description":"Track a single event from the SDK.","operationId":"track_event_api_sdk_v1_track_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKEventCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/track/batch":{"post":{"tags":["SDK"],"summary":"Track Events Batch","description":"Track multiple events in batch using Redis queue.\nReturns immediately with batch ID for status checking.","operationId":"track_events_batch_api_sdk_v1_track_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKEventBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Track Events Batch Api Sdk V1 Track Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/track/batch/{batch_id}/status":{"get":{"tags":["SDK"],"summary":"Get Batch Status","description":"Check the status of a batch event submission.","operationId":"get_batch_status_api_sdk_v1_track_batch__batch_id__status_get","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/track/ios":{"post":{"tags":["SDK"],"summary":"Track Ios Events","description":"Track events from iOS SDK (accepts iOS SDK native format).\nTransforms iOS SDK format to backend format and processes asynchronously.\nFull URL: /api/sdk/v1/track/ios","operationId":"track_ios_events_api_sdk_v1_track_ios_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iOSEventBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Track Ios Events Api Sdk V1 Track Ios Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/track/android":{"post":{"tags":["SDK"],"summary":"Track Android Events","description":"Track events from Android SDK (accepts Android SDK native format).\nTransforms Android SDK format to backend format and processes asynchronously.\nFull URL: /api/sdk/v1/track/android","operationId":"track_android_events_api_sdk_v1_track_android_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AndroidEventBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Track Android Events Api Sdk V1 Track Android Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/optimize":{"post":{"tags":["SDK"],"summary":"Optimize Content","description":"Optimize content for AI discovery with account-scoped caching.","operationId":"optimize_content_api_sdk_v1_optimize_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKOptimizationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKOptimizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/webhooks/test":{"post":{"tags":["SDK"],"summary":"Test Webhook","description":"Test a webhook with a sample event (async).","operationId":"test_webhook_api_sdk_webhooks_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKWebhookTest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Test Webhook Api Sdk Webhooks Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/analytics":{"get":{"tags":["SDK"],"summary":"Get Analytics","description":"Get analytics data for the SDK with optional date range and metric filtering.","operationId":"get_analytics_api_sdk_v1_analytics_get","parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"metrics","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metrics"}},{"name":"group_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"day","title":"Group By"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SDKAnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/events":{"get":{"tags":["SDK"],"summary":"List Events","description":"List events tracked by the SDK with pagination and filtering.","operationId":"list_events_api_sdk_v1_events_get","parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"ai_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Source"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/optimizations":{"get":{"tags":["SDK"],"summary":"List Optimizations","description":"List optimization results with pagination and filtering.","operationId":"list_optimizations_api_sdk_v1_optimizations_get","parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},{"name":"content_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"}},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Score"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/usage":{"get":{"tags":["SDK"],"summary":"Get Usage Metrics","description":"Get daily usage metrics with pagination.","operationId":"get_usage_metrics_api_sdk_v1_usage_get","parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Per Page"},"description":"Items per page"},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/attribution/link":{"post":{"tags":["SDK"],"summary":"Link Session To Query","description":"Link a user session to an AI query execution for attribution tracking.\n\nThis endpoint establishes the connection between an AI-generated answer\nand subsequent user activity, enabling closed-loop analytics from\nAI query → user visit → conversion → revenue.\n\n**Use Case:**\nWhen a user clicks a link from an AI assistant (ChatGPT, Gemini, etc.),\nextract the `query_id` parameter and call this endpoint to establish attribution.\n\n**Example:**\n```\nUser clicks: https://yourapp.com?query_id=abc-123&utm_source=chatgpt\nSDK extracts query_id and calls: POST /attribution/link\n```\n\n**Request Body:**\n- session_id: SDK session identifier (persistent for 7 days)\n- query_id: UUID of the query_execution record from our platform\n- ai_source: AI platform (chatgpt, gemini, claude, perplexity, grok)\n- confidence: Attribution confidence (0.0-1.0)\n- attribution_method: How attribution was determined (url_parameter, cookie, etc.)\n\n**Response:**\nReturns attribution session details including first_seen_at and created flag.","operationId":"link_session_to_query_api_sdk_v1_attribution_link_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttributionLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttributionLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sdk/v1/conversion":{"post":{"tags":["SDK"],"summary":"Record Conversion","description":"Record a conversion for an attributed session.\n\nUpdates the attribution session with conversion details, enabling revenue\ntracking back to the original AI query. This is the key endpoint for\nproving ROI: \"Which ChatGPT query generated $499 in revenue?\"\n\n**Use Case:**\nWhen a user completes a purchase, upgrade, or other conversion event,\ncall this endpoint with the session_id and conversion value.\n\n**Example:**\n```javascript\n// User completes checkout\nconst sessionId = AIVisibility.getSessionId();\nawait fetch('/api/v1/sdk/conversion', {\n  method: 'POST',\n  headers: { 'X-API-Key': 'your_key' },\n  body: JSON.stringify({\n    session_id: sessionId,\n    value: 499.00,\n    currency: 'USD',\n    metadata: { plan: 'pro', interval: 'monthly' }\n  })\n});\n```\n\n**Request Body:**\n- session_id: SDK session identifier (same as used in /attribution/link)\n- value: Conversion value (e.g., 499.00 for $499)\n- currency: ISO currency code (default: USD)\n- metadata: Optional conversion details (plan, customer_email, etc.)\n\n**Response:**\nReturns conversion details including query_id (if attributed) and ai_source.\nIf session wasn't attributed to an AI query, query_id will be null.\n\n**Note:**\nIf the session doesn't exist in attribution_sessions, the conversion\nis still recorded but won't be attributed to a specific AI query.","operationId":"record_conversion_api_sdk_v1_conversion_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionRecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/dlq/status":{"get":{"tags":["Webhooks"],"summary":"Get Dlq Status","description":"Get DLQ status and metrics.","operationId":"get_dlq_status_api_v1_webhooks_dlq_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/dlq/failures":{"get":{"tags":["Webhooks"],"summary":"List Dlq Failures","description":"List failed webhook deliveries for the current account.","operationId":"list_dlq_failures_api_v1_webhooks_dlq_failures_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/dlq/retry/{webhook_id}":{"post":{"tags":["Webhooks"],"summary":"Retry Failed Webhook","description":"Retry a failed webhook from the DLQ.","operationId":"retry_failed_webhook_api_v1_webhooks_dlq_retry__webhook_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/dlq/clear":{"delete":{"tags":["Webhooks"],"summary":"Clear Dlq","description":"Clear DLQ entries for the current account's webhooks.","operationId":"clear_dlq_api_v1_webhooks_dlq_clear_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts":{"get":{"tags":["alerts"],"summary":"List Alerts","description":"List all alerts for the current account.","operationId":"list_alerts_api_v1_alerts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"alert_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by alert type","title":"Alert Type"},"description":"Filter by alert type"},{"name":"is_enabled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by enabled status","title":"Is Enabled"},"description":"Filter by enabled status"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertResponse"},"title":"Response List Alerts Api V1 Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["alerts"],"summary":"Create Alert","description":"Create a new alert rule.","operationId":"create_alert_api_v1_alerts_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}":{"get":{"tags":["alerts"],"summary":"Get Alert","description":"Get a single alert by ID.","operationId":"get_alert_api_v1_alerts__alert_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["alerts"],"summary":"Update Alert","description":"Update an existing alert.","operationId":"update_alert_api_v1_alerts__alert_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["alerts"],"summary":"Delete Alert","description":"Delete an alert.","operationId":"delete_alert_api_v1_alerts__alert_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/{alert_id}/test":{"post":{"tags":["alerts"],"summary":"Test Alert","description":"Test an alert rule (dry run) to see if it would trigger.","operationId":"test_alert_api_v1_alerts__alert_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Alert Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AlertTestRequest"},{"type":"null"}],"title":"Test Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/history":{"get":{"tags":["alerts"],"summary":"Get Alert History","description":"Get alert trigger history with pagination.","operationId":"get_alert_history_api_v1_alerts_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"alert_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by alert ID","title":"Alert Id"},"description":"Filter by alert ID"},{"name":"alert_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by alert type","title":"Alert Type"},"description":"Filter by alert type"},{"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":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertHistoryList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/history/{history_id}/resolve":{"post":{"tags":["alerts"],"summary":"Resolve Alert History","description":"Mark an alert history item as resolved.","operationId":"resolve_alert_history_api_v1_alerts_history__history_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"history_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"History Id"}},{"name":"notes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Resolution notes","title":"Notes"},"description":"Resolution notes"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations":{"get":{"tags":["conversations"],"summary":"List Conversations","description":"List all conversations for the current account.","operationId":"list_conversations_api_v1_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"ai_model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by AI model ID","title":"Ai Model Id"},"description":"Filter by AI model ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["conversations"],"summary":"Create Conversation","description":"Create a new conversation.","operationId":"create_conversation_api_v1_conversations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}":{"get":{"tags":["conversations"],"summary":"Get Conversation","description":"Get a single conversation with all turns.","operationId":"get_conversation_api_v1_conversations__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationWithTurns"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["conversations"],"summary":"Update Conversation","description":"Update a conversation.","operationId":"update_conversation_api_v1_conversations__conversation_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["conversations"],"summary":"Delete Conversation","description":"Delete a conversation and all its turns.","operationId":"delete_conversation_api_v1_conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/turns":{"post":{"tags":["conversations"],"summary":"Add Conversation Turn","description":"Add a new turn to an existing conversation.","operationId":"add_conversation_turn_api_v1_conversations__conversation_id__turns_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationTurnCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationTurnResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conversation_id}/metrics":{"get":{"tags":["conversations"],"summary":"Get Conversation Metrics","description":"Get persistence metrics for a specific conversation.","operationId":"get_conversation_metrics_api_v1_conversations__conversation_id__metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationMetrics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/analytics/persistence":{"get":{"tags":["conversations"],"summary":"Get Persistence Analytics","description":"Get aggregated persistence analytics across all conversations.","operationId":"get_persistence_analytics_api_v1_conversations_analytics_persistence_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"ai_model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by AI model ID","title":"Ai Model Id"},"description":"Filter by AI model ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersistenceAnalytics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/analytics/persistence-by-turn":{"get":{"tags":["conversations"],"summary":"Get Persistence By Turn","description":"Get mention persistence rate by turn number (for charting).","operationId":"get_persistence_by_turn_api_v1_conversations_analytics_persistence_by_turn_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"ai_model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by AI model ID","title":"Ai Model Id"},"description":"Filter by AI model ID"},{"name":"max_turns","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum turn number to analyze","default":10,"title":"Max Turns"},"description":"Maximum turn number to analyze"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TurnPersistenceData"},"title":"Response Get Persistence By Turn Api V1 Conversations Analytics Persistence By Turn Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/citations/domains":{"get":{"tags":["citations"],"summary":"List Domains","description":"List all domains cited in answers with statistics.","operationId":"list_domains_api_v1_citations_domains_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"ai_model_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by AI model ID","title":"Ai Model Id"},"description":"Filter by AI model ID"},{"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":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/citations/domains/top":{"get":{"tags":["citations"],"summary":"Get Top Domains","description":"Get top N domains by citation frequency.","operationId":"get_top_domains_api_v1_citations_domains_top_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of top domains","default":10,"title":"Limit"},"description":"Number of top domains"},{"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":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopDomainsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/citations/timeline":{"get":{"tags":["citations"],"summary":"Get Citation Timeline","description":"Get citation trends over time.","operationId":"get_citation_timeline_api_v1_citations_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"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":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitationTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/citations/extract":{"post":{"tags":["citations"],"summary":"Extract Citations From Text","description":"Extract citations from provided text (utility endpoint).","operationId":"extract_citations_from_text_api_v1_citations_extract_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractCitationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractCitationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content-gaps":{"get":{"tags":["content-gaps"],"summary":"List Content Gaps","description":"List content gaps with filtering and pagination.","operationId":"list_content_gaps_api_v1_content_gaps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"phrase_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by phrase type","title":"Phrase Type"},"description":"Filter by phrase type"},{"name":"min_opportunity","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"description":"Minimum opportunity score","default":0.0,"title":"Min Opportunity"},"description":"Minimum opportunity score"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGapListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content-gaps/summary":{"get":{"tags":["content-gaps"],"summary":"Get Content Gaps Summary","description":"Get summary statistics for content gaps.","operationId":"get_content_gaps_summary_api_v1_content_gaps_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by brand ID","title":"Brand Id"},"description":"Filter by brand ID"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGapSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content-gaps/{gap_id}/examples":{"get":{"tags":["content-gaps"],"summary":"Get Gap Examples","description":"Get example competitor mentions for a specific gap.","operationId":"get_gap_examples_api_v1_content_gaps__gap_id__examples_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gap_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gap Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentGapExamplesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content-gaps/analyze":{"post":{"tags":["content-gaps"],"summary":"Analyze Content Gaps","description":"Trigger content gap analysis for a brand.\n\nThis analyzes recent answers to identify language patterns used by competitors\nbut not by the user's brand.","operationId":"analyze_content_gaps_api_v1_content_gaps_analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeContentGapsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeContentGapsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content-gaps/{gap_id}":{"delete":{"tags":["content-gaps"],"summary":"Delete Content Gap","description":"Delete a content gap.","operationId":"delete_content_gap_api_v1_content_gaps__gap_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"gap_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gap Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs":{"post":{"tags":["calibration"],"summary":"Create Calibration Run","description":"Create a new calibration run.\n\nArgs:\n    request: Calibration run details\n    current_user: Authenticated user\n    account: Current user's account\n    db: Database session\n\nReturns:\n    Created calibration run","operationId":"create_calibration_run_api_v1_calibration_runs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCalibrationRunRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalibrationRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["calibration"],"summary":"List Calibration Runs","description":"List calibration runs for the current account.\n\nArgs:\n    status_filter: Optional status filter (in_progress, completed, cancelled)\n    limit: Maximum number of runs to return (default 20, max 100)\n    offset: Number of runs to skip for pagination (default 0)\n    current_user: Authenticated user\n    account: Current user's account\n    db: Database session\n\nReturns:\n    List of calibration runs","operationId":"list_calibration_runs_api_v1_calibration_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CalibrationRunResponse"},"title":"Response List Calibration Runs Api V1 Calibration Runs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}":{"get":{"tags":["calibration"],"summary":"Get Calibration Run","description":"Get details for a specific calibration run.\n\nArgs:\n    run_id: Calibration run UUID\n    current_user: Authenticated user\n    account: Current user's account\n    db: Database session\n\nReturns:\n    Calibration run details\n\nRaises:\n    HTTPException: If run not found or access denied","operationId":"get_calibration_run_api_v1_calibration_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalibrationRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}/ratings":{"post":{"tags":["calibration"],"summary":"Submit Human Rating","description":"Submit a human rating for a query execution.\n\nArgs:\n    run_id: Calibration run UUID\n    request: Rating data\n    current_user: Authenticated user (becomes rater)\n    db: Database session\n\nReturns:\n    Created human rating\n\nRaises:\n    HTTPException: If run not found or access denied","operationId":"submit_human_rating_api_v1_calibration_runs__run_id__ratings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitRatingRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HumanRatingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["calibration"],"summary":"List Run Ratings","description":"List all human ratings for a calibration run.\n\nArgs:\n    run_id: Calibration run UUID\n    limit: Maximum number of ratings to return (default 50, max 200)\n    offset: Number of ratings to skip for pagination (default 0)\n    current_user: Authenticated user\n    db: Session: Database session\n\nReturns:\n    List of human ratings\n\nRaises:\n    HTTPException: If run not found or access denied","operationId":"list_run_ratings_api_v1_calibration_runs__run_id__ratings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/HumanRatingResponse"},"title":"Response List Run Ratings Api V1 Calibration Runs  Run Id  Ratings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}/ratings/import":{"post":{"tags":["calibration"],"summary":"Import Human Ratings","description":"Import human ratings from CSV or JSON file.\n\nArgs:\n    run_id: Calibration run UUID\n    file: CSV or JSON file with ratings\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    Import results with counts and errors\n\nRaises:\n    HTTPException: If run not found, access denied, or file invalid","operationId":"import_human_ratings_api_v1_calibration_runs__run_id__ratings_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_human_ratings_api_v1_calibration_runs__run_id__ratings_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportRatingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}/calculate":{"post":{"tags":["calibration"],"summary":"Calculate Kappa","description":"Calculate Cohen's Kappa scores for a calibration run.\n\nCompares human ratings (ground truth) with judge predictions\nfor all three judge types: mention, recommendation, stance.\n\nArgs:\n    run_id: Calibration run UUID\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    Kappa scores and metadata for each judge type\n\nRaises:\n    HTTPException: If run not found or access denied","operationId":"calculate_kappa_api_v1_calibration_runs__run_id__calculate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Calculate Kappa Api V1 Calibration Runs  Run Id  Calculate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}/metrics":{"get":{"tags":["calibration"],"summary":"Get Calibration Metrics","description":"Get calibration metrics including Cohen's Kappa scores.\n\nRetrieves calculated Kappa scores, confusion matrices, and historical trends\nfor display in the calibration dashboard.\n\nArgs:\n    run_id: Calibration run UUID\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    Calibration metrics including Kappa scores for all judge types\n\nRaises:\n    HTTPException: If run not found, access denied, or no ratings available","operationId":"get_calibration_metrics_api_v1_calibration_runs__run_id__metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Calibration Metrics Api V1 Calibration Runs  Run Id  Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/runs/{run_id}/complete":{"put":{"tags":["calibration"],"summary":"Complete Calibration Run","description":"Mark a calibration run as completed.\n\nArgs:\n    run_id: Calibration run UUID\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    Updated calibration run\n\nRaises:\n    HTTPException: If run not found or access denied","operationId":"complete_calibration_run_api_v1_calibration_runs__run_id__complete_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalibrationRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/calibration/trend":{"get":{"tags":["calibration"],"summary":"Get Kappa Trend","description":"Get historical Kappa trend for the current account.\n\nArgs:\n    judge_type: Judge type (mention, recommendation, stance, overall)\n    limit: Number of historical points to return\n    current_user: Authenticated user\n    db: Database session\n\nReturns:\n    List of Kappa trend data points\n\nRaises:\n    HTTPException: If invalid judge_type or no account found","operationId":"get_kappa_trend_api_v1_calibration_trend_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"judge_type","in":"query","required":false,"schema":{"type":"string","default":"overall","title":"Judge Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":12,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KappaTrendResponse"},"title":"Response Get Kappa Trend Api V1 Calibration Trend Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads":{"post":{"tags":["Leads"],"summary":"Create Lead","description":"Create a new lead from email capture form.\n\nRate limited to 10 requests per hour per IP to prevent abuse.\nReturns 200 even if email already exists to prevent enumeration.","operationId":"create_lead_api_v1_leads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/demo-requests":{"post":{"tags":["Leads"],"summary":"Create Demo Request","description":"Create a new demo request.\n\nRate limited to 5 requests per hour per IP to prevent spam.\nSends notifications to sales team.","operationId":"create_demo_request_api_v1_leads_demo_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoRequestCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/demo-requests/{demo_request_id}":{"get":{"tags":["Leads"],"summary":"Get Demo Request","description":"Get demo request by ID (admin/internal use).\n\nNote: This endpoint should be protected with admin authentication in production.","operationId":"get_demo_request_api_v1_leads_demo_requests__demo_request_id__get","parameters":[{"name":"demo_request_id","in":"path","required":true,"schema":{"type":"string","title":"Demo Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/attribution/summary":{"get":{"summary":"Get Attribution Summary","description":"Get overall attribution summary metrics.\n\nReturns:\n- Total AI-attributed revenue\n- Number of attributed sessions\n- Number of converted sessions\n- Conversion rate\n- Comparison with previous period","operationId":"get_attribution_summary_api_v1_analytics_attribution_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Start date for metrics","title":"Start Date"},"description":"Start date for metrics"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"End date for metrics","title":"End Date"},"description":"End date for metrics"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/attribution/by-source":{"get":{"summary":"Get Attribution By Source","description":"Get attribution revenue breakdown by AI source.\n\nReturns revenue and session counts grouped by AI source\n(ChatGPT, Gemini, Claude, Perplexity, Grok).","operationId":"get_attribution_by_source_api_v1_analytics_attribution_by_source_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/attribution/top-queries":{"get":{"summary":"Get Top Revenue Queries","description":"Get top revenue-driving queries.\n\nReturns queries ranked by total attributed revenue with:\n- Query text\n- AI model\n- Total revenue\n- Number of conversions\n- Average conversion value","operationId":"get_top_revenue_queries_api_v1_analytics_attribution_top_queries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analytics/attribution/timeline":{"get":{"summary":"Get Attribution Timeline","description":"Get attribution revenue over time.\n\nReturns time-series data showing revenue, sessions, and conversions\ngrouped by day, week, or month.","operationId":"get_attribution_timeline_api_v1_analytics_attribution_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","pattern":"^(day|week|month)$","default":"day","title":"Granularity"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/stripe":{"post":{"tags":["webhooks"],"summary":"Handle Stripe Webhook","description":"Handle Stripe webhook events for automatic conversion recording.\n\n**Supported Events:**\n- `checkout.session.completed` - One-time purchase completed\n- `invoice.payment_succeeded` - Subscription payment succeeded\n- `charge.refunded` - Refund processed (negative conversion)\n\n**Metadata Requirements:**\nInclude `session_id` in Stripe metadata to link conversion to attribution:\n\n```javascript\n// In your checkout code:\nconst sessionId = AIVisibility.getSessionId();\n\nconst checkout = await stripe.checkout.sessions.create({\n  // ... other params\n  metadata: {\n    session_id: sessionId,  // Required for attribution\n    query_id: \"optional\"     // Optional\n  }\n});\n```\n\n**Response:**\n- 200: Event processed successfully\n- 400: Invalid payload or signature\n- 500: Error processing event","operationId":"handle_stripe_webhook_api_v1_webhooks_stripe_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/crawl":{"post":{"tags":["recommendations"],"summary":"Crawl Website","description":"Crawl a brand's website to collect content for analysis.\n\nThis endpoint starts an asynchronous task to:\n1. Crawl all pages of the brand's website (up to max_pages)\n2. Extract structured content (title, headings, body text, keywords, etc.)\n3. Store content snapshots in the database for recommendation generation\n\nReturns immediately with a task ID.","operationId":"crawl_website_api_v1_brands__brand_id__crawl_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlWebsiteRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/recommendations/generate":{"post":{"tags":["recommendations"],"summary":"Generate Recommendations","description":"Generate AI-powered recommendations for a brand.\n\nThis endpoint starts an asynchronous task to:\n1. Analyze the brand's website content\n2. Use Claude AI to generate actionable recommendations\n3. Store recommendations in the database\n\nReturns immediately with a task ID.","operationId":"generate_recommendations_api_v1_brands__brand_id__recommendations_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationGenerateRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brands/{brand_id}/recommendations":{"get":{"tags":["recommendations"],"summary":"List Recommendations","description":"List all recommendations for a brand with optional filters.","operationId":"list_recommendations_api_v1_brands__brand_id__recommendations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by priority","title":"Priority"},"description":"Filter by priority"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recommendations/{recommendation_id}":{"get":{"tags":["recommendations"],"summary":"Get Recommendation","description":"Get detailed information about a specific recommendation.","operationId":"get_recommendation_api_v1_recommendations__recommendation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recommendation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recommendation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["recommendations"],"summary":"Update Recommendation","description":"Update recommendation status and implementation notes.","operationId":"update_recommendation_api_v1_recommendations__recommendation_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recommendation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recommendation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendationBase"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["recommendations"],"summary":"Delete Recommendation","description":"Delete a recommendation.","operationId":"delete_recommendation_api_v1_recommendations__recommendation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"recommendation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Recommendation Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/extension/track":{"post":{"tags":["extension"],"summary":"Track Extension Events","description":"Track extension events (batch endpoint).\n\nAccepts up to 50 events per request for efficient bulk processing.\nImplements idempotency using event_id to prevent duplicates.\n\n**Request Body:**\n```json\n{\n  \"events\": [\n    {\n      \"event_id\": \"uuid\",\n      \"user_id\": \"anon_user123\",\n      \"session_id\": \"session_abc\",\n      \"timestamp\": \"2025-10-29T10:30:00Z\",\n      \"event_type\": \"brand_viewed\",\n      \"ai_platform\": \"chatgpt\",\n      \"brand_name\": \"HubSpot\",\n      ...\n    }\n  ]\n}\n```\n\n**Response:**\n```json\n{\n  \"status\": \"success\",\n  \"events_received\": 2,\n  \"events_processed\": 2,\n  \"events_failed\": 0\n}\n```\n\n**Features:**\n- Idempotency: Duplicate event_id will be skipped\n- Session tracking: Creates/updates session records\n- Batch processing: Up to 50 events per request","operationId":"track_extension_events_api_v1_extension_track_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtensionEventBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtensionEventBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/extension/reputation/{brand_name}":{"get":{"tags":["extension"],"summary":"Get Brand Reputation","description":"Get brand reputation score.\n\nCalculates reputation score (0-100) based on:\n- Total mentions across AI platforms\n- Average mention rank (lower = better)\n- Explicit recommendations count\n- Click-through rate\n\n**Path Parameters:**\n- `brand_name`: Brand name to query\n\n**Query Parameters:**\n- `ai_platform` (optional): Filter by specific platform ('chatgpt', 'gemini', 'claude', 'perplexity')\n- `days` (optional): Number of days of data (default: 30, max: 365)\n\n**Response:**\n```json\n{\n  \"brand_name\": \"HubSpot\",\n  \"reputation_score\": 92,\n  \"total_mentions\": 15234,\n  \"avg_rank\": 1.8,\n  \"platforms\": {\n    \"chatgpt\": {\"score\": 94, \"mentions\": 8234, ...},\n    \"gemini\": {\"score\": 91, \"mentions\": 4123, ...}\n  }\n}\n```\n\n**Caching:**\n- Cached in Redis for 5 minutes\n- Cache key: `extension:reputation:{brand_name}:{platform}:{days}`","operationId":"get_brand_reputation_api_v1_extension_reputation__brand_name__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_name","in":"path","required":true,"schema":{"type":"string","title":"Brand Name"}},{"name":"ai_platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(chatgpt|gemini|claude|perplexity)$"},{"type":"null"}],"description":"Filter by AI platform","title":"Ai Platform"},"description":"Filter by AI platform"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days of data to include","default":30,"title":"Days"},"description":"Number of days of data to include"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandReputationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers":{"get":{"tags":["API Tiers"],"summary":"Get Api Tiers","description":"Get all available API tiers","operationId":"get_api_tiers_api_v1_tiers_get","parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTierListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/subscribe":{"post":{"tags":["API Tiers"],"summary":"Subscribe To Tier","description":"Subscribe to an API tier","operationId":"subscribe_to_tier_api_v1_tiers_subscribe_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSubscriptionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/subscription":{"get":{"tags":["API Tiers"],"summary":"Get Current Subscription","description":"Get current user's active subscription","operationId":"get_current_subscription_api_v1_tiers_subscription_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["API Tiers"],"summary":"Cancel Subscription","description":"Cancel current subscription","operationId":"cancel_subscription_api_v1_tiers_subscription_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/upgrade":{"put":{"tags":["API Tiers"],"summary":"Upgrade Subscription","description":"Upgrade current subscription to a higher tier","operationId":"upgrade_subscription_api_v1_tiers_upgrade_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSubscriptionUpgrade"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpgradeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/downgrade":{"put":{"tags":["API Tiers"],"summary":"Downgrade Subscription","description":"Downgrade subscription to a lower tier","operationId":"downgrade_subscription_api_v1_tiers_downgrade_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiSubscriptionDowngrade"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowngradeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/api-key/generate":{"post":{"tags":["API Tiers"],"summary":"Generate New Api Key","description":"Generate a new API key","operationId":"generate_new_api_key_api_v1_tiers_api_key_generate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyGenerate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__api_tier__ApiKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/api-key/rotate":{"post":{"tags":["API Tiers"],"summary":"Rotate Api Key","description":"Rotate the current user's API key (deactivate old, create new)","operationId":"rotate_api_key_api_v1_tiers_api_key_rotate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRotateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/api-keys":{"get":{"tags":["API Tiers"],"summary":"List Api Keys","description":"List all API keys for user's subscription","operationId":"list_api_keys_api_v1_tiers_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__schemas__api_tier__ApiKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/api-key/{key_id}":{"delete":{"tags":["API Tiers"],"summary":"Revoke Api Key","description":"Revoke an API key","operationId":"revoke_api_key_api_v1_tiers_api_key__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/usage/summary":{"get":{"tags":["API Tiers"],"summary":"Get Usage Summary","description":"Get usage analytics summary","operationId":"get_usage_summary_api_v1_tiers_usage_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/usage/daily":{"get":{"tags":["API Tiers"],"summary":"Get Daily Usage","description":"Get daily usage breakdown","operationId":"get_daily_usage_api_v1_tiers_usage_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageByDayResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/usage/endpoints":{"get":{"tags":["API Tiers"],"summary":"Get Endpoint Usage","description":"Get usage breakdown by endpoint","operationId":"get_endpoint_usage_api_v1_tiers_usage_endpoints_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageByEndpointResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/billing/history":{"get":{"tags":["API Tiers"],"summary":"Get Billing History","description":"Get billing history","operationId":"get_billing_history_api_v1_tiers_billing_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingHistoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/usage/export":{"get":{"tags":["API Tiers"],"summary":"Export Usage Data","description":"Export usage data as CSV or JSON","operationId":"export_usage_data_api_v1_tiers_usage_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|json)$","default":"csv","title":"Format"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/test/rate-limited":{"get":{"tags":["API Tiers"],"summary":"Test Rate Limited Endpoint","description":"Test endpoint for rate limiting (only used in tests)","operationId":"test_rate_limited_endpoint_api_v1_tiers_test_rate_limited_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tiers/{slug}":{"get":{"tags":["API Tiers"],"summary":"Get Tier By Slug","description":"Get a specific API tier by slug (tier_type)","operationId":"get_tier_by_slug_api_v1_tiers__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTierResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-library/suggest-competitors":{"get":{"tags":["Brand Library (Tech Spike)"],"summary":"Suggest Competitors","description":"Get competitor suggestions from brand library for a given vertical.\n\n**Tech Spike Endpoint (Day 1 + Option C Enhancement)**\n\nThis endpoint queries the pre-bootstrapped brand_library table (529+ brands, 36 verticals)\nand groups related products under their parent brands.\n\n**Grouping Logic (Option C):**\n- Parent brands are shown with their product lines grouped together\n- Example: \"OpenAI\" groups \"OpenAI Platform\" as a child product\n- \"Salesforce\" groups \"Salesforce Marketing Cloud\", \"Sales Cloud\", etc.\n- Provides cleaner UX while maintaining product-level detail\n\n**Filtering Logic:**\n- Filters by vertical (exact match, case-sensitive)\n- Excludes brands with \"Low\" confidence\n- Sorts by tier (Leader → Challenger → Emerging) then by rank\n- Groups child products under parent brands\n- Limits to parent brand count (children don't count toward limit)\n\n**Example Request:**\n```\nGET /api/v1/brand-library/suggest-competitors?vertical=AI%2FML%20Platforms&limit=10\n```\n\n**Example Response:**\n```json\n{\n  \"vertical\": \"AI/ML Platforms\",\n  \"count\": 2,\n  \"total_brands\": 3,\n  \"suggestions\": [\n    {\n      \"id\": \"...\",\n      \"brand\": \"OpenAI\",\n      \"tier\": \"Leader\",\n      \"rank\": 1,\n      \"is_parent\": true,\n      \"products\": [\n        {\n          \"product_name\": \"Platform\",\n          \"full_name\": \"OpenAI Platform\",\n          \"subcategory\": \"LLM APIs\",\n          \"tier\": \"Leader\",\n          \"rank\": 1\n        }\n      ]\n    },\n    ...\n  ]\n}\n```\n\n**Args:**\n- `vertical`: Vertical name (e.g., \"AI/ML Platforms\", \"Marketing Tech\")\n- `limit`: Maximum parent brands to return (0-50, default 15)\n\n**Returns:**\n- List of grouped brand suggestions with nested products\n\n**Status Codes:**\n- 200: Success (may return empty list if no brands found)\n- 400: Invalid parameters (e.g., negative limit)","operationId":"suggest_competitors_api_v1_brand_library_suggest_competitors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"query","required":true,"schema":{"type":"string","description":"Vertical/industry to get competitor suggestions for","title":"Vertical"},"description":"Vertical/industry to get competitor suggestions for"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":0,"description":"Maximum number of parent brands to return","default":15,"title":"Limit"},"description":"Maximum number of parent brands to return"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorSuggestionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-library/verticals":{"get":{"tags":["Brand Library (Tech Spike)"],"summary":"List Verticals","description":"Get list of all available verticals in the brand library.\n\n**Tech Spike Endpoint**\n\nReturns sorted list of unique vertical names from the brand library.\nUseful for populating dropdowns or autocomplete fields.\n\n**Example Response:**\n```json\n[\n  \"AI/ML Platforms\",\n  \"CRM\",\n  \"Customer Engagement\",\n  \"Marketing Automation\",\n  ...\n]\n```\n\n**Returns:**\n- Sorted list of vertical names\n\n**Status Codes:**\n- 200: Success","operationId":"list_verticals_api_v1_brand_library_verticals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response List Verticals Api V1 Brand Library Verticals Get"}}}}}}},"/api/v1/brand-library/detect-vertical/{brand_name}":{"get":{"tags":["Brand Library (Tech Spike)"],"summary":"Detect Vertical","description":"Detect vertical for a given brand name.\n\n**Tech Spike Endpoint**\n\nLooks up a brand in the brand library and returns its vertical.\nUseful for auto-detecting vertical when user enters a brand name.\n\n**Example Request:**\n```\nGET /api/v1/brand-library/detect-vertical/HubSpot\n```\n\n**Example Response:**\n```json\n{\n  \"brand\": \"HubSpot\",\n  \"vertical\": \"Marketing Automation\"\n}\n```\n\n**Args:**\n- `brand_name`: Brand name to look up (case-insensitive)\n\n**Returns:**\n- Brand name and detected vertical (null if not found)\n\n**Status Codes:**\n- 200: Success (vertical may be null)","operationId":"detect_vertical_api_v1_brand_library_detect_vertical__brand_name__get","parameters":[{"name":"brand_name","in":"path","required":true,"schema":{"type":"string","title":"Brand Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Detect Vertical Api V1 Brand Library Detect Vertical  Brand Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-library/ai-search-competitors":{"post":{"tags":["Brand Library (Tech Spike)"],"summary":"Ai Search Competitors","description":"AI-powered competitor search using Bedrock Claude + Tavily.\n\n**Cache-First Architecture Enhancement**\n\nThis endpoint searches for competitors using AI when cache is empty or stale.\nResults are automatically cached for fast subsequent queries.\n\n**How It Works:**\n1. Uses Tavily to search web for \"{vertical} companies 2024 2025\"\n2. Claude Sonnet 4 extracts structured competitor list\n3. Results are cached in brand_library table\n4. Next query for same vertical returns cached results instantly\n\n**Example Request:**\n```\nPOST /api/v1/brand-library/ai-search-competitors?vertical=Agriculture%20Tech&limit=15\n```\n\n**Example Response:**\n```json\n{\n  \"vertical\": \"Agriculture Tech\",\n  \"count\": 15,\n  \"total_brands\": 15,\n  \"suggestions\": [\n    {\n      \"brand\": \"John Deere\",\n      \"tier\": \"Leader\",\n      \"rank\": 1,\n      \"confidence\": \"High\",\n      \"signal\": \"Leading precision agriculture with autonomous tractors in 2024\",\n      \"is_parent\": false,\n      \"products\": []\n    },\n    ...\n  ]\n}\n```\n\n**Args:**\n- `vertical`: Industry vertical to search (e.g., \"Agriculture Tech\")\n- `limit`: Max competitors to find (1-50, default 15)\n- `cache_results`: Whether to save results to database (default true)\n\n**Returns:**\n- List of AI-discovered competitors with metadata\n\n**Status Codes:**\n- 200: Success (may take 3-10 seconds for AI search, returns empty list if Tavily API fails)\n- 500: AI search failed (check logs)\n\n**Performance:**\n- First query: 3-10 seconds (AI search + web scraping)\n- Cached queries: <100ms (instant from database)\n\n**Fallback Behavior:**\n- If Tavily API is unavailable (quota exceeded, rate limit, network error), returns empty results\n- Clients should fall back to cached data from /suggest-competitors endpoint\n- Graceful degradation: no errors exposed to end users, just empty competitor list\n- Tavily API errors logged as WARNING for monitoring","operationId":"ai_search_competitors_api_v1_brand_library_ai_search_competitors_post","parameters":[{"name":"vertical","in":"query","required":true,"schema":{"type":"string","description":"Vertical/industry to search for competitors","title":"Vertical"},"description":"Vertical/industry to search for competitors"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Maximum number of competitors to find","default":15,"title":"Limit"},"description":"Maximum number of competitors to find"},{"name":"cache_results","in":"query","required":false,"schema":{"type":"boolean","description":"Whether to cache results in brand library","default":true,"title":"Cache Results"},"description":"Whether to cache results in brand library"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitorSuggestionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/verticals":{"get":{"tags":["brand-intelligence"],"summary":"List Brand Intelligence Verticals","description":"Return all available brand-library verticals.","operationId":"list_brand_intelligence_verticals_api_v1_brand_intelligence_verticals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Brand Intelligence Verticals Api V1 Brand Intelligence Verticals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/library/search":{"get":{"tags":["brand-intelligence"],"summary":"Search Brand Library","description":"Search the internal brand library for watchlist management.","operationId":"search_brand_library_api_v1_brand_intelligence_library_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Search by brand, vertical, or subcategory","title":"Q"},"description":"Search by brand, vertical, or subcategory"},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by exact vertical name","title":"Vertical"},"description":"Filter by exact vertical name"},{"name":"watchlist_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Optional watchlist to flag existing items","title":"Watchlist Id"},"description":"Optional watchlist to flag existing items"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandLibrarySearchResult"},"title":"Response Search Brand Library Api V1 Brand Intelligence Library Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/watchlists":{"get":{"tags":["brand-intelligence"],"summary":"List Watchlists","description":"List account watchlists with brand counts.","operationId":"list_watchlists_api_v1_brand_intelligence_watchlists_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WatchlistSummaryResponse"},"title":"Response List Watchlists Api V1 Brand Intelligence Watchlists Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["brand-intelligence"],"summary":"Create Watchlist","description":"Create a new watchlist for the current account.","operationId":"create_watchlist_api_v1_brand_intelligence_watchlists_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/watchlists/{watchlist_id}":{"get":{"tags":["brand-intelligence"],"summary":"Get Watchlist","description":"Return one watchlist with all tracked brands.","operationId":"get_watchlist_api_v1_brand_intelligence_watchlists__watchlist_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["brand-intelligence"],"summary":"Update Watchlist","description":"Update a watchlist name or description.","operationId":"update_watchlist_api_v1_brand_intelligence_watchlists__watchlist_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["brand-intelligence"],"summary":"Delete Watchlist","description":"Delete a watchlist and all of its items.","operationId":"delete_watchlist_api_v1_brand_intelligence_watchlists__watchlist_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/watchlists/{watchlist_id}/items":{"post":{"tags":["brand-intelligence"],"summary":"Add Watchlist Item","description":"Attach a brand-library entry to a watchlist.","operationId":"add_watchlist_item_api_v1_brand_intelligence_watchlists__watchlist_id__items_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistItemCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/watchlists/{watchlist_id}/items/{brand_library_id}":{"delete":{"tags":["brand-intelligence"],"summary":"Remove Watchlist Item","description":"Remove a brand-library entry from a watchlist.","operationId":"remove_watchlist_item_api_v1_brand_intelligence_watchlists__watchlist_id__items__brand_library_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Watchlist Id"}},{"name":"brand_library_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Library Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/brand-intelligence/signals":{"get":{"tags":["brand-intelligence"],"summary":"Get Signal Feed","description":"Return a combined signal feed for one watchlist or all watchlists.","operationId":"get_signal_feed_api_v1_brand_intelligence_signals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watchlist_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Optional watchlist filter","title":"Watchlist Id"},"description":"Optional watchlist filter"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"signal, news, reddit, hiring","title":"Event Type"},"description":"signal, news, reddit, hiring"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search feed by brand or text","title":"Search"},"description":"Search feed by brand or text"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/b2c/brands/{brand_id}/metrics":{"get":{"tags":["B2C Dashboard"],"summary":"Get Brand Metrics","description":"Get brand metrics for dashboard\n\nReturns:\n- Mention rate (% of answers mentioning brand)\n- Recommendation strength (avg 0-1)\n- Average position when mentioned\n- Sentiment score (-1 to 1)\n- Visibility score (0-100)\n- Per-model breakdown\n- Competitive advantages/disadvantages\n- Trend direction and % change","operationId":"get_brand_metrics_api_v1_b2c_brands__brand_id__metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"description":"Days back to analyze","default":30,"title":"Days Back"},"description":"Days back to analyze"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandMetricsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/b2c/brands/{brand_id}/insights":{"get":{"tags":["B2C Dashboard"],"summary":"Get Brand Insights","description":"Get brand insights and themes\n\nReturns:\n- Positive themes (with frequency, sentiment, examples)\n- Negative themes\n- Neutral themes\n- Competitive comparison insights\n- Key talking points\n- Top concerns","operationId":"get_brand_insights_api_v1_b2c_brands__brand_id__insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"description":"Days back to analyze","default":30,"title":"Days Back"},"description":"Days back to analyze"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/b2c/brands/{brand_id}/competitive":{"get":{"tags":["B2C Dashboard"],"summary":"Get Competitive Analysis","description":"Get competitive positioning analysis\n\nReturns:\n- Competitive heatmap (brand vs each competitor, 0-100 score)\n- Relative positioning matrix\n- Key differentiators\n- Competitive opportunities","operationId":"get_competitive_analysis_api_v1_b2c_brands__brand_id__competitive_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days Back"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Competitive Analysis Api V1 B2C Brands  Brand Id  Competitive Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/b2c/brands/{brand_id}/trends":{"get":{"tags":["B2C Dashboard"],"summary":"Get Trend Data","description":"Get trend chart data for visibility score\n\nReturns:\n- Daily/weekly aggregated visibility scores\n- Trend direction (up/down/stable)\n- % change over period","operationId":"get_trend_data_api_v1_b2c_brands__brand_id__trends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"period_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Period Days"}},{"name":"model","in":"query","required":false,"schema":{"type":"string","description":"'all' or specific model name","default":"all","title":"Model"},"description":"'all' or specific model name"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendChartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/b2c/brands/{brand_id}/overview":{"get":{"tags":["B2C Dashboard"],"summary":"Get Dashboard Overview","description":"Get complete dashboard overview (combines metrics, insights, competitive)\n\nReturns:\n- All primary metrics\n- Top themes (positive & negative)\n- Top 3 competitors\n- Key alerts/opportunities","operationId":"get_dashboard_overview_api_v1_b2c_brands__brand_id__overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days Back"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Dashboard Overview Api V1 B2C Brands  Brand Id  Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/insights/verticals":{"get":{"tags":["Public Insights"],"summary":"List All Verticals","description":"List all verticals with summary data.\n\nReturns summary of all verticals sorted by total brand count (descending).\nEach vertical includes top 3 brands for preview.\n\nNo authentication required.","operationId":"list_all_verticals_api_public_insights_verticals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/insights/vertical/{vertical}":{"get":{"tags":["Public Insights"],"summary":"Get Vertical Details","description":"Get detailed insights for a specific vertical.\n\nReturns all top brands (up to 20) and aggregated metrics for the vertical.\n\nNo authentication required.\n\nArgs:\n    vertical: Case-sensitive vertical name (e.g. \"CRM\", \"Marketing Automation\")\n\nReturns:\n    Detailed vertical insights with top brands and metrics\n\nRaises:\n    404: Vertical not found","operationId":"get_vertical_details_api_public_insights_vertical__vertical__get","parameters":[{"name":"vertical","in":"path","required":true,"schema":{"type":"string","title":"Vertical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/insights/brand/{brand_id}":{"get":{"tags":["Public Insights"],"summary":"Get Brand Preview","description":"Get limited brand preview (no authentication required).\n\nReturns basic brand information without sensitive metrics.\nIncludes upgrade CTA to encourage sign-up for full access.\n\nNo authentication required.\n\nArgs:\n    brand_id: UUID of the brand\n\nReturns:\n    Limited brand preview with upgrade CTA\n\nRaises:\n    404: Brand not found","operationId":"get_brand_preview_api_public_insights_brand__brand_id__get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/search":{"get":{"tags":["Brand Library - Public"],"summary":"Search Brands","description":"Search brands by name.","operationId":"search_brands_public_brands_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandBasic"},"title":"Response Search Brands Public Brands Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/verticals":{"get":{"tags":["Brand Library - Public"],"summary":"List Verticals","description":"Get list of all verticals with brand counts (cached).","operationId":"list_verticals_public_brands_verticals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/VerticalStats"},"type":"array","title":"Response List Verticals Public Brands Verticals Get"}}}}}}},"/public/brands/vertical/{vertical_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Vertical","description":"Get all brands in a vertical (cached for default sort).","operationId":"get_brands_by_vertical_public_brands_vertical__vertical_slug__get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(brand|signal_length)$","default":"brand","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandDetail"},"title":"Response Get Brands By Vertical Public Brands Vertical  Vertical Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand By Slug","description":"Get a specific brand by slug.\n\nPerformance: O(1) indexed lookup using slug column.","operationId":"get_brand_by_slug_public_brands_brand__brand_slug__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/brief":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Brief","description":"Return a concise, citation-optimized brand summary for AI agents and LLMs.","operationId":"get_brand_brief_public_brands_brand__brand_slug__brief_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/badge.svg":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Badge Svg","description":"Return a shields.io-style SVG badge showing the brand's AI visibility grade and rank.\n\nEmbed in GitHub READMEs:\n  ![AI Visibility](https://geo.sig.ai/api/public/brands/brand/cursor/badge.svg)","operationId":"get_brand_badge_svg_public_brands_brand__brand_slug__badge_svg_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/graph":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Graph","description":"Return knowledge graph data: entity type, parent/child hierarchy,\ntyped edges (competitive, integration, ownership), and capabilities.","operationId":"get_brand_graph_public_brands_brand__brand_slug__graph_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/tags":{"patch":{"tags":["Brand Library - Public"],"summary":"Update Brand Tags","description":"Update tags for a specific brand. Requires admin or owner authentication.","operationId":"update_brand_tags_public_brands_brand__brand_slug__tags_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBrandTags"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/compare":{"get":{"tags":["Brand Library - Public"],"summary":"Compare Brands","description":"Compare multiple brands side-by-side.\n\nPerformance: O(1) indexed lookup using SQL IN clause on slug column.","operationId":"compare_brands_public_brands_compare_get","parameters":[{"name":"brands","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated brand slugs (max 5)","title":"Brands"},"description":"Comma-separated brand slugs (max 5)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandComparison"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/rankings/{vertical_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Rankings","description":"Get ranked list of brands in a vertical by various metrics.","operationId":"get_vertical_rankings_public_brands_rankings__vertical_slug__get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","pattern":"^(comprehensive|signal_length)$","default":"comprehensive","title":"Metric"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RankingItem"},"title":"Response Get Vertical Rankings Public Brands Rankings  Vertical Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/all":{"get":{"tags":["Brand Library - Public"],"summary":"List All Brands","description":"Get paginated list of all brands with optional tag filtering.\n\nArgs:\n    offset: Number of brands to skip (for pagination)\n    limit: Maximum number of brands to return (1-500)\n    tags: Optional list of tag slugs to filter by (e.g., [\"b2c\", \"saas\"])\n    tags_operator: How to combine tags - \"AND\" (brand must have all tags) or \"OR\" (brand can have any tag)\n\nReturns:\n    List of brands matching the filters\n\nExamples:\n    - /all?tags=b2c&tags=saas&tags_operator=AND - B2C SaaS companies\n    - /all?tags=fintech&tags=healthtech&tags_operator=OR - Fintech OR Healthtech","operationId":"list_all_brands_public_brands_all_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags (e.g., b2c, saas)","title":"Tags"},"description":"Filter by tags (e.g., b2c, saas)"},{"name":"tags_operator","in":"query","required":false,"schema":{"type":"string","pattern":"^(AND|OR)$","description":"How to combine multiple tags: AND (all) or OR (any)","default":"AND","title":"Tags Operator"},"description":"How to combine multiple tags: AND (all) or OR (any)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandBasic"},"title":"Response List All Brands Public Brands All Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/stats/overview":{"get":{"tags":["Brand Library - Public"],"summary":"Get Overview Stats","description":"Get overall statistics about the brand library (cached 1 hour).","operationId":"get_overview_stats_public_brands_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/public/brands/stats/vertical/{vertical_slug}/tiers":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Tier Distribution","description":"Get tier distribution statistics for a vertical.","operationId":"get_vertical_tier_distribution_public_brands_stats_vertical__vertical_slug__tiers_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/stats/vertical/{vertical_slug}/competitive-landscape":{"get":{"tags":["Brand Library - Public"],"summary":"Get Competitive Landscape","description":"Get competitive landscape overview for a vertical.","operationId":"get_competitive_landscape_public_brands_stats_vertical__vertical_slug__competitive_landscape_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/aliases":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Aliases","description":"Get aliases (alternative names) for a brand.\n\nPerformance: O(1) indexed lookup using slug column.","operationId":"get_brand_aliases_public_brands_brand__brand_slug__aliases_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand News","description":"Get latest news for a brand combining static enriched news with real-time Google News.\n\nReturns up to 5 real-time articles from Google News plus any static enriched news.\nReal-time articles are marked with type='realtime', static with type='static'.\n\nUses Redis caching (1 hour TTL) for static news data, plus external Google News API call.","operationId":"get_brand_news_public_brands_brand__brand_slug__news_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/vertical/{vertical_slug}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical News","description":"Get latest news for a vertical/industry category.\n\nFetches up to 3 real-time articles from Google News using the vertical name as search query.\nUses Redis caching (1 hour TTL) to reduce API calls.","operationId":"get_vertical_news_public_brands_vertical__vertical_slug__news_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/tag/{tag}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag News","description":"Get latest news for a tag/category.\n\nFetches up to 3 real-time articles from Google News using the tag name as search query.\nUses Redis caching (1 hour TTL) to reduce API calls.","operationId":"get_tag_news_public_brands_tag__tag__news_get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/founding-story":{"get":{"tags":["Brand Library - Public"],"summary":"Get Founding Story","description":"Get founding story for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_founding_story_public_brands_brand__brand_slug__founding_story_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/timeline":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Timeline","description":"Get company timeline for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_timeline_public_brands_brand__brand_slug__timeline_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/culture":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Culture","description":"Get company culture and values for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_culture_public_brands_brand__brand_slug__culture_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/leadership":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Leadership","description":"Get leadership team for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_leadership_public_brands_brand__brand_slug__leadership_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/request-research":{"post":{"tags":["Brand Library - Public"],"summary":"Submit Brand Research Request","description":"Submit a brand for research consideration.\n\nUsers can request brands they want added to the database.\nRequests are queued for admin review.","operationId":"submit_brand_research_request_public_brands_request_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandResearchRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/tags/stats":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag Statistics","description":"Get tag statistics for tag cloud visualization (cached 30 min).\n\nReturns frequency statistics for all tags across the brand library.\nUsed to create tag clouds with weighted display.\nLimit increased to 500 for sitemap generation.","operationId":"get_tag_statistics_public_brands_tags_stats_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"min_count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Min Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagStats"},"title":"Response Get Tag Statistics Public Brands Tags Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/tag/{tag}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Tag","description":"Get all brands that have a specific tag.\n\nPerformance: Uses GIN index on JSONB tags column for O(log n) lookup.","operationId":"get_brands_by_tag_public_brands_tag__tag__get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(brand|vertical|created_at|updated_at)$","default":"brand","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandListItem"},"title":"Response Get Brands By Tag Public Brands Tag  Tag  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/similar/{slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Similar Brands","description":"Get brands similar to the given brand based on shared tags.\n\nFinds brands that share at least one tag with the current brand,\nordered by the number of shared tags (most similar first).","operationId":"get_similar_brands_public_brands_similar__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandListItem"},"title":"Response Get Similar Brands Public Brands Similar  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/tag/{tag}/metadata":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag Metadata","description":"Get enriched metadata for a specific tag.\n\nReturns tag definition data including rich description, market info,\nkey players, and SEO keywords for enhanced tag pages.","operationId":"get_tag_metadata_public_brands_tag__tag__metadata_get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagMetadata"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/vertical/{vertical_slug}/metadata":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Metadata","description":"Get enriched metadata for a specific vertical.\n\nReturns vertical definition data including rich description, market info,\nkey trends, top players, and SEO keywords for enhanced vertical pages.","operationId":"get_vertical_metadata_public_brands_vertical__vertical_slug__metadata_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalMetadata"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/reddit":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Reddit Mentions","description":"Get Reddit mentions for a brand.\n\nChecks database for pre-populated data, then Redis cache, then falls back\nto fetcher functions. Uses Redis caching (24 hour TTL) to minimize API calls.\n\nReturns:\n- total_mentions: Number of posts/discussions found\n- mention_trend: Activity level indicator\n- top_subreddits: Where the brand is most discussed\n- sentiment_score: Community sentiment (-1 to 1)\n- sample_posts: Top relevant posts with links","operationId":"get_brand_reddit_mentions_public_brands_brand__brand_slug__reddit_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/jobs":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Job Postings","description":"Get current job postings for a brand.\n\nChecks database for pre-populated data, then Redis cache, then falls back\nto fetcher functions. Uses Redis caching (12 hour TTL) since job postings\nchange more frequently.\n\nReturns:\n- total_openings: Number of open positions\n- hiring_trend: \"aggressive\", \"active\", \"moderate\", \"limited\"\n- jobs_by_department: Breakdown by function (Engineering, Sales, etc.)\n- jobs_by_location: Geographic distribution\n- jobs_by_level: Seniority distribution\n- sample_jobs: Sample job listings with details\n- tech_stack_signals: Technologies mentioned in job descriptions\n- growth_signals: Indicators of company growth","operationId":"get_brand_job_postings_public_brands_brand__brand_slug__jobs_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/ai-visibility":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Ai Visibility","description":"Get AI visibility score and platform breakdown for a brand.\n\nReturns how often and prominently this brand appears in AI system answers\n(ChatGPT, Gemini, Perplexity, Claude, Grok), computed from mention analysis.","operationId":"get_brand_ai_visibility_public_brands_brand__brand_slug__ai_visibility_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAIVisibility"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/trending":{"get":{"tags":["Brand Library - Public"],"summary":"Get Trending Brands","description":"Get brands sorted by AI visibility score.\n\nBy default only returns trending brands (ai_trend_direction='up').\nPass trending_only=false to return ALL brands with scores — used by /best pages.\nBy default scoped to AI/tech ecosystem verticals. Pass all_verticals=true\nto include every industry.","operationId":"get_trending_brands_public_brands_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}},{"name":"all_verticals","in":"query","required":false,"schema":{"type":"boolean","description":"If true, include all verticals (not just AI/tech ecosystem)","default":false,"title":"All Verticals"},"description":"If true, include all verticals (not just AI/tech ecosystem)"},{"name":"trending_only","in":"query","required":false,"schema":{"type":"boolean","description":"If false, return ALL scored brands (not just trending). Used by /best pages.","default":true,"title":"Trending Only"},"description":"If false, return ALL scored brands (not just trending). Used by /best pages."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TrendingBrandItem"},"title":"Response Get Trending Brands Public Brands Trending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/activity":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Activity","description":"Recent activity events for a single brand, across all sources.","operationId":"get_brand_activity_public_brands_brand__brand_slug__activity_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/activity/feed":{"get":{"tags":["Brand Library - Public"],"summary":"Get Activity Feed","description":"Unified activity feed across all brand sources (blog posts, SEC filings, releases, etc.).","operationId":"get_activity_feed_public_brands_activity_feed_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one source: rss, sec, prwire, github, bluesky, mastodon","title":"Source"},"description":"Filter to one source: rss, sec, prwire, github, bluesky, mastodon"},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/jobs/feed":{"get":{"tags":["Brand Library - Public"],"summary":"Get Jobs Feed","description":"Recent active job postings across brands with public Greenhouse/Lever/Ashby boards.","operationId":"get_jobs_feed_public_brands_jobs_feed_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Look-back window in days","default":7,"title":"Days"},"description":"Look-back window in days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max jobs returned","default":200,"title":"Limit"},"description":"Max jobs returned"},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by vertical (canonical or raw)","title":"Vertical"},"description":"Filter by vertical (canonical or raw)"},{"name":"remote_only","in":"query","required":false,"schema":{"type":"boolean","description":"Filter to remote jobs only","default":false,"title":"Remote Only"},"description":"Filter to remote jobs only"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/whats-new":{"get":{"tags":["Brand Library - Public"],"summary":"Get Whats New","description":"Recently added and recently refreshed brands.\n\n- \"new\" = brand created within the look-back window\n- \"refreshed\" = last_updated within the window AND created_at older than (last_updated - 1 hour)","operationId":"get_whats_new_public_brands_whats_new_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"description":"Look-back window in days","default":30,"title":"Days"},"description":"Look-back window in days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max items per section","default":200,"title":"Limit"},"description":"Max items per section"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsNewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/ai-rankings":{"get":{"tags":["Brand Library - Public"],"summary":"Get Ai Rankings Index","description":"Get all verticals with their top brands by AI visibility score.\n\nGroups by vertical_canonical to avoid duplicate verticals from non-canonical names.","operationId":"get_ai_rankings_index_public_brands_ai_rankings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VerticalAISummary"},"title":"Response Get Ai Rankings Index Public Brands Ai Rankings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/subcategory/{subcategory_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Subcategory","description":"Get all brands in a subcategory, sorted by AI visibility score.","operationId":"get_brands_by_subcategory_public_brands_subcategory__subcategory_slug__get","parameters":[{"name":"subcategory_slug","in":"path","required":true,"schema":{"type":"string","title":"Subcategory Slug"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(score|rank|brand)$","default":"score","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubcategoryDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/subcategories":{"get":{"tags":["Brand Library - Public"],"summary":"List Subcategories","description":"List all subcategories with brand counts and avg AI visibility score.","operationId":"list_subcategories_public_brands_subcategories_get","parameters":[{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}},{"name":"min_count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":3,"title":"Min Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"title":"Response List Subcategories Public Brands Subcategories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/newsletter/subscribe":{"post":{"tags":["Brand Library - Public"],"summary":"Subscribe To Newsletter","description":"Subscribe an email address to the weekly AI Visibility Digest.","operationId":"subscribe_to_newsletter_public_brands_newsletter_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/newsletter/unsubscribe":{"get":{"tags":["Brand Library - Public"],"summary":"Unsubscribe From Newsletter","description":"Unsubscribe by token (linked from every digest email).","operationId":"unsubscribe_from_newsletter_public_brands_newsletter_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/digest":{"post":{"tags":["Brand Library - Public"],"summary":"Get Brand Digest","description":"Return a compact intelligence digest for a set of brand slugs.\n\nDesigned for AI agents and watchlist digest workflows. Accepts a list\nof brand slugs and returns: current signals, AI visibility scores with\ntrend, recent edges (competitive/integration), and capabilities.\n\nBody: {\"slugs\": [\"cursor\", \"github-copilot\", \"openai\"], \"include\": [\"signals\", \"visibility\", \"edges\", \"capabilities\"]}","operationId":"get_brand_digest_public_brands_digest_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/capabilities/search":{"get":{"tags":["Brand Library - Public"],"summary":"Find By Capability","description":"Find brands by capability. Searches capability names and slugs.","operationId":"find_by_capability_public_brands_capabilities_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Capability keyword (e.g. 'code-generation', 'payment-processing')","title":"Q"},"description":"Capability keyword (e.g. 'code-generation', 'payment-processing')"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Filter by vertical/domain","title":"Domain"},"description":"Filter by vertical/domain"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/alternatives":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Alternatives","description":"Find alternatives to a brand using knowledge graph edges, shared capabilities,\nand category matching. Each alternative includes reasons and shared capabilities.","operationId":"get_brand_alternatives_public_brands_brand__brand_slug__alternatives_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/earlysig-widget/{ticker}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Earlysig Widget","description":"Get AI visibility data for a stock ticker — for earlysig.com widget embed.\n\nReturns brand name, AI visibility score, rank, trend, and aeo.sig.ai profile URL\nfor any public company tracked on both earlysig.com and aeo.sig.ai.\n\nCORS: accessible by earlysig.com for widget embedding.","operationId":"get_earlysig_widget_public_brands_earlysig_widget__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/readiness":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Readiness","description":"Scan how AI-agent-ready a brand's web presence is.\n\nChecks llms.txt, schema.org, OpenAPI, developer docs, Wikipedia,\nrobots.txt AI policy, and FAQ content. Returns a 0-100 readiness score\nwith per-check results and actionable fix suggestions.","operationId":"get_brand_readiness_public_brands_brand__brand_slug__readiness_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/brand/{brand_slug}/agent-simulations":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Agent Simulations","description":"Get aggregated consumer agent simulation results for a brand.\n\nReturns funnel metrics: discovery rate, shortlist rate, recommendation rate,\nand win rate from simulated buyer journeys.","operationId":"get_brand_agent_simulations_public_brands_brand__brand_slug__agent_simulations_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/public/brands/agent-simulations/run":{"post":{"tags":["Brand Library - Public"],"summary":"Trigger Agent Simulation","description":"Trigger a batch of buyer journey simulations for a vertical.\n\nRuns AI agent simulations using Claude, storing results in simulation_runs.\nThis is an async operation — results are stored as they complete.","operationId":"trigger_agent_simulation_public_brands_agent_simulations_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"query","required":true,"schema":{"type":"string","description":"Vertical to simulate (e.g., 'Developer Tools')","title":"Vertical"},"description":"Vertical to simulate (e.g., 'Developer Tools')"},{"name":"persona_id","in":"query","required":false,"schema":{"type":"string","description":"Specific persona ID (optional, runs all matching if omitted)","title":"Persona Id"},"description":"Specific persona ID (optional, runs all matching if omitted)"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/search":{"get":{"tags":["Brand Library - Public"],"summary":"Search Brands","description":"Search brands by name.","operationId":"search_brands_api_public_brands_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandBasic"},"title":"Response Search Brands Api Public Brands Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/verticals":{"get":{"tags":["Brand Library - Public"],"summary":"List Verticals","description":"Get list of all verticals with brand counts (cached).","operationId":"list_verticals_api_public_brands_verticals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/VerticalStats"},"type":"array","title":"Response List Verticals Api Public Brands Verticals Get"}}}}}}},"/api/public/brands/vertical/{vertical_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Vertical","description":"Get all brands in a vertical (cached for default sort).","operationId":"get_brands_by_vertical_api_public_brands_vertical__vertical_slug__get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(brand|signal_length)$","default":"brand","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandDetail"},"title":"Response Get Brands By Vertical Api Public Brands Vertical  Vertical Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand By Slug","description":"Get a specific brand by slug.\n\nPerformance: O(1) indexed lookup using slug column.","operationId":"get_brand_by_slug_api_public_brands_brand__brand_slug__get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/brief":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Brief","description":"Return a concise, citation-optimized brand summary for AI agents and LLMs.","operationId":"get_brand_brief_api_public_brands_brand__brand_slug__brief_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/badge.svg":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Badge Svg","description":"Return a shields.io-style SVG badge showing the brand's AI visibility grade and rank.\n\nEmbed in GitHub READMEs:\n  ![AI Visibility](https://geo.sig.ai/api/public/brands/brand/cursor/badge.svg)","operationId":"get_brand_badge_svg_api_public_brands_brand__brand_slug__badge_svg_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/graph":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Graph","description":"Return knowledge graph data: entity type, parent/child hierarchy,\ntyped edges (competitive, integration, ownership), and capabilities.","operationId":"get_brand_graph_api_public_brands_brand__brand_slug__graph_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/tags":{"patch":{"tags":["Brand Library - Public"],"summary":"Update Brand Tags","description":"Update tags for a specific brand. Requires admin or owner authentication.","operationId":"update_brand_tags_api_public_brands_brand__brand_slug__tags_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBrandTags"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/compare":{"get":{"tags":["Brand Library - Public"],"summary":"Compare Brands","description":"Compare multiple brands side-by-side.\n\nPerformance: O(1) indexed lookup using SQL IN clause on slug column.","operationId":"compare_brands_api_public_brands_compare_get","parameters":[{"name":"brands","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated brand slugs (max 5)","title":"Brands"},"description":"Comma-separated brand slugs (max 5)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandComparison"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/rankings/{vertical_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Rankings","description":"Get ranked list of brands in a vertical by various metrics.","operationId":"get_vertical_rankings_api_public_brands_rankings__vertical_slug__get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","pattern":"^(comprehensive|signal_length)$","default":"comprehensive","title":"Metric"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RankingItem"},"title":"Response Get Vertical Rankings Api Public Brands Rankings  Vertical Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/all":{"get":{"tags":["Brand Library - Public"],"summary":"List All Brands","description":"Get paginated list of all brands with optional tag filtering.\n\nArgs:\n    offset: Number of brands to skip (for pagination)\n    limit: Maximum number of brands to return (1-500)\n    tags: Optional list of tag slugs to filter by (e.g., [\"b2c\", \"saas\"])\n    tags_operator: How to combine tags - \"AND\" (brand must have all tags) or \"OR\" (brand can have any tag)\n\nReturns:\n    List of brands matching the filters\n\nExamples:\n    - /all?tags=b2c&tags=saas&tags_operator=AND - B2C SaaS companies\n    - /all?tags=fintech&tags=healthtech&tags_operator=OR - Fintech OR Healthtech","operationId":"list_all_brands_api_public_brands_all_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags (e.g., b2c, saas)","title":"Tags"},"description":"Filter by tags (e.g., b2c, saas)"},{"name":"tags_operator","in":"query","required":false,"schema":{"type":"string","pattern":"^(AND|OR)$","description":"How to combine multiple tags: AND (all) or OR (any)","default":"AND","title":"Tags Operator"},"description":"How to combine multiple tags: AND (all) or OR (any)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandBasic"},"title":"Response List All Brands Api Public Brands All Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/stats/overview":{"get":{"tags":["Brand Library - Public"],"summary":"Get Overview Stats","description":"Get overall statistics about the brand library (cached 1 hour).","operationId":"get_overview_stats_api_public_brands_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public/brands/stats/vertical/{vertical_slug}/tiers":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Tier Distribution","description":"Get tier distribution statistics for a vertical.","operationId":"get_vertical_tier_distribution_api_public_brands_stats_vertical__vertical_slug__tiers_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/stats/vertical/{vertical_slug}/competitive-landscape":{"get":{"tags":["Brand Library - Public"],"summary":"Get Competitive Landscape","description":"Get competitive landscape overview for a vertical.","operationId":"get_competitive_landscape_api_public_brands_stats_vertical__vertical_slug__competitive_landscape_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/aliases":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Aliases","description":"Get aliases (alternative names) for a brand.\n\nPerformance: O(1) indexed lookup using slug column.","operationId":"get_brand_aliases_api_public_brands_brand__brand_slug__aliases_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand News","description":"Get latest news for a brand combining static enriched news with real-time Google News.\n\nReturns up to 5 real-time articles from Google News plus any static enriched news.\nReal-time articles are marked with type='realtime', static with type='static'.\n\nUses Redis caching (1 hour TTL) for static news data, plus external Google News API call.","operationId":"get_brand_news_api_public_brands_brand__brand_slug__news_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/vertical/{vertical_slug}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical News","description":"Get latest news for a vertical/industry category.\n\nFetches up to 3 real-time articles from Google News using the vertical name as search query.\nUses Redis caching (1 hour TTL) to reduce API calls.","operationId":"get_vertical_news_api_public_brands_vertical__vertical_slug__news_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/tag/{tag}/news":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag News","description":"Get latest news for a tag/category.\n\nFetches up to 3 real-time articles from Google News using the tag name as search query.\nUses Redis caching (1 hour TTL) to reduce API calls.","operationId":"get_tag_news_api_public_brands_tag__tag__news_get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/founding-story":{"get":{"tags":["Brand Library - Public"],"summary":"Get Founding Story","description":"Get founding story for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_founding_story_api_public_brands_brand__brand_slug__founding_story_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/timeline":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Timeline","description":"Get company timeline for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_timeline_api_public_brands_brand__brand_slug__timeline_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/culture":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Culture","description":"Get company culture and values for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_culture_api_public_brands_brand__brand_slug__culture_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/leadership":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Leadership","description":"Get leadership team for a brand.\n\nUses Redis caching (1 hour TTL) to reduce database load.","operationId":"get_brand_leadership_api_public_brands_brand__brand_slug__leadership_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/request-research":{"post":{"tags":["Brand Library - Public"],"summary":"Submit Brand Research Request","description":"Submit a brand for research consideration.\n\nUsers can request brands they want added to the database.\nRequests are queued for admin review.","operationId":"submit_brand_research_request_api_public_brands_request_research_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandResearchRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/tags/stats":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag Statistics","description":"Get tag statistics for tag cloud visualization (cached 30 min).\n\nReturns frequency statistics for all tags across the brand library.\nUsed to create tag clouds with weighted display.\nLimit increased to 500 for sitemap generation.","operationId":"get_tag_statistics_api_public_brands_tags_stats_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"min_count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Min Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagStats"},"title":"Response Get Tag Statistics Api Public Brands Tags Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/tag/{tag}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Tag","description":"Get all brands that have a specific tag.\n\nPerformance: Uses GIN index on JSONB tags column for O(log n) lookup.","operationId":"get_brands_by_tag_api_public_brands_tag__tag__get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(brand|vertical|created_at|updated_at)$","default":"brand","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandListItem"},"title":"Response Get Brands By Tag Api Public Brands Tag  Tag  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/similar/{slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Similar Brands","description":"Get brands similar to the given brand based on shared tags.\n\nFinds brands that share at least one tag with the current brand,\nordered by the number of shared tags (most similar first).","operationId":"get_similar_brands_api_public_brands_similar__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BrandListItem"},"title":"Response Get Similar Brands Api Public Brands Similar  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/tag/{tag}/metadata":{"get":{"tags":["Brand Library - Public"],"summary":"Get Tag Metadata","description":"Get enriched metadata for a specific tag.\n\nReturns tag definition data including rich description, market info,\nkey players, and SEO keywords for enhanced tag pages.","operationId":"get_tag_metadata_api_public_brands_tag__tag__metadata_get","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagMetadata"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/vertical/{vertical_slug}/metadata":{"get":{"tags":["Brand Library - Public"],"summary":"Get Vertical Metadata","description":"Get enriched metadata for a specific vertical.\n\nReturns vertical definition data including rich description, market info,\nkey trends, top players, and SEO keywords for enhanced vertical pages.","operationId":"get_vertical_metadata_api_public_brands_vertical__vertical_slug__metadata_get","parameters":[{"name":"vertical_slug","in":"path","required":true,"schema":{"type":"string","title":"Vertical Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalMetadata"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/reddit":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Reddit Mentions","description":"Get Reddit mentions for a brand.\n\nChecks database for pre-populated data, then Redis cache, then falls back\nto fetcher functions. Uses Redis caching (24 hour TTL) to minimize API calls.\n\nReturns:\n- total_mentions: Number of posts/discussions found\n- mention_trend: Activity level indicator\n- top_subreddits: Where the brand is most discussed\n- sentiment_score: Community sentiment (-1 to 1)\n- sample_posts: Top relevant posts with links","operationId":"get_brand_reddit_mentions_api_public_brands_brand__brand_slug__reddit_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/jobs":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Job Postings","description":"Get current job postings for a brand.\n\nChecks database for pre-populated data, then Redis cache, then falls back\nto fetcher functions. Uses Redis caching (12 hour TTL) since job postings\nchange more frequently.\n\nReturns:\n- total_openings: Number of open positions\n- hiring_trend: \"aggressive\", \"active\", \"moderate\", \"limited\"\n- jobs_by_department: Breakdown by function (Engineering, Sales, etc.)\n- jobs_by_location: Geographic distribution\n- jobs_by_level: Seniority distribution\n- sample_jobs: Sample job listings with details\n- tech_stack_signals: Technologies mentioned in job descriptions\n- growth_signals: Indicators of company growth","operationId":"get_brand_job_postings_api_public_brands_brand__brand_slug__jobs_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/ai-visibility":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Ai Visibility","description":"Get AI visibility score and platform breakdown for a brand.\n\nReturns how often and prominently this brand appears in AI system answers\n(ChatGPT, Gemini, Perplexity, Claude, Grok), computed from mention analysis.","operationId":"get_brand_ai_visibility_api_public_brands_brand__brand_slug__ai_visibility_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAIVisibility"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/trending":{"get":{"tags":["Brand Library - Public"],"summary":"Get Trending Brands","description":"Get brands sorted by AI visibility score.\n\nBy default only returns trending brands (ai_trend_direction='up').\nPass trending_only=false to return ALL brands with scores — used by /best pages.\nBy default scoped to AI/tech ecosystem verticals. Pass all_verticals=true\nto include every industry.","operationId":"get_trending_brands_api_public_brands_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}},{"name":"all_verticals","in":"query","required":false,"schema":{"type":"boolean","description":"If true, include all verticals (not just AI/tech ecosystem)","default":false,"title":"All Verticals"},"description":"If true, include all verticals (not just AI/tech ecosystem)"},{"name":"trending_only","in":"query","required":false,"schema":{"type":"boolean","description":"If false, return ALL scored brands (not just trending). Used by /best pages.","default":true,"title":"Trending Only"},"description":"If false, return ALL scored brands (not just trending). Used by /best pages."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TrendingBrandItem"},"title":"Response Get Trending Brands Api Public Brands Trending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/activity":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Activity","description":"Recent activity events for a single brand, across all sources.","operationId":"get_brand_activity_api_public_brands_brand__brand_slug__activity_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/activity/feed":{"get":{"tags":["Brand Library - Public"],"summary":"Get Activity Feed","description":"Unified activity feed across all brand sources (blog posts, SEC filings, releases, etc.).","operationId":"get_activity_feed_api_public_brands_activity_feed_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one source: rss, sec, prwire, github, bluesky, mastodon","title":"Source"},"description":"Filter to one source: rss, sec, prwire, github, bluesky, mastodon"},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/jobs/feed":{"get":{"tags":["Brand Library - Public"],"summary":"Get Jobs Feed","description":"Recent active job postings across brands with public Greenhouse/Lever/Ashby boards.","operationId":"get_jobs_feed_api_public_brands_jobs_feed_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Look-back window in days","default":7,"title":"Days"},"description":"Look-back window in days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max jobs returned","default":200,"title":"Limit"},"description":"Max jobs returned"},{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by vertical (canonical or raw)","title":"Vertical"},"description":"Filter by vertical (canonical or raw)"},{"name":"remote_only","in":"query","required":false,"schema":{"type":"boolean","description":"Filter to remote jobs only","default":false,"title":"Remote Only"},"description":"Filter to remote jobs only"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobsFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/whats-new":{"get":{"tags":["Brand Library - Public"],"summary":"Get Whats New","description":"Recently added and recently refreshed brands.\n\n- \"new\" = brand created within the look-back window\n- \"refreshed\" = last_updated within the window AND created_at older than (last_updated - 1 hour)","operationId":"get_whats_new_api_public_brands_whats_new_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":1,"description":"Look-back window in days","default":30,"title":"Days"},"description":"Look-back window in days"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max items per section","default":200,"title":"Limit"},"description":"Max items per section"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsNewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/ai-rankings":{"get":{"tags":["Brand Library - Public"],"summary":"Get Ai Rankings Index","description":"Get all verticals with their top brands by AI visibility score.\n\nGroups by vertical_canonical to avoid duplicate verticals from non-canonical names.","operationId":"get_ai_rankings_index_api_public_brands_ai_rankings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VerticalAISummary"},"title":"Response Get Ai Rankings Index Api Public Brands Ai Rankings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/subcategory/{subcategory_slug}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brands By Subcategory","description":"Get all brands in a subcategory, sorted by AI visibility score.","operationId":"get_brands_by_subcategory_api_public_brands_subcategory__subcategory_slug__get","parameters":[{"name":"subcategory_slug","in":"path","required":true,"schema":{"type":"string","title":"Subcategory Slug"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(score|rank|brand)$","default":"score","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubcategoryDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/subcategories":{"get":{"tags":["Brand Library - Public"],"summary":"List Subcategories","description":"List all subcategories with brand counts and avg AI visibility score.","operationId":"list_subcategories_api_public_brands_subcategories_get","parameters":[{"name":"vertical","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"}},{"name":"min_count","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":3,"title":"Min Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"title":"Response List Subcategories Api Public Brands Subcategories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/newsletter/subscribe":{"post":{"tags":["Brand Library - Public"],"summary":"Subscribe To Newsletter","description":"Subscribe an email address to the weekly AI Visibility Digest.","operationId":"subscribe_to_newsletter_api_public_brands_newsletter_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/newsletter/unsubscribe":{"get":{"tags":["Brand Library - Public"],"summary":"Unsubscribe From Newsletter","description":"Unsubscribe by token (linked from every digest email).","operationId":"unsubscribe_from_newsletter_api_public_brands_newsletter_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/digest":{"post":{"tags":["Brand Library - Public"],"summary":"Get Brand Digest","description":"Return a compact intelligence digest for a set of brand slugs.\n\nDesigned for AI agents and watchlist digest workflows. Accepts a list\nof brand slugs and returns: current signals, AI visibility scores with\ntrend, recent edges (competitive/integration), and capabilities.\n\nBody: {\"slugs\": [\"cursor\", \"github-copilot\", \"openai\"], \"include\": [\"signals\", \"visibility\", \"edges\", \"capabilities\"]}","operationId":"get_brand_digest_api_public_brands_digest_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/capabilities/search":{"get":{"tags":["Brand Library - Public"],"summary":"Find By Capability","description":"Find brands by capability. Searches capability names and slugs.","operationId":"find_by_capability_api_public_brands_capabilities_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Capability keyword (e.g. 'code-generation', 'payment-processing')","title":"Q"},"description":"Capability keyword (e.g. 'code-generation', 'payment-processing')"},{"name":"domain","in":"query","required":false,"schema":{"type":"string","description":"Filter by vertical/domain","title":"Domain"},"description":"Filter by vertical/domain"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/alternatives":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Alternatives","description":"Find alternatives to a brand using knowledge graph edges, shared capabilities,\nand category matching. Each alternative includes reasons and shared capabilities.","operationId":"get_brand_alternatives_api_public_brands_brand__brand_slug__alternatives_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/earlysig-widget/{ticker}":{"get":{"tags":["Brand Library - Public"],"summary":"Get Earlysig Widget","description":"Get AI visibility data for a stock ticker — for earlysig.com widget embed.\n\nReturns brand name, AI visibility score, rank, trend, and aeo.sig.ai profile URL\nfor any public company tracked on both earlysig.com and aeo.sig.ai.\n\nCORS: accessible by earlysig.com for widget embedding.","operationId":"get_earlysig_widget_api_public_brands_earlysig_widget__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/readiness":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Readiness","description":"Scan how AI-agent-ready a brand's web presence is.\n\nChecks llms.txt, schema.org, OpenAPI, developer docs, Wikipedia,\nrobots.txt AI policy, and FAQ content. Returns a 0-100 readiness score\nwith per-check results and actionable fix suggestions.","operationId":"get_brand_readiness_api_public_brands_brand__brand_slug__readiness_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/brand/{brand_slug}/agent-simulations":{"get":{"tags":["Brand Library - Public"],"summary":"Get Brand Agent Simulations","description":"Get aggregated consumer agent simulation results for a brand.\n\nReturns funnel metrics: discovery rate, shortlist rate, recommendation rate,\nand win rate from simulated buyer journeys.","operationId":"get_brand_agent_simulations_api_public_brands_brand__brand_slug__agent_simulations_get","parameters":[{"name":"brand_slug","in":"path","required":true,"schema":{"type":"string","title":"Brand Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/brands/agent-simulations/run":{"post":{"tags":["Brand Library - Public"],"summary":"Trigger Agent Simulation","description":"Trigger a batch of buyer journey simulations for a vertical.\n\nRuns AI agent simulations using Claude, storing results in simulation_runs.\nThis is an async operation — results are stored as they complete.","operationId":"trigger_agent_simulation_api_public_brands_agent_simulations_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"vertical","in":"query","required":true,"schema":{"type":"string","description":"Vertical to simulate (e.g., 'Developer Tools')","title":"Vertical"},"description":"Vertical to simulate (e.g., 'Developer Tools')"},{"name":"persona_id","in":"query","required":false,"schema":{"type":"string","description":"Specific persona ID (optional, runs all matching if omitted)","title":"Persona Id"},"description":"Specific persona ID (optional, runs all matching if omitted)"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/competitive-intel/{brand_id}":{"get":{"tags":["b2b-competitive-intel"],"summary":"Get Competitive Intelligence","description":"Get competitive intelligence for a brand.","operationId":"get_competitive_intelligence_api_b2b_competitive_intel__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Top N"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/query-analytics/{brand_id}":{"get":{"tags":["b2b-query-analytics"],"summary":"Get Query Analytics","description":"Get anonymized query pattern analytics for a brand.\n\n**Privacy-First:**\n- Only shows patterns with 10+ occurrences\n- Query text is never stored (only SHA-256 hashes)\n- Aggregated data only","operationId":"get_query_analytics_api_b2b_query_analytics__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"End Date"}},{"name":"query_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/QueryType"},{"type":"null"}],"title":"Query Type"}},{"name":"min_frequency","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":5,"title":"Min Frequency"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/visibility/{brand_id}":{"get":{"tags":["b2b-visibility"],"summary":"Get Brand Visibility","description":"Get brand visibility metrics for a specified date range.\n\n**Visibility Score (0-100):**\nComposite score based on:\n- **Mention Frequency (40%)**: How often the brand is mentioned\n- **Position Quality (30%)**: How highly ranked in AI responses\n- **Engagement (20%)**: How often users interact with mentions\n- **Sentiment (10%)**: Overall sentiment of mentions\n\n**Trend Analysis:**\nCompares current period to previous period of equal length to determine\nif visibility is growing, stable, or declining.\n\n**AI Source Breakdown:**\nMetrics broken down by platform (ChatGPT, Claude, Gemini, etc.)\n\n**Daily Breakdown:**\nTime-series data for each day in the requested period\n\n**Example Request:**\n```\nGET /api/b2b/visibility/550e8400-e29b-41d4-a716-446655440000?start_date=2026-01-01&end_date=2026-01-31\n```\n\n**Example Response:**\n```json\n{\n    \"brand_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"brand_name\": \"OpenAI\",\n    \"period\": {\n        \"start\": \"2026-01-01\",\n        \"end\": \"2026-01-31\"\n    },\n    \"visibility_score\": {\n        \"mention_frequency\": 75.5,\n        \"position_quality\": 85.0,\n        \"engagement\": 42.3,\n        \"sentiment\": 78.9,\n        \"overall\": 72.4\n    },\n    \"trend\": \"growing\",\n    \"trend_pct_change\": 15.3,\n    \"by_ai_source\": {\n        \"chatgpt\": {\n            \"mention_count\": 1250,\n            \"avg_position\": 2.3,\n            \"engagement_rate\": 0.42\n        },\n        \"claude\": {\n            \"mention_count\": 980,\n            \"avg_position\": 1.8,\n            \"engagement_rate\": 0.45\n        }\n    },\n    \"industry_benchmark\": {\n        \"avg_visibility_score\": 50.0,\n        \"avg_mention_count\": 100,\n        \"avg_engagement_rate\": 0.25\n    },\n    \"daily_breakdown\": [\n        {\n            \"date\": \"2026-01-01\",\n            \"mentions\": 45,\n            \"impressions\": 60,\n            \"avg_position\": 2.5,\n            \"engagement_rate\": 0.40\n        }\n    ]\n}\n```\n\n**Requirements:**\n- Authentication required (B2B subscription)\n- Date range must be valid (end_date >= start_date)\n- Maximum date range: 365 days","operationId":"get_brand_visibility_api_b2b_visibility__brand_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id"}},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (inclusive)","title":"Start Date"},"description":"Start date (inclusive)"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (inclusive)","title":"End Date"},"description":"End date (inclusive)"},{"name":"ai_sources","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AISource"}},{"type":"null"}],"description":"Filter by AI sources (e.g., chatgpt, claude, gemini)","title":"Ai Sources"},"description":"Filter by AI sources (e.g., chatgpt, claude, gemini)"},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandVisibilityResponse"}}}},"404":{"description":"Brand not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/B2BErrorResponse"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/B2BErrorResponse"}}}}}}},"/api/b2b/visibility/health":{"get":{"tags":["b2b-visibility"],"summary":"Health Check","description":"Health check endpoint for B2B visibility service.\n\nReturns:\n    Status indicating service health","operationId":"health_check_api_b2b_visibility_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/b2b/subscriptions":{"post":{"tags":["b2b-subscriptions"],"summary":"Create Subscription","description":"Create a new B2B subscription for a brand.","operationId":"create_subscription_api_b2b_subscriptions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["b2b-subscriptions"],"summary":"List Subscriptions","description":"List all subscriptions for the current account.","operationId":"list_subscriptions_api_b2b_subscriptions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionResponse"},"title":"Response List Subscriptions Api B2B Subscriptions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/subscriptions/{subscription_id}":{"get":{"tags":["b2b-subscriptions"],"summary":"Get Subscription","description":"Get a specific subscription by ID.","operationId":"get_subscription_api_b2b_subscriptions__subscription_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["b2b-subscriptions"],"summary":"Update Subscription","description":"Update subscription tier (upgrade/downgrade).","operationId":"update_subscription_api_b2b_subscriptions__subscription_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/subscriptions/{subscription_id}/cancel":{"post":{"tags":["b2b-subscriptions"],"summary":"Cancel Subscription","description":"Cancel subscription at end of period.","operationId":"cancel_subscription_api_b2b_subscriptions__subscription_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/subscriptions/{subscription_id}/team/invite":{"post":{"tags":["b2b-subscriptions"],"summary":"Invite Team Member","description":"Invite a team member to the subscription.","operationId":"invite_team_member_api_b2b_subscriptions__subscription_id__team_invite_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberInvite"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/subscriptions/{subscription_id}/team":{"get":{"tags":["b2b-subscriptions"],"summary":"List Team Members","description":"List all team members for a subscription.","operationId":"list_team_members_api_b2b_subscriptions__subscription_id__team_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamMemberResponse"},"title":"Response List Team Members Api B2B Subscriptions  Subscription Id  Team Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/subscriptions/{subscription_id}/team/{member_id}":{"delete":{"tags":["b2b-subscriptions"],"summary":"Remove Team Member","description":"Remove a team member from the subscription.","operationId":"remove_team_member_api_b2b_subscriptions__subscription_id__team__member_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"member_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Member Id"}},{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/telemetry/ingest":{"post":{"tags":["b2b-telemetry"],"summary":"Ingest Telemetry Batch","description":"Ingest anonymous telemetry batch from browser extensions.\n\n**Privacy-First Design:**\n- No PII collected\n- Queries are SHA-256 hashed (irreversible)\n- Only aggregated data exposed\n- GDPR/CCPA compliant\n\n**Idempotency:**\nEvent IDs are tracked to prevent duplicate processing.\n\n**Request Body:**\n- `events`: List of 1-100 anonymous telemetry events\n\n**Example Request:**\n```json\n{\n    \"events\": [\n        {\n            \"event_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n            \"timestamp\": \"2026-01-15T10:30:00Z\",\n            \"ai_source\": \"chatgpt\",\n            \"query_tokens_hash\": \"a\" * 64,\n            \"token_count\": 8,\n            \"query_type\": \"product\",\n            \"language\": \"en\",\n            \"mentions\": [\n                {\n                    \"entity\": \"OpenAI\",\n                    \"entity_type\": \"company\",\n                    \"position_in_results\": 2,\n                    \"sentiment\": \"positive\"\n                }\n            ],\n            \"engaged\": true,\n            \"time_on_results_sec\": 45,\n            \"user_region\": \"US\",\n            \"user_cohort_id\": \"cohort_abc123\",\n            \"extension_version\": \"1.0.0\"\n        }\n    ]\n}\n```\n\n**Response:**\n```json\n{\n    \"status\": \"success\",\n    \"events_processed\": 1,\n    \"events_failed\": 0,\n    \"errors\": []\n}\n```","operationId":"ingest_telemetry_batch_api_b2b_telemetry_ingest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnonymousTelemetryBatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Ingest Telemetry Batch Api B2B Telemetry Ingest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/B2BErrorResponse"}}}},"429":{"description":"Rate Limit Exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/B2BErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/B2BErrorResponse"}}}}}}},"/api/b2b/telemetry/health":{"get":{"tags":["b2b-telemetry"],"summary":"Health Check","description":"Health check endpoint for B2B telemetry service.\n\nReturns:\n    Status indicating service health and Redis stats","operationId":"health_check_api_b2b_telemetry_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/b2b/telemetry/cache":{"delete":{"tags":["b2b-telemetry"],"summary":"Clear Event Cache","description":"Clear the Redis event ID cache.\n\nThis is useful for testing or cache management.\nDeletes all telemetry event keys from Redis.\n\nReturns:\n    Cache statistics","operationId":"clear_event_cache_api_b2b_telemetry_cache_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/b2b/webhooks/stripe":{"post":{"tags":["b2b-webhooks"],"summary":"Handle B2B Stripe Webhook","description":"Handle Stripe webhook events for B2B subscriptions.\n\n**Supported Events:**\n- `customer.subscription.created` - New subscription\n- `customer.subscription.updated` - Status/tier changes\n- `customer.subscription.deleted` - Cancellation\n- `invoice.payment_succeeded` - Successful payment\n- `invoice.payment_failed` - Failed payment\n- `customer.subscription.trial_will_end` - Trial ending notification\n\n**Security:**\nRequires valid Stripe signature verification.\n\n**Returns:**\n- 200: Event processed successfully\n- 400: Invalid signature or payload\n- 500: Internal error","operationId":"handle_b2b_stripe_webhook_api_b2b_webhooks_stripe_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/b2b/webhooks/stripe/health":{"get":{"tags":["b2b-webhooks"],"summary":"Webhook Health","description":"Health check endpoint for B2B Stripe webhooks.\n\nReturns webhook configuration status.","operationId":"webhook_health_api_b2b_webhooks_stripe_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/test/require-free":{"get":{"tags":["test"],"summary":"Require Free Endpoint","description":"Test endpoint that requires 'free' plan (all users).","operationId":"require_free_endpoint_api_v1_test_require_free_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/test/require-pro":{"get":{"tags":["test"],"summary":"Require Pro Endpoint","description":"Test endpoint that requires 'pro' plan.","operationId":"require_pro_endpoint_api_v1_test_require_pro_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/test/require-enterprise":{"get":{"tags":["test"],"summary":"Require Enterprise Endpoint","description":"Test endpoint that requires 'enterprise' plan.","operationId":"require_enterprise_endpoint_api_v1_test_require_enterprise_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"access_token","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint.\n\nReturns service status and dependency health.\nSanitized to prevent information leakage.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AIModelResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"model_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Version"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","name","provider","is_active"],"title":"AIModelResponse","description":"AI Model response schema."},"AISource":{"type":"string","enum":["chatgpt","claude","gemini","perplexity","grok","other"],"title":"AISource","description":"AI platforms tracked by the system."},"AccountUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"plan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"settings":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Settings"}},"type":"object","title":"AccountUpdateRequest","description":"Request model for updating account information."},"ActivityEventItem":{"properties":{"brand":{"type":"string","title":"Brand"},"brand_slug":{"type":"string","title":"Brand Slug"},"brand_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Website"},"brand_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Vertical"},"source":{"type":"string","title":"Source"},"source_subtype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Subtype"},"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["brand","brand_slug","source","title","url"],"title":"ActivityEventItem"},"ActivityFeedResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/ActivityEventItem"},"type":"array","title":"Events"},"total":{"type":"integer","title":"Total"},"days":{"type":"integer","title":"Days"},"distinct_brands":{"type":"integer","title":"Distinct Brands"},"source_counts":{"type":"object","title":"Source Counts"}},"type":"object","required":["events","total","days","distinct_brands","source_counts"],"title":"ActivityFeedResponse"},"AlertCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Alert name"},"alert_type":{"type":"string","pattern":"^(score_drop|rank_change|competitor_surpass|mention_loss|sentiment_change)$","title":"Alert Type","description":"Alert type"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id","description":"Brand ID (null = all brands)"},"is_enabled":{"type":"boolean","title":"Is Enabled","description":"Whether alert is enabled","default":true},"conditions":{"type":"object","title":"Conditions","description":"Alert condition configuration"},"channels":{"items":{"type":"object"},"type":"array","minItems":1,"title":"Channels","description":"Notification channels"},"cooldown_minutes":{"type":"integer","minimum":0.0,"title":"Cooldown Minutes","description":"Cooldown between triggers","default":60},"max_triggers_per_day":{"type":"integer","minimum":1.0,"title":"Max Triggers Per Day","description":"Max triggers per day","default":10}},"type":"object","required":["name","alert_type","conditions","channels"],"title":"AlertCreate","description":"Schema for creating an alert."},"AlertHistoryList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AlertHistoryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"AlertHistoryList","description":"Schema for paginated alert history list."},"AlertHistoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"alert_id":{"type":"string","format":"uuid","title":"Alert Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"triggered_at":{"type":"string","format":"date-time","title":"Triggered At"},"alert_type":{"type":"string","title":"Alert Type"},"trigger_data":{"type":"object","title":"Trigger Data","default":{}},"notifications_sent":{"items":{"type":"object"},"type":"array","title":"Notifications Sent","default":[]},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolved_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resolved By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["id","alert_id","account_id","triggered_at","alert_type","resolved_at","resolved_by","notes"],"title":"AlertHistoryResponse","description":"Schema for alert history response."},"AlertResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Alert name"},"alert_type":{"type":"string","pattern":"^(score_drop|rank_change|competitor_surpass|mention_loss|sentiment_change)$","title":"Alert Type","description":"Alert type"},"brand_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Brand Id","description":"Brand ID (null = all brands)"},"is_enabled":{"type":"boolean","title":"Is Enabled","description":"Whether alert is enabled","default":true},"conditions":{"type":"object","title":"Conditions","description":"Alert condition configuration"},"channels":{"items":{"type":"object"},"type":"array","minItems":1,"title":"Channels","description":"Notification channels"},"cooldown_minutes":{"type":"integer","minimum":0.0,"title":"Cooldown Minutes","description":"Cooldown between triggers","default":60},"max_triggers_per_day":{"type":"integer","minimum":1.0,"title":"Max Triggers Per Day","description":"Max triggers per day","default":10},"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"last_triggered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Triggered At"},"trigger_count_today":{"type":"integer","title":"Trigger Count Today"}},"type":"object","required":["name","alert_type","conditions","channels","id","account_id","created_by","created_at","updated_at","last_triggered_at","trigger_count_today"],"title":"AlertResponse","description":"Schema for alert response."},"AlertTestRequest":{"properties":{"conditions":{"type":"object","title":"Conditions","description":"Conditions to test"},"channels":{"items":{"type":"object"},"type":"array","title":"Channels","description":"Channels to simulate"}},"type":"object","required":["conditions","channels"],"title":"AlertTestRequest","description":"Schema for testing an alert (dry run)."},"AlertTestResponse":{"properties":{"would_trigger":{"type":"boolean","title":"Would Trigger","description":"Whether alert would trigger"},"trigger_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Reason","description":"Why alert would/wouldn't trigger"},"matched_data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Matched Data","description":"Data that matched conditions"},"channel_validation":{"items":{"type":"object"},"type":"array","title":"Channel Validation","description":"Channel validation results"}},"type":"object","required":["would_trigger","channel_validation"],"title":"AlertTestResponse","description":"Schema for alert test response."},"AlertUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"is_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Enabled"},"conditions":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Conditions"},"channels":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Channels"},"cooldown_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Cooldown Minutes"},"max_triggers_per_day":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Triggers Per Day"}},"type":"object","title":"AlertUpdate","description":"Schema for updating an alert."},"AnalyzeContentGapsRequest":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"competitor_brand_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Competitor Brand Ids","description":"Specific competitors to analyze"},"min_gap":{"type":"integer","minimum":1.0,"title":"Min Gap","description":"Minimum frequency gap to report","default":3},"days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Days","description":"Number of days of data to analyze","default":30}},"type":"object","required":["brand_id"],"title":"AnalyzeContentGapsRequest","description":"Request to trigger content gap analysis."},"AnalyzeContentGapsResponse":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"gaps_identified":{"type":"integer","title":"Gaps Identified"},"analysis_started_at":{"type":"string","format":"date-time","title":"Analysis Started At"},"status":{"type":"string","pattern":"^(completed|failed|in_progress)$","title":"Status","default":"completed"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["brand_id","gaps_identified","analysis_started_at"],"title":"AnalyzeContentGapsResponse","description":"Response from content gap analysis."},"AndroidAppInfo":{"properties":{"packageName":{"type":"string","title":"Packagename"},"versionName":{"type":"string","title":"Versionname"},"versionCode":{"type":"integer","title":"Versioncode"},"name":{"type":"string","title":"Name"}},"type":"object","required":["packageName","versionName","versionCode","name"],"title":"AndroidAppInfo","description":"Android SDK application information."},"AndroidAttributionPayload":{"properties":{"source":{"type":"string","title":"Source"},"confidence":{"type":"number","title":"Confidence"},"method":{"type":"string","title":"Method"},"detectedAt":{"type":"string","format":"date-time","title":"Detectedat"}},"type":"object","required":["source","confidence","method","detectedAt"],"title":"AndroidAttributionPayload","description":"Android SDK attribution payload."},"AndroidDeviceInfo":{"properties":{"manufacturer":{"type":"string","title":"Manufacturer"},"model":{"type":"string","title":"Model"},"os":{"type":"string","title":"Os"},"osVersion":{"type":"string","title":"Osversion"},"deviceId":{"type":"string","title":"Deviceid"},"locale":{"type":"string","title":"Locale"},"timezone":{"type":"string","title":"Timezone"},"screenWidth":{"type":"integer","title":"Screenwidth"},"screenHeight":{"type":"integer","title":"Screenheight"},"sdkVersion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sdkversion"}},"type":"object","required":["manufacturer","model","os","osVersion","deviceId","locale","timezone","screenWidth","screenHeight"],"title":"AndroidDeviceInfo","description":"Android SDK device information."},"AndroidEventBatch":{"properties":{"events":{"items":{"$ref":"#/components/schemas/AndroidEventPayload"},"type":"array","maxItems":50,"title":"Events"},"sentAt":{"type":"string","format":"date-time","title":"Sentat"},"sdkVersion":{"type":"string","title":"Sdkversion"}},"type":"object","required":["events","sentAt","sdkVersion"],"title":"AndroidEventBatch","description":"Android SDK event batch."},"AndroidEventPayload":{"properties":{"eventId":{"type":"string","title":"Eventid"},"eventType":{"type":"string","title":"Eventtype"},"eventName":{"type":"string","title":"Eventname"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties","default":{}},"attribution":{"anyOf":[{"$ref":"#/components/schemas/AndroidAttributionPayload"},{"type":"null"}]},"deviceInfo":{"anyOf":[{"$ref":"#/components/schemas/AndroidDeviceInfo"},{"type":"null"}]},"appInfo":{"anyOf":[{"$ref":"#/components/schemas/AndroidAppInfo"},{"type":"null"}]},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"userProperties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Userproperties","default":{}},"sessionId":{"type":"string","title":"Sessionid"}},"type":"object","required":["eventId","eventType","eventName","timestamp","sessionId"],"title":"AndroidEventPayload","description":"Android SDK event payload."},"AnonymousTelemetryBatch":{"properties":{"events":{"items":{"$ref":"#/components/schemas/AnonymousTelemetryEvent"},"type":"array","maxItems":100,"minItems":1,"title":"Events"}},"type":"object","required":["events"],"title":"AnonymousTelemetryBatch","description":"Batch of anonymous telemetry events."},"AnonymousTelemetryEvent":{"properties":{"event_id":{"type":"string","title":"Event Id","description":"UUID for idempotency"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Event timestamp (ISO 8601)"},"ai_source":{"allOf":[{"$ref":"#/components/schemas/AISource"}],"description":"AI platform (ChatGPT, Claude, etc.)"},"query_tokens_hash":{"type":"string","maxLength":64,"minLength":64,"title":"Query Tokens Hash","description":"SHA-256 hash of tokenized query"},"token_count":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Token Count","description":"Query length indicator"},"query_type":{"allOf":[{"$ref":"#/components/schemas/QueryType"}],"description":"Query intent classification"},"language":{"type":"string","maxLength":2,"minLength":2,"title":"Language","description":"ISO 639-1 language code","default":"en"},"mentions":{"items":{"type":"object"},"type":"array","title":"Mentions","description":"Brand mentions in results"},"engaged":{"type":"boolean","title":"Engaged","description":"Did user click/interact?","default":false},"time_on_results_sec":{"type":"integer","maximum":3600.0,"minimum":0.0,"title":"Time On Results Sec","description":"Time viewing results","default":0},"user_region":{"type":"string","maxLength":2,"minLength":2,"title":"User Region","description":"ISO country code"},"user_cohort_id":{"type":"string","title":"User Cohort Id","description":"Stable anonymous cohort ID"},"extension_version":{"type":"string","title":"Extension Version","description":"Extension version (semver)"}},"type":"object","required":["event_id","timestamp","ai_source","query_tokens_hash","token_count","query_type","user_region","user_cohort_id","extension_version"],"title":"AnonymousTelemetryEvent","description":"Anonymous telemetry event from browser extension.\n\nPrivacy-first: No PII, hashed queries, country-level geo only."},"AnswerResponse":{"properties":{"id":{"type":"string","title":"Id"},"query_id":{"type":"string","title":"Query Id"},"query_text":{"type":"string","title":"Query Text"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id","description":"Brand ID"},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name","description":"Brand name"},"model":{"type":"string","title":"Model"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"raw_answer":{"type":"string","title":"Raw Answer"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms"},"judge":{"$ref":"#/components/schemas/JudgeResults"}},"type":"object","required":["id","query_id","query_text","model","timestamp","raw_answer","response_time_ms","judge"],"title":"AnswerResponse","description":"Answer with judge results response schema."},"ApiKeyCreatedResponse":{"properties":{"api_key":{"$ref":"#/components/schemas/app__schemas__account__ApiKeyResponse"},"secret_key":{"type":"string","title":"Secret Key","description":"Full API key - save this! It won't be shown again"}},"type":"object","required":["api_key","secret_key"],"title":"ApiKeyCreatedResponse","description":"Response after creating an API key (includes secret key ONCE)."},"ApiKeyGenerate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name","description":"Optional name for the key"}},"type":"object","title":"ApiKeyGenerate","description":"Schema for generating API key"},"ApiKeyRotateResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"old_key_expires_at":{"type":"string","format":"date-time","title":"Old Key Expires At"},"message":{"type":"string","title":"Message"}},"type":"object","required":["api_key","old_key_expires_at","message"],"title":"ApiKeyRotateResponse","description":"Response when rotating API key"},"ApiSubscriptionCreate":{"properties":{"tier_type":{"$ref":"#/components/schemas/TierType"},"payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Id","description":"Stripe payment method ID for paid tiers"}},"type":"object","required":["tier_type"],"title":"ApiSubscriptionCreate","description":"Schema for creating a new subscription"},"ApiSubscriptionDowngrade":{"properties":{"new_tier_type":{"$ref":"#/components/schemas/TierType"},"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason"}},"type":"object","required":["new_tier_type"],"title":"ApiSubscriptionDowngrade","description":"Schema for downgrading subscription"},"ApiSubscriptionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"tier":{"$ref":"#/components/schemas/ApiTierResponse"},"status":{"$ref":"#/components/schemas/app__schemas__api_tier__SubscriptionStatus"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"current_usage":{"type":"integer","title":"Current Usage"},"usage_percentage":{"type":"number","title":"Usage Percentage","description":"Percentage of monthly limit used"},"billing_cycle_start":{"type":"string","format":"date-time","title":"Billing Cycle Start"},"billing_cycle_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Billing Cycle End"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Only shown once when generated"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","user_id","tier","status","started_at","expires_at","current_usage","usage_percentage","billing_cycle_start","billing_cycle_end","stripe_subscription_id","created_at","updated_at"],"title":"ApiSubscriptionResponse","description":"Schema for subscription response"},"ApiSubscriptionUpgrade":{"properties":{"new_tier_type":{"$ref":"#/components/schemas/TierType"},"payment_method_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method Id","description":"Required for paid upgrades"},"immediate":{"type":"boolean","title":"Immediate","description":"Apply immediately vs at end of billing cycle","default":false}},"type":"object","required":["new_tier_type"],"title":"ApiSubscriptionUpgrade","description":"Schema for upgrading subscription"},"ApiTierListResponse":{"properties":{"tiers":{"items":{"$ref":"#/components/schemas/ApiTierResponse"},"type":"array","title":"Tiers"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["tiers","total"],"title":"ApiTierListResponse","description":"Response for listing API tiers"},"ApiTierResponse":{"properties":{"name":{"type":"string","maxLength":50,"minLength":1,"title":"Name"},"tier_type":{"$ref":"#/components/schemas/TierType"},"monthly_request_limit":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Monthly Request Limit"},"rate_limit_per_minute":{"type":"integer","minimum":1.0,"title":"Rate Limit Per Minute"},"rate_limit_per_hour":{"type":"integer","minimum":1.0,"title":"Rate Limit Per Hour"},"price_monthly":{"type":"number","minimum":0.0,"title":"Price Monthly"},"price_yearly":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Yearly"},"stripe_price_id":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Stripe Price Id"},"features":{"type":"object","title":"Features"},"is_active":{"type":"boolean","title":"Is Active","default":true},"id":{"type":"integer","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["name","tier_type","rate_limit_per_minute","rate_limit_per_hour","price_monthly","id","created_at","updated_at"],"title":"ApiTierResponse","description":"Schema for API tier response"},"AttributionLinkRequest":{"properties":{"session_id":{"type":"string","maxLength":255,"minLength":1,"title":"Session Id","description":"SDK session identifier"},"query_id":{"type":"string","title":"Query Id","description":"Query execution UUID"},"ai_source":{"type":"string","title":"Ai Source","description":"AI platform (chatgpt, gemini, claude, etc.)"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","description":"Attribution confidence (0.0-1.0)"},"attribution_method":{"type":"string","title":"Attribution Method","description":"How attribution was determined","default":"url_parameter"}},"type":"object","required":["session_id","query_id","ai_source","confidence"],"title":"AttributionLinkRequest","description":"Request to link a session to a query execution for attribution."},"AttributionLinkResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"query_id":{"type":"string","title":"Query Id"},"ai_source":{"type":"string","title":"Ai Source"},"confidence":{"type":"number","title":"Confidence"},"attribution_method":{"type":"string","title":"Attribution Method"},"first_seen_at":{"type":"string","format":"date-time","title":"First Seen At"},"last_seen_at":{"type":"string","format":"date-time","title":"Last Seen At"},"created":{"type":"boolean","title":"Created"}},"type":"object","required":["session_id","query_id","ai_source","confidence","attribution_method","first_seen_at","last_seen_at","created"],"title":"AttributionLinkResponse","description":"Response after linking session to query."},"B2BErrorResponse":{"properties":{"error":{"type":"string","title":"Error","description":"Error code"},"message":{"type":"string","title":"Message","description":"Human-readable error message"},"details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Details","description":"Additional error details"}},"type":"object","required":["error","message"],"title":"B2BErrorResponse","description":"Standardized error response."},"BillingHistoryListResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/BillingHistoryResponse"},"type":"array","title":"Invoices"},"total":{"type":"integer","title":"Total"},"total_paid":{"type":"number","title":"Total Paid"},"total_pending":{"type":"number","title":"Total Pending"}},"type":"object","required":["invoices","total","total_paid","total_pending"],"title":"BillingHistoryListResponse","description":"Response for billing history list"},"BillingHistoryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"invoice_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Id"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"billing_date":{"type":"string","format":"date-time","title":"Billing Date"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"total_requests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Requests"},"overage_charges":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overage Charges"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","invoice_id","amount","currency","status","billing_date","paid_at","period_start","period_end","total_requests","overage_charges","description"],"title":"BillingHistoryResponse","description":"Schema for billing history response"},"Body_import_human_ratings_api_v1_calibration_runs__run_id__ratings_import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_human_ratings_api_v1_calibration_runs__run_id__ratings_import_post"},"BrandAIVisibility":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"hasData":{"type":"boolean","title":"Hasdata"},"aiRank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Airank"},"totalBrands":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Totalbrands"},"visibilityScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visibilityscore"},"consensusScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Consensusscore"},"trendDirection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trenddirection"},"platforms":{"items":{"$ref":"#/components/schemas/PlatformScore"},"type":"array","title":"Platforms","default":[]},"sampleQueries":{"items":{"type":"string"},"type":"array","title":"Samplequeries","default":[]},"scoreHistory":{"items":{"$ref":"#/components/schemas/ScoreHistoryPoint"},"type":"array","title":"Scorehistory","default":[]},"updatedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updatedat"}},"type":"object","required":["brand","slug","hasData"],"title":"BrandAIVisibility"},"BrandAnalysisOutput":{"properties":{"suggested_verticals":{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":1,"title":"Suggested Verticals","description":"1-3 most relevant verticals from predefined list"},"competitors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Competitors","description":"Competitors for each vertical, 3-4 per vertical"},"suggested_website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Website Url","description":"Suggested website URL for the brand"},"confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence","description":"Confidence level of analysis"},"reasoning":{"type":"string","title":"Reasoning","description":"Brief explanation of vertical selection"}},"type":"object","required":["suggested_verticals","competitors","confidence","reasoning"],"title":"BrandAnalysisOutput","description":"AI output schema for brand analysis (returned by Claude)."},"BrandAnalysisRequest":{"properties":{"brand_name":{"type":"string","maxLength":255,"minLength":1,"title":"Brand Name","description":"The brand name to analyze"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Optional website URL for better analysis"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional brand description"}},"type":"object","required":["brand_name"],"title":"BrandAnalysisRequest","description":"Request schema for AI brand analysis."},"BrandAnalysisResponse":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"analysis":{"$ref":"#/components/schemas/BrandAnalysisOutput"},"processing_time_ms":{"type":"integer","title":"Processing Time Ms"}},"type":"object","required":["brand_name","website_url","description","analysis","processing_time_ms"],"title":"BrandAnalysisResponse","description":"Response schema for brand analysis endpoint."},"BrandBasic":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"vertical":{"type":"string","title":"Vertical"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["brand","slug","vertical","signal","signal_date"],"title":"BrandBasic"},"BrandComparison":{"properties":{"brands":{"items":{"$ref":"#/components/schemas/BrandDetail"},"type":"array","title":"Brands"}},"type":"object","required":["brands"],"title":"BrandComparison"},"BrandCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases","default":[]},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"BrandCreate","description":"Brand creation request schema."},"BrandDetail":{"properties":{"id":{"type":"string","title":"Id"},"brand":{"type":"string","title":"Brand"},"vertical":{"type":"string","title":"Vertical"},"vertical_canonical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical Canonical"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"slug":{"type":"string","title":"Slug"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"company_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview"},"company_overview_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview Source"},"company_overview_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview Updated At"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"},"faqs":{"anyOf":[{},{"type":"null"}],"title":"Faqs"},"raw_response":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Raw Response"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"parent_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Slug"},"ai_visibility_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Visibility Score"},"ai_trend_direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Trend Direction"}},"type":"object","required":["id","brand","vertical","signal","signal_date","slug"],"title":"BrandDetail"},"BrandLibrarySearchResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"in_watchlist":{"type":"boolean","title":"In Watchlist","default":false}},"type":"object","required":["id","brand","slug","vertical"],"title":"BrandLibrarySearchResult","description":"Search result for adding brands to watchlists."},"BrandListItem":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"vertical":{"type":"string","title":"Vertical"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["brand","slug","vertical"],"title":"BrandListItem","description":"Brand list item for search results and tag pages."},"BrandMetricsResponse":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"vertical_name":{"type":"string","title":"Vertical Name"},"metrics":{"additionalProperties":{"type":"number"},"type":"object","title":"Metrics","description":"Primary metrics (mention_rate, recommendation_strength, etc)"},"model_breakdown":{"items":{"$ref":"#/components/schemas/ModelBreakdownResponse"},"type":"array","title":"Model Breakdown","description":"Per-model metrics"},"competitive_advantages":{"items":{"type":"string"},"type":"array","title":"Competitive Advantages"},"competitive_disadvantages":{"items":{"type":"string"},"type":"array","title":"Competitive Disadvantages"},"primary_competitors":{"items":{"type":"string"},"type":"array","title":"Primary Competitors"},"trend_direction":{"type":"string","title":"Trend Direction"},"trend_change_percent":{"type":"number","title":"Trend Change Percent"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"total_answers_analyzed":{"type":"integer","title":"Total Answers Analyzed"}},"type":"object","required":["brand_id","brand_name","vertical_name","metrics","model_breakdown","competitive_advantages","competitive_disadvantages","primary_competitors","trend_direction","trend_change_percent","period_start","period_end","total_answers_analyzed"],"title":"BrandMetricsResponse","description":"Complete brand metrics response"},"BrandProduct":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_name":{"type":"string","title":"Product Name"},"full_name":{"type":"string","title":"Full Name"},"website":{"type":"string","title":"Website"},"subcategory":{"type":"string","title":"Subcategory"},"tier":{"type":"string","title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"confidence":{"type":"string","title":"Confidence"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"}},"type":"object","required":["id","product_name","full_name","website","subcategory","tier","rank","confidence","signal"],"title":"BrandProduct","description":"A product variant of a parent brand."},"BrandReputationResponse":{"properties":{"brand_name":{"type":"string","title":"Brand Name","description":"Brand name"},"reputation_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Reputation Score","description":"Overall reputation score (0-100)"},"total_mentions":{"type":"integer","minimum":0.0,"title":"Total Mentions","description":"Total brand mentions across all platforms"},"avg_rank":{"type":"number","minimum":0.0,"title":"Avg Rank","description":"Average mention position across platforms"},"explicit_recommendations":{"type":"integer","minimum":0.0,"title":"Explicit Recommendations","description":"Total explicit recommendations"},"click_through_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Click Through Rate","description":"Overall click-through rate"},"platforms":{"additionalProperties":{"$ref":"#/components/schemas/PlatformReputationScore"},"type":"object","title":"Platforms","description":"Per-platform reputation breakdown"},"last_updated":{"type":"string","format":"date-time","title":"Last Updated","description":"When score was last calculated"},"data_period_days":{"type":"integer","title":"Data Period Days","description":"Number of days of data included","default":30}},"type":"object","required":["brand_name","reputation_score","total_mentions","avg_rank","explicit_recommendations","click_through_rate","platforms","last_updated"],"title":"BrandReputationResponse","description":"Schema for brand reputation score response.\n\nAggregates reputation metrics across all AI platforms.","example":{"avg_rank":1.8,"brand_name":"HubSpot","click_through_rate":0.34,"data_period_days":30,"explicit_recommendations":12456,"last_updated":"2025-10-29T10:30:00Z","platforms":{"chatgpt":{"avg_rank":1.5,"click_through_rate":0.36,"explicit_recommendations":6587,"mentions":8234,"score":94},"gemini":{"avg_rank":2.1,"click_through_rate":0.32,"explicit_recommendations":3289,"mentions":4123,"score":91}},"reputation_score":92,"total_mentions":15234}},"BrandResearchRequest":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"suggested_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Vertical"},"requester_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requester Email"},"requester_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requester Notes"}},"type":"object","required":["brand_name"],"title":"BrandResearchRequest","description":"Request body for submitting a brand research request.","example":{"brand_name":"Acme Corporation","requester_email":"user@example.com","requester_notes":"Leading B2B software company","suggested_vertical":"SaaS","website":"https://acme.com"}},"BrandUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"aliases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Aliases"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"BrandUpdate","description":"Brand update request schema."},"BrandUpdateRequest":{"properties":{"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"company_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview"},"company_overview_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview Source"},"faqs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Faqs"}},"type":"object","title":"BrandUpdateRequest"},"BrandVisibilityResponse":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"period":{"additionalProperties":{"type":"string","format":"date"},"type":"object","title":"Period","description":"{'start': date, 'end': date}"},"visibility_score":{"$ref":"#/components/schemas/VisibilityScoreBreakdown"},"trend":{"type":"string","title":"Trend","description":"'growing', 'stable', or 'declining'"},"trend_pct_change":{"type":"number","title":"Trend Pct Change","description":"% change vs previous period"},"by_ai_source":{"additionalProperties":{"type":"object"},"type":"object","title":"By Ai Source"},"industry_benchmark":{"additionalProperties":{"type":"number"},"type":"object","title":"Industry Benchmark","description":"Industry averages"},"daily_breakdown":{"items":{"$ref":"#/components/schemas/DailyVisibilityData"},"type":"array","title":"Daily Breakdown"}},"type":"object","required":["brand_id","brand_name","period","visibility_score","trend","trend_pct_change","by_ai_source","industry_benchmark","daily_breakdown"],"title":"BrandVisibilityResponse","description":"Response for brand visibility metrics."},"CalibrationRunResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"run_name":{"type":"string","title":"Run Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"sample_size":{"type":"integer","title":"Sample Size"},"ratings_completed":{"type":"integer","title":"Ratings Completed"},"kappa_mention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kappa Mention"},"kappa_recommendation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kappa Recommendation"},"kappa_stance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kappa Stance"},"kappa_overall":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Kappa Overall"},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","account_id","run_name","description","status","sample_size","ratings_completed","kappa_mention","kappa_recommendation","kappa_stance","kappa_overall","created_at","completed_at"],"title":"CalibrationRunResponse","description":"Response for calibration run details."},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":8,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password","description":"Must be at least 8 characters with uppercase, lowercase, and number"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest","description":"Request to change user password."},"ChangePasswordResponse":{"properties":{"message":{"type":"string","title":"Message"},"password_changed":{"type":"boolean","title":"Password Changed"}},"type":"object","required":["message","password_changed"],"title":"ChangePasswordResponse","description":"Response after password change."},"CitationInfo":{"properties":{"domain":{"type":"string","title":"Domain","description":"Citation domain (e.g., 'example.com')"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Full URL if available"},"authority_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Authority Score","description":"Domain authority score (0-100)"}},"type":"object","required":["domain"],"title":"CitationInfo","description":"Citation/source information (NEW for AnswerCard expansion)."},"CitationTimelineResponse":{"properties":{"trends":{"items":{"$ref":"#/components/schemas/CitationTrend"},"type":"array","title":"Trends"},"total_citations":{"type":"integer","title":"Total Citations"},"date_range":{"additionalProperties":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"type":"object","title":"Date Range"}},"type":"object","required":["trends","total_citations","date_range"],"title":"CitationTimelineResponse","description":"Timeline of citations over time."},"CitationTrend":{"properties":{"date":{"type":"string","format":"date-time","title":"Date"},"citation_count":{"type":"integer","title":"Citation Count"},"domain_count":{"type":"integer","title":"Domain Count"},"top_domains":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Top Domains"}},"type":"object","required":["date","citation_count","domain_count"],"title":"CitationTrend","description":"Citation trend data point for timeline."},"ClaimCreate":{"properties":{"id":{"type":"string","title":"Id","description":"Claim ID slug"},"statement":{"type":"string","minLength":1,"title":"Statement"},"evidence_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Evidence Url"}},"type":"object","required":["id","statement","evidence_url"],"title":"ClaimCreate","description":"Create claim schema."},"ComparisonCreate":{"properties":{"competitor":{"type":"string","title":"Competitor"},"page":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Page"}},"type":"object","required":["competitor","page"],"title":"ComparisonCreate","description":"Competitor comparison schema."},"CompetitiveBrandScore":{"properties":{"brand":{"type":"string","title":"Brand"},"brand_id":{"type":"string","title":"Brand Id"},"is_user_brand":{"type":"boolean","title":"Is User Brand"},"scores":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Scores","description":"Model scores keyed by model name (chatgpt, gemini, claude, perplexity, grok)","example":{"chatgpt":85,"claude":92,"gemini":78,"grok":73,"perplexity":67}},"avg":{"type":"number","title":"Avg","description":"Average score across all models"}},"type":"object","required":["brand","brand_id","is_user_brand","scores","avg"],"title":"CompetitiveBrandScore","description":"Single brand's competitive scores across models.\n\nUpdated to match frontend expectations with nested scores object."},"CompetitiveInsightResponse":{"properties":{"competitor_name":{"type":"string","title":"Competitor Name"},"comparison_frequency":{"type":"number","title":"Comparison Frequency"},"relative_position":{"type":"string","title":"Relative Position"},"key_advantages":{"items":{"type":"string"},"type":"array","title":"Key Advantages"},"key_disadvantages":{"items":{"type":"string"},"type":"array","title":"Key Disadvantages"}},"type":"object","required":["competitor_name","comparison_frequency","relative_position","key_advantages","key_disadvantages"],"title":"CompetitiveInsightResponse","description":"Competitive comparison insight"},"CompetitorCreate":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases","default":[]},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority","default":"medium"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["brand_id","name"],"title":"CompetitorCreate","description":"Competitor creation request schema."},"CompetitorResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"name":{"type":"string","title":"Name"},"aliases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Aliases"},"priority":{"type":"string","title":"Priority"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","account_id","brand_id","name","priority","is_active","created_at","updated_at"],"title":"CompetitorResponse","description":"Competitor response schema."},"CompetitorSuggestionsResponse":{"properties":{"vertical":{"type":"string","title":"Vertical"},"count":{"type":"integer","title":"Count"},"total_brands":{"type":"integer","title":"Total Brands"},"suggestions":{"items":{"$ref":"#/components/schemas/GroupedBrandSuggestion"},"type":"array","title":"Suggestions"}},"type":"object","required":["vertical","count","total_brands","suggestions"],"title":"CompetitorSuggestionsResponse","description":"Response model for competitor suggestions endpoint."},"CompetitorUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"aliases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Aliases"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CompetitorUpdate","description":"Competitor update request schema."},"ContentGapExamplesResponse":{"properties":{"gap_phrase":{"type":"string","title":"Gap Phrase"},"competitor_examples":{"items":{"type":"object"},"type":"array","title":"Competitor Examples"},"total_examples":{"type":"integer","title":"Total Examples"}},"type":"object","required":["gap_phrase","competitor_examples","total_examples"],"title":"ContentGapExamplesResponse","description":"Examples of competitor mentions for a specific gap."},"ContentGapListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ContentGapResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"ContentGapListResponse","description":"Paginated list of content gaps."},"ContentGapResponse":{"properties":{"gap_phrase":{"type":"string","maxLength":500,"title":"Gap Phrase","description":"The phrase/term representing the gap"},"phrase_type":{"type":"string","pattern":"^(keyword|feature|benefit|technical)$","title":"Phrase Type","default":"keyword"},"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"competitor_frequency":{"type":"integer","title":"Competitor Frequency"},"user_frequency":{"type":"integer","title":"User Frequency"},"frequency_gap":{"type":"integer","title":"Frequency Gap"},"relevance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Relevance Score"},"opportunity_score":{"type":"number","minimum":0.0,"title":"Opportunity Score"},"competitor_examples":{"items":{"type":"object"},"type":"array","title":"Competitor Examples"},"gap_metadata":{"type":"object","title":"Gap Metadata"},"analyzed_at":{"type":"string","format":"date-time","title":"Analyzed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["gap_phrase","id","account_id","brand_id","competitor_frequency","user_frequency","frequency_gap","relevance_score","opportunity_score","analyzed_at","created_at"],"title":"ContentGapResponse","description":"Schema for content gap response."},"ContentGapSummary":{"properties":{"total_gaps":{"type":"integer","title":"Total Gaps"},"high_opportunity_gaps":{"type":"integer","title":"High Opportunity Gaps"},"by_phrase_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Phrase Type"},"top_gap":{"anyOf":[{"$ref":"#/components/schemas/ContentGapResponse"},{"type":"null"}]},"avg_opportunity_score":{"type":"number","title":"Avg Opportunity Score"}},"type":"object","required":["total_gaps","high_opportunity_gaps","avg_opportunity_score"],"title":"ContentGapSummary","description":"Summary statistics for content gaps."},"ConversationCreate":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"ai_model_id":{"type":"string","format":"uuid","title":"Ai Model Id"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Optional title for the conversation"},"initial_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Query","description":"Optional initial query to start the conversation"}},"type":"object","required":["brand_id","ai_model_id"],"title":"ConversationCreate","description":"Schema for creating a new conversation."},"ConversationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConversationResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"ConversationListResponse","description":"Paginated list of conversations."},"ConversationMetrics":{"properties":{"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"total_turns":{"type":"integer","title":"Total Turns"},"mention_count":{"type":"integer","title":"Mention Count"},"mention_persistence_rate":{"type":"number","title":"Mention Persistence Rate"},"initial_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Rank"},"final_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Final Rank"},"rank_improvement":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank Improvement"},"average_rank":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Rank"},"initial_recommendation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Initial Recommendation"},"final_recommendation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Final Recommendation"},"recommendation_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Change"},"average_recommendation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Recommendation"},"initial_sentiment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Sentiment"},"final_sentiment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Sentiment"},"sentiment_improved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sentiment Improved"}},"type":"object","required":["conversation_id","total_turns","mention_count","mention_persistence_rate"],"title":"ConversationMetrics","description":"Metrics calculated for a conversation."},"ConversationResponse":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"ai_model_id":{"type":"string","format":"uuid","title":"Ai Model Id"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Optional title for the conversation"},"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"status":{"type":"string","title":"Status"},"total_turns":{"type":"integer","title":"Total Turns"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"last_turn_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Turn At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"conversation_metadata":{"type":"object","title":"Conversation Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["brand_id","ai_model_id","id","account_id","status","total_turns","started_at","created_at","updated_at"],"title":"ConversationResponse","description":"Schema for conversation response."},"ConversationTurnCreate":{"properties":{"query_text":{"type":"string","title":"Query Text","description":"The query text for this turn"}},"type":"object","required":["query_text"],"title":"ConversationTurnCreate","description":"Schema for creating a new conversation turn."},"ConversationTurnResponse":{"properties":{"query_text":{"type":"string","title":"Query Text","description":"The query text for this turn"},"id":{"type":"string","format":"uuid","title":"Id"},"conversation_id":{"type":"string","format":"uuid","title":"Conversation Id"},"turn_number":{"type":"integer","title":"Turn Number"},"query_execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Query Execution Id"},"mentioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mentioned"},"explicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Explicit Rank"},"implicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Implicit Rank"},"recommendation_strength":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Strength"},"sentiment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sentiment"},"sentiment_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment Score"},"raw_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Answer"},"turn_metadata":{"type":"object","title":"Turn Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["query_text","id","conversation_id","turn_number","created_at"],"title":"ConversationTurnResponse","description":"Schema for conversation turn response."},"ConversationUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"status":{"anyOf":[{"type":"string","pattern":"^(active|completed|abandoned)$"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ConversationUpdate","description":"Schema for updating a conversation."},"ConversationWithTurns":{"properties":{"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"ai_model_id":{"type":"string","format":"uuid","title":"Ai Model Id"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title","description":"Optional title for the conversation"},"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"status":{"type":"string","title":"Status"},"total_turns":{"type":"integer","title":"Total Turns"},"created_by":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Created By"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"last_turn_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Turn At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"conversation_metadata":{"type":"object","title":"Conversation Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"turns":{"items":{"$ref":"#/components/schemas/ConversationTurnResponse"},"type":"array","title":"Turns"}},"type":"object","required":["brand_id","ai_model_id","id","account_id","status","total_turns","started_at","created_at","updated_at"],"title":"ConversationWithTurns","description":"Schema for conversation with all turns included."},"ConversionRecordRequest":{"properties":{"session_id":{"type":"string","maxLength":255,"minLength":1,"title":"Session Id","description":"SDK session identifier"},"value":{"type":"number","minimum":0.0,"title":"Value","description":"Conversion value (e.g., 499.00)"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"ISO currency code","default":"USD"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional conversion details"}},"type":"object","required":["session_id","value"],"title":"ConversionRecordRequest","description":"Request to record a conversion for an attributed session."},"ConversionRecordResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"converted":{"type":"boolean","title":"Converted"},"conversion_value":{"type":"number","title":"Conversion Value"},"currency":{"type":"string","title":"Currency"},"conversion_at":{"type":"string","format":"date-time","title":"Conversion At"},"query_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Id"},"ai_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Source"},"conversion_metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Conversion Metadata"}},"type":"object","required":["session_id","converted","conversion_value","currency","conversion_at","query_id","ai_source","conversion_metadata"],"title":"ConversionRecordResponse","description":"Response after recording a conversion."},"CrawlTaskResponse":{"properties":{"status":{"type":"string","title":"Status","description":"crawling, complete, failed"},"task_id":{"type":"string","title":"Task Id"},"estimated_time_seconds":{"type":"integer","title":"Estimated Time Seconds","default":120},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"pages_to_crawl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pages To Crawl"}},"type":"object","required":["status","task_id"],"title":"CrawlTaskResponse","description":"Response for async website crawling task."},"CrawlWebsiteRequest":{"properties":{"max_pages":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Max Pages","description":"Maximum number of pages to crawl (1-200)","default":50}},"type":"object","title":"CrawlWebsiteRequest","description":"Request to crawl a brand's website."},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Friendly name for the API key"},"scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scopes","description":"Comma-separated scopes (optional)"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"Expiration date (optional)"}},"type":"object","required":["name"],"title":"CreateApiKeyRequest","description":"Request to create a new API key."},"CreateCalibrationRunRequest":{"properties":{"run_name":{"type":"string","maxLength":200,"minLength":1,"title":"Run Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"sample_executions":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Sample Executions"}},"type":"object","required":["run_name"],"title":"CreateCalibrationRunRequest","description":"Request to create a new calibration run."},"DailyUsageResponse":{"properties":{"date":{"type":"string","title":"Date"},"request_count":{"type":"integer","title":"Request Count"},"unique_endpoints":{"type":"integer","title":"Unique Endpoints"},"average_response_time_ms":{"type":"number","title":"Average Response Time Ms"},"error_count":{"type":"integer","title":"Error Count"},"bandwidth_mb":{"type":"number","title":"Bandwidth Mb"}},"type":"object","required":["date","request_count","unique_endpoints","average_response_time_ms","error_count","bandwidth_mb"],"title":"DailyUsageResponse","description":"Schema for daily usage breakdown"},"DailyVisibilityData":{"properties":{"date":{"type":"string","format":"date","title":"Date"},"mentions":{"type":"integer","minimum":0.0,"title":"Mentions"},"impressions":{"type":"integer","minimum":0.0,"title":"Impressions"},"avg_position":{"type":"number","minimum":0.0,"title":"Avg Position"},"engagement_rate":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Engagement Rate"}},"type":"object","required":["date","mentions","impressions","avg_position","engagement_rate"],"title":"DailyVisibilityData","description":"Daily visibility metrics."},"DeleteAccountRequest":{"properties":{"password":{"type":"string","title":"Password","description":"Current password for verification"},"confirmation":{"type":"string","pattern":"^DELETE$","title":"Confirmation","description":"Must be exactly 'DELETE'"}},"type":"object","required":["password","confirmation"],"title":"DeleteAccountRequest","description":"Request to delete account."},"DeleteAccountResponse":{"properties":{"message":{"type":"string","title":"Message"},"deleted":{"type":"boolean","title":"Deleted"},"deleted_at":{"type":"string","format":"date-time","title":"Deleted At"}},"type":"object","required":["message","deleted","deleted_at"],"title":"DeleteAccountResponse","description":"Response after account deletion."},"DemoRequestCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"full_name":{"type":"string","minLength":1,"title":"Full Name","description":"Full name is required"},"company":{"type":"string","minLength":1,"title":"Company","description":"Company name is required"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size","description":"Company size: '1-10', '11-50', '51-200', '201-1000', '1000+'"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case","description":"What they want to use the platform for"},"urgency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Urgency","description":"Urgency: 'asap', 'this_month', 'this_quarter', 'exploring'"},"preferred_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Time","description":"Preferred time for demo"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Source page (e.g., 'landing_page', 'pricing_page')"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["email","full_name","company"],"title":"DemoRequestCreate","description":"Schema for creating a demo request."},"DemoRequestResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"type":"string","title":"Full Name"},"company":{"type":"string","title":"Company"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"urgency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Urgency"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled At"}},"type":"object","required":["id","email","full_name","company","job_title","phone","company_size","use_case","urgency","status","created_at","scheduled_at"],"title":"DemoRequestResponse","description":"Schema for demo request response."},"DomainListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DomainStats"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"DomainListResponse","description":"Paginated list of domains."},"DomainStats":{"properties":{"domain":{"type":"string","title":"Domain"},"citation_count":{"type":"integer","title":"Citation Count"},"first_seen":{"type":"string","format":"date-time","title":"First Seen"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"},"urls":{"items":{"type":"string"},"type":"array","title":"Urls","description":"Sample URLs from this domain"},"brand_count":{"type":"integer","title":"Brand Count","description":"Number of unique brands citing this domain","default":0},"avg_position":{"type":"number","title":"Avg Position","description":"Average position in answers","default":0.0}},"type":"object","required":["domain","citation_count","first_seen","last_seen"],"title":"DomainStats","description":"Statistics for a single domain."},"DowngradeResponse":{"properties":{"tier":{"$ref":"#/components/schemas/ApiTierResponse"},"downgrade_effective_at":{"type":"string","format":"date-time","title":"Downgrade Effective At"},"message":{"type":"string","title":"Message"}},"type":"object","required":["tier","downgrade_effective_at","message"],"title":"DowngradeResponse","description":"Response for tier downgrade"},"EndpointUsageResponse":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"method":{"type":"string","title":"Method"},"request_count":{"type":"integer","title":"Request Count"},"average_response_time_ms":{"type":"number","title":"Average Response Time Ms"},"error_count":{"type":"integer","title":"Error Count"},"error_rate":{"type":"number","title":"Error Rate"},"bandwidth_mb":{"type":"number","title":"Bandwidth Mb"}},"type":"object","required":["endpoint","method","request_count","average_response_time_ms","error_count","error_rate","bandwidth_mb"],"title":"EndpointUsageResponse","description":"Schema for endpoint usage breakdown"},"ExecutionResponse":{"properties":{"id":{"type":"string","title":"Id"},"query_id":{"type":"string","title":"Query Id"},"query_text":{"type":"string","title":"Query Text"},"ai_model_id":{"type":"string","title":"Ai Model Id"},"model_name":{"type":"string","title":"Model Name"},"status":{"type":"string","title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"raw_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Answer"},"execution_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Execution Time Ms"},"tokens_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tokens Used"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"judge_mention":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Judge Mention"},"judge_recommendation":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Judge Recommendation"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","query_id","query_text","ai_model_id","model_name","status","created_at"],"title":"ExecutionResponse","description":"Full execution response with answer and judge results."},"ExecutionStatus":{"properties":{"id":{"type":"string","title":"Id"},"query_id":{"type":"string","title":"Query Id"},"ai_model_id":{"type":"string","title":"Ai Model Id"},"status":{"type":"string","title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["id","query_id","ai_model_id","status"],"title":"ExecutionStatus","description":"Execution status response schema."},"ExecutionTrigger":{"properties":{"query_id":{"type":"string","title":"Query Id"},"ai_model_id":{"type":"string","title":"Ai Model Id"}},"type":"object","required":["query_id","ai_model_id"],"title":"ExecutionTrigger","description":"Execution trigger request schema."},"ExtensionEventBatchRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/ExtensionEventCreate"},"type":"array","maxItems":50,"minItems":1,"title":"Events","description":"Array of extension events (max 50 per request)"}},"type":"object","required":["events"],"title":"ExtensionEventBatchRequest","description":"Schema for batch event tracking request.\n\nAccepts up to 50 events per request for efficient bulk processing.","example":{"events":[{"ai_platform":"chatgpt","brand_category":"crm","brand_name":"HubSpot","clicked_through":false,"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"brand_viewed","extension_version":"1.0.0","mention_rank":1,"recommendation_strength":"explicit","reputation_score_viewed":true,"session_id":"session_xyz789","time_viewed_seconds":12,"timestamp":"2025-10-29T10:30:00Z","user_id":"anon_abc123","user_query":"best crm for small business"}]}},"ExtensionEventBatchResponse":{"properties":{"status":{"type":"string","enum":["success","partial_success","error"],"title":"Status"},"events_received":{"type":"integer","title":"Events Received","description":"Number of events in request"},"events_processed":{"type":"integer","title":"Events Processed","description":"Number of events successfully processed"},"events_failed":{"type":"integer","title":"Events Failed","description":"Number of events that failed processing"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors","description":"Error messages for failed events"}},"type":"object","required":["status","events_received","events_processed","events_failed"],"title":"ExtensionEventBatchResponse","description":"Schema for batch event tracking response.","example":{"events_failed":0,"events_processed":2,"events_received":2,"status":"success"}},"ExtensionEventCreate":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id","description":"Unique event ID from extension (for idempotency)"},"user_id":{"type":"string","maxLength":255,"minLength":1,"title":"User Id","description":"Anonymized extension user ID"},"session_id":{"type":"string","maxLength":255,"minLength":1,"title":"Session Id","description":"Session ID grouping related events"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Event timestamp (ISO 8601)"},"event_type":{"type":"string","enum":["brand_viewed","brand_clicked","reputation_checked"],"title":"Event Type","description":"Type of user interaction","default":"brand_viewed"},"ai_platform":{"type":"string","enum":["chatgpt","gemini","claude","perplexity"],"title":"Ai Platform","description":"AI platform where brand was mentioned"},"user_query":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"User Query","description":"User's original query (anonymized)"},"brand_name":{"type":"string","maxLength":255,"minLength":1,"title":"Brand Name","description":"Name of mentioned brand"},"brand_category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Brand Category","description":"Brand category (e.g., 'crm', 'ecommerce')"},"mention_rank":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Mention Rank","description":"Position in AI response (1st, 2nd, 3rd...)"},"recommendation_strength":{"anyOf":[{"type":"string","enum":["explicit","implicit","neutral","negative"]},{"type":"null"}],"title":"Recommendation Strength","description":"Strength of AI recommendation"},"clicked_through":{"type":"boolean","title":"Clicked Through","description":"Whether user clicked through to brand","default":false},"reputation_score_viewed":{"type":"boolean","title":"Reputation Score Viewed","description":"Whether user viewed reputation badge","default":false},"time_viewed_seconds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Time Viewed Seconds","description":"Time spent viewing brand mention"},"extension_version":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Extension Version","description":"Extension version (e.g., '1.0.0')"},"user_agent":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"User Agent","description":"Browser user agent"}},"type":"object","required":["event_id","user_id","session_id","timestamp","ai_platform","brand_name"],"title":"ExtensionEventCreate","description":"Schema for a single extension event.\n\nSent by browser extension to track brand mentions in AI responses.","example":{"ai_platform":"chatgpt","brand_category":"crm","brand_name":"HubSpot","clicked_through":false,"event_id":"550e8400-e29b-41d4-a716-446655440000","event_type":"brand_viewed","extension_version":"1.0.0","mention_rank":1,"recommendation_strength":"explicit","reputation_score_viewed":true,"session_id":"session_xyz789","time_viewed_seconds":12,"timestamp":"2025-10-29T10:30:00Z","user_agent":"Mozilla/5.0...","user_id":"anon_abc123","user_query":"best crm for small business"}},"ExtractCitationsRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"Text to extract citations from"},"context_length":{"type":"integer","maximum":500.0,"minimum":50.0,"title":"Context Length","description":"Context snippet length","default":100}},"type":"object","required":["text"],"title":"ExtractCitationsRequest","description":"Request to extract citations from text."},"ExtractCitationsResponse":{"properties":{"citations":{"items":{"type":"object"},"type":"array","title":"Citations"},"total_count":{"type":"integer","title":"Total Count"},"unique_domains":{"type":"integer","title":"Unique Domains"},"top_domains":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Top Domains"}},"type":"object","required":["citations","total_count","unique_domains"],"title":"ExtractCitationsResponse","description":"Response with extracted citations."},"FAQCreate":{"properties":{"q":{"type":"string","title":"Q"},"a":{"type":"string","title":"A"}},"type":"object","required":["q","a"],"title":"FAQCreate","description":"FAQ schema."},"FactCardCreate":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"$ref":"#/components/schemas/ClaimCreate"},"type":"array","title":"Claims"},"integrations":{"items":{"$ref":"#/components/schemas/IntegrationCreate"},"type":"array","title":"Integrations"},"comparisons":{"items":{"$ref":"#/components/schemas/ComparisonCreate"},"type":"array","title":"Comparisons"},"faqs":{"items":{"$ref":"#/components/schemas/FAQCreate"},"type":"array","title":"Faqs"}},"type":"object","required":["brand"],"title":"FactCardCreate","description":"Create/update fact card."},"FactCardResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"fact_card_json":{"type":"object","title":"Fact Card Json"},"validation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Validation Status"},"last_validated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Validated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","brand_id","fact_card_json","validation_status","last_validated_at","created_at","updated_at"],"title":"FactCardResponse","description":"Fact card response."},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest","description":"Forgot password request schema."},"GenerationTaskResponse":{"properties":{"status":{"type":"string","title":"Status","description":"generating, complete, failed"},"task_id":{"type":"string","title":"Task Id"},"estimated_time_seconds":{"type":"integer","title":"Estimated Time Seconds","default":60},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["status","task_id"],"title":"GenerationTaskResponse","description":"Response for async recommendation generation task."},"GroupedBrandSuggestion":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand":{"type":"string","title":"Brand"},"website":{"type":"string","title":"Website"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"type":"string","title":"Subcategory"},"tier":{"type":"string","title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"confidence":{"type":"string","title":"Confidence"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"is_parent":{"type":"boolean","title":"Is Parent","default":false},"products":{"items":{"$ref":"#/components/schemas/BrandProduct"},"type":"array","title":"Products","default":[]}},"type":"object","required":["id","brand","website","vertical","subcategory","tier","rank","confidence","signal"],"title":"GroupedBrandSuggestion","description":"Brand with optional child products grouped together."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HumanRatingResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"calibration_run_id":{"type":"string","format":"uuid","title":"Calibration Run Id"},"query_execution_id":{"type":"string","format":"uuid","title":"Query Execution Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"rater_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rater Id"},"rater_email":{"type":"string","title":"Rater Email"},"mentioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mentioned"},"recommendation_strength":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Strength"},"stance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stance"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","calibration_run_id","query_execution_id","brand_id","rater_id","rater_email","mentioned","recommendation_strength","stance","confidence","created_at"],"title":"HumanRatingResponse","description":"Response for human rating details."},"ImportRatingsResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"imported_count":{"type":"integer","title":"Imported Count"},"error_count":{"type":"integer","title":"Error Count"},"errors":{"items":{"type":"object"},"type":"array","title":"Errors"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["success","imported_count","error_count"],"title":"ImportRatingsResponse","description":"Response for ratings import operation."},"InsightsResponse":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"positive_themes":{"items":{"$ref":"#/components/schemas/ThemeResponse"},"type":"array","title":"Positive Themes"},"negative_themes":{"items":{"$ref":"#/components/schemas/ThemeResponse"},"type":"array","title":"Negative Themes"},"neutral_themes":{"items":{"$ref":"#/components/schemas/ThemeResponse"},"type":"array","title":"Neutral Themes"},"competitive_insights":{"items":{"$ref":"#/components/schemas/CompetitiveInsightResponse"},"type":"array","title":"Competitive Insights"},"key_talking_points":{"items":{"type":"string"},"type":"array","title":"Key Talking Points"},"top_concerns":{"items":{"type":"string"},"type":"array","title":"Top Concerns"}},"type":"object","required":["brand_name","positive_themes","negative_themes","neutral_themes","competitive_insights","key_talking_points","top_concerns"],"title":"InsightsResponse","description":"Complete insights and themes response"},"IntegrationCreate":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["name","url"],"title":"IntegrationCreate","description":"Integration schema."},"IntentCreate":{"properties":{"id":{"type":"string","maxLength":255,"minLength":1,"title":"Id"},"cluster":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Cluster"},"vertical":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Vertical"},"template":{"type":"string","minLength":1,"title":"Template"},"variables":{"type":"object","title":"Variables"},"judge_guidelines":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Judge Guidelines"}},"type":"object","required":["id","template"],"title":"IntentCreate","description":"Create intent schema."},"IntentResponse":{"properties":{"id":{"type":"string","title":"Id"},"cluster":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cluster"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"},"template":{"type":"string","title":"Template"},"variables":{"type":"object","title":"Variables"},"judge_guidelines":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Judge Guidelines"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","cluster","vertical","template","variables","judge_guidelines","created_at","updated_at"],"title":"IntentResponse","description":"Intent response schema."},"IntentUpdate":{"properties":{"cluster":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Cluster"},"vertical":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Vertical"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"variables":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Variables"},"judge_guidelines":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Judge Guidelines"}},"type":"object","title":"IntentUpdate","description":"Update intent schema."},"JobListingItem":{"properties":{"brand":{"type":"string","title":"Brand"},"brand_slug":{"type":"string","title":"Brand Slug"},"brand_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Website"},"brand_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Vertical"},"title":{"type":"string","title":"Title"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"is_remote":{"type":"boolean","title":"Is Remote","default":false},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"employment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employment Type"},"url":{"type":"string","title":"Url"},"source":{"type":"string","title":"Source"},"posted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted At"}},"type":"object","required":["brand","brand_slug","title","url","source"],"title":"JobListingItem"},"JobsFeedResponse":{"properties":{"jobs":{"items":{"$ref":"#/components/schemas/JobListingItem"},"type":"array","title":"Jobs"},"total":{"type":"integer","title":"Total"},"days":{"type":"integer","title":"Days"},"distinct_brands":{"type":"integer","title":"Distinct Brands"}},"type":"object","required":["jobs","total","days","distinct_brands"],"title":"JobsFeedResponse"},"JudgeMentionResult":{"properties":{"mentioned":{"type":"boolean","title":"Mentioned"},"implicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Implicit Rank"},"explicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Explicit Rank"},"confidence":{"type":"number","title":"Confidence"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning"}},"type":"object","required":["mentioned","implicit_rank","explicit_rank","confidence","reasoning"],"title":"JudgeMentionResult","description":"Judge mention result schema."},"JudgeRecommendationResult":{"properties":{"recommendation_strength":{"type":"number","title":"Recommendation Strength"},"recommendation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation Type"},"confidence":{"type":"number","title":"Confidence"},"evidence":{"items":{"type":"string"},"type":"array","title":"Evidence"}},"type":"object","required":["recommendation_strength","recommendation_type","confidence","evidence"],"title":"JudgeRecommendationResult","description":"Judge recommendation result schema."},"JudgeResults":{"properties":{"mention":{"anyOf":[{"$ref":"#/components/schemas/JudgeMentionResult"},{"type":"null"}]},"recommendation":{"anyOf":[{"$ref":"#/components/schemas/JudgeRecommendationResult"},{"type":"null"}]},"stance":{"anyOf":[{"$ref":"#/components/schemas/JudgeStanceResult"},{"type":"null"}],"description":"Stance analysis (NEW)"},"citations":{"items":{"$ref":"#/components/schemas/CitationInfo"},"type":"array","title":"Citations","description":"Citations extracted (NEW)"}},"type":"object","required":["mention","recommendation"],"title":"JudgeResults","description":"Combined judge results schema."},"JudgeStanceResult":{"properties":{"stance":{"type":"string","title":"Stance","description":"Stance: positive, neutral, negative, mixed"},"confidence":{"type":"number","title":"Confidence","description":"Confidence in stance classification (0-1)"},"sentiment_score":{"type":"number","title":"Sentiment Score","description":"Sentiment score (-1 to 1)"},"positive_aspects":{"items":{"type":"string"},"type":"array","title":"Positive Aspects","description":"Positive aspects mentioned"},"negative_aspects":{"items":{"type":"string"},"type":"array","title":"Negative Aspects","description":"Negative aspects mentioned"},"risk_flags":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Risk Flags","description":"Risk indicators","example":{"factual_error":false,"outdated_info":false,"possible_hallucination":false}}},"type":"object","required":["stance","confidence","sentiment_score"],"title":"JudgeStanceResult","description":"Judge stance/sentiment result schema (NEW for AnswerCard expansion)."},"KappaTrendResponse":{"properties":{"date":{"type":"string","title":"Date"},"kappa":{"type":"number","title":"Kappa"},"run_name":{"type":"string","title":"Run Name"},"sample_size":{"type":"integer","title":"Sample Size"},"agreements":{"type":"integer","title":"Agreements"},"disagreements":{"type":"integer","title":"Disagreements"}},"type":"object","required":["date","kappa","run_name","sample_size","agreements","disagreements"],"title":"KappaTrendResponse","description":"Response for Kappa trend data point."},"LeadCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Source of the lead (e.g., 'landing_page', 'hero_cta', 'footer_cta')"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["email"],"title":"LeadCreate","description":"Schema for creating a new lead."},"LeadResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","full_name","company","source","status","created_at"],"title":"LeadResponse","description":"Schema for lead response."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest","description":"Login request body."},"ModelBreakdownResponse":{"properties":{"model_name":{"type":"string","title":"Model Name"},"mention_rate":{"type":"number","title":"Mention Rate"},"recommendation_strength":{"type":"number","title":"Recommendation Strength"},"average_position":{"type":"number","title":"Average Position"},"sentiment_score":{"type":"number","title":"Sentiment Score"},"total_mentions":{"type":"integer","title":"Total Mentions"}},"type":"object","required":["model_name","mention_rate","recommendation_strength","average_position","sentiment_score","total_mentions"],"title":"ModelBreakdownResponse","description":"Per-model metric breakdown"},"NewsletterSubscribeRequest":{"properties":{"email":{"type":"string","title":"Email"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","default":"trending_page"}},"type":"object","required":["email"],"title":"NewsletterSubscribeRequest"},"PaginatedResponse":{"properties":{"items":{"items":{},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse","description":"Generic paginated response model."},"PaginatedResponse_AIModelResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AIModelResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[AIModelResponse]"},"PaginatedResponse_AnswerResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AnswerResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[AnswerResponse]"},"PaginatedResponse_BrandResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/app__schemas__brand__BrandResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[BrandResponse]"},"PaginatedResponse_ExecutionResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ExecutionResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[ExecutionResponse]"},"PaginatedResponse_QueryCategoryResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/QueryCategoryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[QueryCategoryResponse]"},"PaginatedResponse_QueryResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/QueryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[QueryResponse]"},"PaginatedResponse_RunConfigResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunConfigResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[RunConfigResponse]"},"PaginatedResponse_RunExecutionListResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunExecutionListResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","per_page","pages"],"title":"PaginatedResponse[RunExecutionListResponse]"},"PeriodEnum":{"type":"string","enum":["7days","30days","90days"],"title":"PeriodEnum","description":"Time period options for analytics queries.\n\nStandardized across all endpoints to ensure consistent date range calculations."},"PersistenceAnalytics":{"properties":{"total_conversations":{"type":"integer","title":"Total Conversations"},"average_turns_per_conversation":{"type":"number","title":"Average Turns Per Conversation"},"average_mention_persistence_rate":{"type":"number","title":"Average Mention Persistence Rate"},"by_model":{"additionalProperties":{"type":"object"},"type":"object","title":"By Model","description":"Statistics grouped by AI model"},"by_brand":{"additionalProperties":{"type":"object"},"type":"object","title":"By Brand","description":"Statistics grouped by brand"}},"type":"object","required":["total_conversations","average_turns_per_conversation","average_mention_persistence_rate"],"title":"PersistenceAnalytics","description":"Analytics for conversation persistence across an account."},"PlatformReputationScore":{"properties":{"score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Score","description":"Reputation score (0-100)"},"mentions":{"type":"integer","minimum":0.0,"title":"Mentions","description":"Total mentions on this platform"},"avg_rank":{"type":"number","minimum":0.0,"title":"Avg Rank","description":"Average mention position"},"explicit_recommendations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Explicit Recommendations","description":"Count of explicit recommendations"},"click_through_rate":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Click Through Rate","description":"Click-through rate (0.0-1.0)"}},"type":"object","required":["score","mentions","avg_rank"],"title":"PlatformReputationScore","description":"Reputation metrics for a single AI platform.","example":{"avg_rank":1.5,"click_through_rate":0.36,"explicit_recommendations":6587,"mentions":8234,"score":94}},"PlatformScore":{"properties":{"name":{"type":"string","title":"Name"},"score":{"type":"integer","title":"Score"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excerpt"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["name","score"],"title":"PlatformScore"},"PlaybookGenerateRequest":{"properties":{"trigger_type":{"type":"string","title":"Trigger Type"},"brand":{"type":"string","title":"Brand"},"answer_text":{"type":"string","title":"Answer Text"},"context":{"type":"object","title":"Context"}},"type":"object","required":["trigger_type","brand","answer_text"],"title":"PlaybookGenerateRequest","description":"Generate playbook request."},"PlaybookInstanceCreate":{"properties":{"playbook_id":{"type":"string","format":"uuid","title":"Playbook Id"},"run_id":{"type":"string","format":"uuid","title":"Run Id"},"intent_id":{"type":"string","title":"Intent Id"},"status":{"type":"string","title":"Status","default":"recommended"}},"type":"object","required":["playbook_id","run_id","intent_id"],"title":"PlaybookInstanceCreate","description":"Create playbook instance."},"PlaybookInstanceResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"playbook_id":{"type":"string","format":"uuid","title":"Playbook Id"},"run_id":{"type":"string","format":"uuid","title":"Run Id"},"intent_id":{"type":"string","title":"Intent Id"},"status":{"type":"string","title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","playbook_id","run_id","intent_id","status","notes","completed_at","created_at"],"title":"PlaybookInstanceResponse","description":"Playbook instance response."},"PlaybookInstanceUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"PlaybookInstanceUpdate","description":"Update playbook instance."},"PlaybookResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"trigger_type":{"type":"string","title":"Trigger Type"},"content":{"type":"string","title":"Content"},"estimated_impact":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Impact"}},"type":"object","required":["id","title","trigger_type","content"],"title":"PlaybookResponse","description":"Generated playbook response."},"PlaybookTemplate":{"properties":{"trigger_type":{"type":"string","title":"Trigger Type"},"title":{"type":"string","title":"Title"},"template":{"type":"string","title":"Template"},"is_template":{"type":"boolean","title":"Is Template","default":true}},"type":"object","required":["trigger_type","title","template"],"title":"PlaybookTemplate","description":"Playbook template schema."},"ProfileResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"}},"type":"object","required":["id","email","full_name","is_verified","created_at","last_login_at"],"title":"ProfileResponse","description":"User profile response."},"PromptPackUpload":{"properties":{"yaml_content":{"type":"string","title":"Yaml Content"},"conflict_resolution":{"type":"string","pattern":"^(skip|overwrite|rename)$","title":"Conflict Resolution","default":"skip"}},"type":"object","required":["yaml_content"],"title":"PromptPackUpload","description":"Prompt pack upload request."},"QueryCategoryCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"QueryCategoryCreate","description":"Query category creation request schema."},"QueryCategoryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","account_id","name","description","created_at","updated_at"],"title":"QueryCategoryResponse","description":"Query category response schema."},"QueryCategoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"QueryCategoryUpdate","description":"Query category update request schema."},"QueryCreate":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"},"query_text":{"type":"string","title":"Query Text"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"difficulty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Difficulty"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority","default":5},"is_active":{"type":"boolean","title":"Is Active","default":true},"schedule_config":{"type":"object","title":"Schedule Config","default":{}}},"type":"object","required":["brand_id","query_text"],"title":"QueryCreate","description":"Query creation request schema."},"QueryGenerationOutput":{"properties":{"suggested_queries":{"items":{"$ref":"#/components/schemas/SuggestedQuery"},"type":"array","maxItems":6,"minItems":4,"title":"Suggested Queries","description":"4-6 suggested search queries"}},"type":"object","required":["suggested_queries"],"title":"QueryGenerationOutput","description":"AI output schema for query generation."},"QueryGenerationRequest":{"properties":{"brand_name":{"type":"string","maxLength":255,"minLength":1,"title":"Brand Name","description":"The brand name"},"verticals":{"items":{"type":"string"},"type":"array","maxItems":3,"minItems":1,"title":"Verticals","description":"Selected verticals"},"competitors":{"items":{"type":"string"},"type":"array","title":"Competitors","description":"List of competitors"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url","description":"Optional website URL for context"}},"type":"object","required":["brand_name","verticals","competitors"],"title":"QueryGenerationRequest","description":"Request schema for AI query generation."},"QueryGenerationResponse":{"properties":{"brand_name":{"type":"string","title":"Brand Name"},"queries":{"$ref":"#/components/schemas/QueryGenerationOutput"},"processing_time_ms":{"type":"integer","title":"Processing Time Ms"}},"type":"object","required":["brand_name","queries","processing_time_ms"],"title":"QueryGenerationResponse","description":"Response schema for query generation endpoint."},"QueryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"category_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Category Id"},"query_text":{"type":"string","title":"Query Text"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"difficulty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Difficulty"},"priority":{"type":"integer","title":"Priority"},"is_active":{"type":"boolean","title":"Is Active"},"schedule_config":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Schedule Config"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","account_id","brand_id","category_id","query_text","intent","difficulty","priority","is_active","created_at","updated_at"],"title":"QueryResponse","description":"Query response schema."},"QueryType":{"type":"string","enum":["product","comparison","how-to","opinion","factual","other"],"title":"QueryType","description":"Types of queries mentioning brands."},"QueryUpdate":{"properties":{"query_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query Text"},"brand_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Id"},"category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"},"intent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"},"difficulty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Difficulty"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"schedule_config":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Schedule Config"}},"type":"object","title":"QueryUpdate","description":"Query update request schema."},"RankingItem":{"properties":{"rank":{"type":"integer","title":"Rank"},"brand":{"type":"string","title":"Brand"},"vertical":{"type":"string","title":"Vertical"},"signal":{"type":"string","title":"Signal"},"slug":{"type":"string","title":"Slug"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["rank","brand","vertical","signal","slug"],"title":"RankingItem"},"RecommendationBase":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"type":{"type":"string","title":"Type"},"priority":{"type":"string","title":"Priority"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"rationale":{"type":"string","title":"Rationale"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"target_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Section"},"suggested_content":{"type":"string","title":"Suggested Content"},"estimated_impact_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Impact Score"},"estimated_visibility_increase":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Visibility Increase"},"competitor_advantage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Competitor Advantage"},"status":{"type":"string","title":"Status"},"implemented_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Implemented At"},"dismissed_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dismissed Reason"}},"type":"object","required":["id","brand_id","created_at","updated_at","type","priority","category","title","description","rationale","target_url","target_section","suggested_content","estimated_impact_score","estimated_visibility_increase","competitor_advantage","status","implemented_at","dismissed_reason"],"title":"RecommendationBase","description":"Base recommendation schema."},"RecommendationDetail":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"type":{"type":"string","title":"Type"},"priority":{"type":"string","title":"Priority"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"rationale":{"type":"string","title":"Rationale"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"target_section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Section"},"suggested_content":{"type":"string","title":"Suggested Content"},"estimated_impact_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Impact Score"},"estimated_visibility_increase":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Visibility Increase"},"competitor_advantage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Competitor Advantage"},"status":{"type":"string","title":"Status"},"implemented_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Implemented At"},"dismissed_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dismissed Reason"},"generation_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Prompt"},"generation_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generation Model"},"confidence_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Score"}},"type":"object","required":["id","brand_id","created_at","updated_at","type","priority","category","title","description","rationale","target_url","target_section","suggested_content","estimated_impact_score","estimated_visibility_increase","competitor_advantage","status","implemented_at","dismissed_reason","generation_prompt","generation_model","confidence_score"],"title":"RecommendationDetail","description":"Detailed recommendation with generation metadata."},"RecommendationGenerateRequest":{"properties":{"analysis_period_days":{"type":"integer","maximum":90.0,"minimum":7.0,"title":"Analysis Period Days","description":"Number of days to analyze (7-90)","default":30}},"type":"object","title":"RecommendationGenerateRequest","description":"Request to generate recommendations for a brand."},"RecommendationListResponse":{"properties":{"recommendations":{"items":{"$ref":"#/components/schemas/RecommendationBase"},"type":"array","title":"Recommendations"},"total":{"type":"integer","title":"Total"},"pending":{"type":"integer","title":"Pending"},"in_progress":{"type":"integer","title":"In Progress"},"completed":{"type":"integer","title":"Completed"},"dismissed":{"type":"integer","title":"Dismissed"}},"type":"object","required":["recommendations","total","pending","in_progress","completed","dismissed"],"title":"RecommendationListResponse","description":"Response for list of recommendations."},"RecommendationUpdateRequest":{"properties":{"status":{"type":"string","title":"Status","description":"New status: pending, in_progress, completed, dismissed"},"implementation_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Implementation Notes","description":"Notes about implementation"},"dismissed_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dismissed Reason","description":"Reason for dismissal (required if status=dismissed)"}},"type":"object","required":["status"],"title":"RecommendationUpdateRequest","description":"Request to update recommendation status."},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest","description":"Resend verification email request schema."},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest","description":"Reset password request schema."},"RevokeSessionRequest":{"properties":{"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id","description":"Session ID to revoke (if None, revokes all except current)"}},"type":"object","title":"RevokeSessionRequest","description":"Request to revoke a session."},"RunConfigCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config_json":{"type":"object","title":"Config Json","description":"Configuration including queries, models, api_keys, and config"},"schedule":{"type":"string","title":"Schedule","description":"Schedule type: manual, daily, or weekly","default":"manual"},"schedule_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Schedule Time","description":"Time of day to run scheduled executions (UTC)"},"day_of_week":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Of Week","description":"Day of week for weekly schedules: monday, tuesday, wednesday, thursday, friday, saturday, sunday"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","config_json"],"title":"RunConfigCreate","description":"RunConfig creation request schema."},"RunConfigResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config_json":{"type":"object","title":"Config Json"},"schedule":{"type":"string","title":"Schedule"},"schedule_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Schedule Time"},"day_of_week":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Of Week"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"queries":{"items":{"type":"string"},"type":"array","title":"Queries","description":"Query IDs from config_json"},"models":{"items":{"type":"string"},"type":"array","title":"Models","description":"Model names from config_json"}},"type":"object","required":["id","account_id","name","description","config_json","schedule","schedule_time","day_of_week","is_active","created_at","updated_at"],"title":"RunConfigResponse","description":"RunConfig response schema."},"RunConfigUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config_json":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Config Json","description":"Configuration to merge with existing config_json"},"schedule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule"},"schedule_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Schedule Time"},"day_of_week":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Day Of Week","description":"Day of week for weekly schedules: monday, tuesday, wednesday, thursday, friday, saturday, sunday"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"RunConfigUpdate","description":"RunConfig update request schema."},"RunExecutionCreate":{"properties":{"run_config_id":{"type":"string","title":"Run Config Id"},"force":{"type":"boolean","title":"Force","description":"Skip rate limit check if true (admin only)","default":false}},"type":"object","required":["run_config_id"],"title":"RunExecutionCreate","description":"RunExecution creation request schema."},"RunExecutionListResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"run_config_id":{"type":"string","format":"uuid","title":"Run Config Id"},"status":{"type":"string","title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"total_queries":{"type":"integer","title":"Total Queries"},"completed_queries":{"type":"integer","title":"Completed Queries"},"failed_queries":{"type":"integer","title":"Failed Queries"},"pending_queries":{"type":"integer","title":"Pending Queries"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","run_config_id","status","started_at","completed_at","total_queries","completed_queries","failed_queries","pending_queries","created_at"],"title":"RunExecutionListResponse","description":"Run execution list item response."},"RunExecutionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"run_config_id":{"type":"string","format":"uuid","title":"Run Config Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"status":{"type":"string","title":"Status"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"total_executions":{"type":"integer","title":"Total Executions"},"completed_executions":{"type":"integer","title":"Completed Executions"},"failed_executions":{"type":"integer","title":"Failed Executions"},"celery_task_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Celery Task Id"},"run_metadata":{"type":"object","title":"Run Metadata"},"error_details":{"items":{"type":"object"},"type":"array","title":"Error Details"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","run_config_id","account_id","status","started_at","completed_at","total_executions","completed_executions","failed_executions","celery_task_id","run_metadata","error_details","created_at"],"title":"RunExecutionResponse","description":"RunExecution response schema."},"RunExecutionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"progress":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Progress"},"current_task":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Current Task","description":"Current task data: {model, query_id, started_at}"}},"type":"object","required":["status"],"title":"RunExecutionStatusResponse","description":"Lightweight run status response for polling."},"SDKAnalyticsResponse":{"properties":{"period":{"type":"string","title":"Period"},"metrics":{"additionalProperties":{"type":"number"},"type":"object","title":"Metrics"},"ai_attribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Ai Attribution"},"top_pages":{"items":{"type":"object"},"type":"array","title":"Top Pages"},"optimization_score_avg":{"type":"number","title":"Optimization Score Avg"}},"type":"object","required":["period","metrics","ai_attribution","top_pages","optimization_score_avg"],"title":"SDKAnalyticsResponse","description":"Schema for analytics response."},"SDKApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"User-friendly name for the API key"},"tier":{"type":"string","enum":["free","pro","enterprise"],"title":"Tier","description":"API key tier","default":"free"},"rate_limit_per_minute":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":1.0},{"type":"null"}],"title":"Rate Limit Per Minute","default":1000},"rate_limit_per_day":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Rate Limit Per Day"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name"],"title":"SDKApiKeyCreate","description":"Schema for creating a new SDK API key."},"SDKApiKeyList":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/SDKApiKeyResponse"},"type":"array","title":"Keys"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["keys","total"],"title":"SDKApiKeyList","description":"Schema for listing API keys."},"SDKApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key"},"key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Prefix"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"is_active":{"type":"boolean","title":"Is Active"},"rate_limit_per_minute":{"type":"integer","title":"Rate Limit Per Minute"},"rate_limit_per_day":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Day"},"calls_today":{"type":"integer","title":"Calls Today"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"account_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"},"domains":{"items":{"$ref":"#/components/schemas/SDKDomainResponse"},"type":"array","title":"Domains","default":[]}},"type":"object","required":["id","name","tier","is_active","rate_limit_per_minute","rate_limit_per_day","calls_today","last_used_at","created_at","expires_at"],"title":"SDKApiKeyResponse","description":"Schema for API key response."},"SDKDomainCreate":{"properties":{"domain":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Domain","description":"Web domain (e.g., example.com)"},"app_bundle_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"App Bundle Id","description":"Mobile app bundle ID"},"platform":{"type":"string","enum":["web","ios","android"],"title":"Platform"}},"type":"object","required":["platform"],"title":"SDKDomainCreate","description":"Schema for adding a domain/app to an API key."},"SDKDomainResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"app_bundle_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Bundle Id"},"platform":{"type":"string","title":"Platform"},"is_active":{"type":"boolean","title":"Is Active"},"verified":{"type":"boolean","title":"Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","domain","app_bundle_id","platform","is_active","verified","created_at"],"title":"SDKDomainResponse","description":"Schema for domain response."},"SDKEventBatch":{"properties":{"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Idempotency Key","description":"Unique key to prevent duplicate batch processing"},"events":{"items":{"$ref":"#/components/schemas/SDKEventCreate"},"type":"array","maxItems":50,"title":"Events"}},"type":"object","required":["events"],"title":"SDKEventBatch","description":"Schema for batch event tracking."},"SDKEventCreate":{"properties":{"idempotency_key":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Idempotency Key","description":"Unique key to prevent duplicate events"},"event_type":{"type":"string","enum":["page_view","conversion","custom"],"title":"Event Type"},"event_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Event Name"},"event_data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Event Data"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"},"session_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Session Id"},"client_timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Client Timestamp"}},"type":"object","required":["event_type"],"title":"SDKEventCreate","description":"Schema for tracking an event."},"SDKEventResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"event_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Name"},"ai_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Source"},"ai_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ai Confidence"},"attribution_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attribution Method"},"server_timestamp":{"type":"string","format":"date-time","title":"Server Timestamp"}},"type":"object","required":["id","event_type","event_name","ai_source","ai_confidence","attribution_method","server_timestamp"],"title":"SDKEventResponse","description":"Schema for event response."},"SDKOptimizationRequest":{"properties":{"url":{"type":"string","title":"Url"},"content":{"type":"string","maxLength":50000,"minLength":100,"title":"Content","description":"Page content to optimize"},"content_type":{"anyOf":[{"type":"string","enum":["product","article","landing_page","documentation"]},{"type":"null"}],"title":"Content Type"},"include_structured_data":{"type":"boolean","title":"Include Structured Data","default":true},"include_recommendations":{"type":"boolean","title":"Include Recommendations","default":true}},"type":"object","required":["url","content"],"title":"SDKOptimizationRequest","description":"Schema for content optimization request."},"SDKOptimizationResponse":{"properties":{"url":{"type":"string","title":"Url"},"optimization_score":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Optimization Score"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type"},"suggestions":{"type":"object","title":"Suggestions"},"structured_data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Structured Data"},"heading_recommendations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Heading Recommendations"},"bullet_point_suggestions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bullet Point Suggestions"},"comparison_tables":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Comparison Tables"},"tldr_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tldr Content"},"processing_time_ms":{"type":"integer","title":"Processing Time Ms"},"cached":{"type":"boolean","title":"Cached","default":false}},"type":"object","required":["url","optimization_score","content_type","suggestions","structured_data","heading_recommendations","bullet_point_suggestions","comparison_tables","tldr_content","processing_time_ms"],"title":"SDKOptimizationResponse","description":"Schema for optimization response."},"SDKWebhookTest":{"properties":{"webhook_id":{"type":"string","format":"uuid","title":"Webhook Id"},"test_event":{"type":"string","enum":["event.tracked","optimization.completed","api_key.limit_reached","ai_traffic.detected","conversion.tracked"],"title":"Test Event"}},"type":"object","required":["webhook_id","test_event"],"title":"SDKWebhookTest","description":"Schema for testing a webhook."},"ScoreHistoryPoint":{"properties":{"week":{"type":"string","title":"Week"},"score":{"type":"integer","title":"Score"}},"type":"object","required":["week","score"],"title":"ScoreHistoryPoint"},"SessionListResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/UserSessionResponse"},"type":"array","title":"Sessions"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["sessions","total"],"title":"SessionListResponse","description":"List of active user sessions."},"SetPasswordRequest":{"properties":{"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["password"],"title":"SetPasswordRequest","description":"Set password for passwordless users."},"SignalFeedItem":{"properties":{"id":{"type":"string","title":"Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"brand_slug":{"type":"string","title":"Brand Slug"},"vertical":{"type":"string","title":"Vertical"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"event_type":{"type":"string","title":"Event Type"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"},"source":{"type":"string","title":"Source"},"occurred_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Occurred At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"metadata":{"type":"object","title":"Metadata"}},"type":"object","required":["id","brand_id","brand_name","brand_slug","vertical","event_type","title","summary","source"],"title":"SignalFeedItem","description":"Normalized signal-feed event."},"SignalFeedResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SignalFeedItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"},"summary":{"$ref":"#/components/schemas/SignalFeedSummary"}},"type":"object","required":["total","page","page_size","pages","summary"],"title":"SignalFeedResponse","description":"Paginated signal-feed response."},"SignalFeedSummary":{"properties":{"total_items":{"type":"integer","title":"Total Items"},"signal_count":{"type":"integer","title":"Signal Count","default":0},"news_count":{"type":"integer","title":"News Count","default":0},"reddit_count":{"type":"integer","title":"Reddit Count","default":0},"hiring_count":{"type":"integer","title":"Hiring Count","default":0}},"type":"object","required":["total_items"],"title":"SignalFeedSummary","description":"Top-level counts for the current feed selection."},"SlackConfig":{"properties":{"channel_id":{"type":"string","title":"Channel Id"},"alert_types":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Alert Types","default":{"daily_drift":true,"negative_stance":true,"citedness_drop":true}},"thresholds":{"additionalProperties":{"type":"number"},"type":"object","title":"Thresholds","default":{"recommendedness_drop":0.1,"citedness_drop_percentage":0.5}}},"type":"object","required":["channel_id"],"title":"SlackConfig","description":"Slack configuration schema."},"SlackIntegrationResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"},"alert_config":{"type":"object","title":"Alert Config"},"connected":{"type":"boolean","title":"Connected"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","account_id","channel_id","alert_config","connected","created_at"],"title":"SlackIntegrationResponse","description":"Slack integration response."},"SlackOAuthCallback":{"properties":{"code":{"type":"string","title":"Code"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["code"],"title":"SlackOAuthCallback","description":"Slack OAuth callback data."},"SlackTestAlert":{"properties":{"alert_type":{"type":"string","pattern":"^(daily_drift|negative_stance|citedness_drop)$","title":"Alert Type"}},"type":"object","required":["alert_type"],"title":"SlackTestAlert","description":"Test alert request."},"StartTrialRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["email"],"title":"StartTrialRequest","description":"Landing page trial request schema."},"SubcategoryBrandItem":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"visibilityScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visibilityscore"},"trendDirection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trenddirection"},"aiRank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Airank"},"totalBrands":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Totalbrands"}},"type":"object","required":["brand","slug"],"title":"SubcategoryBrandItem"},"SubcategoryDetail":{"properties":{"subcategory":{"type":"string","title":"Subcategory"},"subcategorySlug":{"type":"string","title":"Subcategoryslug"},"vertical":{"type":"string","title":"Vertical"},"brandCount":{"type":"integer","title":"Brandcount"},"brands":{"items":{"$ref":"#/components/schemas/SubcategoryBrandItem"},"type":"array","title":"Brands","default":[]},"avgScore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avgscore"},"topScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Topscore"}},"type":"object","required":["subcategory","subcategorySlug","vertical","brandCount"],"title":"SubcategoryDetail"},"SubmitRatingRequest":{"properties":{"query_execution_id":{"type":"string","format":"uuid","title":"Query Execution Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"mentioned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mentioned"},"explicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Explicit Rank"},"implicit_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Implicit Rank"},"reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reasoning"},"recommendation_strength":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Recommendation Strength"},"recommendation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation Type"},"is_conditional":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Conditional"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"stance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stance"},"sentiment_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":-1.0},{"type":"null"}],"title":"Sentiment Score"},"positive_aspects":{"items":{"type":"string"},"type":"array","title":"Positive Aspects"},"negative_aspects":{"items":{"type":"string"},"type":"array","title":"Negative Aspects"},"risk_flags":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Risk Flags"},"confidence":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"time_spent_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time Spent Seconds"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["query_execution_id","brand_id"],"title":"SubmitRatingRequest","description":"Request to submit a human rating."},"SubscriptionCreate":{"properties":{"brand_name":{"type":"string","maxLength":255,"minLength":1,"title":"Brand Name"},"tier":{"$ref":"#/components/schemas/SubscriptionTier"},"billing_interval":{"type":"string","pattern":"^(monthly|annual)$","title":"Billing Interval"},"trial":{"type":"boolean","title":"Trial","description":"Start with 14-day trial?","default":false}},"type":"object","required":["brand_name","tier","billing_interval"],"title":"SubscriptionCreate","description":"Create a new B2B subscription."},"SubscriptionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"brand_id":{"type":"string","format":"uuid","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"tier":{"$ref":"#/components/schemas/SubscriptionTier"},"status":{"$ref":"#/components/schemas/app__schemas__b2b_schemas__SubscriptionStatus"},"billing_interval":{"type":"string","title":"Billing Interval"},"price_cents":{"type":"integer","title":"Price Cents"},"seats_included":{"type":"integer","title":"Seats Included"},"seats_used":{"type":"integer","title":"Seats Used"},"api_calls_limit_monthly":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Api Calls Limit Monthly"},"api_calls_used_current_month":{"type":"integer","title":"Api Calls Used Current Month"},"api_calls_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Api Calls Remaining"},"trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Ends At"},"current_period_start":{"type":"string","format":"date-time","title":"Current Period Start"},"current_period_end":{"type":"string","format":"date-time","title":"Current Period End"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","account_id","brand_id","brand_name","tier","status","billing_interval","price_cents","seats_included","seats_used","api_calls_limit_monthly","api_calls_used_current_month","api_calls_remaining","trial_ends_at","current_period_start","current_period_end","cancel_at_period_end","created_at","updated_at"],"title":"SubscriptionResponse","description":"B2B subscription details."},"SubscriptionTier":{"type":"string","enum":["starter","pro","enterprise"],"title":"SubscriptionTier","description":"B2B subscription tiers."},"SubscriptionUpdate":{"properties":{"tier":{"allOf":[{"$ref":"#/components/schemas/SubscriptionTier"}],"description":"New subscription tier"}},"type":"object","required":["tier"],"title":"SubscriptionUpdate","description":"Update an existing B2B subscription."},"SuggestedQuery":{"properties":{"query_text":{"type":"string","title":"Query Text","description":"The search query text"},"category":{"type":"string","enum":["non-branded","branded"],"title":"Category","description":"Query category"},"reasoning":{"type":"string","title":"Reasoning","description":"Why this query is relevant"}},"type":"object","required":["query_text","category","reasoning"],"title":"SuggestedQuery","description":"A single suggested query."},"TagDefinitionCreate":{"properties":{"tag_slug":{"type":"string","maxLength":50,"minLength":1,"title":"Tag Slug","description":"URL-safe slug for the tag"},"tag_category":{"type":"string","title":"Tag Category","description":"Category: business_model, technology, stage, etc."},"display_name":{"type":"string","maxLength":100,"minLength":1,"title":"Display Name","description":"Human-readable name"},"description":{"type":"string","minLength":1,"title":"Description","description":"What this tag means"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Hex color code (e.g., #FF5733)"},"sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sort Order","description":"Display order within category","default":999},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active","description":"Whether tag can be used","default":true}},"type":"object","required":["tag_slug","tag_category","display_name","description"],"title":"TagDefinitionCreate","description":"Schema for creating a new tag definition"},"TagDefinitionResponse":{"properties":{"tag_slug":{"type":"string","maxLength":50,"minLength":1,"title":"Tag Slug","description":"URL-safe slug for the tag"},"tag_category":{"type":"string","title":"Tag Category","description":"Category: business_model, technology, stage, etc."},"display_name":{"type":"string","maxLength":100,"minLength":1,"title":"Display Name","description":"Human-readable name"},"description":{"type":"string","minLength":1,"title":"Description","description":"What this tag means"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","description":"Hex color code (e.g., #FF5733)"},"sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sort Order","description":"Display order within category","default":999},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active","description":"Whether tag can be used","default":true}},"type":"object","required":["tag_slug","tag_category","display_name","description"],"title":"TagDefinitionResponse","description":"Schema for tag definition response"},"TagDefinitionUpdate":{"properties":{"tag_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Category"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"sort_order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Sort Order"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"TagDefinitionUpdate","description":"Schema for updating a tag definition (all fields optional)"},"TagMetadata":{"properties":{"tag_slug":{"type":"string","title":"Tag Slug"},"display_name":{"type":"string","title":"Display Name"},"description":{"type":"string","title":"Description"},"tag_category":{"type":"string","title":"Tag Category"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"rich_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rich Description"},"market_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Overview"},"market_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Size"},"growth_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Growth Rate"},"key_players":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Key Players"},"seo_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Seo Keywords"},"brand_count":{"type":"integer","title":"Brand Count","default":0}},"type":"object","required":["tag_slug","display_name","description","tag_category"],"title":"TagMetadata","description":"Tag metadata including enriched SEO/market data."},"TagStats":{"properties":{"tag":{"type":"string","title":"Tag"},"count":{"type":"integer","title":"Count"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["tag","count","percentage"],"title":"TagStats","description":"Tag statistics for tag cloud visualization."},"TeamMemberInvite":{"properties":{"email":{"type":"string","title":"Email","description":"Email address to invite"},"role":{"allOf":[{"$ref":"#/components/schemas/TeamMemberRole"}],"description":"Role for team member","default":"member"}},"type":"object","required":["email"],"title":"TeamMemberInvite","description":"Invite a team member."},"TeamMemberResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"subscription_id":{"type":"string","format":"uuid","title":"Subscription Id"},"email":{"type":"string","title":"Email"},"role":{"$ref":"#/components/schemas/TeamMemberRole"},"status":{"type":"string","title":"Status"},"invited_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Invited At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"}},"type":"object","required":["id","subscription_id","email","role","status","invited_at","accepted_at"],"title":"TeamMemberResponse","description":"Team member details."},"TeamMemberRole":{"type":"string","enum":["admin","member","viewer"],"title":"TeamMemberRole","description":"Team member roles."},"ThemeResponse":{"properties":{"theme":{"type":"string","title":"Theme"},"frequency":{"type":"integer","title":"Frequency"},"sentiment":{"type":"number","title":"Sentiment"},"examples":{"items":{"type":"string"},"type":"array","title":"Examples"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"}},"type":"object","required":["theme","frequency","sentiment","examples","keywords"],"title":"ThemeResponse","description":"Single theme/insight"},"TierType":{"type":"string","enum":["basic","pro","enterprise"],"title":"TierType","description":"API tier types"},"TimelineDataPoint":{"properties":{"date":{"type":"string","title":"Date"},"score":{"type":"integer","title":"Score"},"chatgpt":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chatgpt"},"gemini":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gemini"},"claude":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Claude"},"perplexity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Perplexity"},"grok":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grok"}},"type":"object","required":["date","score","chatgpt","gemini","claude","perplexity","grok"],"title":"TimelineDataPoint","description":"Single day's timeline data with per-model scores."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"user":{"title":"User"}},"type":"object","required":["access_token","expires_in","user"],"title":"TokenResponse","description":"JWT token response schema."},"TopDomainsResponse":{"properties":{"domains":{"items":{"$ref":"#/components/schemas/DomainStats"},"type":"array","title":"Domains"},"total_citations":{"type":"integer","title":"Total Citations"},"total_domains":{"type":"integer","title":"Total Domains"},"date_range":{"additionalProperties":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"type":"object","title":"Date Range","description":"start_date and end_date for the analysis"}},"type":"object","required":["domains","total_citations","total_domains"],"title":"TopDomainsResponse","description":"Top domains by citation frequency."},"TrendChartResponse":{"properties":{"data_points":{"items":{"$ref":"#/components/schemas/TrendDataPoint"},"type":"array","title":"Data Points"},"period_days":{"type":"integer","title":"Period Days"},"trend_direction":{"type":"string","title":"Trend Direction"},"change_percent":{"type":"number","title":"Change Percent"}},"type":"object","required":["data_points","period_days","trend_direction","change_percent"],"title":"TrendChartResponse","description":"Trend chart data"},"TrendDataPoint":{"properties":{"date":{"type":"string","format":"date-time","title":"Date"},"score":{"type":"number","title":"Score"},"model":{"type":"string","title":"Model"}},"type":"object","required":["date","score","model"],"title":"TrendDataPoint","description":"Single data point in trend chart"},"TrendingBrandItem":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"visibilityScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visibilityscore"},"trendDirection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trenddirection"},"aiRank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Airank"},"totalBrands":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Totalbrands"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["brand","slug","vertical"],"title":"TrendingBrandItem"},"TurnPersistenceData":{"properties":{"turn_number":{"type":"integer","title":"Turn Number"},"mention_rate":{"type":"number","title":"Mention Rate"},"conversation_count":{"type":"integer","title":"Conversation Count"}},"type":"object","required":["turn_number","mention_rate","conversation_count"],"title":"TurnPersistenceData","description":"Data point for persistence chart (turn number vs mention rate)."},"UpdateBrandTags":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tag slugs to assign (max 20)","default":[]}},"type":"object","title":"UpdateBrandTags","description":"Request body for updating brand tags.","example":{"tags":["b2c","saas","enterprise"]}},"UpdateProfileRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","title":"UpdateProfileRequest","description":"Request to update user profile."},"UpgradeResponse":{"properties":{"tier":{"$ref":"#/components/schemas/ApiTierResponse"},"upgrade_effective_at":{"type":"string","format":"date-time","title":"Upgrade Effective At"},"prorated_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Prorated Amount"},"message":{"type":"string","title":"Message"}},"type":"object","required":["tier","upgrade_effective_at","prorated_amount","message"],"title":"UpgradeResponse","description":"Response for tier upgrade"},"UsageByDayResponse":{"properties":{"daily_usage":{"items":{"$ref":"#/components/schemas/DailyUsageResponse"},"type":"array","title":"Daily Usage"},"total_days":{"type":"integer","title":"Total Days"},"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"}},"type":"object","required":["daily_usage","total_days","period_start","period_end"],"title":"UsageByDayResponse","description":"Response for daily usage data"},"UsageByEndpointResponse":{"properties":{"endpoint_usage":{"items":{"$ref":"#/components/schemas/EndpointUsageResponse"},"type":"array","title":"Endpoint Usage"},"total_endpoints":{"type":"integer","title":"Total Endpoints"}},"type":"object","required":["endpoint_usage","total_endpoints"],"title":"UsageByEndpointResponse","description":"Response for endpoint usage data"},"UsageSummaryResponse":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"unique_endpoints":{"type":"integer","title":"Unique Endpoints"},"average_response_time_ms":{"type":"number","title":"Average Response Time Ms"},"error_rate":{"type":"number","title":"Error Rate"},"error_count":{"type":"integer","title":"Error Count"},"success_count":{"type":"integer","title":"Success Count"},"total_bandwidth_mb":{"type":"number","title":"Total Bandwidth Mb"},"top_endpoints":{"items":{"type":"object"},"type":"array","title":"Top Endpoints"},"requests_by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"Requests By Status"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"}},"type":"object","required":["total_requests","unique_endpoints","average_response_time_ms","error_rate","error_count","success_count","total_bandwidth_mb","top_endpoints","requests_by_status","period_start","period_end"],"title":"UsageSummaryResponse","description":"Schema for usage summary response"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin","description":"User login request schema."},"UserRegister":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"}},"type":"object","required":["email","password"],"title":"UserRegister","description":"User registration request schema."},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"subscription_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Tier","default":"free"}},"type":"object","required":["id","email","full_name","is_active","is_verified","created_at","last_login_at"],"title":"UserResponse","description":"Full user response schema."},"UserSessionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"device_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Name"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"last_activity_at":{"type":"string","format":"date-time","title":"Last Activity At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"is_current":{"type":"boolean","title":"Is Current","description":"True if this is the current session","default":false}},"type":"object","required":["id","device_name","ip_address","last_activity_at","created_at","expires_at"],"title":"UserSessionResponse","description":"User session response."},"UserUpdate":{"properties":{"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","title":"UserUpdate","description":"User update request schema."},"ValidationDetail":{"properties":{"field":{"type":"string","title":"Field"},"issue":{"type":"string","title":"Issue"},"severity":{"type":"string","title":"Severity"}},"type":"object","required":["field","issue","severity"],"title":"ValidationDetail","description":"Validation detail."},"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"},"ValidationStatus":{"properties":{"status":{"type":"string","title":"Status"},"details":{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array","title":"Details"},"broken_urls":{"items":{"type":"string"},"type":"array","title":"Broken Urls"},"last_validated_at":{"type":"string","title":"Last Validated At"}},"type":"object","required":["status","last_validated_at"],"title":"ValidationStatus","description":"Fact card validation status."},"VerticalAILeader":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"visibilityScore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Visibilityscore"},"aiRank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Airank"}},"type":"object","required":["brand","slug"],"title":"VerticalAILeader"},"VerticalAISummary":{"properties":{"vertical":{"type":"string","title":"Vertical"},"verticalSlug":{"type":"string","title":"Verticalslug"},"brandCount":{"type":"integer","title":"Brandcount"},"topBrands":{"items":{"$ref":"#/components/schemas/VerticalAILeader"},"type":"array","title":"Topbrands","default":[]},"avgScore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avgscore"}},"type":"object","required":["vertical","verticalSlug","brandCount"],"title":"VerticalAISummary"},"VerticalMetadata":{"properties":{"vertical_slug":{"type":"string","title":"Vertical Slug"},"display_name":{"type":"string","title":"Display Name"},"short_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Short Description"},"rich_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rich Description"},"market_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Overview"},"market_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Size"},"growth_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Growth Rate"},"key_trends":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Key Trends"},"top_players":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Top Players"},"seo_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Seo Keywords"},"brand_count":{"type":"integer","title":"Brand Count","default":0}},"type":"object","required":["vertical_slug","display_name"],"title":"VerticalMetadata","description":"Vertical metadata including enriched SEO/market data."},"VerticalStats":{"properties":{"vertical":{"type":"string","title":"Vertical"},"brand_count":{"type":"integer","title":"Brand Count"},"slug":{"type":"string","title":"Slug"}},"type":"object","required":["vertical","brand_count","slug"],"title":"VerticalStats"},"VisibilityScoreBreakdown":{"properties":{"mention_frequency":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Mention Frequency","description":"Frequency score (0-100)"},"position_quality":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Position Quality","description":"Position score (0-100)"},"engagement":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Engagement","description":"Engagement score (0-100)"},"sentiment":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Sentiment","description":"Sentiment score (0-100)"},"overall":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Overall","description":"Overall visibility score"}},"type":"object","required":["mention_frequency","position_quality","engagement","sentiment","overall"],"title":"VisibilityScoreBreakdown","description":"Visibility score components."},"VisibilityScoreResponse":{"properties":{"a_sov":{"type":"integer","title":"A Sov","description":"Answer Share-of-Voice (0-100)"},"recommendedness_index":{"type":"integer","title":"Recommendedness Index","description":"Recommendation Index (0-100)"},"citedness_pct":{"type":"number","title":"Citedness Pct","description":"Citation rate percentage (0-100)"},"drift_index_pct":{"type":"number","title":"Drift Index Pct","description":"Period-over-period change (-100 to +100)"},"time_to_fix_days":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Time To Fix Days","description":"Median days to fix issues"},"overall_score":{"type":"integer","title":"Overall Score","description":"DEPRECATED: Use a_sov instead"},"change":{"type":"integer","title":"Change","description":"DEPRECATED: Use drift_index_pct instead"},"visibility_rate":{"type":"number","title":"Visibility Rate","description":"DEPRECATED: Use citedness_pct instead"},"avg_rank":{"type":"number","title":"Avg Rank"},"recommendation_strength":{"type":"number","title":"Recommendation Strength","description":"DEPRECATED: Use recommendedness_index instead"},"sentiment":{"type":"number","title":"Sentiment"},"queries_mentioned":{"type":"integer","title":"Queries Mentioned"},"total_queries":{"type":"integer","title":"Total Queries"},"period":{"additionalProperties":{"type":"string"},"type":"object","title":"Period"},"timeline":{"items":{"$ref":"#/components/schemas/TimelineDataPoint"},"type":"array","title":"Timeline","description":"Daily scores for charting"}},"type":"object","required":["a_sov","recommendedness_index","citedness_pct","drift_index_pct","overall_score","change","visibility_rate","avg_rank","recommendation_strength","sentiment","queries_mentioned","total_queries","period"],"title":"VisibilityScoreResponse","description":"Current visibility score response schema with PRD v4 metrics.\n\nWedge Metrics (Primary KPIs):\n- a_sov: Answer Share-of-Voice (0-100) - Brand's visibility across AI models\n- recommendedness_index: Recommendation strength (0-100) - How strongly AI recommends the brand\n- citedness_pct: Citation rate (0-100%) - Percentage of answers citing authoritative sources\n- drift_index_pct: Period-over-period change (-100% to +100%) - Trend direction\n- time_to_fix_days: Median days to resolve visibility issues\n\nLegacy fields maintained for backward compatibility during transition."},"WatchlistBrandSummary":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["id","brand","slug","vertical"],"title":"WatchlistBrandSummary","description":"Minimal brand-library payload for watchlist UIs."},"WatchlistCreateRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"WatchlistCreateRequest","description":"Create a new account watchlist."},"WatchlistDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"brands_count":{"type":"integer","title":"Brands Count","default":0},"items":{"items":{"$ref":"#/components/schemas/WatchlistItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["id","name","created_at","updated_at"],"title":"WatchlistDetailResponse","description":"Expanded watchlist payload including member brands."},"WatchlistItemCreateRequest":{"properties":{"brand_library_id":{"type":"string","format":"uuid","title":"Brand Library Id"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","required":["brand_library_id"],"title":"WatchlistItemCreateRequest","description":"Add a brand-library entry to a watchlist."},"WatchlistItemResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"watchlist_id":{"type":"string","format":"uuid","title":"Watchlist Id"},"brand_library_id":{"type":"string","format":"uuid","title":"Brand Library Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"brand":{"$ref":"#/components/schemas/WatchlistBrandSummary"}},"type":"object","required":["id","watchlist_id","brand_library_id","created_at","brand"],"title":"WatchlistItemResponse","description":"Single brand entry attached to a watchlist."},"WatchlistSummaryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"brands_count":{"type":"integer","title":"Brands Count","default":0}},"type":"object","required":["id","name","created_at","updated_at"],"title":"WatchlistSummaryResponse","description":"Watchlist summary for list pages."},"WatchlistUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":2},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"}},"type":"object","title":"WatchlistUpdateRequest","description":"Update a watchlist."},"WhatsNewItem":{"properties":{"brand":{"type":"string","title":"Brand"},"slug":{"type":"string","title":"Slug"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"},"change_type":{"type":"string","title":"Change Type"}},"type":"object","required":["brand","slug","vertical","change_type"],"title":"WhatsNewItem"},"WhatsNewResponse":{"properties":{"new_brands":{"items":{"$ref":"#/components/schemas/WhatsNewItem"},"type":"array","title":"New Brands"},"refreshed_brands":{"items":{"$ref":"#/components/schemas/WhatsNewItem"},"type":"array","title":"Refreshed Brands"},"total_new":{"type":"integer","title":"Total New"},"total_refreshed":{"type":"integer","title":"Total Refreshed"},"since_date":{"type":"string","title":"Since Date"}},"type":"object","required":["new_brands","refreshed_brands","total_new","total_refreshed","since_date"],"title":"WhatsNewResponse"},"app__routers__admin__BrandResponse":{"properties":{"id":{"type":"string","title":"Id"},"brand":{"type":"string","title":"Brand"},"website":{"type":"string","title":"Website"},"vertical":{"type":"string","title":"Vertical"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"},"signal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"},"signal_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"company_overview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview"},"company_overview_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Overview Source"},"faqs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Faqs"},"created_at":{"type":"string","title":"Created At"},"last_updated":{"type":"string","title":"Last Updated"}},"type":"object","required":["id","brand","website","vertical","subcategory","tier","rank","signal","signal_date","notes","company_overview","company_overview_source","faqs","created_at","last_updated"],"title":"BrandResponse"},"app__schemas__account__ApiKeyListResponse":{"properties":{"api_keys":{"items":{"$ref":"#/components/schemas/app__schemas__account__ApiKeyResponse"},"type":"array","title":"Api Keys"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["api_keys","total"],"title":"ApiKeyListResponse","description":"List of API keys."},"app__schemas__account__ApiKeyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"scopes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scopes"},"is_active":{"type":"boolean","title":"Is Active"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","key_prefix","scopes","is_active","last_used_at","expires_at","created_at"],"title":"ApiKeyResponse","description":"API key response (without the secret key)."},"app__schemas__api_tier__ApiKeyListResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/app__schemas__api_tier__ApiKeyResponse"},"type":"array","title":"Keys"},"total":{"type":"integer","title":"Total"},"active_count":{"type":"integer","title":"Active Count"}},"type":"object","required":["keys","total","active_count"],"title":"ApiKeyListResponse","description":"Response for listing API keys"},"app__schemas__api_tier__ApiKeyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Full key only shown once on creation"},"key_preview":{"type":"string","title":"Key Preview","description":"Format: sk_test...abcd"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"type":"string","title":"Status","description":"Key status: active, revoked, or expired","default":"active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"usage_count":{"type":"integer","title":"Usage Count"},"is_active":{"type":"boolean","title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","key_preview","name","created_at","last_used_at","usage_count","is_active","expires_at"],"title":"ApiKeyResponse","description":"Schema for API key response"},"app__schemas__api_tier__SubscriptionStatus":{"type":"string","enum":["active","canceled","expired","suspended"],"title":"SubscriptionStatus","description":"Subscription status types"},"app__schemas__b2b_schemas__SubscriptionStatus":{"type":"string","enum":["active","trial","canceled","suspended","past_due"],"title":"SubscriptionStatus","description":"Subscription status values."},"app__schemas__brand__BrandResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"account_id":{"type":"string","format":"uuid","title":"Account Id"},"name":{"type":"string","title":"Name"},"aliases":{"items":{"type":"string"},"type":"array","title":"Aliases","default":[]},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"has_data":{"type":"boolean","title":"Has Data","default":false}},"type":"object","required":["id","account_id","name","category","website_url","description","created_at","updated_at"],"title":"BrandResponse","description":"Brand response schema."},"iOSAppInfo":{"properties":{"bundleId":{"type":"string","title":"Bundleid"},"version":{"type":"string","title":"Version"},"build":{"type":"string","title":"Build"},"name":{"type":"string","title":"Name"}},"type":"object","required":["bundleId","version","build","name"],"title":"iOSAppInfo","description":"iOS SDK application information."},"iOSAttributionPayload":{"properties":{"source":{"type":"string","title":"Source"},"confidence":{"type":"number","title":"Confidence"},"method":{"type":"string","title":"Method"},"detectedAt":{"type":"string","format":"date-time","title":"Detectedat"}},"type":"object","required":["source","confidence","method","detectedAt"],"title":"iOSAttributionPayload","description":"iOS SDK attribution payload."},"iOSDeviceInfo":{"properties":{"manufacturer":{"type":"string","title":"Manufacturer"},"model":{"type":"string","title":"Model"},"os":{"type":"string","title":"Os"},"osVersion":{"type":"string","title":"Osversion"},"deviceId":{"type":"string","title":"Deviceid"},"locale":{"type":"string","title":"Locale"},"timezone":{"type":"string","title":"Timezone"},"screenWidth":{"type":"integer","title":"Screenwidth"},"screenHeight":{"type":"integer","title":"Screenheight"}},"type":"object","required":["manufacturer","model","os","osVersion","deviceId","locale","timezone","screenWidth","screenHeight"],"title":"iOSDeviceInfo","description":"iOS SDK device information."},"iOSEventBatch":{"properties":{"events":{"items":{"$ref":"#/components/schemas/iOSEventPayload"},"type":"array","maxItems":50,"title":"Events"},"sentAt":{"type":"string","format":"date-time","title":"Sentat"},"sdkVersion":{"type":"string","title":"Sdkversion"}},"type":"object","required":["events","sentAt","sdkVersion"],"title":"iOSEventBatch","description":"iOS SDK event batch."},"iOSEventPayload":{"properties":{"eventId":{"type":"string","title":"Eventid"},"eventType":{"type":"string","title":"Eventtype"},"eventName":{"type":"string","title":"Eventname"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties","default":{}},"attribution":{"anyOf":[{"$ref":"#/components/schemas/iOSAttributionPayload"},{"type":"null"}]},"deviceInfo":{"anyOf":[{"$ref":"#/components/schemas/iOSDeviceInfo"},{"type":"null"}]},"appInfo":{"anyOf":[{"$ref":"#/components/schemas/iOSAppInfo"},{"type":"null"}]},"userId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"userProperties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Userproperties","default":{}},"sessionId":{"type":"string","title":"Sessionid"}},"type":"object","required":["eventId","eventType","eventName","timestamp","sessionId"],"title":"iOSEventPayload","description":"iOS SDK event payload."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}