Skip to main content
Base URL: http://localhost:9002 (default)

Starting the Server

Authentication

/api/* routes require a Bearer token when the server is started with VIGOLIUM_API_KEY or server.auth_api_key set.
Public endpoints (no auth required): GET /, GET /health, GET /server-info, GET /swagger/*, GET /metrics, and POST /api/auth/login. Demo-only and view-only modes (cfg.DemoOnly / cfg.ViewOnly) further gate mutating routes; admin/operator/viewer roles enforced by RoleGuard middleware override the per-route checks.

Project Scoping

All API operations are scoped to a project via the X-Project-UUID request header. If the header is omitted, the default project (00000000-0000-0000-0000-000000000001) is used.
This applies to all data endpoints: ingestion, findings, HTTP records, stats, scans, source repos, and OAST interactions. See Projects for the full multi-tenancy reference.

GET /api/info, App Info

Returns basic application metadata. (GET / serves the embedded static UI, not JSON.)

GET /health, Health Check

Returns server health status.

GET /server-info, Server Info

Returns detailed server information including uptime, database driver, queue depth, and record/finding totals.

GET /swagger/*, Swagger UI

Interactive API documentation. Open in a browser.
The raw OpenAPI 3.0 spec is available at:

GET /metrics, Prometheus Metrics

Returns Prometheus-formatted metrics. The route is always registered and unauthenticated; the handler gates the response on the server.enable_metrics config key (on by default; there is no CLI flag for it).

CORS

CORS can be enabled via the cors_allowed_origins server config: Allowed methods: GET, POST, PUT, DELETE, PATCH, OPTIONS. Allowed headers: Content-Type, Authorization, X-Project-UUID, X-User-Email.
PATCH was missing from the preflight allowlist before v0.4.2, so a browser client could never reach PATCH /api/findings/:id/status — i.e. could never mark a finding triaged.

Response Headers

Every response carries the server banner and its companion author header:
X-Vigolium-Bridge-Source additionally appears on /api/http-records when a Burp/Caido bridge answered, naming the vendor.

Request Body Limits

Request bodies are capped per route. Since v0.4.2 a chunked body is capped at limit + 1 bytes and drained before the 413 is returned, rather than being read to completion — previously a chunked upload could grow the heap to the framework’s 512 MB ceiling on a route whose own limit was 4 MB. --debug logging no longer buffers streamed uploads into memory on the large-upload routes either.

Error Responses

All errors follow a consistent format:
Common error codes:
v0.4.2: storage downloads used to answer a missing object with a truncated stream instead of a JSON 404 — a client saw a short file, not an error. They now return the standard error shape, and the storage read endpoints are reachable in --view-only mode.