API Reference

Reports Endpoint

Trigger ad-hoc reports + download scheduled report PDFs.

POST /api/v1/reports/run

Run a report ad-hoc. JSON inline if you want the raw data, or a download URL if you want the PDF. Scope: read:reports.

POST /api/v1/reports/run
{
  "type": "weekly_health",
  "server_id": 4,
  "from": "2026-04-18T00:00:00Z",
  "to":   "2026-04-25T00:00:00Z",
  "format": "json"   // or "pdf" for a downloadable URL
}

GET /api/v1/reports

List previously generated scheduled reports. Scope: read:reports.

GET /api/v1/reports/:id/download

Download a specific report as PDF. Scope: read:reports.

POST /api/v1/reports/schedules

Create a recurring report. Cron syntax for the schedule, IANA timezone, and any number of delivery channels (email or Slack). Scope: admin:reports.

{
  "name": "Weekly health check",
  "type": "weekly_health",
  "server_id": 4,
  "schedule": "0 9 * * 1",
  "timezone": "Europe/Berlin",
  "delivery": {
    "channels": ["email:[email protected]", "slack:C123ABC"]
  }
}

The Slack channel ID is the C-prefixed one from your workspace, not the human-readable name. We don't auto-resolve names because Slack workspace name uniqueness isn't guaranteed across the API.