{"openapi":"3.1.0","info":{"title":"CredWatch API","version":"v1"},"paths":{"/api/v1/findings":{"get":{"tags":["api:findings"],"summary":"List Findings","description":"List findings for your account with optional filters.","operationId":"list_findings_api_v1_findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (active, resolved, false_positive, customer_restricted, stale)","title":"Status"},"description":"Filter by status (active, resolved, false_positive, customer_restricted, stale)"},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source type (repo, gist, commit, endpoint, js_bundle)","title":"Source Type"},"description":"Filter by source type (repo, gist, commit, endpoint, js_bundle)"},{"name":"validation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by validation_status (valid, invalid, unvalidated, error)","title":"Validation"},"description":"Filter by validation_status (valid, invalid, unvalidated, error)"},{"name":"service","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by an enabled service/capability label (e.g. 'github', 'github_repos_write', 'sendgrid_mail_send'). See validation_detail.enabled_services for the per-finding list.","title":"Service"},"description":"Filter by an enabled service/capability label (e.g. 'github', 'github_repos_write', 'sendgrid_mail_send'). See validation_detail.enabled_services for the per-finding list."},{"name":"min_score","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"Minimum composite_score","title":"Min Score"},"description":"Minimum composite_score"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First seen on or after (ISO 8601 date, e.g. 2025-01-01)","title":"Date From"},"description":"First seen on or after (ISO 8601 date, e.g. 2025-01-01)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First seen on or before (ISO 8601 date)","title":"Date To"},"description":"First seen on or before (ISO 8601 date)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full-text search across source_url, file_path, repo_full_name","title":"Q"},"description":"Full-text search across source_url, file_path, repo_full_name"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-based)","default":1,"title":"Page"},"description":"Page number (1-based)"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Results per page (max 200)","default":25,"title":"Per Page"},"description":"Results per page (max 200)"},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: composite_score, first_seen_at, last_seen_at","default":"composite_score","title":"Order By"},"description":"Sort field: composite_score, first_seen_at, last_seen_at"},{"name":"order_dir","in":"query","required":false,"schema":{"type":"string","description":"Sort direction: asc or desc","default":"desc","title":"Order Dir"},"description":"Sort direction: asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings/{finding_id}":{"get":{"tags":["api:findings"],"summary":"Get Finding","description":"Get a single finding by ID.","operationId":"get_finding_api_v1_findings__finding_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings/{finding_id}/suppress":{"post":{"tags":["api:findings"],"summary":"Suppress Finding","description":"Suppress a finding (hide from active view without changing status).","operationId":"suppress_finding_api_v1_findings__finding_id__suppress_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings/{finding_id}/resolve":{"post":{"tags":["api:findings"],"summary":"Resolve Finding","description":"Resolve a finding — mark the exposed credential as rotated/removed.","operationId":"resolve_finding_api_v1_findings__finding_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}},{"name":"note","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional resolution note (max 500 chars)","title":"Note"},"description":"Optional resolution note (max 500 chars)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings/{finding_id}/restrict":{"post":{"tags":["api:findings"],"summary":"Restrict Finding","description":"Mark a finding `customer_restricted` — the credential is real and\nexposed, but the customer has restricted (scope / IP-allowlist / etc.)\nit so it is not exploitable as-found.  The finding is closed but the\noriginal exposure is acknowledged.\n\nIdempotent: re-calling on an already-restricted finding returns the\ncurrent state without rewriting it.","operationId":"restrict_finding_api_v1_findings__finding_id__restrict_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}},{"name":"note","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional restriction note (max 500 chars)","title":"Note"},"description":"Optional restriction note (max 500 chars)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scans":{"get":{"tags":["api:scans"],"summary":"List Scans","description":"List recent scan runs for your account.","operationId":"list_scans_api_v1_scans_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scan type: github, scrape","title":"Type"},"description":"Filter by scan type: github, scrape"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of runs to return (max 100)","default":20,"title":"Limit"},"description":"Number of runs to return (max 100)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scans/{scan_id}":{"get":{"tags":["api:scans"],"summary":"Get Scan","description":"Get a single scan run by ID (GitHub scan or web scrape).","operationId":"get_scan_api_v1_scans__scan_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_add_alert_email_org_notifications_email_add_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_add_alert_email_org_notifications_email_add_post"},"Body_add_domain_domains_add_post":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"Body_add_domain_domains_add_post"},"Body_add_org_github_orgs_add_post":{"properties":{"org":{"type":"string","title":"Org"}},"type":"object","required":["org"],"title":"Body_add_org_github_orgs_add_post"},"Body_add_user_github_users_add_post":{"properties":{"user":{"type":"string","title":"User"}},"type":"object","required":["user"],"title":"Body_add_user_github_users_add_post"},"Body_billing_inquiry_billing_inquiry_post":{"properties":{"plan":{"type":"string","title":"Plan","default":""},"message":{"type":"string","title":"Message","default":""}},"type":"object","title":"Body_billing_inquiry_billing_inquiry_post"},"Body_bulk_action_findings_bulk_post":{"properties":{"action":{"type":"string","title":"Action"},"secret_hashes":{"type":"string","title":"Secret Hashes","default":""},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["action"],"title":"Body_bulk_action_findings_bulk_post"},"Body_change_password_profile_password_post":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"},"confirm_password":{"type":"string","title":"Confirm Password"}},"type":"object","required":["current_password","new_password","confirm_password"],"title":"Body_change_password_profile_password_post"},"Body_create_api_key_profile_api_keys_create_post":{"properties":{"name":{"type":"string","title":"Name","default":""}},"type":"object","title":"Body_create_api_key_profile_api_keys_create_post"},"Body_create_pattern_patterns_post":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"value":{"type":"string","title":"Value"},"secret_type":{"type":"string","title":"Secret Type","default":""},"confidence":{"type":"string","title":"Confidence","default":"1.0"},"github_searchable":{"type":"string","title":"Github Searchable","default":""}},"type":"object","required":["name","type","value"],"title":"Body_create_pattern_patterns_post"},"Body_create_rule_suppression_post":{"properties":{"pattern_id":{"type":"string","title":"Pattern Id","default":""},"repo_glob":{"type":"string","title":"Repo Glob","default":""},"path_glob":{"type":"string","title":"Path Glob","default":""},"reason":{"type":"string","title":"Reason","default":""}},"type":"object","title":"Body_create_rule_suppression_post"},"Body_edit_pattern_patterns__pattern_id__edit_post":{"properties":{"name":{"type":"string","title":"Name"},"github_searchable":{"type":"string","title":"Github Searchable","default":""}},"type":"object","required":["name"],"title":"Body_edit_pattern_patterns__pattern_id__edit_post"},"Body_false_positive_finding_findings__finding_id__fp_post":{"properties":{"note":{"type":"string","title":"Note","default":""}},"type":"object","title":"Body_false_positive_finding_findings__finding_id__fp_post"},"Body_login_submit_login_post":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"Body_login_submit_login_post"},"Body_mfa_disable_profile_mfa_disable_post":{"properties":{"totp_code":{"type":"string","title":"Totp Code"}},"type":"object","required":["totp_code"],"title":"Body_mfa_disable_profile_mfa_disable_post"},"Body_mfa_submit_login_mfa_post":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"Body_mfa_submit_login_mfa_post"},"Body_mfa_verify_profile_mfa_verify_post":{"properties":{"totp_code":{"type":"string","title":"Totp Code"}},"type":"object","required":["totp_code"],"title":"Body_mfa_verify_profile_mfa_verify_post"},"Body_preview_rule_impact_suppression_preview_post":{"properties":{"pattern_id":{"type":"string","title":"Pattern Id","default":""},"repo_glob":{"type":"string","title":"Repo Glob","default":""},"path_glob":{"type":"string","title":"Path Glob","default":""}},"type":"object","title":"Body_preview_rule_impact_suppression_preview_post"},"Body_remove_alert_email_org_notifications_email_remove_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_remove_alert_email_org_notifications_email_remove_post"},"Body_reset_password_confirm_reset_password_confirm_post":{"properties":{"token":{"type":"string","title":"Token"},"password":{"type":"string","title":"Password"},"confirm":{"type":"string","title":"Confirm"}},"type":"object","required":["token","password","confirm"],"title":"Body_reset_password_confirm_reset_password_confirm_post"},"Body_reset_password_request_reset_password_post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_reset_password_request_reset_password_post"},"Body_resolve_finding_findings__finding_id__resolve_post":{"properties":{"note":{"type":"string","title":"Note","default":""}},"type":"object","title":"Body_resolve_finding_findings__finding_id__resolve_post"},"Body_restrict_finding_findings__finding_id__restrict_post":{"properties":{"note":{"type":"string","title":"Note","default":""}},"type":"object","title":"Body_restrict_finding_findings__finding_id__restrict_post"},"Body_save_private_token_github_token_save_post":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"Body_save_private_token_github_token_save_post"},"Body_set_analyst_note_findings__finding_id__note_post":{"properties":{"note":{"type":"string","title":"Note","default":""}},"type":"object","title":"Body_set_analyst_note_findings__finding_id__note_post"},"Body_set_credential_name_findings__finding_id__name_post":{"properties":{"name":{"type":"string","title":"Name","default":""}},"type":"object","title":"Body_set_credential_name_findings__finding_id__name_post"},"Body_set_jira_integrations_notifications_jira_post":{"properties":{"jira_url":{"type":"string","title":"Jira Url","default":""},"jira_email":{"type":"string","title":"Jira Email","default":""},"jira_token":{"type":"string","title":"Jira Token","default":""},"project_key":{"type":"string","title":"Project Key","default":""}},"type":"object","title":"Body_set_jira_integrations_notifications_jira_post"},"Body_set_linear_integrations_notifications_linear_post":{"properties":{"linear_api_key":{"type":"string","title":"Linear Api Key","default":""},"linear_team_id":{"type":"string","title":"Linear Team Id","default":""}},"type":"object","title":"Body_set_linear_integrations_notifications_linear_post"},"Body_set_mfa_enforcement_org_security_mfa_enforcement_post":{"properties":{"mfa_required":{"type":"string","title":"Mfa Required","default":""}},"type":"object","title":"Body_set_mfa_enforcement_org_security_mfa_enforcement_post"},"Body_set_opsgenie_integrations_notifications_opsgenie_post":{"properties":{"api_key":{"type":"string","title":"Api Key","default":""}},"type":"object","title":"Body_set_opsgenie_integrations_notifications_opsgenie_post"},"Body_set_outbound_webhook_integrations_notifications_webhook_post":{"properties":{"webhook_url":{"type":"string","title":"Webhook Url","default":""}},"type":"object","title":"Body_set_outbound_webhook_integrations_notifications_webhook_post"},"Body_set_pagerduty_integrations_notifications_pagerduty_post":{"properties":{"routing_key":{"type":"string","title":"Routing Key","default":""}},"type":"object","title":"Body_set_pagerduty_integrations_notifications_pagerduty_post"},"Body_set_scan_interval_org_general_scan_interval_post":{"properties":{"scan_interval_hours":{"type":"string","title":"Scan Interval Hours","default":""}},"type":"object","title":"Body_set_scan_interval_org_general_scan_interval_post"},"Body_set_slack_webhook_integrations_notifications_slack_post":{"properties":{"webhook_url":{"type":"string","title":"Webhook Url","default":""}},"type":"object","title":"Body_set_slack_webhook_integrations_notifications_slack_post"},"Body_set_tags_findings__finding_id__tags_post":{"properties":{"tags":{"type":"string","title":"Tags","default":""}},"type":"object","title":"Body_set_tags_findings__finding_id__tags_post"},"Body_signup_submit_signup_post":{"properties":{"email":{"type":"string","title":"Email"},"company":{"type":"string","title":"Company"},"password":{"type":"string","title":"Password"},"confirm":{"type":"string","title":"Confirm"}},"type":"object","required":["email","company","password","confirm"],"title":"Body_signup_submit_signup_post"},"Body_submit_feedback_feedback_submit_post":{"properties":{"subject":{"type":"string","title":"Subject","default":""},"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"Body_submit_feedback_feedback_submit_post"},"Body_team_change_role_org_team__user_id__role_post":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"Body_team_change_role_org_team__user_id__role_post"},"Body_team_change_role_team__user_id__role_post":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"Body_team_change_role_team__user_id__role_post"},"Body_team_invite_org_team_invite_post":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"analyst"}},"type":"object","required":["email"],"title":"Body_team_invite_org_team_invite_post"},"Body_team_invite_team_invite_post":{"properties":{"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role","default":"analyst"}},"type":"object","required":["email"],"title":"Body_team_invite_team_invite_post"},"Body_update_email_profile_email_post":{"properties":{"email":{"type":"string","title":"Email","default":""}},"type":"object","title":"Body_update_email_profile_email_post"},"Body_upload_domains_domains_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_domains_domains_upload_post"},"Body_verify_domain_domains__dv_id__verify_post":{"properties":{"method":{"type":"string","title":"Method"}},"type":"object","required":["method"],"title":"Body_verify_domain_domains__dv_id__verify_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}