Exporting Results
Scan results can be downloaded directly from the app, exported as CSV, or retrieved programmatically via the REST API.
Download from scan detail
Every completed scan has a Download button in the header of the scan detail page. Click it to download a full report of that scan.
CSV export from the Scans page
To export a CSV covering your scan history:
- Navigate to Scans in the sidebar
- Click Export CSV in the top-right of the page header (visible when you have at least one completed scan)
The CSV file contains one row per scan with columns:
| Column | Description |
|---|---|
Date | Scan start time (ISO 8601) |
Type | compliance |
Status | Scan status (e.g. completed) |
Passed / Failed / Skipped | Result counters |
Duration | Scan duration |
PassRate | Passed / (Passed + Failed), as a percentage |
HighSeverity / MediumSeverity / LowSeverity | Failed findings by severity |
CSV files are encoded as UTF-8. For a per-check export, use the Results API as shown below.
API export
You can retrieve results programmatically using the REST API. This enables automated reporting, integration with ticketing systems, or feeding results into a SIEM. API access is available on plans that include it.
Get all results for a scan
bash
curl https://api.aether365.io/scans/{scanId}/results \
-H "Authorization: Bearer ak_live_..."Returns the complete result array in one response - this endpoint has no pagination and ignores query parameters, so filter client-side. See Results API for full documentation.
Filter failures with jq
bash
curl -s https://api.aether365.io/scans/{scanId}/results \
-H "Authorization: Bearer ak_live_..." \
| jq '[.data[] | select(.result == "Failed")]'High-impact failures only (severity is L2 for high impact, L1 for medium):
bash
curl -s https://api.aether365.io/scans/{scanId}/results \
-H "Authorization: Bearer ak_live_..." \
| jq '[.data[] | select(.result == "Failed" and .severity == "L2")]'Python example: export all failed checks to CSV
python
import requests
import csv
API_KEY = "ak_live_your-api-key"
SCAN_ID = "your-scan-id"
headers = {"Authorization": f"Bearer {API_KEY}"}
# One request returns every result; filter client-side
resp = requests.get(
f"https://api.aether365.io/scans/{SCAN_ID}/results",
headers=headers,
)
results = [r for r in resp.json()["data"] if r["result"] == "Failed"]
with open("failed_checks.csv", "w", newline="") as f:
writer = csv.DictWriter(
f,
fieldnames=["testId", "title", "severity", "framework", "remediationSteps"],
extrasaction="ignore",
)
writer.writeheader()
writer.writerows(results)
print(f"Exported {len(results)} failed checks")PowerShell example: fetch all high-impact failures
powershell
$headers = @{ Authorization = "Bearer $env:AETHER365_API_KEY" }
$scanId = "your-scan-id"
# One request returns every result; filter client-side
$response = Invoke-RestMethod `
-Uri "https://api.aether365.io/scans/$scanId/results" `
-Headers $headers
$results = $response.data | Where-Object { $_.result -eq "Failed" -and $_.severity -eq "L2" }
$results | Export-Csv -Path "high_impact_failures.csv" -NoTypeInformation
Write-Host "Exported $($results.Count) high-impact failures"Automated reporting
You can combine the API with your existing tooling to produce automated reports after each scan:
- Webhook to script - configure a Teams or email notification as a trigger, then call the API for the latest scan results
- Scheduled script - run a script on a schedule that retrieves the latest results and generates a report
- CI/CD pipeline integration - retrieve results after a scan as part of a compliance verification step
See Integrations for more examples.