API Reference

One API. Budget tracking per agent session. Any AI client.

Authentication

All endpoints require a Bearer token:

Authorization: Bearer sk-valkdb-your-key-here

Get your key via POST /v1/auth/register or the dashboard.

POST /v1/query

Execute a SQL query with cumulative budget tracking.

{
  "sql": "SELECT id, name FROM users LIMIT 20",
  "connection_id": "your-connection-uuid",
  "agent_id": "my-analytics-agent",
  "session_id": "session-001",
  "task_id": "daily-report"
}

Identity fields (optional, recommended):

When provided, budget is scoped to agent+session. Different sessions get separate budgets.

Success response

{
  "ok": true,
  "data": { "rows": [...], "row_count": 20 },
  "request_id": "dal-abc123"
}

Budget exhausted response

{
  "ok": false,
  "error": {
    "code": "BUDGET_EXHAUSTED",
    "message": "Agent session budget exhausted: row limit reached",
    "hint": "Budget resets after the time window expires.",
    "retryable": false
  },
  "request_id": "dal-xyz789"
}

GET /v1/budget

Check current budget consumption for an agent session.

GET /v1/budget?agent_id=my-agent&session_id=session-001

Response

{
  "status": "warning",
  "agent_id": "my-agent",
  "session_id": "session-001",
  "rows": { "used": 420, "limit": 500, "remaining": 80, "percent_used": 84 },
  "queries": { "used": 7, "limit": 10, "remaining": 3, "percent_used": 70 },
  "window": { "seconds": 60, "remaining_seconds": 34 },
  "tables_touched": ["users", "orders"],
  "columns_touched": ["users.email", "users.name", "orders.total"]
}

Status values: activewarning (≥80%) → exhausted

GET /v1/logs

Query audit logs with optional filters.

GET /v1/logs?limit=10&session_id=session-001&decision=blocked

Filters (all optional):

In hash-only mode, raw SQL is not returned. Logs contain query_hash and decision metadata.

Other endpoints

Configuration

VariableDefaultDescription
BUDGET_MAX_ROWS5000Max rows per session per window
BUDGET_MAX_QUERIES0 (unlimited)Max queries per window
BUDGET_WINDOW_SECS60Time window in seconds
BUDGET_MAX_ROWS_PER_QUERY100Max rows per single query

MCP Server

Use ValkDB as an MCP server with Claude, Cursor, or Kiro. See mcp-server/README.md for setup.