v1 API
The two org-scoped HTTP endpoints the CLI, MCP server, and console use to invoke actions and read projections.
The Runway control plane exposes a small, org-scoped v1 API. The fr CLI and MCP server are
thin clients over these two endpoints; the console uses the same governed actions through server
actions.
Authentication and tenancy
Every request is authenticated (a Databricks Apps user session in production, or a dev token
locally) and the resolved principal's tenant must equal the :org in the path, a mismatch
is a 403. Actions must be on the allowlist, and the caller must hold the required permission.
POST /api/v1/orgs/:org/actions/:actionId
Invokes a governed action through the full mutation pipeline.
POST /api/v1/orgs/org-acme/actions/runway.deploy_request
Authorization: Bearer <token>
Idempotency-Key: fr:runway.deploy_request:<stable-command-digest>
Content-Type: application/json
{ "params": { "appId": "app_123", "environment": "dev", "artifactId": "art_0123456789abcdef01234567" } }Responses:
| Status | Body | Meaning |
|---|---|---|
200 | { "ok": true, "data": { … } } | Action succeeded |
422 | { "ok": false, "stage": "policy", "error": "…" } | Rejected, stage names where (schema / policy / state) |
403 | none | Tenant mismatch or missing permission |
404 | none | Unknown org, or action not on the allowlist |
Every mutation requires a stable Idempotency-Key header (or the identical key in the JSON body).
Retries with the same logical command key resolve to the same durable Platform invocation.
The allowlist excludes runway.gate_record, runway.promotion_finalize,
runway.promotion_execute, runway.rollback_execute, runway.reconciliation_dispatch,
runway.deployment_reconcile, runway.analytics_rollup, runway.tenant_bootstrap,
runway.tenant_provision_complete, runway.tenant_retire_apply, and
runway.tenant_retire_complete, recording verdicts, declaring an approval threshold satisfied,
executing production, and completing trusted recovery or tenant lifecycle work are
server/worker-only. Public promotion_reopen and tenant_retire requests still pass through the
same permission, schema, policy, idempotency, and event pipeline.
In production, gate_evaluate returns after durable submission. The trusted worker requests/polls
TechFabric Experiments and records the verified exact-run verdict. Only the local demo completes this
flow inline.
GET /api/v1/orgs/:org/projections
Returns the org's read model, folded from the event log. Requires the runway:read permission.
{
"organizationId": "org-acme",
"catalog": [ … ],
"artifacts": [ … ],
"deployments": [ … ],
"secrets": [ … ],
"audit": [ … ],
"analytics": [ … ],
"reconciliations": [ … ]
}catalog: registered apps.artifacts: digest-verified Harness builds and component provenance.deployments: every deployment with its current state, environment, artifact digest, gate evidence, and prod URL.secrets: scope, environment, and key names per app (never values).audit: the actor-stamped event stream, filterable by actor kind (human / agent / system).analytics: immutable completed-day event rollups.reconciliations: failed-invocation recovery requests and replacement invocation ids.
Org scoping is enforced by the runtime. Projections are folded per organization, so a response can only ever contain the caller's own tenant's rows.