login/password credential rows filtered by domain and/or
login. Use this for bulk export into your own SIEM, data warehouse, or
credential-monitoring pipeline — unlike the End User Protection
endpoints, which are designed for single-identifier lookups, this endpoint is
built for filtered bulk retrieval.
Request
POST /v1/data/credentials · Required scope: search:domain (all tiers)
At least one of domains or logins is required.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
domains | string[] | One of domains/logins required | [] | Registrable domains to filter by, e.g. ["acme-corp.com"] |
logins | string[] | One of domains/logins required | [] | Exact login/email values to filter on |
type | employees | users | both | No | both | See Domain Intelligence Overview |
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 CredentialRecord, cursor-paginated.
| Field | Description |
|---|---|
victim_id | SHA-256 victim ID — use with Victim Profiles |
domain | Registrable domain extracted from url |
url | Masked to scheme://host/*** on free tier |
login | Masked via partial_login on free tier |
password | Masked to "••••" on free tier |
browser | Browser the credential was harvested from |
profile | Browser profile name |
inserted_at | When the record was ingested |
Pagination
Cursor-paginated — see Pagination.Errors
| Status | code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | Neither domains nor logins provided |
| 400 | INVALID_CURSOR | Tampered or stale cursor |
| 403 | FORBIDDEN_SCOPE | Key lacks search:domain |
Tier notes
url, login, and password are masked per the standard free-tier rules in
Data Masking. If a logins value you searched for exactly
matches the returned login, it is returned unmasked per the
“searched value is never masked”
rule; matches found only via domains remain masked on free tier.