{"openapi":"3.1.0","info":{"title":"Chaos Subdomain Monitor API","version":"1.0.0","description":"Token-authenticated REST API for tracked domains, subdomains, discoveries, scans, stats and bulk exports. No rate limits: requests are unlimited."},"servers":[{"url":"https://chaos.thescope.top/api/v1","description":"Primary"},{"url":"https://chaos.thescope.top/api/public/v1","description":"External mirror"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"chs_live_"}}},"security":[{"bearerAuth":[]}],"paths":{"/":{"get":{"operationId":"index","summary":"API index","description":"Unauthenticated discovery document listing the API version, docs URL and every available endpoint.","tags":["Getting started"],"security":[],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/me":{"get":{"operationId":"me","summary":"Current token","description":"Identity behind the presented token: owner, key name and granted scopes.","tags":["Getting started"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/openapi.json":{"get":{"operationId":"openapi","summary":"OpenAPI 3.1 spec","description":"Machine-readable specification of every endpoint — import it into Postman, Insomnia or a codegen tool.","tags":["Getting started"],"security":[],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/domains":{"get":{"operationId":"domains_list","summary":"List tracked domains","description":"Every root domain the monitor scans, with live counters and last scan status.","tags":["Domains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"search","in":"query","required":false,"description":"Case-insensitive substring match on the domain.","schema":{"type":"string"}},{"name":"platform","in":"query","required":false,"description":"Filter by platform slug (hackerone, bugcrowd, intigriti, yeswehack, self).","schema":{"type":"string"}},{"name":"enabled","in":"query","required":false,"description":"Only enabled (true) or disabled (false) domains.","schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"description":"Ordering of the result set.","schema":{"type":"string","enum":["domain","total_subdomains","new_subdomains_last_scan","last_scanned_at"],"default":"domain"}},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 1000).","schema":{"type":"integer","default":100}},{"name":"offset","in":"query","required":false,"description":"Rows to skip.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/domains/{domain}":{"get":{"operationId":"domain_get","summary":"Get one domain","description":"A single root domain with computed stats: total, new 24h / 7d, active, inactive.","tags":["Domains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"description":"Root domain.","schema":{"type":"string"},"example":"lovable.app"}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/domains/{domain}/subdomains":{"get":{"operationId":"domain_subdomains","summary":"List a domain's hosts","description":"Paged hosts for one root domain, newest first. Handles 100k+ hosts.","tags":["Domains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"description":"Root domain.","schema":{"type":"string"},"example":"lovable.app"},{"name":"filter","in":"query","required":false,"description":"Subset of hosts to return.","schema":{"type":"string","enum":["all","new","inactive"],"default":"all"}},{"name":"search","in":"query","required":false,"description":"Substring match on the host.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 1000).","schema":{"type":"integer","default":100}},{"name":"offset","in":"query","required":false,"description":"Rows to skip.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/domains/{domain}/subdomains/new":{"get":{"operationId":"domain_new","summary":"New hosts for a domain","description":"Hosts first seen for this root domain inside the requested window.","tags":["Domains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"description":"Root domain.","schema":{"type":"string"},"example":"lovable.app"},{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"since","in":"query","required":false,"description":"ISO-8601 timestamp; overrides `hours`.","schema":{"type":"string"},"example":"2026-08-01T00:00:00Z"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 2000).","schema":{"type":"integer","default":500}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/subdomains/new":{"get":{"operationId":"subs_new","summary":"New hosts across everything","description":"Every newly discovered host across all programs, newest first. Page with `meta.next_cursor`.","tags":["Subdomains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"since","in":"query","required":false,"description":"ISO-8601 timestamp; overrides `hours`.","schema":{"type":"string"},"example":"2026-08-01T00:00:00Z"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 2000).","schema":{"type":"integer","default":500}},{"name":"before_ts","in":"query","required":false,"description":"Cursor: `first_seen_at` of the last row from the previous page.","schema":{"type":"string"}},{"name":"before_id","in":"query","required":false,"description":"Cursor: `id` of the last row from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/subdomains/search":{"get":{"operationId":"subs_search","summary":"Search all hosts","description":"Global substring search across every host in the database.","tags":["Subdomains"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":true,"description":"Substring to search for (min 2 characters).","schema":{"type":"string"},"example":"vpn"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 1000).","schema":{"type":"integer","default":100}},{"name":"offset","in":"query","required":false,"description":"Rows to skip.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/platforms":{"get":{"operationId":"platforms_list","summary":"List platforms","description":"Bug-bounty programs with domain counts, subdomain totals and 24h discoveries.","tags":["Platforms"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/platforms/{slug}":{"get":{"operationId":"platform_get","summary":"Get one platform","description":"Metadata for a single platform.","tags":["Platforms"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Platform slug.","schema":{"type":"string"},"example":"hackerone"}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/platforms/{slug}/domains":{"get":{"operationId":"platform_domains","summary":"Platform domains","description":"Root domains belonging to one program.","tags":["Platforms"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Platform slug.","schema":{"type":"string"},"example":"hackerone"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 1000).","schema":{"type":"integer","default":200}},{"name":"offset","in":"query","required":false,"description":"Rows to skip.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/platforms/{slug}/subdomains":{"get":{"operationId":"platform_subdomains","summary":"All platform subdomains","description":"Every subdomain across every program on one platform, walked program by program with a cursor. Keep following meta.next_cursor until it is null to collect the complete list. Add format=txt for a plain host list (next cursor is returned in the X-Next-Cursor header).","tags":["Platforms"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Platform slug.","schema":{"type":"string"},"example":"hackerone"},{"name":"cursor","in":"query","required":false,"description":"Cursor returned as meta.next_cursor by the previous page. Omit for the first page.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 10000).","schema":{"type":"integer","default":1000}},{"name":"program","in":"query","required":false,"description":"Filter to a single program by name — matches any program whose domain contains the text (e.g. tesla returns tesla.com subdomains only). Omit for the whole platform.","schema":{"type":"string"},"example":"tesla"},{"name":"active","in":"query","required":false,"description":"Set false to include hosts that are no longer seen in Chaos.","schema":{"type":"boolean","default":"true"}},{"name":"format","in":"query","required":false,"description":"Response format.","schema":{"type":"string","enum":["json","txt"],"default":"json"}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/platforms/{slug}/subdomains/new":{"get":{"operationId":"platform_new","summary":"Platform new hosts","description":"Hosts first seen inside one program during the requested window.","tags":["Platforms"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Platform slug.","schema":{"type":"string"},"example":"hackerone"},{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"since","in":"query","required":false,"description":"ISO-8601 timestamp; overrides `hours`.","schema":{"type":"string"},"example":"2026-08-01T00:00:00Z"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 2000).","schema":{"type":"integer","default":500}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/scans":{"get":{"operationId":"scans_list","summary":"Scan history","description":"Completed and running scans, newest first.","tags":["Scans"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"query","required":false,"description":"Filter by root domain.","schema":{"type":"string"}},{"name":"platform","in":"query","required":false,"description":"Filter by platform slug.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by scan status.","schema":{"type":"string","enum":["running","success","error"]}},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 500).","schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip.","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}},"post":{"operationId":"scan_create","summary":"Queue a scan","description":"Queue an immediate re-scan of one tracked domain. Returns 202 — large programs continue in the background. Requires a key with the `write` scope.","tags":["Scans"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Root domain to re-scan."}}}}}},"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/scans/status":{"get":{"operationId":"scans_status","summary":"Worker status","description":"Live health of the scanning fleet: running scans, sweep coverage, errors and pending queue depth.","tags":["Scans"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/scans/{id}":{"get":{"operationId":"scan_get","summary":"Get one scan","description":"A single scan record by id, including its domain.","tags":["Scans"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Scan UUID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/scans/rescan-all":{"post":{"operationId":"scan_rescan_all","summary":"Full re-scan","description":"Mark every enabled domain as due so the worker starts a full sweep on the next tick. Requires the `write` scope.","tags":["Scans"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/stats":{"get":{"operationId":"stats","summary":"Global stats","description":"Platform-wide totals plus new-host counts for the last hour, day, week, month and six months.","tags":["Stats"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/stats/timeseries":{"get":{"operationId":"stats_timeseries","summary":"Discovery time-series","description":"Bucketed new-host counts for charting.","tags":["Stats"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"bucket","in":"query","required":false,"description":"Bucket width.","schema":{"type":"string","enum":["hour","day","week","month"],"default":"hour"}},{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"since","in":"query","required":false,"description":"ISO-8601 timestamp; overrides `hours`.","schema":{"type":"string"},"example":"2026-08-01T00:00:00Z"}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/stats/top-domains":{"get":{"operationId":"stats_top_domains","summary":"Top domains by new hosts","description":"Root domains producing the most new hosts inside the window.","tags":["Stats"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"since","in":"query","required":false,"description":"ISO-8601 timestamp; overrides `hours`.","schema":{"type":"string"},"example":"2026-08-01T00:00:00Z"},{"name":"limit","in":"query","required":false,"description":"Rows to return (max 200).","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}},"/export":{"get":{"operationId":"export","summary":"Bulk export","description":"Streaming export of hosts for any scope. Handles 100k+ rows; returns text, CSV or JSON rather than the standard envelope.","tags":["Export"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"query","required":false,"description":"Export one root domain.","schema":{"type":"string"}},{"name":"platform","in":"query","required":false,"description":"Export a whole platform.","schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"description":"Which hosts to include.","schema":{"type":"string","enum":["all","new","inactive"],"default":"all"}},{"name":"hours","in":"query","required":false,"description":"Look-back window in hours. Ignored when `since` is supplied.","schema":{"type":"integer","default":24}},{"name":"search","in":"query","required":false,"description":"Substring match on the host.","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"Output format.","schema":{"type":"string","enum":["txt","csv","json"],"default":"txt"}}],"responses":{"200":{"description":"Success"},"202":{"description":"Accepted"},"401":{"description":"Missing, malformed, revoked or unknown token"},"403":{"description":"Token lacks the required scope"},"404":{"description":"Resource not found"}}}}}}