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 check with columns:
| Column | Description |
|---|---|
id | Check identifier |
title | Check title |
result | Passed, Failed, or Skipped |
severity | Critical, High, Medium, or Low |
framework | CIS, EIDSCA, CISA, or other |
helpUrl | Reference link |
remediationSteps | Remediation guidance |
rawOutput | Raw value detected in the tenant |
CSV files are encoded as UTF-8.
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 Enterprise plans.
Get all results for a scan
bash
curl https://api.aether365.io/scans/{scanId}/results \
-H "Authorization: Bearer <api-key>"Returns a paginated list of all check results. See Results API for full documentation.
Filter by status
bash
curl "https://api.aether365.io/scans/{scanId}/results?result=Failed" \
-H "Authorization: Bearer <api-key>"Filter by severity
bash
curl "https://api.aether365.io/scans/{scanId}/results?severity=Critical" \
-H "Authorization: Bearer <api-key>"Python example: export all failed checks to CSV
python
import requests
import csv
API_KEY = "your-api-key"
SCAN_ID = "your-scan-id"
headers = {"Authorization": f"Bearer {API_KEY}"}
results = []
page = 1
while True:
resp = requests.get(
f"https://api.aether365.io/scans/{SCAN_ID}/results",
params={"result": "Failed", "page": page, "limit": 100},
headers=headers,
)
data = resp.json()
results.extend(data["data"])
if page >= data["meta"]["totalPages"]:
break
page += 1
with open("failed_checks.csv", "w", newline="") as f:
writer = csv.DictWriter(
f, fieldnames=["id", "title", "severity", "framework", "remediationSteps"]
)
writer.writeheader()
writer.writerows(results)
print(f"Exported {len(results)} failed checks")PowerShell example: fetch all critical failures
powershell
$headers = @{ Authorization = "Bearer $env:AETHER365_API_KEY" }
$scanId = "your-scan-id"
$page = 1
$results = @()
do {
$response = Invoke-RestMethod `
-Uri "https://api.aether365.io/scans/$scanId/results?result=Failed&severity=Critical&page=$page&limit=100" `
-Headers $headers
$results += $response.data
$page++
} while ($page -le $response.meta.totalPages)
$results | Export-Csv -Path "critical_failures.csv" -NoTypeInformation
Write-Host "Exported $($results.Count) critical 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.