Port Igniter
Get Started

API Reference

The JSON API behind the Reef dashboard, for security engineers who want to query findings, start scans, or monitor Reef itself.

Reef Support Home

Everything in the Reef dashboard is built on a JSON API under /api/. This page lists the routes for anyone who wants to query or automate Reef directly.

Authentication

Reef uses two kinds of authentication:

  • Dashboard routes use your logged-in session, the same as the web interface. Requests that change data (POST) also need Django’s CSRF token. Unauthenticated requests receive a 401 JSON response.
  • Agent and monitoring routes use an API key from DJANGO_API_KEYS, sent in the X-API-Key header.
API keys do not grant access to the dashboard routes. Findings, scans, and notifications require a logged-in session.

Health and monitoring

Route Auth Purpose
GET /api/health/ None Liveness check for load balancers and container health checks.
GET /api/status/ API key Readiness check. Returns 503 if the database is unreachable.
GET /api/ping/ API key Confirms an API key is valid.
GET /api/whoami/ Session Returns the logged-in user.

Findings

Route Purpose
GET /api/findings/ List findings. KEV findings are listed first.
GET /api/findings/<id>/ One finding, with full detail.
POST /api/findings/<id>/status/ Set one finding’s status. Body: {"status": "acknowledged"}
POST /api/findings/bulk-status/ Set the status of up to 1,000 findings. Body: {"ids": [1, 2, 3], "status": "resolved"}. Unknown IDs are skipped.

Valid statuses are open, acknowledged, resolved, and suppressed.

Filters for GET /api/findings/:

Parameter Values
status open, acknowledged, resolved, suppressed, or active (open and acknowledged)
severity info, low, medium, high, critical
scan_type fim, auditd, lynis, clamav, openscap, grype, yara
agent Agent name
kev 1 to show only CISA KEV findings
page Page number

Scans

Route Purpose
GET /api/scans/ List scans. Filter with type and status.
POST /api/scans/ Start a scan. Body: {"scan_type": "lynis", "agent": "web01", "params": {}}. params is optional. If you omit agent, the next agent to check in runs the scan.
GET /api/scans/<id>/ One scan, with its summary.
POST /api/scans/<id>/cancel/ Cancel a pending or running scan.
GET /api/scans/<id>/raw/ The scan tool’s raw output.
GET /api/scans/<id>/export/md/ Scan report in Markdown.
GET /api/scans/<id>/export/txt/ Scan report in plain text.
GET /api/scans/<id>/checklist/ OpenSCAP results as a STIG Viewer .cklb checklist.
GET / POST /api/scheduler/ Read or set the global schedule pause. Body: {"paused": true}

Agents

Route Purpose
GET /api/agents/ Every agent, with its last scan of each type and latest resource sample.
GET /api/agents/<name>/ One agent’s 24-hour resource summary and its 25 most recent scans.
GET /api/agents/<name>/metrics/?hours=24 Resource history and scan times for the last hours (up to 720).

Notifications

Route Purpose
GET /api/notifications/ The notification feed. Add ?unread=1 for unread only.
GET /api/notifications/unread-count/ The unread count shown on the bell icon.
POST /api/notifications/<id>/read/ Mark one notification read.
POST /api/notifications/read-all/ Mark all notifications read.

AI interpretation

Available only when OLLAMA_ENABLED=true.

Route Purpose
POST /api/scans/<id>/interpret/ Request a plain-language summary of a scan.
GET /api/scans/<id>/interpretation/ Retrieve the scan summary.
POST /api/findings/<id>/interpret/ Request a plain-language summary of a finding.
GET /api/findings/<id>/interpretation/ Retrieve the finding summary.
Top