domain that get_direct_org_info returns, within one analysis window: the last 7, 30 or 365 days. An API key always reads its own organization’s figures. Clients whose assets you register in your own organization are not covered: to report on a client’s domain here, the client needs a client workspace of its own, read with that workspace’s key. See Client organizations.
Each call answers in the same response. There is no job to start and nothing to poll. One endpoint, leak_type_analysis, works differently: it runs a live search for the domain and dates you send.
Availability and cost
Availability: every plan with a license in force. None of these endpoints checks a plan feature. Cost: no feature allowance. Each call made with an API key uses 1 unit of your monthly API Calls allowance, refunded if the response is not2xx. Every call also counts toward the per-second rate limit. See Rate limits.
Without a license in force, every endpoint on this page returns 403:
403, a feature-allowance 429 (detail, resource, period, limit) or a capacity 409. The per-second rate limit 429 and the API Calls allowance 429 still apply. See When you exceed a limit. Plans and quotas explains license states.
How the figures are built
- Precomputed once a week. The figures are not computed when you call. DarknetSearch recomputes the figures of every organization with a license in force once a week, for all three windows at once. A read returns the last computed set. The numbers change about once a week, so there is no need to poll them.
- Counted back from the last refresh. A window covers the 7, 30 or 365 days before the last weekly refresh, not the days before your call.
- Indexed date, not theft date. The breach feed, the subdomain list, the risky-users chart and the password strength figures select leak records by the date DarknetSearch indexed them, not by when the credentials were stolen.
- Empty until the first run. For a new organization, lists stay empty and counts stay
0until its first computation finishes. Before the analytics service knows the organization at all, reads return404. See Errors.
Set the analysis window
The window is one setting for your whole organization. It is not a parameter of each read. Every API key of your organization reads through the same window, and the window stays set until someone changes it.
Set it with
update_current_date_range:
get_current_date_range. The response has the same shape.
7D, 30D or 365D returns 400:
Read a summary in one run
1
Set the window
Send
update_current_date_range with the window you want, as shown above.2
Read the figures
Each read is a plain
GET with no required parameters.3
Page through the breach rows
Read
account_breaches page by page until you have count rows.Credential totals
leaked_credentials_stats counts the leaked credentials for your domain in the window.
unique_number can be 0 while total_number is not. That means the unique count was not available for that window, not that no credentials leaked.The riskiest users and passwords
Top risky users
top_risky_users returns up to three users with the most leaked credentials in the window, highest number_of_leaks first.
username: the leaked login, usually an address on your domain.number_of_leaks: how many leaked credentials name this user.unique_count: the same count with duplicates filtered out.
Top risky passwords
top_risky_passwords returns up to three leaked username and password pairs that appear most often. The fields match the user list, plus password.
number_of_leaks yourself before you rank them.
How leaks spread across users
risky_users_chart_stats shows whether exposure is concentrated on a few people or spread across many. It counts the email addresses on your domain found in leak records indexed in the window. For each address, it counts the distinct leaked files that address appears in. Then it groups the addresses by that number.
number_of_leaks: a number of distinct leaked files.number_of_users_per_leak: how many addresses appear in exactly that many files.
number_of_users_per_leak addresses appear in number_of_leaks files each.” Above, 87 addresses appear in one file each, and one address appears in six. The rows come highest number_of_leaks first. Their number_of_users_per_leak values add up to the number of distinct addresses found: 103 here.
Password strength
password_strength_analysis tests the leaked passwords of your domain’s email addresses against a basic policy: at least 8 characters, 1 uppercase letter, 1 digit and 1 special character.
How to read the counts:
- They overlap. A password can fail several rules, so the four counts do not add up to
total_number. Divide each bytotal_numberfor a share: 248 of 412 here, or 60%, have no uppercase letter. - Only clear text is tested. Passwords come from leaks tagged
passwordorhash. A value longer than 12 characters that is not all letters is treated as a hash and skipped. - Records, not people. The same password counts once for every leak record it appears in.
Where credentials were used
Three lists show the services and hosts that appear in your domain’s leaked credentials. They share one response shape and the same paging:count is the length of the whole list. results holds one page of it.
A
page past the end of the list returns 404 with {"detail": "Invalid page."}. Stop when you have read count rows.
External services
external_service_login_stealer_logs lists services outside your domain where stealer logs captured your people’s credentials, most frequent first. Filter by name.
name: the service’s server name.count: how many of the window’s leaked credentials were for that service.
filter_id 2). Filtered credentials is not limited to the analysis window, so its results do not match these counts one to one.
Your services, used by outsiders
internal_service_third_party_login lists services on your own domain that appear in leaked credentials with third-party logins, most frequent first. Filter by name.
filter_id 7): logins to servers on your domain whose username is an email address on another domain. Filtered credentials is not limited to the analysis window.
Subdomains in stealer logs
top_affected_subdomains_stealer_logs lists the host names under your domain that appear in stealer logs indexed in the window, most frequent first. Filter by sub_domain.
sub_domain: a host name under your domain, such asvpn.acme.com. The bare domainacme.comis not listed.leaks_number: how many stealer-log records name this host. Each record counts once, for the first host under your domain it names. Records with the same content count once.
List the leaked accounts
account_breaches is the row-level feed behind the figures: one row per leaked credential line for your domain in the window. It reads leak records indexed in the window that come from leaks tagged account. From each line that mentions your domain, it extracts the login, password and website.
The filters narrow the rows inside the current window. They cannot reach outside it. To read rows older than the window, set a longer window first.
leak_date: when DarknetSearch indexed the record, in UTC. It is not the date of the breach.login,password,website: the values extracted from the leaked line. Each isnullwhen the line does not hold it, and each is cut at 200 characters.leak_source: where the leak was found, such asdarknet.
page past the end returns 404 with {"detail": "Invalid page."}.
To read the full record around a row, search Raw Data for the login.
Classify leaks as personal or business
leak_type_analysis splits the leak records that mention a domain by the kind of leak they come from: personal accounts, business accounts, both, or neither. Unlike the other endpoints, it runs a live search when you call it. It ignores the analysis window and uses the dates you send.
Leave out both dates to count every indexed record.
start_date cannot be after end_date.
private marks a leak of personal accounts and business a leak of business accounts.
total_leakscounts records, not leaks. It is the number of matching records across all leaks. The four buckets add up to it.- Each percentage is the bucket’s share of
total_leaks, rounded to two decimals. All four are0.0whentotal_leaksis0.
To leave a date open, omit the field. Sending
null or an empty string returns 400.504. Narrow the date range and retry. The call is refunded.
Errors
These errors are specific to the endpoints on this page. Handle API errors lists the ones every endpoint shares, such as401 and the rate-limit 429.