Skip to Content
Route Guarantees

Route Guarantees

For each public surface, this page states exactly what Keel guarantees. If a guarantee is not listed here for a route, Keel does not claim it.

For stability commitments (GA / Beta / Internal), see Surface Maturity.

Runtime API vs Management API

Keel’s public HTTP surface is split into two tiers with different stability commitments:

  • Runtime API — project-API-key authenticated, SDK-covered, stable contract. Execution, permits, lifecycle, governance reads, compliance exports, and the public status summary. All client-api-key rows below are Runtime API.
  • Management API — user-JWT authenticated, dashboard-driven. Policy authoring, project CRUD, provider-key CRUD, billing. All user-jwt rows below are Management API. The per-route guarantees (auth, RLS, chain events, signed export coverage) hold for these routes, but the request and response shapes may change alongside dashboard UI evolution. Scripting against them is possible, but carries more change risk than the Runtime API — and management routes are not wrapped by the SDKs.

Guarantee glossary

LabelMeaning
AuthRequired credential type. client-api-key = tenant project API key (some routes require admin scope); user-jwt = authenticated dashboard user JWT; public = unauthenticated
Policy evaluatedThe route runs policy evaluation over the resolved policy document and decides allow / deny / constrain / throttle
Permit requiredThe route produces a Permit row that is hash-chained, replayable, and covered by signed exports
Constraint clampPermit-declared constraints (e.g. max_output_tokens) are enforced on the outbound provider payload before dispatch
Chain eventEmits a governance event that is appended to the per-project hash chain
RLSDatabase reads/writes enforce tenant isolation at the database layer for this route
Signed exportData read or produced by this route is covered by Ed25519-signed compliance exports

Execution surfaces

RouteAuthPolicy evaluatedPermit requiredConstraint clampChain eventRLSSigned export
POST /v1/executionsclient-api-key
POST /v1/executeclient-api-key
POST /v1/proxy/openai/*client-api-key
POST /v1/proxy/anthropic/*client-api-key
POST /v1/proxy/google/*client-api-key
POST /v1/proxy/meta/*client-api-key
POST /v1/proxy/xai/*client-api-key
POST /v1/permitsclient-api-keyn/a (no dispatch)
POST /v1/permits/dry-runclient-api-key❌ (no persistence)n/an/a
POST /v1/permits/{id}/usageclient-api-key (admin scope)n/a (permit already issued)n/a✅ (usage.reported)
POST /v1/jobsclient-api-key

Notes:

  • Every execution surface enforces constraint clamping before provider dispatch.
  • Every execution surface persists a Permit whose hash chains into the per-project governance chain. Chain snapshots are periodically published to external storage (Business+).
  • dry-run evaluates policy without persisting. It produces no permit, no chain event, and is not replayable.

Governance read surfaces

RouteAuthPolicy evaluatedPermit requiredConstraint clampChain eventRLSSigned export
GET /v1/permitsclient-api-keyn/an/a
GET /v1/permits/{id}client-api-keyn/an/a
GET /v1/permits/{id}/bundleclient-api-keyn/an/a
GET /v1/permits/{id}/lineageclient-api-keyn/an/a
GET /v1/permits/{id}/usageclient-api-keyn/an/a
GET /v1/permits/exportclient-api-keyn/an/a
GET /v1/jobs/{id}client-api-keyn/an/a
GET /v1/requests/{id}/timelineclient-api-keyn/an/a
GET /v1/governance/eventsclient-api-keyn/an/a
GET /v1/governance/events/{id}client-api-keyn/an/a
GET /v1/governance/events/streamclient-api-keyn/an/an/a (live feed)

Compliance surface

RouteAuthPolicy evaluatedPermit requiredConstraint clampChain eventRLSSigned export
POST /v1/compliance/exportsclient-api-keyn/an/a✅ (export.created)✅ (this IS a signed export)
GET /v1/compliance/exportsclient-api-keyn/an/a
GET /v1/compliance/exports/{id}client-api-keyn/an/a

Signed exports carry an Ed25519 signature and manifest covering the export’s content hash. See Signed Exports for verification steps.


Policy authoring surface

RouteAuthPolicy evaluatedPermit requiredConstraint clampChain eventRLSSigned export
POST /v1/policiesuser-jwtn/an/a✅ (policy.created)
GET /v1/policiesuser-jwtn/an/a
PATCH /v1/policies/{id}user-jwtn/an/a✅ (policy.updated)
DELETE /v1/policies/{id}user-jwtn/an/a✅ (policy.deleted)
PATCH /v1/projects/{id}/policyuser-jwtn/an/a✅ (policy.overrides_updated)
GET /v1/policy-templatespublicn/an/an/an/a
GET /v1/policy-templates/{id}publicn/an/an/an/a

Policy mutations emit hash-chained events so replay can reconstruct what policy was in effect at any decision time.


Status surface

RouteAuthNotes
GET /v1/public/status/summarypublicReadiness and coarse provider-status for the documented subset; no tenant data. Safe for uptime integrations.

What Keel deliberately does NOT guarantee

  • Output content. Keel governs the decision to call a provider and the request envelope. Once the provider responds, Keel records and reconciles; it does not filter, rewrite, or attest provider output beyond usage accounting.
  • Provider availability. Keel’s health signals inform routing but Keel does not guarantee third-party provider uptime.
  • Real-time replay. Replay is a historical reconstruction tool. Live streams (/v1/governance/events/stream) are best-effort feeds, not a replay substitute.
  • Sub-project isolation. Tenant isolation is enforced at the project boundary. Per-user or per-team isolation inside a project is a customer concern, addressable through context-based policy conditions.

Last updated on Edit this page on GitHub