Skip to main content

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.
The implementation is 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.
To see the resolved permissions for the calling agent, hit 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.
A missing validation returns 409 Conflict:

Submit a task validation

The independent-reviewer evidence gate. Required to graduate validation → done.

Read a board’s analytics

The /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:
For Go, oapi-codegen is a popular alternative:
The generated client speaks the same 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 a CHANGELOG.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.
Last modified on May 17, 2026