Request
POST /v1/search/ip-cidr · Required scope: search:ip (all tiers)
Provide ips or cidr — at least one is required.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ips | string[] (IPv4) | One of ips/cidr required | [] | Exact IPv4 addresses, e.g. ["203.0.113.42"] |
cidr | string | null | One of ips/cidr required | — | IPv4 CIDR range, e.g. "203.0.113.0/24" |
start_date | string (date-time) | null | No | — | Inclusive start filter, clamped by query_window_days |
end_date | string (date-time) | null | No | — | Inclusive end filter |
sort_direction | asc | desc | No | desc | Must stay constant across pages |
cursor | string | null | No | — | Pagination token |
limit | integer | No | 25 | 1–500, clamped to your tier’s max_rows |
Example request
Response
200 OK — array of IPExposureResult, cursor-paginated.
| Field | Description |
|---|---|
stealer_id | log_victim_id of the infected machine |
victim_id | SHA-256 victim ID — use with Victim Profiles |
ip | Masked via subnet_mask on free tier — unless it exactly matches an address you searched for in ips (addresses matched only via cidr remain masked) |
country | ISO 3166-1 alpha-2 |
operating_system | |
computer_name | Masked via partial_identifier on free tier |
stealer_family, stealer_version | Malware identification |
anti_viruses | Detected AV products |
infection_date | When the log was captured |
Pagination
Cursor-paginated — see Pagination.Errors
| Status | code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | Neither ips nor cidr provided, or ips contains a non-IPv4 value |
| 400 | INVALID_CURSOR | Tampered or stale cursor |
| 403 | FORBIDDEN_SCOPE | Key lacks search:ip |
Tier notes
An exactips entry is returned unmasked even on free tier; a cidr-only
match stays subnet-masked (a.b.x.x). computer_name is masked via
partial_identifier on free tier regardless.