Skip to main content
Like Search by Email, but matches on username or email local-part — useful when you only have a username (no domain), e.g. for platforms where users register with a handle.

Request

POST /v1/search/usernames · Required scope: search:login (all tiers)
ParameterTypeRequiredDefaultDescription
usernamesstring[]YesUsernames or email local-parts to search, min 1 item, e.g. ["jdoe"]
start_datestring (date-time) | nullNoInclusive start filter, clamped by query_window_days
end_datestring (date-time) | nullNoInclusive end filter
sort_directionasc | descNodescMust stay constant across pages
cursorstring | nullNoPagination token
limitintegerNo251–500, clamped to your tier’s max_rows

Example request

curl -X POST https://api.vantaprism.me/v1/search/usernames \
  -H "api-key: $VANTAPRISM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "usernames": ["jdoe"], "limit": 25 }'

Response

200 OK — array of CredentialExposureResult, cursor-paginated.
{
  "data": [
    {
      "stealer_id": "RL-2026-AC91F3",
      "victim_id": "a3f1c9e8b2d4567890abcdef1234567890abcdef1234567890abcdef123456",
      "username": "jdoe",
      "password": "••••",
      "domain": "example.com",
      "url": "https://example.com/***",
      "infection_date": "2026-05-02T14:22:31Z"
    }
  ],
  "nextCursor": null,
  "meta": {
    "request_id": "req_01HZXK3Q7N8YV6F3M2P9JABCDE",
    "took_ms": 30.1,
    "tier": "free",
    "masked_fields": ["password", "url"]
  }
}
Same CredentialExposureResult shape as Search by Emailusername 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

StatuscodeCause
400VALIDATION_ERRORusernames is empty or exceeds limits
400INVALID_CURSORTampered or stale cursor
403FORBIDDEN_SCOPEKey lacks search:login
See Errors for the full catalog.