Skip to Content
Platform Surfaces

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 familyTierCurrent statusNotes
Permit decision contractRuntime APICanonical; external enforcementPOST /v1/permits returns a decision. The caller owns downstream enforcement and execution.
Provider-neutral executionRuntime APIReleasedPOST /v1/executions is Keel-enforced for the supported provider operations in the capability matrix.
Unified executionRuntime APIBeta limitedPOST /v1/execute is Keel-enforced only for its documented supported actions.
Proxy executionRuntime APIReleased, route-specificCapability coverage differs by provider and route. Treat provider parity as route-specific, not universal.
Managed MCP exact callsRuntime APIReleased or beta limited by connector/actionKeel owns dispatch only for enrolled exact :call routes. Decision and prepare routes require external enforcement.
Async jobs and lifecycle replayRuntime APIPublic; not action-registry classifiedSubmission, status, and timeline routes are mounted. Do not infer action coverage beyond the underlying execution surface.
Realtime session governanceRuntime APIObservedSession and sidecar APIs evaluate and record events; they are not a blanket voice execution gate.
Search policy evidenceRuntime APIObservedThe route records evidence; it is not a search execution gate.
Governance events and compliance exportsRuntime APIPublic evidence surfaceProject-scoped readback and export routes are mounted; evidence semantics and plan gates remain route-specific.
Authenticated management surfacesManagement APIShape subject to changeProject, 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 contractInternal 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

RouteNotes
POST /v1/permitsCanonical provider-agnostic decision contract. The caller owns enforcement.

Execution and lifecycle surfaces

RouteNotes
POST /v1/executePrimary public runtime surface for provider-shaped input with normalized output and a resolved block.
POST /v1/executionsProvider-neutral execution route for the documented sync and streaming subset.
POST /v1/proxy/openaiProvider-native OpenAI route. Coverage and streaming behavior are route-specific.
POST /v1/proxy/anthropicProvider-native Anthropic route. Coverage and streaming behavior are route-specific.
POST /v1/proxy/googleProvider-native Google route. Coverage and streaming behavior are route-specific.
POST /v1/proxy/xaiProvider-native xAI route. Coverage and streaming behavior are route-specific.
POST /v1/proxy/metaProvider-native Meta route. Coverage and streaming behavior are route-specific.
POST /v1/jobsAsync job submission for supported public async execution flows.
GET /v1/jobs/{job_id}Async job status and result readback.
GET /v1/requests/{request_id}/timelinePublic normalized request lifecycle replay for the authenticated project.
POST /v1/sessionsStart 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}/turnsEvaluate a turn against the session-locked policy snapshot.
POST /v1/sessions/{session_id}/action-permitsIssue an action-child permit for a customer-executed session tool call.
POST /v1/sessions/{session_id}/interruption-eventsPersist validated, signed interruption evidence.
GET /v1/sessions/{session_id}/eventsStream session-scoped governance events over SSE.
POST /v1/voice/sessions/{session_id}/eventsIngest signed voice atoms from a customer-operated sidecar; raw audio is not accepted.
POST /v1/sessions/{session_id}/endEnd the Keel session and return its bounded attestation when assembly succeeds.
GET /v1/permitsPermit audit and readback.
GET /v1/permits/{permit_id}Permit audit and readback.
GET /v1/permits/exportProject-scoped audit export.
POST /v1/permits/{permit_id}/attestSign off a challenged permit.
POST /v1/permits/{permit_id}/revokeAdmin-scoped permit revocation.
POST /v1/permits/{permit_id}/usagePermit-first usage reporting. Public completed reports require verification material and still require positive billed cost.
GET /v1/permits/{permit_id}/evidencePermit evidence list.
POST /v1/permits/{permit_id}/evidenceAttach permit evidence.
GET /v1/permits/{permit_id}/mcp-tool-callsPermit-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-callsSession-scoped MCP tool-call evidence.
POST /v1/sessions/{session_id}/search-evidenceRecord 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/exportsProject-scoped Production+ gated compliance export list.
POST /v1/compliance/exportsCreate 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/keysPublic trust verification keys.
GET /v1/integrity/checkpoint-public-keyPublic checkpoint signing key.
GET /v1/integrity/permit-binding-public-keysPublic permit-binding keys and active windows.
GET /v1/governance/eventsGovernance-event readback for the authenticated project.
GET /v1/governance/events/streamSSE governance-event stream for the authenticated project.
GET /v1/governance/events/{event_id}Governance-event detail readback.
GET /v1/webhooksWebhook subscription list.
POST /v1/webhooksCreate 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}/deliveriesList webhook deliveries.
POST /v1/webhooks/{subscription_id}/testEnqueue a synthetic test delivery.
GET /v1/metrics/executionsProject-scoped execution metrics.

Status surface

RouteNotes
GET /v1/public/status/summaryPublic 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

RouteNotes
POST /v1/auth/exchangeExchanges a verified user JWT for an authenticated dashboard session.
POST /v1/auth/logoutRevokes the current dashboard session.

Project, policy, and provider management

RouteNotes
GET /v1/policies and POST /v1/policiesPolicy 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/projectsProject management.
GET /v1/projects/{project_id}/api-keys and POST /v1/projects/{project_id}/api-keysRuntime API-key management.
POST /v1/projects/{project_id}/api-keys/{key_id}/revokeRuntime API-key revoke.
GET /v1/projects/{project_id}/providersProvider-key status list.
PUT /v1/projects/{project_id}/providers/{provider}/keyProvider-key set or replace.
DELETE /v1/projects/{project_id}/providers/{provider}/keyProvider-key delete.
POST /v1/projects/{project_id}/providers/{provider}/testActive provider-key test.
GET /v1/projects/{project_id}/permitsProject permit readback.
GET /v1/projects/{project_id}/usageProject usage summary.
GET /v1/projects/{project_id}/cost-forecastProject cost forecast.
GET /v1/projects/{project_id}/policy and PATCH /v1/projects/{project_id}/policyPer-project policy override.
GET /v1/projects/{project_id}/prompt-analyticsPrompt analytics.

Billing

RouteNotes
POST /v1/billing/checkoutBilling checkout flow.
POST /v1/billing/stripe/webhookStripe 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/permits remains the canonical public decision seam
  • /v1/executions and /v1/execute are both active public execution routes, but they do not have the same request contract
  • /v1/executions is provider-neutral at the request boundary, but it is still a narrower contract than the provider-native proxy routes
  • /v1/execute accepts a provider-shaped input object and returns the normalized execution envelope plus a resolved block
  • public proxy streaming is stronger than /v1/executions: all five current proxy routes support streaming text-generation or text-message payloads, while /v1/executions streaming 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
Last updated on Edit this page on GitHubÂ