Results API
Maintained by: Aether365 Team Audience: Developers Scope: Results API endpoints - retrieving scan findings
Get Scan Results
Returns every individual check result for a scan in a single response, sorted by result, framework, then test ID.
GET /scans/{scanId}/resultsNo pagination or server-side filters
The data field is the complete result array - there is no meta object. Query parameters such as page, limit, result, severity, or framework are ignored by this endpoint. Filtering is done client-side for now (see the example below).
Example Request
bash
curl https://api.aether365.io/scans/0d9f6f9e-3b0c-4a9d-9c1e-2f6a8b7c5d4e/results \
-H "Authorization: Bearer ak_live_..."Example Response
json
{
"success": true,
"data": [
{
"id": "e4b1c2d3-a5f6-4789-b0c1-d2e3f4a5b6c7",
"scanId": "0d9f6f9e-3b0c-4a9d-9c1e-2f6a8b7c5d4e",
"testId": "CIS.M365.1.1.1",
"title": "Ensure multifactor authentication is enabled for all users in administrative roles",
"result": "Failed",
"severity": "L2",
"framework": "CIS",
"helpUrl": "https://www.cisecurity.org/benchmark/microsoft_365",
"remediationSteps": "1. Sign in to the Microsoft Entra admin center...",
"description": "Checks that all users holding administrative roles are required to use multifactor authentication.",
"sourceTool": "compliance"
}
]
}Field Reference
All field names are camelCase.
| Field | Type | Description |
|---|---|---|
id | string | Result ID (UUID) |
scanId | string | Parent scan ID |
testId | string | Unique check identifier (e.g., CIS.M365.1.1.1) |
title | string | Human-readable check name |
result | string | Passed, Failed, Skipped, NotRun, or Error |
severity | string or null | L2 (high impact) or L1 (medium impact) |
framework | string or null | Compliance scans: CIS, EIDSCA, CISA. |
helpUrl | string or null | Link to remediation documentation or benchmark reference |
remediationSteps | string or null | Step-by-step fix instructions |
description | string or null | Overview of what the check evaluates |
sourceTool | string | Scan engine type (compliance) |
Filtering Client-Side
Because the endpoint returns the full array, apply filters after fetching. For example, high-impact failures with jq:
bash
curl -s https://api.aether365.io/scans/{scanId}/results \
-H "Authorization: Bearer ak_live_..." \
| jq '[.data[] | select(.result == "Failed" and .severity == "L2")]'