Database Leaks API
The Database Leaks endpoint returns corporate credentials exposed in third-party database breaches for a target domain. Unlike the infostealer-sourced leak endpoints, this dataset is sourced from publicly disclosed breach databases — for example, large platform breaches where account dumps included corporate email addresses.
Results are grouped by breach source, with each group carrying breach-level metadata (breach date, description, exposed data fields) alongside the affected account records (email, plaintext password where available, and hashed password where available).
This endpoint is intended for organizational exposure assessments, vendor risk reviews, and ongoing monitoring of credential leakage from breaches outside your own systems.
Endpoint
POST https://api.whiteintel.io/get_third_party_db_leaks.phpHeaders
Content-Type
application/json
Authentication
Authentication is performed via an API key passed in the request body. Your API key can be retrieved from either the Organizations page or the Profile page on the Whiteintel platform.
{
"apikey": "YOUR_API_KEY"
}Requests without a valid API key return 403 Forbidden.
Access Requirements
This endpoint is available to Enterprise and Threat Intelligence subscription tiers. Lower tiers will receive a 403 Forbidden response indicating the dataset is not available on the current license.
Rate Limits and Quotas
Request throttle
A short cool-down is enforced between consecutive requests from the same account. Exceeding this returns 429 Too Many Requests.
Daily quota
Each API key is provisioned with a daily request quota. Remaining quota is returned in every successful response under remaining_daily_calls.
Once the daily quota is exhausted, requests return 403 Forbidden with a quota-exceeded message until the counter resets.
Empty result responses do not consume a daily quota credit.
Request Parameters
apikey
string
Yes
—
Your Whiteintel API key.
query
string
Yes
—
The target corporate domain (e.g. acme.com). The endpoint will return database breach records associated with this domain.
limit
integer
No
500
Maximum number of account records to return across all breach groups. Allowed range: 1–5000.
page
integer
No
1
Page number for pagination.
start_date
string
No
—
Lower bound of the breach date range, format YYYY-MM-DD. Must be paired with end_date.
end_date
string
No
—
Upper bound of the breach date range, format YYYY-MM-DD. Must be paired with start_date.
Notes on query
querySupply the registrable corporate domain (for example acme.com). Subdomains are normalized to their registrable domain before lookup. The endpoint matches against the search domain associated with each breach record in the underlying dataset.
Notes on date filters
Both start_date and end_date must be supplied together. Supplying only one returns a validation error. Dates must conform to YYYY-MM-DD format. The date range is matched against the breach date (when the breach occurred), not when the records were ingested into the platform.
Notes on pagination
The limit parameter caps the total number of account records returned, summed across all breach groups in the response. Pagination flows across breach groups in a stable order, so paginating with page=1, page=2, etc. produces a consistent traversal of all matching records regardless of how they are distributed across breach sources.
Request Example
Response Schema
Success Response
success
boolean
true when the request completed successfully.
remaining_daily_calls
integer
Remaining requests on the daily quota for the current API key.
results
array
Array of breach group objects.
Breach Group Object
Each entry in results represents one breach source containing exposed records for the queried domain.
database_name
string
The name of the breach source (e.g. the breached service or dataset name).
breach_date
string (date) | null
The date the breach occurred, when known.
breach_description
string | null
Description of the breach.
data_fields
string | null
The categories of data exposed in the breach (e.g. emails, passwords, names).
total
integer
Total number of records in this breach group for the queried domain (across all pages).
page
integer
Echo of the requested page value.
limit
integer
Echo of the requested limit value.
accounts
array
Array of account record objects exposed in this breach for the queried domain.
Account Record Object
id
integer
Internal identifier for the record.
email
string
The exposed email address.
password
string | null
Plaintext password, when available in the source breach.
hashed_password
string | null
Hashed password, when available in the source breach. The hash format depends on the breach source.
Whether
password,hashed_password, or both are populated depends entirely on what was exposed by the original breach. Some breaches expose only hashes; others expose only plaintext; some expose both.
Response Example
Empty Result Set
When no breach records match the query, the endpoint returns:
Note: Empty result responses do not consume a daily quota credit.
Error Responses
All error responses return a JSON body with either an error or message field describing the failure.
400
Invalid request method or non-JSON content type.
{"error": "Invalid request method or content type, expected POST with application/json."}
403
Missing API key.
{"error": "API Key is missing."}
403
Invalid API key.
{"error": "Invalid API Key."}
403
Subscription tier does not permit access.
{"error": "Database leak API is only available for Enterprise and Threat Intelligence licenses."}
403
Daily quota exhausted.
{"error": "Daily limit is reached."}
429
Request throttle hit (consecutive requests too close together).
{"message": "Please wait 1 seconds between requests."}
200
Validation error in request body.
{"success": false, "error": "Limit must be an integer between 1 and 5000."}
200
Empty or missing query.
{"success": false, "error": "Query cannot be empty."}
200
Date pairing error.
{"success": false, "error": "Both start_date and end_date must be provided together."}
200
Invalid date format.
{"success": false, "error": "Invalid date format. Use YYYY-MM-DD."}
200
Query targets a restricted domain.
{"success": false, "error": "This query is restricted."}
200
Daily quota exhausted between pre-check and increment.
{"success": false, "message": "Daily API request limit exceeded."}
Validation errors are returned with HTTP
200andsuccess: false. Clients should always inspect thesuccessfield in addition to the HTTP status code.
Best Practices
Pagination: For organizations exposed across many breaches, paginate using
pageandlimitrather than requesting a single oversized result set. Pagination flows across breach groups, so a stable traversal is guaranteed regardless of distribution. The maximum permittedlimitis5000.Date filtering: Use
start_dateandend_dateto scope to a specific era of breaches. This is particularly useful for ongoing monitoring — narrow the window to recent breach dates to identify newly disclosed exposures.Hash handling: When
hashed_passwordis populated, the hash format varies by breach source (bcrypt,MD5,SHA-1,SHA-256, etc.). Inspect thedata_fieldsandbreach_descriptionfor hints; do not assume a uniform format.Aggregation by employee: When integrating with HR or identity systems, group account records by
emailafter retrieval to identify which employees appear in multiple breaches. The endpoint returns records grouped by breach source, not by user.Quota monitoring: Track the
remaining_daily_callsfield after each successful response to anticipate quota exhaustion before it occurs.
Support
For technical questions, integration assistance, or to request a quota increase, contact [email protected].
Last updated