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.
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 theX-Project-UUID request header. If the header is omitted, the default project (00000000-0000-0000-0000-000000000001) is used.
Response Versions
Added in v0.5.3. Every response carries aVigolium-Api-Version header naming the body shape it used, and a client picks one with any of (first match wins):
?api_version=2(or1)Vigolium-Api-Version: 2request headerAccept: application/vnd.vigolium.v2+json(or…v1+json)
server.api_version_default — 1 in this release, so nothing changes for an existing client until it opts in. An unknown version is 400 unsupported_api_version. Server-sent event streams are never wrapped.
v1 is the historical shape, extended only additively. The paginated lists (/api/findings, /api/http-records, /api/scans, /api/oast-interactions, /api/agent/sessions) gain schema_version and command; other list endpoints keep their own shapes.
-j envelope — the same document vigolium finding -j prints, so one parser serves both surfaces. Every list endpoint answers it, including /api/modules, /api/extensions, /api/projects, /api/config and /api/db/tables/…:
v1 errors gained
error_code in the same release, drawn from the same closed vocabulary the CLI uses (vigolium schema error), and unknown routes now return JSON rather than an HTML 404 — so a client never has to parse markup to find out it called the wrong path.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.GET /metrics, Prometheus Metrics
Returns Prometheus-formatted metrics. The route is always registered and unauthenticated; the handler gates the response on theserver.enable_metrics config key (on by default; there is no CLI flag for it).
CORS
CORS can be enabled via thecors_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 atlimit + 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: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.