Platform Surfaces
This page tracks Keel’s customer-visible route families and the public boundaries around them.
It is intentionally not a full inventory of non-advertised compatibility routes, dashboard-only helpers, or implementation detail.
For the exact current customer-facing route projection, use Public API Surface. This page explains the families and stability boundaries.
Two public tiers
Keel’s public HTTP surface is split into two tiers with different stability commitments:
- Runtime API — project-API-key authenticated routes intended for customer integrations. Route exposure does not imply that every reachable action has the same enforcement or release maturity; check Surface Maturity and the generated capability matrix.
- Management API — authenticated dashboard-adjacent routes (user JWT). These back the Keel dashboard: project CRUD, policy CRUD, provider-key management, billing. The shape of these routes may change alongside dashboard UI evolution. Scripting against them is possible but carries more change risk than the Runtime API.
Everything on this page is one or the other. The taxonomy below maps each family to a tier.
Surface taxonomy
Use this page as the public surface map:
Runtime API (project-API-key customer integration surface)
- decision surfaces: permit creation, readback, export, and permit-first closeout
- governed execution surfaces:
/v1/execute,/v1/executions,/v1/proxy/*, and async jobs - lifecycle and evidence surfaces: realtime governance sessions, request timeline, governance events, webhooks, tool-run evidence, search evidence, and compliance exports
- status and trust-key surfaces: public status summary and public verification keys
Management API (user-JWT, dashboard-driven, shape subject to change)
- project, policy, provider-key, billing, and runtime-key management
Current support matrix
| Surface family | Tier | Current status | Notes |
|---|---|---|---|
| Permit decision contract | Runtime API | Canonical; external enforcement | POST /v1/permits returns a decision. The caller owns downstream enforcement and execution. |
| Provider-neutral execution | Runtime API | Released | POST /v1/executions is Keel-enforced for the supported provider operations in the capability matrix. |
| Unified execution | Runtime API | Beta limited | POST /v1/execute is Keel-enforced only for its documented supported actions. |
| Proxy execution | Runtime API | Released, route-specific | Capability coverage differs by provider and route. Treat provider parity as route-specific, not universal. |
| Managed MCP exact calls | Runtime API | Released or beta limited by connector/action | Keel owns dispatch only for enrolled exact :call routes. Decision and prepare routes require external enforcement. |
| Async jobs and lifecycle replay | Runtime API | Public; not action-registry classified | Submission, status, and timeline routes are mounted. Do not infer action coverage beyond the underlying execution surface. |
| Realtime session governance | Runtime API | Observed | Session and sidecar APIs evaluate and record events; they are not a blanket voice execution gate. |
| Search policy evidence | Runtime API | Observed | The route records evidence; it is not a search execution gate. |
| Governance events and compliance exports | Runtime API | Public evidence surface | Project-scoped readback and export routes are mounted; evidence semantics and plan gates remain route-specific. |
| Authenticated management surfaces | Management API | Shape subject to change | Project, policy, billing, provider-key, and runtime-key flows. Coupled to dashboard UI; contract may evolve with dashboard redesigns. |
| Dashboard-only and operator tooling | — | Not part of the public contract | Internal and UI-focused surfaces are intentionally omitted. |
Runtime API
Routes below are customer-visible. Authentication, SDK coverage, enforcement, and maturity remain route-specific; the generated API projection is the exact inventory.
Canonical decision surface
| Route | Notes |
|---|---|
POST /v1/permits | Canonical provider-agnostic decision contract. The caller owns enforcement. |
Execution and lifecycle surfaces
| Route | Notes |
|---|---|
POST /v1/execute | Primary public runtime surface for provider-shaped input with normalized output and a resolved block. |
POST /v1/executions | Provider-neutral execution route for the documented sync and streaming subset. |
POST /v1/proxy/openai | Provider-native OpenAI route. Coverage and streaming behavior are route-specific. |
POST /v1/proxy/anthropic | Provider-native Anthropic route. Coverage and streaming behavior are route-specific. |
POST /v1/proxy/google | Provider-native Google route. Coverage and streaming behavior are route-specific. |
POST /v1/proxy/xai | Provider-native xAI route. Coverage and streaming behavior are route-specific. |
POST /v1/proxy/meta | Provider-native Meta route. Coverage and streaming behavior are route-specific. |
POST /v1/jobs | Async job submission for supported public async execution flows. |
GET /v1/jobs/{job_id} | Async job status and result readback. |
GET /v1/requests/{request_id}/timeline | Public normalized request lifecycle replay for the authenticated project. |
POST /v1/sessions | Start a Keel realtime governance session and issue its session-start permit. |
GET /v1/sessions/{session_id} | Read current session governance state. |
POST /v1/sessions/{session_id}/turns | Evaluate a turn against the session-locked policy snapshot. |
POST /v1/sessions/{session_id}/action-permits | Issue an action-child permit for a customer-executed session tool call. |
POST /v1/sessions/{session_id}/interruption-events | Persist validated, signed interruption evidence. |
GET /v1/sessions/{session_id}/events | Stream session-scoped governance events over SSE. |
POST /v1/voice/sessions/{session_id}/events | Ingest signed voice atoms from a customer-operated sidecar; raw audio is not accepted. |
POST /v1/sessions/{session_id}/end | End the Keel session and return its bounded attestation when assembly succeeds. |
GET /v1/permits | Permit audit and readback. |
GET /v1/permits/{permit_id} | Permit audit and readback. |
GET /v1/permits/export | Project-scoped audit export. |
POST /v1/permits/{permit_id}/attest | Sign off a challenged permit. |
POST /v1/permits/{permit_id}/revoke | Admin-scoped permit revocation. |
POST /v1/permits/{permit_id}/usage | Permit-first usage reporting. Public completed reports require verification material and still require positive billed cost. |
GET /v1/permits/{permit_id}/evidence | Permit evidence list. |
POST /v1/permits/{permit_id}/evidence | Attach permit evidence. |
GET /v1/permits/{permit_id}/mcp-tool-calls | Permit-scoped MCP tool-call evidence. |
GET /v1/executions/{request_id} | Public execution inspector and readback route for the authenticated project. |
GET /v1/sessions/{session_id}/mcp-tool-calls | Session-scoped MCP tool-call evidence. |
POST /v1/sessions/{session_id}/search-evidence | Record observed search policy evidence; this is not a search execution gate. |
GET /v1/sessions/{session_id}/search-evidence/{search_id} | Read search policy evidence. |
GET /v1/compliance/exports | Project-scoped Production+ gated compliance export list. |
POST /v1/compliance/exports | Create a Production+ gated compliance export job for the authenticated project. |
GET /v1/compliance/exports/{export_id} | Fetch a Production+ gated compliance export job or result record. |
GET /v1/compliance/keys | Public trust verification keys. |
GET /v1/integrity/checkpoint-public-key | Public checkpoint signing key. |
GET /v1/integrity/permit-binding-public-keys | Public permit-binding keys and active windows. |
GET /v1/governance/events | Governance-event readback for the authenticated project. |
GET /v1/governance/events/stream | SSE governance-event stream for the authenticated project. |
GET /v1/governance/events/{event_id} | Governance-event detail readback. |
GET /v1/webhooks | Webhook subscription list. |
POST /v1/webhooks | Create a webhook subscription. See the request lifecycle docs for current delivery guarantees. |
DELETE /v1/webhooks/{subscription_id} | Delete a webhook subscription. |
GET /v1/webhooks/{subscription_id} | Webhook subscription detail. |
PATCH /v1/webhooks/{subscription_id} | Update a webhook subscription. |
GET /v1/webhooks/{subscription_id}/deliveries | List webhook deliveries. |
POST /v1/webhooks/{subscription_id}/test | Enqueue a synthetic test delivery. |
GET /v1/metrics/executions | Project-scoped execution metrics. |
Status surface
| Route | Notes |
|---|---|
GET /v1/public/status/summary | Public status summary: readiness and coarse provider-status for the documented subset. Use this for uptime integrations. |
Management API
Routes below are authenticated with a user JWT (dashboard session) and back the Keel dashboard UI. Shape may change alongside dashboard UI evolution. Scripting against them is possible, but carries more change risk than the Runtime API. Management routes are not wrapped by the SDKs.
Authentication and session
| Route | Notes |
|---|---|
POST /v1/auth/exchange | Exchanges a verified user JWT for an authenticated dashboard session. |
POST /v1/auth/logout | Revokes the current dashboard session. |
Project, policy, and provider management
| Route | Notes |
|---|---|
GET /v1/policies and POST /v1/policies | Policy management. Primary authenticated policy configuration surface. |
DELETE /v1/policies/{policy_id} and PATCH /v1/policies/{policy_id} | Policy mutation. |
GET /v1/projects and POST /v1/projects | Project management. |
GET /v1/projects/{project_id}/api-keys and POST /v1/projects/{project_id}/api-keys | Runtime API-key management. |
POST /v1/projects/{project_id}/api-keys/{key_id}/revoke | Runtime API-key revoke. |
GET /v1/projects/{project_id}/providers | Provider-key status list. |
PUT /v1/projects/{project_id}/providers/{provider}/key | Provider-key set or replace. |
DELETE /v1/projects/{project_id}/providers/{provider}/key | Provider-key delete. |
POST /v1/projects/{project_id}/providers/{provider}/test | Active provider-key test. |
GET /v1/projects/{project_id}/permits | Project permit readback. |
GET /v1/projects/{project_id}/usage | Project usage summary. |
GET /v1/projects/{project_id}/cost-forecast | Project cost forecast. |
GET /v1/projects/{project_id}/policy and PATCH /v1/projects/{project_id}/policy | Per-project policy override. |
GET /v1/projects/{project_id}/prompt-analytics | Prompt analytics. |
Billing
| Route | Notes |
|---|---|
POST /v1/billing/checkout | Billing checkout flow. |
POST /v1/billing/stripe/webhook | Stripe webhook endpoint (Stripe-signed, not user-JWT). |
Intentionally omitted from this page
This page does not enumerate:
- non-advertised compatibility aliases
- dashboard-only helpers and UI-focused routes
- operator-only and control-plane tooling
- implementation internals such as adapters or fallback internals
- unreleased session-scoped browser and code executors that return unavailable without an explicitly configured runtime
- provider-native OpenAI and Gemini tool-run subpaths that are not released as independently governed execution surfaces
Current boundaries
/v1/permitsremains the canonical public decision seam/v1/executionsand/v1/executeare both active public execution routes, but they do not have the same request contract/v1/executionsis provider-neutral at the request boundary, but it is still a narrower contract than the provider-native proxy routes/v1/executeaccepts a provider-shapedinputobject and returns the normalized execution envelope plus aresolvedblock- public proxy streaming is stronger than
/v1/executions: all five current proxy routes support streaming text-generation or text-message payloads, while/v1/executionsstreaming remains OpenAI-only - public routing controls are currently exposed on
/v1/executions,/v1/proxy/openai, and/v1/proxy/anthropic - public cross-provider fallback is explicit, non-stream, and limited to the implemented OpenAI and Anthropic text-translation subset
- compliance export routes are Production+ gated, while permit audit export is a separate route family
- async jobs are public
- realtime session governance is public, but provider media transport and arbitrary customer-executed tools remain outside Keel-managed dispatch