Skip to main content
Every completed assessment report stores its findings as structured JSON. Three endpoints read that data, so you can load findings into your own tools without parsing the PDF:
  • The index lists the report’s sections and datasets.
  • A section returns one part of the report, such as the credential exposure module or the security scorecard.
  • A dataset returns one evidence table as columns and rows, the same table the PDF bundle ships as a CSV file.
They work on any report in completed status: automatic or generated, PDF or JSON format. The one exception is the dataset endpoint on a Domain Spoofing Risk Report. See Pull a dataset. You need the report’s uid, which Generate and download assessment reports shows how to find.

Availability and cost

Availability: Attack Surface Reports or Targeted Attack Surface Reports, included in every edition. Either feature opens every endpoint on this page. Cost: no metered allowance. Reading report data uses none of your Attack Surface allowances. With an API key, each call that returns 2xx counts once toward your monthly API Calls allowance. Any other status is refunded. See Rate limits. Without either feature, every call on this page returns 403 with {"detail": "This feature is not included in your plan."}. A lapsed license returns the same message here. These endpoints never return the allowance 429 or a capacity 409. See Plans and quotas.

Discover what a report holds

GET /api/hackerview/reports/{report_uid}/data/ returns the report’s top-level sections and its datasets.
The example is shortened. A real full report has more sections and datasets.
  • sections has one entry per top-level key. type is dict for an object, with its keys in keys, or list for an array, with its length in count. A plain value shows its type, such as str or int. Keys whose value is null are left out.
  • datasets names the evidence tables the report produced. It can include tables that the dataset endpoint does not serve, such as risky_ports, credential_exposure_summary or the emails_ tables. Those exist only as CSV files in the ZIP of a PDF-format report.

Sections of the full report

The Full Attack Surface Report, and the risk reports built on it, hold these top-level sections: The Domain Spoofing Risk Report, the three activity reports and the Change Comparison have their own layouts. The Domain Spoofing Risk Report holds sections such as spoofguard, phishing_exposure, risk and exclusions_applied. Activity and Change Comparison reports hold sections such as summary, adapters, source_coverage and exclusions_applied, with period on activity reports and reference_period, current_scan and baseline_scan on comparisons. Read the index of each report to see what it holds.

Read a section

GET /api/hackerview/reports/{report_uid}/data/{section}/ returns one section. Use a dot path to reach a key inside it, such as modules.credential_exposure or analysis.tech_stack.
  • data holds the value at that path, in the same shape as in the report JSON.
  • Dot paths step through object keys only. You can’t index into a list, so servers.0 returns 404. Read servers and pick the item yourself.
  • A section comes back whole. There is no paging, so a large section such as servers arrives in one response.
  • meta.language is the language the report was built in. The Domain Spoofing, activity and comparison reports keep it in language.

Pull a dataset

GET /api/hackerview/reports/{report_uid}/data/datasets/{name}/ returns one evidence table as JSON.
  • columns lists the column names in order. Each row is an object keyed by those names.
  • count is the number of rows. All rows come back in one response.
  • Values in the full report and the risk reports are strings, exactly as in the CSV file, numbers included. Activity and comparison reports return their values with their JSON types.
The endpoint serves these names and no others: A report holds only the datasets its modules produced. Check datasets in the index first. A name outside the list returns 400. A name on the list that this report does not hold returns 404.
On a Domain Spoofing Risk Report, the dataset endpoint does not serve the tables its index lists: typosquatting and phishing_unattributed_audit return 404, and phishing_exposure returns 400. Read the same data with the section endpoint: spoofguard for the look-alike domains, phishing_listings and phishing_exposure for the phishing listings. A PDF-format report also ships them as CSV files in its ZIP.

What a report left out

exclusions_applied counts what your exclusion rules removed when the report was built. Read it with the section endpoint:
In the full report and the snapshot risk reports, it has nine counters. Each is 0 when nothing was removed: Activity and Change Comparison reports use another shape: total removed, by_rule and by_adapter breakdowns, rules_loaded, and rules_hash, a fingerprint of the rules that applied. Two reports with the same rules_hash were built with the same rules. The counters give totals per kind of rule, not per rule. Rules apply when a report is built, so after you change them, generate the report again and read the new report.

Errors

Endpoints