CyboruxCyborux API
Domains

Domain Summary

Retrieve a dashboard summary for a domain, optimized for fast page load.

https://api.cyborux.com
GET/api/domain/{domain_name}/summary
Path Parameters
string
Authorizationheader
Bearer <token>

API key authentication — use your Cyborux API key as a Bearer token.

Path Parameters

ParameterTypeDescription
domain_namestringThe domain name (e.g. example.com).

Response

{
  "domain": "example.com",
  "last_analyzed": "2026-03-08T14:22:00Z",
  "status": "completed",
  "counts": {
    "emails": 134,
    "people": 18,
    "files": 9,
    "subdomains": 47,
    "usernames": 22,
    "related_domains": 5
  },
  "security_metrics": {
    "spoofable_emails": 12,
    "leaked_emails": 27,
    "active_subdomains": 38,
    "takeover_vulnerable": 2,
    "passwords_exposed": 5,
    "people_with_emails": 15,
    "people_in_files": 3,
    "critical_vulnerabilities": 1,
    "high_vulnerabilities": 4,
    "email_auth": {
      "schema_version": 1,
      "spoofing_protection": "partial",
      "reasons": [
        "DMARC policy is 'quarantine' — spoofed mail is delivered to spam, not rejected",
        "SPF uses soft fail (~all) instead of hard fail (-all)"
      ],
      "dmarc": {
        "policy": "quarantine",
        "pct": 100,
        "raw_record": "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com",
        "checked_at": "2026-04-26T12:34:56+00:00"
      },
      "spf": {
        "qualifier": "~all",
        "policy": "soft_fail",
        "raw_record": "v=spf1 include:_spf.google.com ~all",
        "checked_at": "2026-04-26T12:34:56+00:00"
      }
    },
    "breach_analytics": {
      "total_breaches": 27,
      "affected_emails": 18,
      "recent_affected_emails": 5,
      "total_emails": 134,
      "recent_pct": 64,
      "recent_window_years": 2,
      "yearly_counts": [
        { "year": 2017, "count": 0 },
        { "year": 2018, "count": 1 },
        { "year": 2019, "count": 2 },
        { "year": 2020, "count": 3 },
        { "year": 2021, "count": 5 },
        { "year": 2022, "count": 4 },
        { "year": 2023, "count": 6 },
        { "year": 2024, "count": 7 },
        { "year": 2025, "count": 5 },
        { "year": 2026, "count": 1 }
      ],
      "latest_breaches": [
        {
          "name": "LinkedIn",
          "title": "LinkedIn (2021)",
          "breach_date": "2021-06-22",
          "affected_count": 23,
          "pwn_count": 700000000
        }
      ]
    },
    "login_pages_count": 3,
    "usernames_in_files": 8,
    "avg_services_emails": 4.2,
    "avg_services_usernames": 2.1,
    "posture": {
      "email-auth": "watch",
      "vulnerability": "at-risk",
      "credential-exposure": "watch",
      "attack-surface": "watch",
      "shadow-it": "good",
      "high-profile": "at-risk",
      "crypto-dns": "good"
    }
  },
  "risk_score": 67,
  "risk_level": "high",
  "tls_grade": "A",
  "tls_scanned": true,
  "highlights": {
    "most_exposed_people": [],
    "interesting_subdomains": [],
    "interesting_files": []
  },
  "domain_info": {
    "registrar": "GoDaddy",
    "creation_date": "2010-05-15",
    "expiration_date": "2027-05-15",
    "whois_data": { "...": "raw WHOIS record (registrar fields, registrant, etc.)" },
    "dns_records": { "ns": ["ns1.example.com", "ns2.example.com"], "...": "..." }
  },
  "is_fully_analyzed": true,
  "analysis_progress": null,
  "tech_summary": {
    "categories": [
      { "name": "Web servers", "count": 3 },
      { "name": "JavaScript frameworks", "count": 5 }
    ],
    "total": 12
  },
  "organization_name": "Example Corp"
}
StatusDetail
401Not authenticated.
403Forbidden — you do not have access to this domain.
404Domain not found.
{
  "detail": "Not authenticated."
}

Response Fields

domainstring

The domain name.

last_analyzedstring | null

ISO 8601 timestamp of when the authenticated user last submitted this domain for analysis. Each user sees their own analysis date, not a global timestamp.

statusstring

Analysis status: pending, processing, or completed.

countsobject

Total entity counts: emails, people, files, subdomains, usernames, related_domains.

security_metricsobject

Security indicators including spoofable_emails, leaked_emails, active_subdomains, takeover_vulnerable, passwords_exposed, people_with_emails, people_in_files, critical_vulnerabilities, high_vulnerabilities, login_pages_count, usernames_in_files, avg_services_emails, avg_services_usernames, email_auth, breach_analytics, and posture.

posture is the External Posture index — a qualitative per-topic map keyed by stable topic id. Each value is one of good, watch, at-risk, or not-assessed. Topics are derived from existing aggregates and mapped to NIS2 Article 21 and CIS Controls v8 references:

  • email-auth — DMARC + SPF posture (NIS2 21(2)(h), CIS C9).
  • vulnerability — known CVEs on detected subdomain tech (NIS2 21(2)(e), CIS C7). not-assessed until detect_subdomain_technologies has run.
  • credential-exposure — breached emails / exposed passwords / recent breach activity (NIS2 21(2)(j), CIS C5).
  • attack-surface — public surface size relative to the requesting user's reported organisation size; flags internal subdomains with login pages (NIS2 21(2)(a), CIS C1).
  • shadow-it — third-party SaaS sprawl inferred from avg_services_emails (NIS2 21(2)(f), CIS C2). not-assessed until find_registered_sites_priority has run.
  • high-profile — privileged / executive people with breached linked emails (NIS2 21(2)(g), CIS C14).
  • crypto-dns — TLS grade plus DNSSEC and registrar-lock signals from WHOIS (NIS2 21(2)(h), ENS mp.com.*).

The index reflects only what is externally observable via OSINT. It is not a NIS2 / ENS compliance audit and does not measure internal controls.

email_auth is the structured email-authentication posture (DMARC + SPF) for the domain's canonical email zone. null until the spoofability check has run. When present:

  • spoofing_protection: tri-state — protected (DMARC p=reject enforced + SPF -all), partial (some controls in place but enforcement is incomplete), spoofable (DMARC p=none/missing with weak SPF), or unknown (not yet computed).
  • reasons: human-readable strings explaining each detected weakness; empty when fully protected.
  • dmarc: parsed DMARC policy (reject/quarantine/none/missing), pct percentage, the raw _dmarc.<domain> TXT record, and checked_at timestamp.
  • spf: parsed SPF policy (hard_fail/soft_fail/neutral/permissive/missing), the all-mechanism qualifier, the raw apex TXT record, and checked_at timestamp.

breach_analytics is the aggregated third-party breach exposure across the domain's discovered emails. Always present (never null); a domain with no breach signals yet returns all counts at zero. Fields:

  • total_breaches (number): distinct breaches affecting any of the domain's emails.
  • affected_emails (number): distinct emails with at least one breach link (any time).
  • recent_affected_emails (number): distinct emails affected by breaches whose breach_date falls inside the recent window (recent_window_years).
  • total_emails (number): total emails discovered for the domain.
  • recent_pct (number, 0–100): share of total_breaches whose breach_date falls inside the last recent_window_years.
  • recent_window_years (number): width of the recent window in years (default 2).
  • yearly_counts (array of { year, count }): distinct breaches per year for the timeline window (default last 10 calendar years ending in the current year), ascending by year. The series is densified server-side — every year in the window appears with count: 0 if no breaches landed that year, so the frontend sparkline draws a continuous line.
  • latest_breaches (array, max 3): most recent breaches by breach_date (descending; rows with a null breach_date sink to the bottom). Each entry: { name, title, breach_date, affected_count, pwn_count }.
risk_scorenumber | null

Aggregated risk score from 0 to 100. null if not yet calculated.

risk_levelstring | null

Risk classification: info, low, medium, high, or critical. null if not yet calculated.

tls_gradestring | null

TLS/SSL security grade (A+, A, A-, B, C, D, E, F, T, M). null when not yet scanned, when HTTPS is not available, or when the TLS scanner could not complete the assessment. Use tls_scanned to check whether a scan was attempted.

tls_scannedboolean

Whether a TLS assessment has been attempted. A null grade with tls_scanned: true indicates the domain either does not serve HTTPS or the scanner could not complete the assessment.

highlightsobject

Dashboard highlights: most_exposed_people (excludes people with unlikely affiliation), interesting_subdomains, interesting_files.

domain_infoobject

WHOIS and DNS data. Top-level keys: registrar, creation_date, expiration_date (extracted from whois_data for quick access), plus the full raw whois_data and dns_records objects for clients that need every record type (NS, MX, TXT, SPF, DMARC, DNSSEC flags, etc.). Any field that is absent in the upstream WHOIS / DNS response is null.

is_fully_analyzedboolean

Whether all analysis phases (including deep enrichment) have completed.

analysis_progressobject | null

Progress indicator with phase and percentage. Only present when status is processing.

tech_summaryobject | null

Technology stack summary with categories (name + count + percentage).

organization_namestring | null

Organization name provided when the domain was first analyzed.

curl -X GET https://api.cyborux.com/api/domain/example.com/summary \
  -H "Authorization: Bearer YOUR_API_KEY"
const res = await fetch(
  "https://api.cyborux.com/api/domain/example.com/summary",
  { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);
const data = await res.json();
import requests

response = requests.get(
    "https://api.cyborux.com/api/domain/example.com/summary",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = response.json()