Reports
Athena reports turn the data you already collect into shareable tables. Use the no-code Basic report builder to pick a data source, choose columns, filter and sort — over your agents, installed software, and Windows services — or run one of the built-in reports for compliance posture and deployment results. Save reports for reuse, and export any result as CSV, HTML, JSON, or a printable page. Everything is available from the console, the REST API, and the PowerShell module.
Two kinds of report#
Athena has two paths to a report, and both produce the same tabular result shape:
| Kind | What it is | Where it comes from |
|---|---|---|
| Basic builder report | A no-code definition: a data source + ordered columns + filters + sort. Runs in-memory using the same filter engine as dynamic collections. | api/reports/builder/* and saved definitions under api/reports/definitions |
| Built-in report | A purpose-built report with fixed parameters — currently Compliance Posture and Deployment Results. | GET api/reports to discover, POST api/reports/generate to run |
Reading and running reports requires the Helpdesk role or above; creating, editing, and deleting saved reports requires the Operator or Admin role. Saved-report create, update, and delete are written to the audit log. See Roles & Permissions.
Whichever path you use, the result is a title, a set of summary label/value pairs, and one or more tables (column headers plus string rows). That is why a single CSV, HTML, or JSON renderer can export any report.
The Basic report builder#
A Basic report is defined by a data source, an ordered list of column keys to project, optional filters, and an optional sort column. Three data sources are available:
| Data source | Rows | Use it for |
|---|---|---|
Agents | One row per computer (the default). Selecting a child-list column — installed software or a Windows service — explodes the report to one row per item per computer. | Fleet, hardware, and inventory reports; per-app or per-service listings. |
Software | One row per installed application per computer. | Software inventory / license-style listings. |
Services | One row per Windows service per computer. | Service state across the fleet. |
Ask the server which sources exist and which columns each offers, rather than hard-coding
them. GET api/reports/builder/sources lists the available data sources,
GET api/reports/builder/columns/{source} lists the selectable/filterable columns
for one source, and GET api/reports/builder/schema returns every source with its
full column catalog in a single call — handy for automation.
Column keys#
Columns are referenced by key. Single-value columns (for example
MachineName, OperatingSystem, Status,
Manufacturer, Model, SerialNumber) yield one value per
computer. Child-list columns explode the report to one row per item; their keys use a
dotted path, for example:
| Child list | Example column keys |
|---|---|
| Installed software | InstalledSoftware.Name, InstalledSoftware.Version, InstalledSoftware.Publisher |
| Windows services | Services.ServiceName, Services.DisplayName, Services.Status, Services.StartupType |
| Disks | HardwareInfo.Disks.Name, HardwareInfo.Disks.TotalSizeGB, HardwareInfo.Disks.FreeSizeGB |
| Network interfaces | NetworkInterfaces.InterfaceName, NetworkInterfaces.MacAddress, NetworkInterfaces.IpAddress |
Filters reuse the dynamic-collections filter model, so the fields and operators are the same
ones you already use to build a dynamic collection. Always
confirm the exact keys for your server with GET api/reports/builder/columns/{source}.
Run an ad-hoc report#
Post a definition to POST api/reports/builder/run to run it without saving. With
no format query parameter you get the structured JSON model; with
?format=csv, ?format=html, or ?format=json you get a
file download in that format.
POST /api/reports/builder/run
{
"name": "Windows software",
"dataSource": "Agents",
"columns": ["MachineName", "InstalledSoftware.Name", "InstalledSoftware.Version"],
"sortColumn": "MachineName"
}
Selecting InstalledSoftware.Name from the Agents source explodes the
result to one row per installed app per computer. To render a printable page (the "PDF" path —
open it in a new tab and use the browser's Save as PDF), post the same definition to
POST api/reports/builder/printable, which returns a standalone HTML document
inline.
Saved reports#
Save a Basic definition so anyone with the right role can re-run it. Saved reports carry a name, optional description, and free-form tags for organizing them, plus the creator and created/updated timestamps.
| Method & path | Purpose | Role |
|---|---|---|
GET api/reports/definitions | List saved reports (most-recently-updated first). | Helpdesk+ |
GET api/reports/definitions/{id} | Get one saved report. | Helpdesk+ |
POST api/reports/definitions | Create a saved report. | Operator / Admin |
PUT api/reports/definitions/{id} | Update a saved report (null fields are left unchanged). | Operator / Admin |
DELETE api/reports/definitions/{id} | Delete a saved report. | Operator / Admin |
POST api/reports/definitions/{id}/run | Run a saved report; add ?format=csv|html|json to download. | Helpdesk+ |
POST /api/reports/definitions
{
"name": "Windows agents",
"description": "All Windows machines and their OS build",
"tags": ["Inventory", "Windows"],
"dataSource": "Agents",
"columns": ["MachineName", "OperatingSystem", "Status"],
"filters": [
{ "fieldPath": "OperatingSystem", "operator": "Contains", "value": "Windows" }
],
"sortColumn": "MachineName"
}
Built-in reports#
Call GET api/reports to discover the built-in reports and the parameters each
accepts, then run one with POST api/reports/generate. Add ?format=csv
to that call for a CSV download instead of the JSON model. The reports available today:
| Report key | Name | Shows | Parameters |
|---|---|---|---|
compliance-posture | Compliance Posture | Overall compliant percentage for a baseline over a collection, a per-rule pass/fail breakdown, and the list of non-compliant agents. | baselineId, collectionId (both GUID, required) |
deployment-results | Deployment Results | Per-agent success / failure / pending for a single deployment, with exit code, error, and timing. | deploymentId (GUID, required) |
POST /api/reports/generate
{
"reportKey": "compliance-posture",
"parameters": {
"baselineId": "550e8400-e29b-41d4-a716-446655440000",
"collectionId": "550e8400-e29b-41d4-a716-446655440001"
}
}
An unknown report key returns 404; a missing or invalid parameter returns 400.
Exporting#
Report results can be returned as a file download in several formats:
| Format | How | Result |
|---|---|---|
| JSON model | No format parameter. | The structured result (summary + tables) as the API response. |
| CSV | ?format=csv on a builder/definition run, or on api/reports/generate. | text/csv download. |
| HTML | ?format=html on a builder or saved-definition run. | text/html download. |
| JSON file | ?format=json on a builder or saved-definition run. | application/json download. |
| Printable | POST api/reports/builder/printable. | Standalone HTML shown inline — print or "Save as PDF" from the browser. |
An unrecognized format value returns 400. The api/reports/generate endpoint supports csv only.
PowerShell#
The Athena PowerShell module covers the report builder and the saved-report library:
# Discover data sources and their columns
Get-AthenaReportSource
Get-AthenaReportSchema
# Run an ad-hoc per-app software report and return its rows
(Invoke-AthenaReport -DataSource Agents `
-Columns MachineName,InstalledSoftware.Name).Tables[0].Rows
# Save a report, then list and run saved reports
New-AthenaReport -Name "Windows software" -DataSource Agents `
-Columns MachineName,InstalledSoftware.Name -Tags Inventory,Windows
Get-AthenaReport
Get-AthenaReport -Tag Compliance
Get-AthenaReport -Tag Compliance | Invoke-AthenaReport
# Update and remove a saved report
Set-AthenaReport -Id $reportId -SortColumn MachineName
Remove-AthenaReport -Id $reportId
Get-AthenaReportSource and Get-AthenaReportSchema discover what
you can build; Invoke-AthenaReport runs a saved report by -Id or an
ad-hoc one by -DataSource + -Columns; and
New- / Set- / Remove-AthenaReport manage the saved-report
library (Operator or Admin).