Skip to main content

UI Implementation Guide

For the team building the UI on top of the platform. The UI is a thin client over the /api/v1 REST API — every screen and button maps to one of the endpoints in the API Reference. This page lists, per module, what control to build, the API call behind it, and what it does.

Common patterns (build these once)

  • Auth. Every request carries X-Master-Key + X-Admin-Key; org-scoped requests also carry X-Org-Key. Keys live server-side (a BFF/proxy), never in the browser. See API Overview.

  • Start-a-scan + poll. Every module's "Run" button is the same call — POST /org/scans with the module key — then poll progress:

  • Gate the Run button. Each module has a status endpoint returning can_run; disable "Run" (with the reason) when it's false.

  • Cooldown. POST /org/scans enforces one scan per module per ~14 days; show the next-eligible time and handle 409 (already in cooldown / in flight).

  • Errors to handle everywhere: 401 (bad key), 403 (module not enabled), 404, 409 (gate/cooldown), 422 (validation).

EASM — screens & controls

Screen / controlAPI callWhat it does
Domains listGET /org/domainsShow the org's seed domains.
Add domains button → inputPOST /org/domains (201)Add one or more domains to scan.
Edit domainPATCH /org/domains/{domain_id}Change a domain (e.g. enable/disable).
Remove domain (🗑)DELETE /org/domains/{domain_id} (204)Remove a domain.
Run EASM scan buttonPOST /org/scans {"module":"easm"}Start a scan. Gate: requires ≥1 domain (else 400).
Scan progressGET /org/scans/{id}/progressLive per-scanner progress; drive a progress bar.
Findings (grouped)GET /org/findings/groupedThe main results view (grouped by issue + affected assets).
Findings (flat) / filtersGET /org/findingsFilterable list (severity, status, …).

DAST — screens & controls

DAST tests web apps that EASM discovered, so its UI is gated on a non-empty surface.

Screen / controlAPI callWhat it does
Surface listGET /org/dast/surfaceThe web apps EASM found — what DAST can test.
Run DAST buttonPOST /org/scans {"module":"dast"}Start an active web-app scan. Gate: GET /org/dast/statuscan_run; 409 "DAST requires a completed EASM scan that discovered web apps" if the surface is empty.
Status / gateGET /org/dast/statusDrives the enabled/disabled state + reason on the Run button.
Progress / findings(same scan + findings endpoints as EASM)

Cloud (CSPM) — screens & controls

Screen / controlAPI callWhat it does
Connected accounts listGET /org/aws/accountsShow connected AWS accounts + their status (pending / validated / invalid).
Connect AWS account (step 1)POST /org/aws/accounts (201)Create the account record; the response carries the External ID + assumer ARN to display for the customer's CloudFormation step.
Attach role ARN (step 2)POST /org/aws/accounts again, with role_arnSave the read-only role ARN the customer created (updates in place; status → pending).
Validate buttonPOST /org/aws/accounts/{id}/validateLive test-AssumeRole; sets status validated / invalid (with reason).
Disconnect (🗑)DELETE /org/aws/accounts/{id} (204)Remove the stored connection.
Run cloud scan buttonPOST /org/scans {"module":"aws"}Scan all validated accounts. Gate: GET /org/aws/statuscan_run; 409 "AWS requires a validated cloud account" otherwise.
Status / gateGET /org/aws/status{enabled, validated_accounts, can_run} — drives the Run button.
Posture table (pass + fail)GET /org/aws/resultsThe compliance/posture view; supports filters status, framework, service, severity, account, limit, offset.
Framework dropdownGET /org/aws/frameworksThe frameworks present in results (CIS, ISO 27001, SOC 2, NIST, PCI…) — drives the "pick your standard" filter.
Compliance reportGET /org/aws/complianceA structured compliance report for the selected framework.

The detailed customer-facing setup that sits behind "Connect AWS" is Connecting AWS.

Cross-cutting: Findings & Tasks (all modules)

Screen / controlAPI callWhat it does
Findings (grouped / flat)GET /org/findings/grouped, GET /org/findingsResults across modules; filter by module to scope to one.
Finding detailGET /org/findings/{id}Full finding (description, risk, remediation steps, evidence).
Triage (false-positive / accept-risk / mark-resolved)PATCH /org/findings/{id}Record the customer's verdict; feeds re-scan reconciliation.
Finding historyGET /org/findings/{id}/historyThe status timeline for a finding.
Tasks boardGET /org/tasksRemediation tasks derived from findings.
Activity feedGET /org/activityThe org audit trail (who did what, when).
Scans historyGET /org/scans, GET /org/scans/{id}Past + current scans; POST /org/scans/{id}/stop to cancel.

One UI, three modules. The scan lifecycle, findings, tasks, triage, and activity screens are shared — only the per-module setup (domains for EASM, surface gate for DAST, account connection for Cloud) differs. Build the shared screens once and switch the module key.