Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Endpoints

A condensed listing of every public endpoint, its scope requirement, and where it's documented. For the full request/response schema of each, look at the running server's auto-generated /docs (FastAPI Swagger UI) or /redoc.

This page is the navigation, not the complete reference.

Public

No auth required.

MethodPathPurpose
GET/API root info: {name, status, docs, health}
GET/healthLiveness — process up. Always 200 unless crashing.
GET/readyReadiness — DB openable + scanner registry loaded.
GET/docsSwagger UI
GET/redocReDoc
GET/openapi.jsonOpenAPI 3.1 document

Scans

Prefix: /api/v1/scans (and /api/scans legacy). Source: backend/securescan/api/scans.py.

MethodPathScopePurpose
POST/writeStart a scan. Rate-limited. See How scans work.
GET/readList scans.
GET/{id}readScan details.
DELETE/{id}writeDelete scan + cascade findings. 409 if running/pending.
POST/{id}/cancelwriteCancel a running scan. 409 if already terminal.
GET/compareread?scan_a=&scan_b={new, fixed, unchanged}. See Diff & compare.
GET/{id}/findingsreadFindings + triage state. Filter ?severity=, ?scan_type=, ?compliance=.
GET/{id}/summaryreadSeverity counts, risk score, scanners run / skipped, timing.
GET/{id}/sbomread?format=cyclonedx|spdx. See SBOM.
GET/{id}/reportreadHTML / PDF report.
GET/{id}/eventsread*SSE stream. Accepts ?event_token=. See Real-time scan progress.
POST/{id}/event-tokenreadMint short-lived SSE token. See SSE event tokens.

* SSE route also accepts ?event_token= from browsers; see Authentication overview.

Triage

Prefix: /api/v1/findings. Source: backend/securescan/api/triage.py.

MethodPathScopePurpose
PATCH/{fingerprint}/statewriteSet / replace triage verdict + note.
GET/{fingerprint}/commentsreadList comments, oldest first.
POST/{fingerprint}/commentswriteAdd a comment.
DELETE/{fingerprint}/comments/{comment_id}writeDelete one comment by id.

See Triage workflow.

API keys

Prefix: /api/v1/keys. Source: backend/securescan/api/keys.py.

MethodPathScopePurpose
POST/adminIssue a key. Returns plaintext secret once.
GET/adminList keys (no secret).
GET/meany DB keyCalling key's introspection.
DELETE/{id}adminRevoke. Lockout-protected (409 if would zero admin credentials).

See API keys.

Webhooks

Prefix: /api/v1/webhooks. Source: backend/securescan/api/webhooks.py.

MethodPathScopePurpose
POST/adminCreate. Returns secret once.
GET/adminList.
GET/{id}adminFetch one.
PATCH/{id}adminEdit name / url / event_filter / enabled. Cannot rotate secret.
DELETE/{id}adminCascades deliveries.
GET/{id}/deliveriesadminLast 100 delivery rows, newest first.
POST/{id}/testadminEnqueue a synthetic webhook.test. Returns 202 + delivery_id.

See Webhooks and Webhook payloads.

Notifications

Prefix: /api/v1/notifications. Source: backend/securescan/api/notifications.py.

MethodPathScopePurpose
GET/readList. ?unread_only=, ?limit= (capped at 200).
GET/unread-countread{count} for the bell badge. Index-only query.
PATCH/{id}/readwriteMark one read.
PATCH/read-allwriteBulk mark read. Returns {marked_read: N}.

See Notifications.

Dashboard

Prefix: /api/v1/dashboard. Source: backend/securescan/api/dashboard.py.

MethodPathScopePurpose
GET/statusreadPer-scanner availability + version.
GET/statsreadAggregate counts.
GET/trendsreadRisk / finding trends over time.
GET/browsereadFilesystem directory picker data (for the New Scan UI).
POST/install/{scanner}writeInstall a supported scanner via the system package manager.

Compliance

Prefix: /api/v1/compliance. Source: backend/securescan/api/compliance.py.

MethodPathScopePurpose
GET/coveragereadPer-framework coverage with ?scan_id=.

See Compliance.

Quick examples

Get all critical findings on a scan

curl -s -H "X-API-Key: $K" \
  "http://127.0.0.1:8000/api/v1/scans/$SCAN_ID/findings?severity=critical" | jq .

List webhook delivery history

curl -s -H "X-API-Key: $ADMIN_KEY" \
  "http://127.0.0.1:8000/api/v1/webhooks/$WID/deliveries" | jq '.[].status'

Mark every notification read

curl -s -X PATCH -H "X-API-Key: $K" \
  "http://127.0.0.1:8000/api/v1/notifications/read-all"

Pin a request id (for log correlation)

curl -s -H "X-API-Key: $K" \
  -H "X-Request-ID: my-debug-trace-2026-04-29" \
  "http://127.0.0.1:8000/api/v1/dashboard/stats"

Where to look for the parameters

For the full set of query parameters, request body fields, and response schemas — including the ones we don't repeat on this site because they're auto-derived from Pydantic models — open http://<your-backend>/docs in a browser. The "Try it out" panel of Swagger UI lets you exercise any endpoint with your API key plugged in.

Next