Request
POST /v1/search/usernames · Required scope: search:login (all tiers)
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
usernames | string[] | Yes | — | Usernames or email local-parts to search, min 1 item, e.g. ["jdoe"] |
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 CredentialExposureResult, cursor-paginated.
CredentialExposureResult shape as
Search by Email — username is
returned unmasked because it exactly matches a value you searched for;
password and url are masked per your tier.
Pagination
Cursor-paginated — see Pagination.Errors
| Status | code | Cause |
|---|---|---|
| 400 | VALIDATION_ERROR | usernames is empty or exceeds limits |
| 400 | INVALID_CURSOR | Tampered or stale cursor |
| 403 | FORBIDDEN_SCOPE | Key lacks search:login |