{"openapi":"3.1.0","info":{"title":"LookalikeGuard API","description":"LookalikeGuard API v1. Authenticate with `Authorization: Bearer <API key>` (create keys under Settings). Rate limits per plan (requests/minute): Free 10, Solo 60, Team 120, Agency 300. Responses include X-RateLimit-Limit / X-RateLimit-Remaining. Webhook payloads are signed: header `LookalikeGuard-Signature: t=<unix>,v1=<hex>` where hex = HMAC-SHA256(webhook_secret, \"<t>.<raw body>\").","version":"0.3.0"},"paths":{"/api/v1/me":{"get":{"tags":["account"],"summary":"Api Me","operationId":"api_me_api_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/domains":{"get":{"tags":["domains"],"summary":"Api Domains","description":"List monitored domains with active finding counts by level.","operationId":"api_domains_api_v1_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["domains"],"summary":"Api Add Domain","operationId":"api_add_domain_api_v1_domains_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_api_add_domain_api_v1_domains_post"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/domains/{domain}":{"delete":{"tags":["domains"],"summary":"Api Remove Domain","operationId":"api_remove_domain_api_v1_domains__domain__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings":{"get":{"tags":["findings"],"summary":"Api Findings","description":"Findings for your monitored domains, highest score first. Poll with since=<last poll time>.","operationId":"api_findings_api_v1_findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Unix time; only findings first seen after it","title":"Since"},"description":"Unix time; only findings first seen after it"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Monitored brand domain","title":"Domain"},"description":"Monitored brand domain"},{"name":"min_score","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":0,"default":0,"title":"Min Score"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(active|gone)$"},{"type":"null"}],"title":"State"}},{"name":"include_baseline","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Baseline"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/findings/{finding_id}":{"get":{"tags":["findings"],"summary":"Api Finding","operationId":"api_finding_api_v1_findings__finding_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"integer","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}/feedback":{"post":{"tags":["findings"],"summary":"Api Finding Feedback","description":"mine = your own domain (excluded from alerts and future scans); dismissed = not a concern;\nwatch = keep an eye on it; clear = remove feedback.","operationId":"api_finding_feedback_api_v1_findings__finding_id__feedback_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"integer","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_api_finding_feedback_api_v1_findings__finding_id__feedback_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/scan":{"get":{"tags":["scan"],"summary":"Api Scan","description":"Run a one-time lookalike scan. Without an API key: per-IP limit, results <1h old are reused.\nWith a key: your mine/dismissed feedback is applied and your plan's daily scan limit counts.\nReturns full results when finished, else 202 {status: running} to poll at /api/v1/results/{id}.","operationId":"api_scan_api_v1_scan_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Domain to scan, e.g. example.com","title":"Domain"},"description":"Domain to scan, e.g. example.com"},{"name":"wait","in":"query","required":false,"schema":{"type":"boolean","description":"Wait for the scan to finish (up to ~150s)","default":true,"title":"Wait"},"description":"Wait for the scan to finish (up to ~150s)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/results/{sid}":{"get":{"tags":["scan"],"summary":"Api Result","description":"Fetch a scan result by id (public, like the /r/<id> permalink).","operationId":"api_result_api_v1_results__sid__get","parameters":[{"name":"sid","in":"path","required":true,"schema":{"type":"string","title":"Sid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/test":{"post":{"tags":["webhooks"],"summary":"Api Webhook Test","description":"Send a signed `webhook.test` event to your configured webhook URL.","operationId":"api_webhook_test_api_v1_webhooks_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"Body_api_add_domain_api_v1_domains_post":{"properties":{"domain":{"type":"string","title":"Domain"}},"type":"object","required":["domain"],"title":"Body_api_add_domain_api_v1_domains_post"},"Body_api_finding_feedback_api_v1_findings__finding_id__feedback_post":{"properties":{"status":{"type":"string","pattern":"^(mine|dismissed|watch|clear)$","title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["status"],"title":"Body_api_finding_feedback_api_v1_findings__finding_id__feedback_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","description":"API key from Settings","scheme":"bearer"}}},"tags":[{"name":"domains","description":"Monitored domains"},{"name":"findings","description":"Lookalike findings from monitoring"},{"name":"scan","description":"One-time scans"},{"name":"webhooks","description":"Webhook delivery"},{"name":"account","description":"Account"}]}