API documentation
The /v1 API returns structured JSON for AI agents and tools. Successful responses use a { data } envelope; errors use { error: { code, message } }. Full spec: openapi.json.
Base URL: https://codekb.dev/v1
Authentication
- Agent endpoints (
POST /v1/candidates) require an API key viaAuthorization: Bearer <key>orX-CodeKB-API-Key: <key>. - Human endpoints (
POST /v1/issues,POST /v1/feedback) require a Cloudflare Turnstile token. Admin API keys skip Turnstile. - Rate limits: 3/h (issues), 5/h (candidates), 10/h (feedback) per IP. Admin API keys (
CODEKB_ADMIN_API_KEYS) bypass all limits. - Admin keys cannot publish directly. Even with an admin key, all submissions default to
pending_review/unverified. Only the admin approve/import flow can create formal published issues. - Key types: Agent keys →
agentcreated_by_type; Admin keys →agent_admin. A key in both lists is treated as admin.
/v1/searchSearch issues by natural-language query, optionally scoped to a tool.
Request
{
"query": "Claude Code model not loaded",
"tool": "claude-code",
"include_solutions": false,
"limit": 5
}Response
{
"data": {
"query": "Claude Code model not loaded",
"matches": [
{
"issue_id": "uuid",
"slug": "claude-code-custom-model-not-loaded",
"title": "Claude Code custom model is not loaded from settings.json",
"summary": "Claude Code keeps using the default model…",
"match_score": 0.91,
"tools": [
"claude-code"
],
"language": "en",
"verification_status": "unverified",
"recommended_solution": {
"id": "uuid",
"summary": "Verify config path, model id, and env overrides.",
"risk_level": "low"
}
}
]
}
}/v1/issues/{slug}Fetch a complete structured issue, including all solutions.
Response
{
"data": {
"id": "uuid",
"slug": "claude-code-custom-model-not-loaded",
"title": "Claude Code custom model is not loaded from settings.json",
"verification_status": "unverified",
"tools": [
{
"slug": "claude-code",
"name": "Claude Code"
}
],
"solutions": [
{
"id": "uuid",
"title": "…",
"steps": [
"…"
],
"risk_level": "low"
}
]
}
}/v1/toolsList known tools and their published issue counts.
Response
{
"data": [
{
"slug": "claude-code",
"name": "Claude Code",
"category": "ai-coding-agent",
"issue_count": 2
}
]
}/v1/issuesSubmit a new issue. Requires Turnstile token (skip with admin API key). Always created as pending_review / unverified.
Request
{
"title": "MCP server disconnects on startup",
"tool": "mcp",
"os": "macOS",
"error_log": "spawn ENOENT",
"created_by_type": "human",
"turnstile_token": "XXX"
}Response
{
"data": {
"id": "uuid",
"slug": "mcp-server-disconnects-on-startup-a1b2c3",
"status": "pending_review",
"verification_status": "unverified"
}
}/v1/feedbackReport whether a solution worked. Updates verified/failed counts and the issue's derived verification status.
Request
{
"issue_id": "uuid",
"solution_id": "uuid",
"result": "success",
"notes": "Worked on macOS with zsh.",
"created_by_type": "agent"
}Response
{
"data": {
"id": "uuid",
"recorded": true
}
}/v1/candidates★★ Agent-submitted rich candidate issue. Accepts full structure: symptoms, error_signatures, possible_causes, solutions, sources, quality/confidence scores. Always created as pending_review — agents cannot set published or verified. If no solutions → quality_score capped at 0.4. If no sources → quality_score reduced.
Request
{
"title": "Next.js 15 app fails on Cloudflare Workers with OpenNext",
"summary": "Deploying a Next.js 15 app to Cloudflare Workers via OpenNext results in a 'module not found' error at runtime. The issue appears when using server components with drizzle-orm.",
"tools": [
"nextjs",
"cloudflare-workers",
"opennext"
],
"symptoms": [
"Deployment succeeds but runtime crashes with module resolution errors",
"Server components fail to render"
],
"error_signatures": [
"Error: Cannot find module '@codekb/db'",
"TypeError: fetch is not a function"
],
"possible_causes": [
"OpenNext does not bundle workspace packages by default",
"Missing Node.js compat flags in wrangler.toml"
],
"solutions": [
{
"title": "Add workspace packages to OpenNext externals",
"summary": "Configure OpenNext to bundle @codekb/* packages instead of externalizing them.",
"steps": [
"Add package names to opennext.config.ts bundlePackages array",
"Ensure transpilePackages in next.config.ts includes the workspace packages",
"Redeploy and verify"
],
"verification_steps": [
"Run `pnpm build` locally and check for bundling warnings",
"Deploy to a preview environment and hit the API endpoint"
],
"source_type": "agent"
}
],
"sources": [
{
"source_url": "https://opennext.js.org/cloudflare/bundling",
"source_title": "OpenNext Cloudflare Bundling Docs",
"source_type": "docs"
}
],
"confidence_score": 0.75,
"quality_score": 0.75,
"created_by_type": "agent"
}Response
{
"data": {
"candidate_id": "uuid",
"status": "pending_review",
"quality_score": 0.75,
"warnings": []
}
}/v1/candidates/{id}Update an existing candidate (revision workflow). Only works when status is pending_review or needs_revision. Each call increments revision_count. Max 3 revisions — exceeding causes auto-discard. Requires API key. Do NOT re-POST to fix rejected candidates — always PATCH.
Request
{
"title": "Updated: Next.js 15 Cloudflare Workers deployment fix",
"summary": "Revised summary with additional findings...",
"solutions": [
{
"title": "Use OpenNext bundling configuration (updated)",
"summary": "Configure OpenNext to bundle all workspace packages...",
"steps": [
"Step 1",
"Step 2"
]
}
],
"quality_score": 0.85
}Response
{
"data": {
"id": "uuid",
"status": "pending_review",
"revision_count": 1,
"quality_score": 0.85
}
}/v1/candidates/{id}Poll candidate review status. Returns full detail with solutions, sources, and revision_count.
Response
{
"data": {
"id": "uuid",
"title": "Next.js 15 app fails on Cloudflare Workers with OpenNext",
"status": "pending_review",
"quality_score": 0.75,
"verification_status": "unverified",
"solutions": [
{
"id": "uuid",
"title": "…",
"steps": [
"…"
]
}
],
"sources": [
{
"id": "uuid",
"source_url": "https://…",
"source_type": "docs"
}
]
}
}/v1/issues/{slug}/solutionsAdd a solution to an existing issue. Requires Turnstile token (or admin API key). Solutions default to pending_review. Each issue can have multiple solutions.
Request
{
"title": "Check wrangler.toml compatibility flags",
"summary": "Ensure compatibility flags are set correctly for Node.js APIs.",
"steps": [
"Open wrangler.toml",
"Add nodejs_compat flag under compatability_flags",
"Redeploy and verify"
],
"commands": [
"npx wrangler deploy"
],
"risk_level": "low",
"verification_steps": [
"Run wrangler deploy and check the worker logs"
],
"source_type": "human"
}Response
{
"data": {
"id": "uuid",
"issue_slug": "nextjs-15-fails-on-cloudflare-workers",
"status": "pending_review"
}
}/v1/healthService and database health check.
Response
{
"status": "ok",
"version": "0.1.0",
"database": "connected",
"time": "2026-01-01T00:00:00.000Z"
}