{"openapi":"3.1.0","info":{"title":"Vergate","description":"Security scanning engine for vibe coders","version":"0.1.0"},"paths":{"/api/v1/auth/signup":{"post":{"tags":["auth"],"summary":"Create a new account","description":"Create a new organization and user with an API key.\n\nA verification email is sent. Verify your email to activate scanning.\nYou get 3 free passive scans — no credit card required.","operationId":"signup_api_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Log in with email and password","description":"Log in with email and password. Returns a session cookie.\n\nThe session expires after 7 days by default, or 30 days if remember_me is True.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Log out (clear session cookie)","description":"Clear the session cookie.","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Logout Api V1 Auth Logout Post"}}}}}}},"/api/v1/auth/verify":{"get":{"tags":["auth"],"summary":"Verify email address","description":"Verify your email address and receive your API key.\n\nThe API key is shown ONCE. Store it securely — it cannot be retrieved later.","operationId":"verify_email_api_v1_auth_verify_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Verification token from email","title":"Token"},"description":"Verification token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/resend-verification":{"post":{"tags":["auth"],"summary":"Resend verification email","description":"Resend the verification email. Token expires after 24 hours.","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":{"additionalProperties":true,"type":"object","title":"Response Resend Verification Api V1 Auth Resend Verification Post"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get current user info","description":"Return the authenticated user's profile, org info, and scan quota.","operationId":"get_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"tags":["auth"],"summary":"Update current user profile","description":"Update the authenticated user's profile (name, avatar URL, theme).","operationId":"update_me_api_v1_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/api-keys":{"post":{"tags":["auth"],"summary":"Generate a new API key","description":"Generate a new API key for the authenticated user.\n\nThe new key is returned ONCE. The old key remains valid until revoked.","operationId":"generate_api_key_endpoint_api_v1_auth_api_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["auth"],"summary":"Revoke current API key","description":"Revoke the authenticated user's API key. The user will need a new key to authenticate.","operationId":"delete_api_key_api_v1_auth_api_keys_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Delete Api Key Api V1 Auth Api Keys Delete"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/auth/organization-settings":{"get":{"tags":["auth"],"summary":"Get organization notification settings","description":"Return the org's current notification preferences (weekly health email).","operationId":"get_org_settings_api_v1_auth_organization_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["auth"],"summary":"Update organization notification settings","description":"Update the org's weekly health report email opt-out.","operationId":"update_org_settings_api_v1_auth_organization_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSettingsResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/plans":{"get":{"tags":["billing"],"summary":"List available plans","description":"List all available subscription plans with monthly and annual pricing.","operationId":"list_plans_api_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlansResponse"}}}}}}},"/api/v1/billing/early-access":{"get":{"tags":["billing"],"summary":"Early Access launch discount status","description":"Whether the Early Access 25% launch offer is live and its shape.\n\nUsed by the billing page to render the promo banner + per-plan badges.\nThe discount is auto-applied at checkout — users never enter a code.\nReturns ``null`` when the offer is disabled entirely.","operationId":"get_early_access_api_v1_billing_early_access_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EarlyAccessResponse"},{"type":"null"}],"title":"Response Get Early Access Api V1 Billing Early Access Get"}}}}}}},"/api/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Create checkout session","description":"Create a Polar hosted checkout session for the given plan and billing interval.\n\nReturns a checkout URL where the user completes payment.\nOn success, Polar sends a webhook to activate the subscription.","operationId":"create_checkout_api_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 400 Create Checkout Api V1 Billing Checkout Post"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 401 Create Checkout Api V1 Billing Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Create customer portal","description":"Create a Polar customer portal URL for managing the subscription.\n\nThe portal lets users update payment methods, view invoices,\ncancel subscription, etc.","operationId":"create_portal_api_v1_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 400 Create Portal Api V1 Billing Portal Post"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 401 Create Portal Api V1 Billing Portal Post"}}}}}}},"/api/v1/billing/subscription/cancel":{"post":{"tags":["billing"],"summary":"Cancel subscription at period end","description":"Cancel the org's Polar subscription at the end of the current period.\n\nThe subscription remains active until ``current_period_end``; the user\nkeeps access (and their plan) until then. No further renewals happen.","operationId":"cancel_subscription_endpoint_api_v1_billing_subscription_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Cancel Subscription Endpoint Api V1 Billing Subscription Cancel Post"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 400 Cancel Subscription Endpoint Api V1 Billing Subscription Cancel Post"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response 401 Cancel Subscription Endpoint Api V1 Billing Subscription Cancel Post"}}}}}}},"/api/v1/webhooks/polar":{"post":{"tags":["webhooks"],"summary":"Polar webhook handler","description":"Handle Polar webhook notifications.\n\nVerifies the Standard Webhooks signature and processes subscription\nlifecycle events.","operationId":"polar_webhook_api_v1_webhooks_polar_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}}}}},"/api/v1/free-scan":{"post":{"tags":["free-scan"],"summary":"Start a free scan (1 per IP, no signup required)","description":"Start a free security scan. Limited to 1 per IP address (lifetime).\n\nReturns the most critical finding + LLM prompt. Sign up for 3 more free scans.","operationId":"start_free_scan_api_v1_free_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeScanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeScanStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/free-scan/{scan_id}/status":{"get":{"tags":["free-scan"],"summary":"Get free scan progress","description":"Poll for scan progress. Returns progress lines for terminal display.","operationId":"get_free_scan_status_api_v1_free_scan__scan_id__status_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeScanStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/free-scan/{scan_id}/results":{"get":{"tags":["free-scan"],"summary":"Get free scan results (top 3 findings + prompts)","description":"Get the free scan results. Shows top 3 most critical findings + LLM prompts.","operationId":"get_free_scan_results_api_v1_free_scan__scan_id__results_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeScanResultsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","description":"Send user feedback to the support inbox via email.","operationId":"submit_feedback_api_v1_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/resend":{"post":{"tags":["webhooks"],"summary":"Resend inbound email webhook","description":"Handle Resend `email.received` webhooks.\n\nForwards inbound support email replies to the support inbox so a\ncustomer replying to a Vergate email lands in the right place.","operationId":"resend_inbound_webhook_api_v1_webhooks_resend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}}}}},"/api/v1/github/auth":{"get":{"tags":["github"],"summary":"Generate GitHub OAuth authorization URL","description":"Initiate GitHub OAuth flow.\n\nReturns a URL to redirect the user to GitHub for authorization.\nThe user will be redirected back to /api/v1/github/callback.","operationId":"github_auth_api_v1_github_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitHubAuthResponse"}}}}}}},"/api/v1/github/callback":{"get":{"tags":["github"],"summary":"GitHub OAuth callback handler","description":"Handle GitHub OAuth callback.\n\nExchanges the authorization code for an access token,\nstores the connection, and redirects back to the dashboard.","operationId":"github_callback_api_v1_github_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/github/repos":{"get":{"tags":["github"],"summary":"List GitHub repositories","description":"List repositories accessible to the connected GitHub account.\n\nRequires an active GitHub connection.","operationId":"github_list_repos_api_v1_github_repos_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GitHubRepoResponse"},"type":"array","title":"Response Github List Repos Api V1 Github Repos Get"}}}}}}},"/api/v1/github/connection":{"get":{"tags":["github"],"summary":"Check GitHub connection status","description":"Check if GitHub is connected for the current org.","operationId":"github_connection_status_api_v1_github_connection_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitHubConnectionResponse"}}}}}}},"/api/v1/github/disconnect":{"delete":{"tags":["github"],"summary":"Disconnect GitHub account","description":"Remove the GitHub connection for the current org.","operationId":"github_disconnect_api_v1_github_disconnect_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GitHubDisconnectResponse"}}}}}}},"/api/v1/auth/oauth/{provider}/authorize":{"get":{"tags":["auth","oauth"],"summary":"Generate OAuth authorization URL","description":"Redirect the user to the OAuth provider for authorization.\n\nThe state token is embedded in the redirect URL (not a cookie)\nto avoid SameSite issues with cross-origin redirects.\n\n``?link=1`` marks the flow as \"connect this provider to my account\"\n(requires an active session) instead of a sign-in.","operationId":"oauth_authorize_api_v1_auth_oauth__provider__authorize_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"link","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Link"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/oauth/{provider}/callback":{"get":{"tags":["auth","oauth"],"summary":"OAuth callback handler","description":"Handle OAuth callback from the provider.\n\nValidates state, exchanges code for token, finds or creates user,\nsets session cookie, and redirects to the frontend. When the state\npurpose is ``link``, the provider is connected to the currently\nsigned-in user instead of starting a new session.","operationId":"oauth_callback_api_v1_auth_oauth__provider__callback_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/oauth/accounts":{"get":{"tags":["auth","oauth"],"summary":"List linked OAuth accounts","description":"Return the linked OAuth accounts for the current user.","operationId":"oauth_list_accounts_api_v1_auth_oauth_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/oauth/accounts/{provider}":{"delete":{"tags":["auth","oauth"],"summary":"Unlink an OAuth account","description":"Remove the OAuth link for the current user.\n\nUsers must have a password to unlink their only social sign-in method.","operationId":"oauth_unlink_account_api_v1_auth_oauth_accounts__provider__delete","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations":{"get":{"tags":["integrations"],"summary":"List available providers","description":"List all supported integration providers.","operationId":"list_providers_api_v1_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderListResponse"}}}}}},"post":{"tags":["integrations"],"summary":"Create a new integration","description":"Create a new third-party integration with encrypted credentials.","operationId":"create_new_integration_api_v1_integrations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/connections":{"get":{"tags":["integrations"],"summary":"List connected integrations","description":"List all integrations for the current organization.","operationId":"list_connections_api_v1_integrations_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IntegrationDetailResponse"},"type":"array","title":"Response List Connections Api V1 Integrations Connections Get"}}}}}}},"/api/v1/integrations/{integration_id}":{"get":{"tags":["integrations"],"summary":"Get integration details","description":"Get a single integration by ID.","operationId":"get_integration_detail_api_v1_integrations__integration_id__get","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["integrations"],"summary":"Update integration","description":"Update an integration's credentials or label.","operationId":"update_integration_detail_api_v1_integrations__integration_id__put","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Delete integration","description":"Delete a third-party integration.","operationId":"delete_integration_detail_api_v1_integrations__integration_id__delete","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/{integration_id}/test":{"post":{"tags":["integrations"],"summary":"Test integration connection","description":"Test an integration's connection by hitting the provider's API.","operationId":"test_integration_connection_api_v1_integrations__integration_id__test_post","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/integrations/scan":{"post":{"tags":["integrations"],"summary":"Run security analysis on all connected providers","description":"Run security analysis on all connected provider integrations.","operationId":"scan_all_integrations_api_v1_integrations_scan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationScanAllResponse"}}}}}}},"/api/v1/integrations/scan/{provider}":{"post":{"tags":["integrations"],"summary":"Run security analysis for a specific provider","description":"Run security analysis for a specific provider integration.","operationId":"scan_provider_integration_api_v1_integrations_scan__provider__post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects":{"get":{"tags":["projects"],"summary":"List all projects","operationId":"list_all_projects_api_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectListResponse"}}}}}},"post":{"tags":["projects"],"summary":"Create a project","operationId":"create_new_project_api_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project Detail","operationId":"get_project_detail_api_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"404":{"detail":"Project not found","description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["projects"],"summary":"Update Project Detail","operationId":"update_project_detail_api_v1_projects__project_id__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectResponse"}}}},"404":{"detail":"Project not found","description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Project Detail","operationId":"delete_project_detail_api_v1_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Project Detail Api V1 Projects  Project Id  Delete"}}}},"404":{"detail":"Project not found","description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/mcp-key":{"post":{"tags":["projects"],"summary":"Create a project-scoped API key (for MCP)","operationId":"create_project_mcp_key_api_v1_projects__project_id__mcp_key_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpKeyCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpKeyCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["projects"],"summary":"List project-scoped API keys","operationId":"list_project_mcp_keys_api_v1_projects__project_id__mcp_key_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/mcp-key/{key_id}":{"delete":{"tags":["projects"],"summary":"Revoke a project-scoped API key","operationId":"revoke_project_mcp_key_api_v1_projects__project_id__mcp_key__key_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Project Mcp Key Api V1 Projects  Project Id  Mcp Key  Key Id  Delete"}}}},"404":{"detail":"Key not found","description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/dashboard":{"get":{"tags":["projects"],"summary":"Get Project Dashboard","operationId":"get_project_dashboard_api_v1_projects__project_id__dashboard_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/health/trends":{"get":{"tags":["projects"],"summary":"Website Health score history for a project","description":"Return the health-score history (oldest → newest) for a project.\n\nSnapshots are recorded after each completed scan. The dashboard trend\nchart and the weekly health report email both read from this.","operationId":"get_project_health_trends_api_v1_projects__project_id__health_trends_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Lookback window in days","default":90,"title":"Days"},"description":"Lookback window in days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthTrendsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans":{"get":{"tags":["projects"],"summary":"List scans for a project","operationId":"list_project_scans_api_v1_projects__project_id__scans_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Project Scans Api V1 Projects  Project Id  Scans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects"],"summary":"Start a vulnerability scan for a project","operationId":"create_project_scan_api_v1_projects__project_id__scans_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStatusResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans/{scan_id}":{"get":{"tags":["projects"],"summary":"Get scan status","operationId":"get_scan_status_api_v1_projects__project_id__scans__scan_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Cancel a running scan","operationId":"cancel_scan_endpoint_api_v1_projects__project_id__scans__scan_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Scan Endpoint Api V1 Projects  Project Id  Scans  Scan Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans/{scan_id}/results":{"get":{"tags":["projects"],"summary":"Get full scan results","operationId":"get_scan_results_api_v1_projects__project_id__scans__scan_id__results_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans/{scan_id}/active":{"post":{"tags":["projects"],"summary":"Start active scan (background)","operationId":"start_active_scan_api_v1_projects__project_id__scans__scan_id__active_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"notify_email","in":"query","required":false,"schema":{"type":"boolean","description":"Send a completion email. UI-initiated scans pass false.","default":true,"title":"Notify Email"},"description":"Send a completion email. UI-initiated scans pass false."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStatusResponse"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/active-scan":{"post":{"tags":["projects"],"summary":"Run a standalone active scan (passive + active via worker)","description":"First-class standalone active scan.\n\nRuns the passive phase inline (fast), then _run_scan_task queues a real\nnuclei active scan through the worker with the requested profile. No email\nis sent — the user is watching the scan in the UI.","operationId":"run_standalone_active_scan_api_v1_projects__project_id__active_scan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveScanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStatusResponse"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans-history":{"get":{"tags":["projects"],"summary":"List all scans for a project (legacy)","operationId":"list_project_scans_legacy_api_v1_projects__project_id__scans_history_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Project Scans Legacy Api V1 Projects  Project Id  Scans History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/code-scans":{"get":{"tags":["projects"],"summary":"List Project Code Scans","operationId":"list_project_code_scans_api_v1_projects__project_id__code_scans_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeScanListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects"],"summary":"Manually trigger a code scan (GitHub Actions analysis)","description":"Run a GitHub Actions workflow security analysis now.\n\nUnlike the webhook-driven flow (which reacts to pushes/PRs), this lets a\nuser trigger a scan on demand. Requires the project to have a linked\nGitHub repository and the org to have a GitHub connection.","operationId":"trigger_code_scan_api_v1_projects__project_id__code_scans_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeScanTriggerResponse"}}}},"404":{"detail":"Project not found","description":"Not Found"},"400":{"detail":"GitHub not connected or no repo URL","description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/code-scans/{scan_id}":{"get":{"tags":["projects"],"summary":"Get code scan detail with findings","operationId":"get_code_scan_api_v1_projects__project_id__code_scans__scan_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeScanDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scan":{"post":{"tags":["projects"],"summary":"Run all scans on a project","operationId":"run_project_scans_api_v1_projects__project_id__scan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectScanResponse"}}}},"404":{"detail":"Project not found","description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/profile":{"post":{"tags":["projects"],"summary":"Profile Site","description":"Profile a target's technology stack. Pass ``?format=pdf`` to download a PDF report.","operationId":"profile_site_api_v1_projects__project_id__profile_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileRequest"}}}},"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/projects/{project_id}/performance":{"post":{"tags":["projects"],"summary":"Analyze Performance","description":"Queue a multi-page Web Vitals + Lighthouse performance analysis (runs in background worker).","operationId":"analyze_performance_api_v1_projects__project_id__performance_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/performance/{job_id}":{"get":{"tags":["projects"],"summary":"Get Performance Result","description":"Poll for a completed performance analysis result.","operationId":"get_performance_result_api_v1_projects__project_id__performance__job_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Performance Result Api V1 Projects  Project Id  Performance  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/performance/quick":{"post":{"tags":["projects"],"summary":"Quick Performance Check","description":"Run HTTP-based performance checks only (~2-5s, no Lighthouse).\n\nReturns protocol, compression, caching, image formats, JS bundle sizes,\nrequest count, third-party impact, font loading, CDN, and cache lifetimes.","operationId":"quick_performance_check_api_v1_projects__project_id__performance_quick_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceQuickRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PerformanceQuickResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/seo":{"post":{"tags":["projects"],"summary":"Analyze Seo","description":"Queue an SEO/AEO analysis (runs in background worker).","operationId":"analyze_seo_api_v1_projects__project_id__seo_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/seo/{job_id}":{"get":{"tags":["projects"],"summary":"Get Seo Result","description":"Poll for a completed SEO/AEO analysis result.","operationId":"get_seo_result_api_v1_projects__project_id__seo__job_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Seo Result Api V1 Projects  Project Id  Seo  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/accessibility":{"post":{"tags":["projects"],"summary":"Analyze Accessibility","description":"Queue an accessibility audit (runs in background worker).","operationId":"analyze_accessibility_api_v1_projects__project_id__accessibility_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessibilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/accessibility/{job_id}":{"get":{"tags":["projects"],"summary":"Get Accessibility Result","description":"Poll for a completed accessibility analysis result.","operationId":"get_accessibility_result_api_v1_projects__project_id__accessibility__job_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Accessibility Result Api V1 Projects  Project Id  Accessibility  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/deliverability":{"post":{"tags":["projects"],"summary":"Check Deliverability","description":"Run email deliverability DNS checks (SPF, DKIM, DMARC, MX, MTA-STS, etc.).\n\nRuns inline (~2-5s) — no background worker needed. Pass ``?format=pdf`` to\ndownload the result as a PDF report instead of JSON.","operationId":"check_deliverability_api_v1_projects__project_id__deliverability_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverabilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverabilityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring":{"get":{"tags":["projects"],"summary":"List Monitoring Targets","operationId":"list_monitoring_targets_api_v1_projects__project_id__monitoring_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["projects"],"summary":"Add Monitoring Target","operationId":"add_monitoring_target_api_v1_projects__project_id__monitoring_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/stats":{"get":{"tags":["projects"],"summary":"Get Monitoring Stats","operationId":"get_monitoring_stats_api_v1_projects__project_id__monitoring_stats_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}":{"get":{"tags":["projects"],"summary":"Get Monitoring Target","operationId":"get_monitoring_target_api_v1_projects__project_id__monitoring__target_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["projects"],"summary":"Update Monitoring Target","operationId":"update_monitoring_target_api_v1_projects__project_id__monitoring__target_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringTargetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Monitoring Target","operationId":"delete_monitoring_target_api_v1_projects__project_id__monitoring__target_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/scan":{"post":{"tags":["projects"],"summary":"Scan Monitoring Target Now","description":"Trigger an immediate security re-scan of a monitoring target.","operationId":"scan_monitoring_target_now_api_v1_projects__project_id__monitoring__target_id__scan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scan Monitoring Target Now Api V1 Projects  Project Id  Monitoring  Target Id  Scan Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/checks":{"get":{"tags":["projects"],"summary":"Get Monitoring Checks","operationId":"get_monitoring_checks_api_v1_projects__project_id__monitoring__target_id__checks_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringCheckListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/logs":{"get":{"tags":["projects"],"summary":"Get Monitoring Logs","operationId":"get_monitoring_logs_api_v1_projects__project_id__monitoring__target_id__logs_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/threat-scans":{"get":{"tags":["projects"],"summary":"List Threat Scans","description":"List completed threat re-scan history for a monitoring target.","operationId":"list_threat_scans_api_v1_projects__project_id__monitoring__target_id__threat_scans_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatScanListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/threat-scans/latest":{"get":{"tags":["projects"],"summary":"Get Latest Threat Scan","description":"Get the most recent completed threat scan for a target.","operationId":"get_latest_threat_scan_api_v1_projects__project_id__monitoring__target_id__threat_scans_latest_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ThreatScanResponse"},{"type":"object","additionalProperties":true}],"title":"Response Get Latest Threat Scan Api V1 Projects  Project Id  Monitoring  Target Id  Threat Scans Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/scans/{scan_id}/download":{"get":{"tags":["projects"],"summary":"Download audit report as JSON or PDF","description":"Download a full audit report for a completed scan.\n\nFormats:\n- ``pdf`` (default) — professional PDF report with Vergate watermark, severity\n  summary cards, drill-down findings, and module scores\n- ``json`` — raw JSON payload matching the results endpoint","operationId":"download_scan_report_api_v1_projects__project_id__scans__scan_id__download_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"pdf","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analysis/{job_id}/download":{"get":{"tags":["projects"],"summary":"Download standalone analysis report (PDF or JSON)","description":"Download a completed standalone analysis (SEO, AEO, performance, accessibility) as PDF or JSON.","operationId":"download_analysis_report_api_v1_projects__project_id__analysis__job_id__download_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"pdf","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/code-scans/{scan_id}/download":{"get":{"tags":["projects"],"summary":"Download code scan report (PDF or JSON)","description":"Download a code scan (GitHub Actions analysis) as a PDF report or raw JSON.","operationId":"download_code_scan_report_api_v1_projects__project_id__code_scans__scan_id__download_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"pdf","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/monitoring/{target_id}/download":{"get":{"tags":["projects"],"summary":"Download monitoring report (PDF or JSON)","description":"Download an uptime & monitoring report: target info, check history, audit logs, threat summary.","operationId":"download_monitoring_report_api_v1_projects__project_id__monitoring__target_id__download_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|pdf)$","default":"pdf","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/badges":{"post":{"tags":["badges"],"summary":"Issue","description":"Issue a new Vergate Verified badge.\n\nThe badge domain is always derived from the project's latest completed\nscan's target_url. Users cannot supply an arbitrary domain.","operationId":"issue_api_v1_projects__project_id__badges_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeIssueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["badges"],"summary":"List Project Badges","description":"List badges for a project.","operationId":"list_project_badges_api_v1_projects__project_id__badges_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BadgeResponse"},"title":"Response List Project Badges Api V1 Projects  Project Id  Badges Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/badges/{badge_id}":{"delete":{"tags":["badges"],"summary":"Revoke","description":"Revoke a badge (sets status to revoked).","operationId":"revoke_api_v1_projects__project_id__badges__badge_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"badge_id","in":"path","required":true,"schema":{"type":"string","title":"Badge Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/badge/verify/{token}":{"get":{"tags":["badges-public"],"summary":"Verify Endpoint","description":"Verify a badge token and return status + safe analytics.\n\nPublic: anyone can verify a badge and see the public health score.\nWhen the caller carries a valid session cookie whose org owns the badge,\nthe response also includes ``is_owner=true`` and the ``project_id`` so\nthe frontend can link to the full project dashboard.","operationId":"verify_endpoint_api_v1_badge_verify__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reports/verify":{"post":{"tags":["reports"],"summary":"Verify an audit report's signature","description":"Validate a report's verification token (or sha256 + signature).\n\nA valid response means the report was signed by Vergate and the digest it\ncovers has not changed — i.e. the file was not tampered with.","operationId":"verify_report_api_v1_reports_verify_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Report Api V1 Reports Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["reports"],"summary":"Verify an audit report's signature (GET form)","description":"GET variant — supports the URL printed inside PDF reports.","operationId":"verify_report_get_api_v1_reports_verify_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},{"name":"sha256","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"}},{"name":"signature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Report Get Api V1 Reports Verify Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics":{"get":{"tags":["analytics"],"summary":"List Sites","description":"List all analytics sites for a project (with embed codes).","operationId":"list_sites_api_v1_projects__project_id__analytics_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsSiteResponse"},"title":"Response List Sites Api V1 Projects  Project Id  Analytics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["analytics"],"summary":"Create Site","description":"Provision a white-labeled analytics site (tier-gated by plan).","operationId":"create_site_api_v1_projects__project_id__analytics_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSiteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics/{site_id}":{"get":{"tags":["analytics"],"summary":"Get Site","operationId":"get_site_api_v1_projects__project_id__analytics__site_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["analytics"],"summary":"Update Site","description":"Rename, change domain, or pause/resume tracking for a site.","operationId":"update_site_api_v1_projects__project_id__analytics__site_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSiteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["analytics"],"summary":"Delete Site","description":"Delete a site and all its collected analytics data.","operationId":"delete_site_api_v1_projects__project_id__analytics__site_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics/{site_id}/stats":{"get":{"tags":["analytics"],"summary":"Get Stats","operationId":"get_stats_api_v1_projects__project_id__analytics__site_id__stats_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics/{site_id}/metrics":{"get":{"tags":["analytics"],"summary":"Get Metrics","operationId":"get_metrics_api_v1_projects__project_id__analytics__site_id__metrics_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"path","title":"Type"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Metrics Api V1 Projects  Project Id  Analytics  Site Id  Metrics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics/{site_id}/pageviews":{"get":{"tags":["analytics"],"summary":"Get Pageviews","operationId":"get_pageviews_api_v1_projects__project_id__analytics__site_id__pageviews_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"unit","in":"query","required":false,"schema":{"type":"string","default":"day","title":"Unit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageviewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/analytics/{site_id}/sessions":{"get":{"tags":["analytics"],"summary":"Get Sessions","operationId":"get_sessions_api_v1_projects__project_id__analytics__site_id__sessions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Sessions Api V1 Projects  Project Id  Analytics  Site Id  Sessions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking":{"get":{"tags":["error-tracking"],"summary":"List Sites","description":"List all error tracking sites for a project (with embed codes).","operationId":"list_sites_api_v1_projects__project_id__error_tracking_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ErrorTrackingSiteResponse"},"title":"Response List Sites Api V1 Projects  Project Id  Error Tracking Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["error-tracking"],"summary":"Create Site","description":"Provision a white-labeled error tracking site (tier-gated by plan).","operationId":"create_site_api_v1_projects__project_id__error_tracking_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingSiteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking/{site_id}":{"get":{"tags":["error-tracking"],"summary":"Get Site","operationId":"get_site_api_v1_projects__project_id__error_tracking__site_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["error-tracking"],"summary":"Update Site","description":"Rename, change domain, or pause/resume error reporting for a site.","operationId":"update_site_api_v1_projects__project_id__error_tracking__site_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingSiteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingSiteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["error-tracking"],"summary":"Delete Site","description":"Delete a site and all its collected error data.","operationId":"delete_site_api_v1_projects__project_id__error_tracking__site_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking/{site_id}/issues":{"get":{"tags":["error-tracking"],"summary":"Get Issues","description":"List issues for a site, newest first, grouped by error.","operationId":"get_issues_api_v1_projects__project_id__error_tracking__site_id__issues_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Issues Api V1 Projects  Project Id  Error Tracking  Site Id  Issues Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking/{site_id}/issues/{issue_id}/events":{"get":{"tags":["error-tracking"],"summary":"Get Issue Events","description":"List individual occurrences (with stack traces) for an issue.","operationId":"get_issue_events_api_v1_projects__project_id__error_tracking__site_id__issues__issue_id__events_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"issue_id","in":"path","required":true,"schema":{"type":"string","title":"Issue Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Issue Events Api V1 Projects  Project Id  Error Tracking  Site Id  Issues  Issue Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking/{site_id}/issues/resolve":{"post":{"tags":["error-tracking"],"summary":"Resolve Issues","description":"Bulk-resolve issues. Body: {\"issue_ids\": [\"123\", ...]}.","operationId":"resolve_issues_api_v1_projects__project_id__error_tracking__site_id__issues_resolve_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resolve Issues Api V1 Projects  Project Id  Error Tracking  Site Id  Issues Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/error-tracking/{site_id}/stats":{"get":{"tags":["error-tracking"],"summary":"Get Stats","description":"Error count time series for the last N days (chart data).","operationId":"get_stats_api_v1_projects__project_id__error_tracking__site_id__stats_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTrackingStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}}},"components":{"schemas":{"AccessibilityRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"AccessibilityRequest"},"ActiveScanRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"zap_profile":{"type":"string","enum":["fast","thorough"],"title":"Zap Profile","default":"thorough"},"max_depth":{"type":"integer","maximum":5.0,"minimum":0.0,"title":"Max Depth","default":2},"auth_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Auth Headers"},"auth_cookies":{"additionalProperties":{"type":"string"},"type":"object","title":"Auth Cookies"}},"type":"object","required":["url"],"title":"ActiveScanRequest","description":"Standalone active scan launcher request.\n\nRuns a passive phase first (inline) then queues a real nuclei active scan\nthrough the worker queue with the requested profile."},"AnalysisStatusResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"scan_type":{"type":"string","title":"Scan Type"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["scan_id","scan_type","status"],"title":"AnalysisStatusResponse","description":"Returned when an analysis job is queued or still processing."},"AnalyticsSiteCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"domain":{"type":"string","maxLength":255,"minLength":1,"title":"Domain"}},"type":"object","required":["name","domain"],"title":"AnalyticsSiteCreate"},"AnalyticsSiteResponse":{"properties":{"site_id":{"type":"string","title":"Site Id"},"project_id":{"type":"string","title":"Project Id"},"name":{"type":"string","title":"Name"},"domain":{"type":"string","title":"Domain"},"status":{"type":"string","title":"Status"},"embed_code":{"type":"string","title":"Embed Code"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["site_id","project_id","name","domain","status","embed_code","created_at"],"title":"AnalyticsSiteResponse"},"AnalyticsSiteUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"domain":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Domain"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"AnalyticsSiteUpdate"},"ApiKeyResponse":{"properties":{"api_key":{"type":"string","title":"Api Key"},"api_key_prefix":{"type":"string","title":"Api Key Prefix"}},"type":"object","required":["api_key","api_key_prefix"],"title":"ApiKeyResponse"},"BadgeIssueResponse":{"properties":{"badge_id":{"type":"string","title":"Badge Id"},"token":{"type":"string","title":"Token"},"domain":{"type":"string","title":"Domain"},"tier":{"type":"string","title":"Tier"},"expires_at":{"type":"string","title":"Expires At"},"embed_code":{"type":"string","title":"Embed Code"}},"type":"object","required":["badge_id","token","domain","tier","expires_at","embed_code"],"title":"BadgeIssueResponse"},"BadgeResponse":{"properties":{"badge_id":{"type":"string","title":"Badge Id"},"token":{"type":"string","title":"Token"},"domain":{"type":"string","title":"Domain"},"tier":{"type":"string","title":"Tier"},"status":{"type":"string","title":"Status"},"project_id":{"type":"string","title":"Project Id"},"expires_at":{"type":"string","title":"Expires At"},"last_verified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["badge_id","token","domain","tier","status","project_id","expires_at","last_verified_at","created_at"],"title":"BadgeResponse"},"BadgeVerifyResponse":{"properties":{"status":{"type":"string","title":"Status"},"badge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Badge Id"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"verified_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified Since"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"analytics":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Analytics"},"health":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Health"},"monitoring":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Monitoring"},"is_owner":{"type":"boolean","title":"Is Owner","default":false},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"last_scanned":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scanned"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status"],"title":"BadgeVerifyResponse"},"CheckResultResponse":{"properties":{"check_name":{"type":"string","title":"Check Name"},"status":{"type":"string","title":"Status"},"findings_count":{"type":"integer","title":"Findings Count","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"duration_seconds":{"type":"number","title":"Duration Seconds","default":0.0}},"type":"object","required":["check_name","status"],"title":"CheckResultResponse"},"CheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan"},"interval":{"type":"string","title":"Interval","default":"monthly"}},"type":"object","required":["plan"],"title":"CheckoutRequest"},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"plan":{"type":"string","title":"Plan"},"interval":{"type":"string","title":"Interval"}},"type":"object","required":["checkout_url","plan","interval"],"title":"CheckoutResponse"},"CodeScanDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"scan_type":{"type":"string","title":"Scan Type"},"status":{"type":"string","title":"Status"},"findings":{"items":{"$ref":"#/components/schemas/CodeScanFinding"},"type":"array","title":"Findings"},"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","scan_type","status","created_at"],"title":"CodeScanDetailResponse","description":"Full code scan detail with findings array."},"CodeScanFinding":{"properties":{"rule":{"type":"string","title":"Rule","default":""},"severity":{"type":"string","title":"Severity","default":"info"},"title":{"type":"string","title":"Title","default":""},"description":{"type":"string","title":"Description","default":""},"file":{"type":"string","title":"File","default":""},"line":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line"},"evidence":{"type":"string","title":"Evidence","default":""},"remediation":{"type":"string","title":"Remediation","default":""}},"type":"object","title":"CodeScanFinding","description":"A single finding from a code scan."},"CodeScanListResponse":{"properties":{"code_scans":{"items":{"$ref":"#/components/schemas/CodeScanResponse"},"type":"array","title":"Code Scans"}},"type":"object","required":["code_scans"],"title":"CodeScanListResponse","description":"List of code scans for a project."},"CodeScanResponse":{"properties":{"id":{"type":"string","title":"Id"},"scan_type":{"type":"string","title":"Scan Type"},"status":{"type":"string","title":"Status"},"findings_count":{"type":"integer","title":"Findings Count","default":0},"summary":{"additionalProperties":true,"type":"object","title":"Summary"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","scan_type","status","created_at"],"title":"CodeScanResponse","description":"A single code scan entry."},"CodeScanTriggerResponse":{"properties":{"code_scan_id":{"type":"string","title":"Code Scan Id"},"scan_type":{"type":"string","title":"Scan Type","default":"github_actions"},"status":{"type":"string","title":"Status","default":"running"}},"type":"object","required":["code_scan_id"],"title":"CodeScanTriggerResponse","description":"Result of manually triggering a code scan."},"DashboardSummaryResponse":{"properties":{"project":{"$ref":"#/components/schemas/_ProjectInfo"},"latest_scan":{"anyOf":[{"$ref":"#/components/schemas/_LatestScanInfo"},{"type":"null"}]},"latest_performance":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest Performance"},"latest_seo":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest Seo"},"latest_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest Profile"},"latest_a11y":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest A11Y"},"issues_summary":{"$ref":"#/components/schemas/ProjectScanCounts"},"performance_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Performance Score"},"seo_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seo Score"},"monitoring":{"$ref":"#/components/schemas/_MonitoringInfo"},"health":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Health"}},"type":"object","required":["project"],"title":"DashboardSummaryResponse","description":"Dashboard response matching the frontend's DashboardSummary type."},"DeliverabilityCheckResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"description":{"type":"string","title":"Description"},"value":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Value"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"ai_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Prompt"}},"type":"object","required":["id","title","status","description"],"title":"DeliverabilityCheckResponse"},"DeliverabilityRequest":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"DeliverabilityRequest"},"DeliverabilityResponse":{"properties":{"domain":{"type":"string","title":"Domain"},"checks":{"items":{"$ref":"#/components/schemas/DeliverabilityCheckResponse"},"type":"array","title":"Checks"},"score":{"type":"integer","title":"Score"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["domain","checks","score","duration_seconds"],"title":"DeliverabilityResponse"},"DetectionResponse":{"properties":{"category":{"type":"string","title":"Category"},"technology":{"type":"string","title":"Technology"},"confidence":{"type":"number","title":"Confidence"},"evidence":{"items":{"type":"string"},"type":"array","title":"Evidence"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"}},"type":"object","required":["category","technology","confidence","evidence"],"title":"DetectionResponse"},"EarlyAccessResponse":{"properties":{"active":{"type":"boolean","title":"Active"},"percent_off":{"type":"integer","title":"Percent Off"},"ends_at":{"type":"string","title":"Ends At"},"duration_months":{"type":"integer","title":"Duration Months"},"basis_points":{"type":"integer","title":"Basis Points"}},"type":"object","required":["active","percent_off","ends_at","duration_months","basis_points"],"title":"EarlyAccessResponse","description":"Early Access launch offer status (null body when no promo is running)."},"ErrorResponse":{"properties":{"detail":{"type":"string","title":"Detail"}},"type":"object","required":["detail"],"title":"ErrorResponse"},"ErrorTrackingSiteCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"domain":{"type":"string","maxLength":255,"minLength":1,"title":"Domain"}},"type":"object","required":["name","domain"],"title":"ErrorTrackingSiteCreate"},"ErrorTrackingSiteResponse":{"properties":{"site_id":{"type":"string","title":"Site Id"},"project_id":{"type":"string","title":"Project Id"},"name":{"type":"string","title":"Name"},"domain":{"type":"string","title":"Domain"},"status":{"type":"string","title":"Status"},"embed_code":{"type":"string","title":"Embed Code"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["site_id","project_id","name","domain","status","embed_code","created_at"],"title":"ErrorTrackingSiteResponse"},"ErrorTrackingSiteUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"domain":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Domain"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ErrorTrackingSiteUpdate"},"ErrorTrackingStatsResponse":{"properties":{"intervals":{"items":{"type":"string"},"type":"array","title":"Intervals","default":[]},"counts":{"items":{"type":"integer"},"type":"array","title":"Counts","default":[]}},"type":"object","title":"ErrorTrackingStatsResponse"},"EvidenceResponse":{"properties":{"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"request":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request"},"response_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Response Headers"},"missing_headers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Missing Headers"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers"},"matched_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Pattern"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Excerpt"},"cookie_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cookie Name"},"cookie_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cookie Value"}},"type":"object","title":"EvidenceResponse"},"FeedbackRequest":{"properties":{"feedback":{"type":"string","maxLength":5000,"minLength":1,"title":"Feedback"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"}},"type":"object","required":["feedback"],"title":"FeedbackRequest"},"FeedbackResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"message":{"type":"string","title":"Message","default":"Feedback sent to our team. Thank you!"}},"type":"object","title":"FeedbackResponse"},"FindingResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/RuleMetadataResponse"},"endpoint":{"type":"string","title":"Endpoint"},"likelihood":{"type":"string","title":"Likelihood"},"evidence":{"$ref":"#/components/schemas/EvidenceResponse"},"source":{"type":"string","title":"Source","default":"custom"},"llm_prompt":{"type":"string","title":"Llm Prompt","default":""}},"type":"object","required":["metadata","endpoint","likelihood","evidence"],"title":"FindingResponse"},"FreeScanFindingResponse":{"properties":{"title":{"type":"string","title":"Title"},"severity":{"type":"string","title":"Severity"},"likelihood":{"type":"string","title":"Likelihood"},"description":{"type":"string","title":"Description"},"remediation":{"type":"string","title":"Remediation"},"llm_prompt":{"type":"string","title":"Llm Prompt"}},"type":"object","required":["title","severity","likelihood","description","remediation","llm_prompt"],"title":"FreeScanFindingResponse"},"FreeScanRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"FreeScanRequest"},"FreeScanResultsResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"status":{"type":"string","title":"Status"},"total_issues":{"type":"integer","title":"Total Issues"},"findings":{"items":{"$ref":"#/components/schemas/FreeScanFindingResponse"},"type":"array","title":"Findings"},"summary":{"type":"string","title":"Summary"},"signup_cta":{"type":"string","title":"Signup Cta"}},"type":"object","required":["scan_id","status","total_issues","findings","summary","signup_cta"],"title":"FreeScanResultsResponse"},"FreeScanStartResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"message":{"type":"string","title":"Message"}},"type":"object","required":["scan_id","message"],"title":"FreeScanStartResponse"},"FreeScanStatusResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"status":{"type":"string","title":"Status"},"progress_lines":{"items":{"type":"string"},"type":"array","title":"Progress Lines"}},"type":"object","required":["scan_id","status","progress_lines"],"title":"FreeScanStatusResponse"},"GitHubAuthResponse":{"properties":{"url":{"type":"string","title":"Url"},"state":{"type":"string","title":"State"}},"type":"object","required":["url","state"],"title":"GitHubAuthResponse","description":"Response when initiating GitHub OAuth flow."},"GitHubConnectionResponse":{"properties":{"connected":{"type":"boolean","title":"Connected"},"github_login":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Login"},"github_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Github User Id"},"connected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected At"}},"type":"object","required":["connected"],"title":"GitHubConnectionResponse","description":"Current GitHub connection status."},"GitHubDisconnectResponse":{"properties":{"disconnected":{"type":"boolean","title":"Disconnected"}},"type":"object","required":["disconnected"],"title":"GitHubDisconnectResponse","description":"Response after disconnecting GitHub."},"GitHubRepoResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"full_name":{"type":"string","title":"Full Name"},"html_url":{"type":"string","title":"Html Url"},"default_branch":{"type":"string","title":"Default Branch"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"private":{"type":"boolean","title":"Private","default":false},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["id","name","full_name","html_url","default_branch"],"title":"GitHubRepoResponse","description":"A GitHub repository."},"HTTPCheckItemResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"description":{"type":"string","title":"Description"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Value"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"ai_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Prompt"}},"type":"object","required":["id","title","status","description"],"title":"HTTPCheckItemResponse"},"HTTPCheckResultResponse":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/HTTPCheckItemResponse"},"type":"array","title":"Checks"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"passed":{"type":"integer","title":"Passed","default":0},"warnings":{"type":"integer","title":"Warnings","default":0},"failed":{"type":"integer","title":"Failed","default":0},"score":{"type":"integer","title":"Score","default":0}},"type":"object","required":["checks","duration_seconds"],"title":"HTTPCheckResultResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthTrendsResponse":{"properties":{"project_id":{"type":"string","title":"Project Id"},"days":{"type":"integer","title":"Days"},"snapshots":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Snapshots","default":[]},"latest":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Latest"}},"type":"object","required":["project_id","days"],"title":"HealthTrendsResponse"},"IntegrationCreateRequest":{"properties":{"provider":{"type":"string","title":"Provider","description":"Provider ID: github, vercel, netlify, supabase"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials","description":"Provider-specific credentials"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional label for this connection"}},"type":"object","required":["provider","credentials"],"title":"IntegrationCreateRequest"},"IntegrationDeleteResponse":{"properties":{"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["deleted"],"title":"IntegrationDeleteResponse"},"IntegrationDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"status":{"type":"string","title":"Status"},"last_health_check":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Health Check"},"health_check_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Check Error"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"has_credentials":{"type":"boolean","title":"Has Credentials","default":true}},"type":"object","required":["id","provider","label","status","last_health_check","health_check_error","created_at","updated_at"],"title":"IntegrationDetailResponse"},"IntegrationScanAllResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/IntegrationScanResponse"},"type":"array","title":"Results"},"total_providers":{"type":"integer","title":"Total Providers"},"avg_score":{"type":"integer","title":"Avg Score"},"duration_seconds":{"type":"number","title":"Duration Seconds"}},"type":"object","required":["results","total_providers","avg_score","duration_seconds"],"title":"IntegrationScanAllResponse"},"IntegrationScanResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"checks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Checks"},"score":{"type":"integer","title":"Score"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"scanned_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scanned At"}},"type":"object","required":["provider","checks","score","duration_seconds"],"title":"IntegrationScanResponse"},"IntegrationTestResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"IntegrationTestResponse"},"IntegrationUpdateRequest":{"properties":{"credentials":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credentials","description":"Updated credentials"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Updated label"}},"type":"object","title":"IntegrationUpdateRequest"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"remember_me":{"type":"boolean","title":"Remember Me","default":false}},"type":"object","required":["email","password"],"title":"LoginRequest"},"LoginResponse":{"properties":{"message":{"type":"string","title":"Message"},"user_id":{"type":"string","title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"plan":{"type":"string","title":"Plan"},"email_verified":{"type":"boolean","title":"Email Verified"},"free_scans_remaining":{"type":"integer","title":"Free Scans Remaining"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["message","user_id","org_id","email","name","plan","email_verified","free_scans_remaining"],"title":"LoginResponse"},"McpKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"McpKeyCreateRequest","description":"Create a named project-scoped key."},"McpKeyCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["id","name","key_prefix","api_key"],"title":"McpKeyCreateResponse","description":"Newly created key — includes the raw key shown exactly once."},"McpKeyListResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/McpKeyResponse"},"type":"array","title":"Keys"}},"type":"object","title":"McpKeyListResponse"},"McpKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","key_prefix"],"title":"McpKeyResponse","description":"A project-scoped MCP/API key (prefix only — raw key is never stored)."},"MeResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"name":{"type":"string","title":"Name"},"org_id":{"type":"string","title":"Org Id"},"org_name":{"type":"string","title":"Org Name"},"plan":{"type":"string","title":"Plan"},"email_verified":{"type":"boolean","title":"Email Verified"},"api_key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Prefix"},"free_scans_remaining":{"type":"integer","title":"Free Scans Remaining"},"is_paid":{"type":"boolean","title":"Is Paid"},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"projects_remaining":{"type":"integer","title":"Projects Remaining","default":0},"project_limit":{"type":"integer","title":"Project Limit","default":0},"weekly_health_email":{"type":"boolean","title":"Weekly Health Email","default":true},"theme_pref":{"type":"string","title":"Theme Pref","default":"system"}},"type":"object","required":["user_id","email","name","org_id","org_name","plan","email_verified","api_key_prefix","free_scans_remaining","is_paid"],"title":"MeResponse"},"MonitoringCheckListResponse":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/MonitoringCheckResponse"},"type":"array","title":"Checks"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["checks","total"],"title":"MonitoringCheckListResponse"},"MonitoringCheckResponse":{"properties":{"id":{"type":"string","title":"Id"},"status_code":{"type":"integer","title":"Status Code"},"response_time_ms":{"type":"integer","title":"Response Time Ms"},"ssl_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ssl Valid"},"ssl_expiry_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ssl Expiry Days"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"checked_at":{"type":"string","title":"Checked At"}},"type":"object","required":["id","status_code","response_time_ms","ssl_valid","ssl_expiry_days","error","checked_at"],"title":"MonitoringCheckResponse"},"MonitoringLogListResponse":{"properties":{"logs":{"items":{"$ref":"#/components/schemas/MonitoringLogResponse"},"type":"array","title":"Logs"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["logs","total"],"title":"MonitoringLogListResponse"},"MonitoringLogResponse":{"properties":{"id":{"type":"string","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"message":{"type":"string","title":"Message"},"event_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Event Data"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","event_type","message","event_data","created_at"],"title":"MonitoringLogResponse"},"MonitoringStatsResponse":{"properties":{"total_targets":{"type":"integer","title":"Total Targets"},"active_targets":{"type":"integer","title":"Active Targets"},"targets_up":{"type":"integer","title":"Targets Up"},"targets_down":{"type":"integer","title":"Targets Down"},"avg_uptime_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Uptime 24H"}},"type":"object","required":["total_targets","active_targets","targets_up","targets_down","avg_uptime_24h"],"title":"MonitoringStatsResponse"},"MonitoringTargetCreate":{"properties":{"url":{"type":"string","title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"check_interval":{"type":"integer","title":"Check Interval","default":5},"scan_enabled":{"type":"boolean","title":"Scan Enabled","default":true},"scan_interval":{"type":"integer","title":"Scan Interval","default":1440}},"type":"object","required":["url"],"title":"MonitoringTargetCreate"},"MonitoringTargetDetail":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"name":{"type":"string","title":"Name"},"check_interval":{"type":"integer","title":"Check Interval"},"scan_enabled":{"type":"boolean","title":"Scan Enabled"},"scan_interval":{"type":"integer","title":"Scan Interval"},"status":{"type":"string","title":"Status"},"last_uptime_check":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Uptime Check"},"last_scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan Id"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"uptime_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Uptime 24H"},"last_check":{"anyOf":[{"$ref":"#/components/schemas/MonitoringCheckResponse"},{"type":"null"}]},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"recent_checks":{"items":{"$ref":"#/components/schemas/MonitoringCheckResponse"},"type":"array","title":"Recent Checks"}},"type":"object","required":["id","url","name","check_interval","scan_enabled","scan_interval","status","last_uptime_check","last_scan_id","consecutive_failures","uptime_24h","last_check","created_at","updated_at","recent_checks"],"title":"MonitoringTargetDetail"},"MonitoringTargetListResponse":{"properties":{"targets":{"items":{"$ref":"#/components/schemas/MonitoringTargetResponse"},"type":"array","title":"Targets"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["targets","total"],"title":"MonitoringTargetListResponse"},"MonitoringTargetResponse":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"name":{"type":"string","title":"Name"},"check_interval":{"type":"integer","title":"Check Interval"},"scan_enabled":{"type":"boolean","title":"Scan Enabled"},"scan_interval":{"type":"integer","title":"Scan Interval"},"status":{"type":"string","title":"Status"},"last_uptime_check":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Uptime Check"},"last_scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan Id"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"uptime_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Uptime 24H"},"last_check":{"anyOf":[{"$ref":"#/components/schemas/MonitoringCheckResponse"},{"type":"null"}]},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","url","name","check_interval","scan_enabled","scan_interval","status","last_uptime_check","last_scan_id","consecutive_failures","uptime_24h","last_check","created_at","updated_at"],"title":"MonitoringTargetResponse"},"MonitoringTargetUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"check_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Check Interval"},"scan_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scan Enabled"},"scan_interval":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Scan Interval"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"MonitoringTargetUpdate"},"OrgSettingsRequest":{"properties":{"weekly_health_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Weekly Health Email"}},"type":"object","title":"OrgSettingsRequest"},"OrgSettingsResponse":{"properties":{"org_id":{"type":"string","title":"Org Id"},"weekly_health_email":{"type":"boolean","title":"Weekly Health Email"}},"type":"object","required":["org_id","weekly_health_email"],"title":"OrgSettingsResponse"},"PageviewsResponse":{"properties":{"pageviews":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Pageviews","default":[]},"sessions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sessions","default":[]}},"type":"object","title":"PageviewsResponse"},"PerformanceQuickRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"PerformanceQuickRequest"},"PerformanceQuickResponse":{"properties":{"target_url":{"type":"string","title":"Target Url"},"http_checks":{"$ref":"#/components/schemas/HTTPCheckResultResponse"},"duration_seconds":{"type":"number","title":"Duration Seconds"}},"type":"object","required":["target_url","http_checks","duration_seconds"],"title":"PerformanceQuickResponse"},"PerformanceRequest":{"properties":{"url":{"type":"string","title":"Url"},"form_factor":{"type":"string","title":"Form Factor","default":"mobile"},"max_pages":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Pages","default":10},"max_depth":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"Max Depth","default":3}},"type":"object","required":["url"],"title":"PerformanceRequest"},"PlansResponse":{"properties":{"plans":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Plans"}},"type":"object","required":["plans"],"title":"PlansResponse"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse"},"ProfileRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"ProfileRequest"},"ProfileResponse":{"properties":{"target_url":{"type":"string","title":"Target Url"},"final_url":{"type":"string","title":"Final Url"},"detections":{"items":{"$ref":"#/components/schemas/DetectionResponse"},"type":"array","title":"Detections"},"duration_seconds":{"type":"number","title":"Duration Seconds"},"total_technologies":{"type":"integer","title":"Total Technologies"},"categories":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Categories"}},"type":"object","required":["target_url","final_url","detections","duration_seconds","total_technologies","categories"],"title":"ProfileResponse"},"ProjectCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Default Url"},"github_repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Repo Url"},"github_branch":{"type":"string","title":"Github Branch","default":"main"}},"type":"object","required":["name","default_url"],"title":"ProjectCreateRequest","description":"Request to create a new project."},"ProjectListResponse":{"properties":{"projects":{"items":{"$ref":"#/components/schemas/ProjectResponse"},"type":"array","title":"Projects"}},"type":"object","required":["projects"],"title":"ProjectListResponse","description":"Response for listing projects."},"ProjectResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"github_repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Repo Url"},"github_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Branch"},"default_url":{"type":"string","title":"Default Url"},"scan_count":{"type":"integer","title":"Scan Count","default":0},"latest_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Scan At"},"issues_summary":{"$ref":"#/components/schemas/ProjectScanCounts"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","default_url","created_at","updated_at"],"title":"ProjectResponse","description":"Response for a single project."},"ProjectScanCounts":{"properties":{"passive":{"type":"integer","title":"Passive","default":0},"active":{"type":"integer","title":"Active","default":0},"seo":{"type":"integer","title":"Seo","default":0},"aeo":{"type":"integer","title":"Aeo","default":0},"performance":{"type":"integer","title":"Performance","default":0},"accessibility":{"type":"integer","title":"Accessibility","default":0},"profiling":{"type":"integer","title":"Profiling","default":0},"code":{"type":"integer","title":"Code","default":0},"critical":{"type":"integer","title":"Critical","default":0},"high":{"type":"integer","title":"High","default":0},"medium":{"type":"integer","title":"Medium","default":0},"low":{"type":"integer","title":"Low","default":0},"info":{"type":"integer","title":"Info","default":0}},"type":"object","title":"ProjectScanCounts","description":"Issue counts by scan type and severity."},"ProjectScanResponse":{"properties":{"project_id":{"type":"string","title":"Project Id"},"scan_ids":{"additionalProperties":{"type":"string"},"type":"object","title":"Scan Ids"},"message":{"type":"string","title":"Message"}},"type":"object","required":["project_id","scan_ids","message"],"title":"ProjectScanResponse","description":"Response when triggering a batch scan on a project."},"ProjectUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Default Url"},"github_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github Branch"}},"type":"object","title":"ProjectUpdateRequest","description":"Request to update a project."},"ProviderInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"auth_type":{"type":"string","title":"Auth Type"},"icon":{"type":"string","title":"Icon"},"setup_url":{"type":"string","title":"Setup Url"},"fields":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Fields"}},"type":"object","required":["id","name","description","auth_type","icon","setup_url","fields"],"title":"ProviderInfo"},"ProviderListResponse":{"properties":{"providers":{"items":{"$ref":"#/components/schemas/ProviderInfo"},"type":"array","title":"Providers"}},"type":"object","required":["providers"],"title":"ProviderListResponse"},"ReportVerifyRequest":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature"}},"type":"object","title":"ReportVerifyRequest","description":"A verification token OR a sha256 + signature pair."},"ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ResendVerificationRequest"},"RuleMetadataResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"severity":{"type":"string","title":"Severity"},"description":{"type":"string","title":"Description"},"why_it_matters":{"type":"string","title":"Why It Matters","default":""},"remediation":{"type":"string","title":"Remediation","default":""},"references":{"items":{"type":"string"},"type":"array","title":"References"},"cwe_id":{"type":"string","title":"Cwe Id","default":""},"owasp_category":{"type":"string","title":"Owasp Category","default":""}},"type":"object","required":["id","title","category","severity","description"],"title":"RuleMetadataResponse"},"ScanEventResponse":{"properties":{"id":{"type":"string","title":"Id"},"ts":{"type":"string","title":"Ts"},"level":{"type":"string","title":"Level"},"component":{"type":"string","title":"Component"},"message":{"type":"string","title":"Message"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"}},"type":"object","required":["id","ts","level","component","message"],"title":"ScanEventResponse","description":"A single structured scan event."},"ScanRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"max_depth":{"type":"integer","maximum":5.0,"minimum":0.0,"title":"Max Depth","default":2},"max_concurrent":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Max Concurrent","default":50},"timeout_seconds":{"type":"integer","maximum":120.0,"minimum":5.0,"title":"Timeout Seconds","default":30},"enabled_checks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Enabled Checks"},"disabled_checks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Disabled Checks"},"use_zap":{"type":"boolean","title":"Use Zap","default":true},"zap_profile":{"type":"string","pattern":"^(baseline|fast|thorough)$","title":"Zap Profile","default":"baseline"},"zap_timeout":{"type":"integer","maximum":3600.0,"minimum":300.0,"title":"Zap Timeout","default":1800},"auth_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Auth Headers"},"auth_cookies":{"additionalProperties":{"type":"string"},"type":"object","title":"Auth Cookies"},"run_modules":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Run Modules"}},"type":"object","required":["url"],"title":"ScanRequest"},"ScanResultResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"target":{"type":"string","title":"Target"},"status":{"type":"string","title":"Status"},"active_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Status"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"findings":{"items":{"$ref":"#/components/schemas/FindingResponse"},"type":"array","title":"Findings"},"check_results":{"items":{"$ref":"#/components/schemas/CheckResultResponse"},"type":"array","title":"Check Results"},"summary":{"anyOf":[{"$ref":"#/components/schemas/ScanSummaryResponse"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"zap_scan_duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Zap Scan Duration"},"all_findings_prompt":{"type":"string","title":"All Findings Prompt","default":""},"events":{"items":{"$ref":"#/components/schemas/ScanEventResponse"},"type":"array","title":"Events"},"module_status":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Module Status"},"profile_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Profile Result"},"performance_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Performance Result"},"seo_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Seo Result"},"a11y_result":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"A11Y Result"}},"type":"object","required":["scan_id","target","status"],"title":"ScanResultResponse"},"ScanStatusResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"status":{"type":"string","title":"Status"},"target":{"type":"string","title":"Target"},"active_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Status"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"progress":{"type":"string","title":"Progress","default":""},"progress_lines":{"items":{"type":"string"},"type":"array","title":"Progress Lines"},"module_status":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Module Status"}},"type":"object","required":["scan_id","status","target"],"title":"ScanStatusResponse"},"ScanSummaryResponse":{"properties":{"total_endpoints":{"type":"integer","title":"Total Endpoints"},"total_findings":{"type":"integer","title":"Total Findings"},"critical":{"type":"integer","title":"Critical"},"high":{"type":"integer","title":"High"},"medium":{"type":"integer","title":"Medium"},"low":{"type":"integer","title":"Low"},"info":{"type":"integer","title":"Info"},"passive_checks_run":{"type":"integer","title":"Passive Checks Run"},"active_checks_run":{"type":"integer","title":"Active Checks Run"},"zap_findings_count":{"type":"integer","title":"Zap Findings Count","default":0},"duration_seconds":{"type":"number","title":"Duration Seconds"}},"type":"object","required":["total_endpoints","total_findings","critical","high","medium","low","info","passive_checks_run","active_checks_run","duration_seconds"],"title":"ScanSummaryResponse"},"SeoRequest":{"properties":{"url":{"type":"string","title":"Url"},"mode":{"type":"string","title":"Mode","default":"seo"}},"type":"object","required":["url"],"title":"SeoRequest"},"SignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"type":"string","title":"Name"},"org_name":{"type":"string","title":"Org Name"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","name","org_name","password"],"title":"SignupRequest"},"SignupResponse":{"properties":{"message":{"type":"string","title":"Message"},"user_id":{"type":"string","title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["message","user_id","org_id","email"],"title":"SignupResponse"},"StatsResponse":{"properties":{"pageviews":{"type":"integer","title":"Pageviews","default":0},"visitors":{"type":"integer","title":"Visitors","default":0},"visits":{"type":"integer","title":"Visits","default":0},"bounces":{"type":"integer","title":"Bounces","default":0},"totaltime":{"type":"integer","title":"Totaltime","default":0},"comparison":{"additionalProperties":true,"type":"object","title":"Comparison","default":{}}},"type":"object","title":"StatsResponse"},"ThreatScanFinding":{"properties":{"title":{"type":"string","title":"Title"},"severity":{"type":"string","title":"Severity"},"endpoint":{"type":"string","title":"Endpoint"},"rule_id":{"type":"string","title":"Rule Id"}},"type":"object","required":["title","severity","endpoint","rule_id"],"title":"ThreatScanFinding","description":"A single finding within a threat scan result (used for new/regressed lists)."},"ThreatScanListResponse":{"properties":{"scans":{"items":{"$ref":"#/components/schemas/ThreatScanResponse"},"type":"array","title":"Scans"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["scans","total"],"title":"ThreatScanListResponse","description":"List of threat scans for a target."},"ThreatScanResponse":{"properties":{"id":{"type":"string","title":"Id"},"target_id":{"type":"string","title":"Target Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"scanned_at":{"type":"string","title":"Scanned At"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"findings_count":{"type":"integer","title":"Findings Count","default":0},"new_findings_count":{"type":"integer","title":"New Findings Count","default":0},"regressed_findings_count":{"type":"integer","title":"Regressed Findings Count","default":0},"scan_summary":{"anyOf":[{"$ref":"#/components/schemas/ThreatScanSummary"},{"type":"null"}]},"new_findings":{"items":{"$ref":"#/components/schemas/ThreatScanFinding"},"type":"array","title":"New Findings","default":[]},"regressed_findings":{"items":{"$ref":"#/components/schemas/ThreatScanFinding"},"type":"array","title":"Regressed Findings","default":[]},"git_exposed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Git Exposed"},"open_ports":{"items":{"type":"integer"},"type":"array","title":"Open Ports","default":[]},"subdomain_drift":{"items":{"type":"string"},"type":"array","title":"Subdomain Drift","default":[]},"cve_count":{"type":"integer","title":"Cve Count","default":0},"cve_list":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Cve List","default":[]}},"type":"object","required":["id","target_id","scanned_at","status"],"title":"ThreatScanResponse","description":"A single threat scan result."},"ThreatScanSummary":{"properties":{"critical":{"type":"integer","title":"Critical","default":0},"high":{"type":"integer","title":"High","default":0},"medium":{"type":"integer","title":"Medium","default":0},"low":{"type":"integer","title":"Low","default":0},"info":{"type":"integer","title":"Info","default":0},"total":{"type":"integer","title":"Total","default":0}},"type":"object","title":"ThreatScanSummary","description":"Summary counts by severity for a threat scan."},"UpdateProfileRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"theme_pref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme Pref"}},"type":"object","title":"UpdateProfileRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyResponse":{"properties":{"message":{"type":"string","title":"Message"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["message","api_key"],"title":"VerifyResponse"},"WebhookResponse":{"properties":{"received":{"type":"boolean","title":"Received","default":true}},"type":"object","title":"WebhookResponse"},"_LatestScanInfo":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"status":{"type":"string","title":"Status"},"target":{"type":"string","title":"Target"},"lane":{"type":"string","title":"Lane","default":"shared"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"findings_count":{"type":"integer","title":"Findings Count","default":0}},"type":"object","required":["scan_id","status","target"],"title":"_LatestScanInfo"},"_MonitoringInfo":{"properties":{"targets_up":{"type":"integer","title":"Targets Up","default":0},"targets_down":{"type":"integer","title":"Targets Down","default":0},"total_targets":{"type":"integer","title":"Total Targets","default":0}},"type":"object","title":"_MonitoringInfo"},"_ProjectInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_url":{"type":"string","title":"Default Url"},"scan_count":{"type":"integer","title":"Scan Count","default":0},"latest_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Scan At"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","default_url","created_at","updated_at"],"title":"_ProjectInfo"}}}}