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. 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: