REST API
Pulse’s REST API is the same surface as the MCP tools, exposed over plain HTTP under/api/v1 (okto-pulse-core/src/okto_pulse/core/api/router.py:29). The MCP server is a thin adapter that wraps these routes for AI agents — anything an agent can do via MCP, a script can do via REST.
MCP is the canonical agent interface. If you’re connecting an AI agent, use MCP — the tool surface is more compact, parameters are typed, and
okto-pulse init --agents configures it for you. Use the REST API for human-facing scripts, CI integrations, dashboards, and anything outside the MCP transport.OpenAPI
The public docs publish a static source-derived schema at/openapi.json. A running Pulse process also publishes its own schema and two interactive UIs the moment it starts. The running process reflects the exact surface of your installed version; the static docs schema tracks the published docs release. For a source-derived route inventory, see REST route catalog.
The API runs on port
8100 by default. If you started Pulse with a custom --api-port, swap it into the URL.
Authentication
Every/api/v1/* route requires a valid agent API key, passed as an HTTP Bearer token. The key is the same dash_<hex> value okto-pulse init --agents writes into .mcp.json.
HTTPBearer(auto_error=False) plugged into a provider pattern (okto-pulse-core/src/okto_pulse/core/infra/auth.py:9). For the community deployment that Pulse ships, the provider validates the bearer against the agent table and resolves the agent’s permission preset on every request.
A missing or invalid key returns
401 Unauthorized. A valid key whose preset doesn’t allow the action returns 403 Forbidden with a JSON body naming the failing permission.
GET /api/v1/me/permissions.
Route clusters
The current source exposes 209 routes: 208 under/api/v1 plus the unprefixed /health liveness endpoint. They group into the same domains as the MCP tools; the exhaustive endpoint list is maintained in REST route catalog.
For the parameter shapes and response schemas, open
/docs or /redoc against your running instance — that’s the single source of truth.
For every route path and source line, see REST route catalog.
Curated examples
Five flows that cover most day-one integrations.List your boards
Get a card with full context
Move a card to the next status
The/move endpoint enforces transition gates — moving from validation → done requires a previously-submitted task validation.
409 Conflict:
Submit a task validation
The independent-reviewer evidence gate. Required to graduatevalidation → done.
Read a board’s analytics
/api/v1/analytics/overview cluster is the same family — see /redoc for the per-metric response shapes.
Generating a typed client
Because Pulse publishes a complete OpenAPI 3.1 schema, any standard generator works:oapi-codegen is a popular alternative:
Authorization: Bearer dash_... auth — pass the key as a constructor option or via your transport’s middleware.
Errors
REST endpoints return standard HTTP status codes. The body is a FastAPI-style envelope wrapping the same error codes the MCP layer uses:Versioning
Routes follow semantic versioning. Breaking changes ship with a major bump and aCHANGELOG.md entry. The path prefix /api/v1/ is the v1 boundary — a future v2 will mount at /api/v2/ so v1 callers keep working through the deprecation window.
The OpenAPI schema’s info.version matches the running Pulse version (0.2.0 at time of writing). Pin your generated clients to the exact version you tested against.
Next steps
MCP reference
The same surface, exposed as 216 typed tools for AI agents.
CLI reference
okto-pulse init, serve, status, and the rest.Connect an agent
Auto-generate
.mcp.json for Claude Code, Cursor, Cline, Windsurf, Goose, Codex.ADLC pipeline
The six pipeline stages and how routes map to each one.