Request
POST /v1/domain/search · Required scope: search:domain (all tiers)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domains | string[] | Yes | — | Domains to search, min 1 item. e.g. ["acme-corp.com"] |
subdomains | string[] | No | [] | Restrict to specific subdomain labels, e.g. ["mail", "vpn"]. Takes priority over include_subdomains — see Overview |
include_subdomains | boolean | No | false | When true and subdomains is empty, include all subdomains |
type | employees | users | both | No | both | Classification filter — see Overview |
start_date | string (date-time) | null | No | — | Inclusive start filter on inserted_at. Clamped by your tier’s query_window_days |
end_date | string (date-time) | null | No | — | Inclusive end filter |
sort_direction | asc | desc | No | desc | Must stay constant across pages of the same query |
cursor | string | null | No | — | Pagination token from a previous response’s nextCursor |
limit | integer | No | 25 | 1–500, clamped to your tier’s max_rows |
Example request
Response
200 OK — array of DomainSearchResult, cursor-paginated.
| Field | Description |
|---|---|
stealer_id | log_victim_id of the infected machine that harvested this record |
victim_id | SHA-256 victim ID — use with Victim Profiles |
domain | Registrable domain extracted from url |
url | Full URL (no masking applied to this field on this endpoint) |
username | Masked via partial_login on free tier |
password | Masked to "••••" on free tier |
infection_date | When the log was captured |
type | employee | user — present when classification matched |
Pagination
Cursor-paginated — see Pagination. PassnextCursor back as
cursor to get the next page, keeping sort_direction constant.
Errors
| Status | code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | domains is empty or exceeds limits |
| 400 | INVALID_CURSOR | Tampered or stale cursor |
| 403 | FORBIDDEN_SCOPE | Key lacks search:domain |
Tier notes
- Free tier masks
usernameandpasswordas shown above. start_dateolder than your tier’squery_window_daysis silently clamped (90 days on free, 365 on pro, unlimited on ultra).limitabove your tier’smax_rows(25 / 100 / 500) is clamped.