Skip to main content
One POST starts an assessment. You choose the domain, the modules, how other domains of the organization are handled, which domains may be tested actively, and how the automatic report looks. The call answers at once with the assessment’s uid. The work runs in the background: follow it with Follow an assessment. Availability: Attack Surface Reports for full assessments and Targeted Attack Surface Reports for targeted assessments, both included in every edition. Cost: 1 unit of your monthly Attack Surface Reports allowance per full assessment, or 1 unit of your monthly Targeted Attack Surface Reports allowance per targeted assessment. The unit is taken before the request reaches the assessment engine and refunded on any non-2xx response. No refusal in Refusals at start costs a unit. An assessment that starts keeps its unit, even if it later ends Failed.

Choose full or targeted

Both endpoints also take the domain handling, active scope and report options fields. Send a JSON body. Fields this page does not list are ignored.

Start a full assessment

Send the domain. Add a module flag only to change its default.
The call returns 200 with the new assessment:
Keep the uid. It is the scan_id in the progress and queue paths and the scan_uid in reports.
Don’t trust status in this response. It is always Running, because the response is written before the assessment is dispatched. The assessment may be Queued a moment later. Read the real status from progress.
When the assessment completes, the Full Attack Surface Report is generated automatically. If no report appears in the report list, generate one yourself. See Generate and download assessment reports.

Module flags

Every assessment discovers the domain’s hosts from passive sources, enriches each one, and runs a set of always-on checks, such as email authentication, leaked credentials, open cloud storage, TLS and web application security. These flags switch the remaining modules on or off. The defaults apply to full assessments. The names match the module switches in the dashboard. An assessment that turns on perform_port_scan, active_vuln_scan or dns_typosquatting_enabled is a heavy assessment. So is one with domain_mode set to dual_domain or all. A full assessment with the defaults is heavy. Heavy assessments can be refused while the platform is busy: see Refusals at start.

Start a targeted assessment

Send the domain and a report_type. Add only the optional flags of that report.
The response is the same as for a full assessment. Five rules apply:
  • Forced modules always run. Sending false for one changes nothing.
  • Only the report’s optional flags count. The API drops every other flag you send, and every module outside the row stays off.
  • One report, no more. The assessment generates the report in report_type and nothing else. It never generates the Full Attack Surface Report.
  • No data, no report. The report is generated only when the assessment found data for it. A VIP Executive Risk Report needs executive or employee-email results, for example. Without them, no report is generated and the assessment keeps its unit. Generating the report yourself is then refused with 400.
  • asm_full is not a targeted report. Sending it returns 400 with {"report_type": ["\"asm_full\" is not a valid choice."]}. Use the full endpoint.
The Domain Spoofing Risk Report and the Application Security Report always make a heavy assessment. So does the Infrastructure Risk Report unless you send "perform_port_scan": false.

Domain handling

Send the organization’s registrable domain, such as acme.com. The engine reduces any host name to its registrable domain, so www.acme.com and vpn.acme.com both start an assessment of acme.com. You cannot assess a single subdomain. A value that is not a domain name, such as a URL or an IP address, returns 400 with {"details": "Please enter a valid domain."}. At the start, the assessment checks whether the organization’s email or infrastructure lives on other domains. domain_mode decides what it does with them: When no other domain is detected, swap_to_primary and dual_domain assess the submitted domain only, like default. A dual_domain start still counts as heavy. An all assessment that verifies no other domain still searches for domains on the same IP addresses, and still counts as heavy. Even in default mode, the leaked-credential and employee-email checks also search the organization’s detected email domains. Send "breach_primary_domain_only": true to limit them to the submitted domain, plus any domain dual_domain or all added. The Breach Risk Report always covers the submitted domain only.

Active scope

Active checks connect to hosts: port and service detection, the active vulnerability check, and the TLS and web application checks. They reach only hosts in the active scope:
  • The submitted domain and its subdomains, plus each domain in active_scope_domains and its subdomains.
  • Hosts and IP addresses named in an include rule. See Add a host the assessment missed.
  • Hosts in the organization’s IP ranges whose certificate or reverse DNS name proves they belong to one of the assessment’s verified domains.
Two rules override the scope. An exclusion rule that matches a host, by host name, domain, IP address or IP range, blocks active checks on it, even under the submitted domain. A host on a private or other non-public IP address is never checked actively. Hosts under any other domain, including the domains that swap_to_primary, dual_domain or all added, are assessed passively unless one of the rules above covers them. To test other domains the organization owns, list them in active_scope_domains:
  • Up to 5 domains. A sixth returns 400 with {"active_scope_domains": ["At most 5 additional active-scope domains are accepted."]}.
  • Each entry is a domain name: it needs a dot and cannot contain /, :, a space or a leading *. A URL returns 400 naming the entry.
  • Entries are lowercased, and duplicates count once. Each domain also covers its subdomains.
List only domains your organization owns or is authorized to have tested.

Report options

These fields shape the report the assessment generates automatically. Set them at the start: they cannot be changed later. To get a different version, generate another report from the completed assessment.
The template and baseline are checked only when the report is built. The start checks only that each value is a UUID, or "auto" for the baseline. If the template does not belong to your organization, or the baseline is not a Completed assessment of the same domain, no report is generated automatically. Generate one yourself once the assessment completes.
Translated reports cover the narrative, the finding explanations, chapter titles and table headers. Host names, IP addresses, URLs, CVE IDs, ports, product names, code and email addresses stay as found. A string that cannot be translated stays in English, and the report is still delivered.

Narrow breach and CVE findings

Refusals at start

The API checks your plan and the rate limit first, then takes the allowance unit, then validates the body. The assessment engine runs its own checks last. A refusal never costs a unit: the first two checks run before the unit is taken, and every later refusal refunds it. The engine’s three business refusals read:
How to clear each one:
  • 10 open assessments. Wait for one to finish. Your organization runs one assessment at a time and queues the rest. See Read the queue.
  • Duplicate within 30 minutes. The window counts from the earlier assessment’s start, whatever its status. Only module flags and domain_mode count, so the same modules with another report language are refused too. A request that turns on at least one module the earlier assessment did not run is accepted. A full assessment with the defaults already covers the modules of the Domain Spoofing, VIP Executive, Breach and Infrastructure reports, so a targeted assessment of those types for the same domain, with its default flags, is refused for 30 minutes after it.
  • Heavy capacity. Retry in a few minutes, or start a lighter assessment: turn off perform_port_scan, active_vuln_scan and dns_typosquatting_enabled, and use default or swap_to_primary as domain_mode. The API has no scan profiles. Switch the flags off instead.
  • Three kinds of 429. Branch on the body: resource means the allowance, code means heavy capacity, message means the rate limit.
After a 504, list your assessments before you retry. The engine may have started the assessment after the API stopped waiting. The unit was refunded either way.
Handle API errors covers every status in more detail.

Endpoints