Skip to Content
Surface Maturity

Surface Maturity

Read this alongside Route Guarantees: that page defines the security and audit properties each route guarantees; this page defines how stable the contract is.

Scope: Runtime API only

This page covers the Runtime API — project-API-key authenticated routes that Keel commits to as a stable customer integration contract. The Management API (user-JWT dashboard routes: projects, policies, provider keys, billing) is documented in Platform Surfaces and is intentionally excluded from these stability tiers because those routes evolve alongside dashboard UI.

Tier definitions

TierMeaning
GAStable contract. Breaking changes require a version bump plus a 90-day deprecation notice.
BetaShape may change between releases. Keel publishes release notes for every change and will not introduce silent breaks, but the contract is not SemVer-stable.
InternalNot for customer use. Administrative, bootstrap, or diagnostic surface. May change or be removed without notice.
DeprecatedStill functional. Sunset date is stated. Replacement listed. Remove your dependency before the sunset date.

Tier change policy

EventCustomer-visible action
Beta → GAChangelog entry + email to all active project owners. The route’s contract is now locked.
GA → DeprecatedChangelog entry + email to active project owners + Deprecation and Sunset response headers (RFC 8594).
Deprecated → removedChangelog entry at least 90 days before removal. Final email 30 days out.
Internal added or removedNo notice obligation. Internal surfaces carry no compatibility commitment.
Beta route changedRelease notes in the changelog. No email. Beta callers accept this risk.

What “breaking change” means for GA routes

A breaking change is any of the following:

  • Removing or renaming a required request field.
  • Removing or renaming a response field documented in Route Guarantees.
  • Changing an HTTP method, route path, or status code (unless labeled as a redirect).
  • Narrowing the set of accepted authentication credential types.
  • Adding a new required request field without a documented default.

Adding optional request fields, adding response fields, or relaxing validation is not a breaking change.


Execution surfaces

RouteTierSinceNotes
POST /v1/executionsGAv1.0Core governed execution path. Permit, chain event, constraint clamp, signed export coverage locked.
POST /v1/executeBetav1.3Unified single-call variant. Response shape still aligning with /v1/executions contract; promoted to GA when shape converges.
POST /v1/proxy/openai/*GAv1.0OpenAI-compatible proxy. Provider protocol follows OpenAI versioning; Keel wrapper contract is GA.
POST /v1/proxy/anthropic/*GAv1.1Anthropic-compatible proxy. Same stability commitment as OpenAI proxy.
POST /v1/proxy/google/*Betav1.4Google provider support; request/response normalization shape still stabilizing.
POST /v1/proxy/meta/*Betav1.4Newer provider; shape stabilizing.
POST /v1/proxy/xai/*Betav1.5xAI provider integration; upstream provider API surface itself is in flux.
POST /v1/permitsGAv1.0Pre-flight permit issuance. Contract is the public API of the Budget and Policy features.
POST /v1/permits/dry-runBetav1.2Policy evaluation without persistence. Response shape may gain fields as the policy engine matures.

Governance read surfaces

RouteTierSinceNotes
GET /v1/permitsGAv1.0Paginated permit list. Filter params and response envelope are stable.
GET /v1/permits/{id}GAv1.0Single permit retrieval.
GET /v1/permits/{id}/bundleGAv1.1Permit + all attached governance events in a single payload for replay.
GET /v1/permits/{id}/lineageGAv1.1Permit ancestry chain.
GET /v1/permits/{id}/usageBetav1.3Usage rollup per permit. Shape will gain additional dimension fields before GA.
POST /v1/permits/{id}/usageBetav1.3Permit-first usage closeout. Public closeout requires verification material and positive billed cost.
GET /v1/permits/exportBetav1.3Bulk permit export. Format and compression options still settling. Prefer /v1/compliance/exports for audit-grade exports.
GET /v1/governance/eventsGAv1.0Paginated chain event list. Field names and event type vocabulary are stable.
GET /v1/governance/events/{id}GAv1.0Single event with full payload and chain digest.
GET /v1/governance/events/streamBetav1.3SSE live feed of chain events. Best-effort; not a replay substitute.
POST /v1/jobsBetav1.3Async job submission for supported public async execution flows.
GET /v1/jobs/{id}Betav1.3Async job status and result readback.
GET /v1/requests/{id}/timelineBetav1.3Normalized request lifecycle replay for the authenticated project.

Compliance surface

RouteTierSinceNotes
POST /v1/compliance/exportsGAv1.1Creates a signed, manifest-covered export. Ed25519 signature contract is locked.
GET /v1/compliance/exportsGAv1.1Lists exports for the project.
GET /v1/compliance/exports/{id}GAv1.1Retrieves a single export record and its download URL.

Policy authoring surface

RouteTierSinceNotes
POST /v1/policiesGAv1.1Policy creation. JSON rule schema locked.
GET /v1/policiesGAv1.1Policy list for the project.
PATCH /v1/policies/{id}GAv1.1Policy update. Emits policy.updated chain event.
DELETE /v1/policies/{id}GAv1.1Policy deletion. Emits policy.deleted chain event. Soft-deleted records remain replayable.
PATCH /v1/projects/{id}/policyGAv1.1Per-project override attachment.
GET /v1/policy-templatesBetav1.4Global preset catalog. Template IDs and schema may change as the library expands.
GET /v1/policy-templates/{id}Betav1.4Single template retrieval.

Status surface

RouteTierSinceNotes
GET /v1/public/status/summaryGAv1.0Public status summary: readiness plus coarse provider-status for the documented subset. Safe for uptime integrations; no tenant data.

Internal routes (liveness probes, admin diagnostics, checkpoint endpoints, metrics endpoints) are not listed here. They carry no compatibility commitment — do not build customer integrations on them.


Current tier summary

TierCount
GA19
Beta14
Deprecated0

Internal surfaces are not enumerated and carry no compatibility commitment.


Last updated on Edit this page on GitHub