Skip to main content
Unified CRUD API for interacting with any database table. Returns raw JSON and supports pagination, filtering, sorting, column selection, and full-text search across all tables. Read endpoints (GET) require viewer role or above. Write endpoints (POST, PUT, DELETE) require admin role.
Full-text search is consistent with the CLI since v0.4.6. FTS availability used to be set only when the database was seeded, so vigolium server took the indexed FTS5 path while every CLI read command took the LIKE fallback on the same file - and the two did not return the same rows, MATCH being token/prefix based where LIKE is substring. The capability is now discovered from the database itself, and the indexed path keeps the metadata LIKE predicates alongside MATCH.The same release rebuilds the index when migrating from the legacy body-indexed FTS table. That replacement is created empty and filled by triggers, so before the fix only records written after the upgrade were searchable and search reported no error. If search has ever silently under-returned on an old database, one open on v0.4.6+ repairs it.
Project-scoped tables (scans, http_records, findings, source_repos, session_hostnames, oast_interactions, scan_logs, agentic_scans, scopes) automatically filter by the X-Project-UUID header. Pass ?all_projects=true to disable project scoping (admin use).

GET /api/db/tables, List All Tables

Returns all database tables with their row counts.

GET /api/db/tables/:table/columns, List Table Columns

Returns column metadata and primary key information for a specific table.
Error responses:

GET /api/db/tables/:table/records, List Records

Returns paginated, filtered, sorted records from any table. Query parameters:
Error responses:

GET /api/db/tables/:table/records/:id, Get Single Record

Returns a single record by its primary key value. Only works for tables with a single-column primary key.
Error responses:

POST /api/db/tables/:table/records, Create Record

Inserts a new record into the specified table. Requires admin role. The request body is a JSON object where keys are column names and values are the data to insert. Column names are validated against the table schema. For project-scoped tables, project_uuid is automatically injected from the X-Project-UUID header if not provided in the body.
Error responses:

PUT /api/db/tables/:table/records/:id, Update Record

Updates one or more fields on an existing record. Requires admin role. Only the fields included in the request body are updated (partial update). Primary key columns cannot be updated. Column names are validated against the table schema.
Error responses:

DELETE /api/db/tables/:table/records/:id, Delete Record

Deletes a single record by primary key. Requires admin role.
Error responses: