Home / Docs / Control-plane API

Control-plane API reference

The control plane coordinates recovery jobs across your org: it issues signed jobs to the customer-side runner and stores metadata, evidence, and audit — never customer rows. All endpoints are JSON over HTTPS under /v1.

Authentication

Every request carries a bearer token: Authorization: Bearer <token>. A missing or blank token returns 401; a valid token whose role lacks the route's capability returns 403. Tokens are scoped to one org, and every response is filtered to that org.

Roles and capabilities

CapabilityGrantsRoles
readList/read jobs, evidence, auditadmin, operator, auditor
create-jobCreate recovery jobsadmin, operator
approveApprove a plan hashadmin, operator
manage-orgCreate connections, invite usersadmin

Auditor accounts can read evidence and audit but cannot create or approve mutations — separation of duties by design.

Endpoints

Method & pathCapabilityDescription
GET /v1/jobsreadList jobs for the org.
POST /v1/jobscreate-jobCreate a job (analyze, report, extract, diff, plan, merge, erase).
GET /v1/jobs/{id}readFetch one job: type, state, plan hash, counts.
POST /v1/jobs/{id}/approveapproveApprove the job's exact plan hash, unblocking a merge or erase.
GET /v1/jobs/{id}/evidencereadRetrieve the signed evidence artifact for a completed job.
GET /v1/auditreadAppend-only audit log of jobs, approvals, and access.
POST /v1/connectionsmanage-orgCreate a runner connection; mints a one-time registration token.
POST /v1/usersmanage-orgInvite a user to the org with a role.

Billing events arrive on a separate Stripe webhook endpoint whose payload signature is verified before processing.

Job lifecycle

Jobs move through a strict state machine; illegal transitions are refused:

pending → dispatched → running → awaiting_approval → approved → done
                                        ↘ (any stage) → failed

Read-type jobs (analyze, report, extract, diff, plan) run to done without approval. Mutating jobs (merge, erase) pause at awaiting_approval until a second authorized user approves the exact plan hash via POST /v1/jobs/{id}/approve.

The runner does the data work. The control plane never connects to your database. It signs a job; the outbound-only runner in your VPC executes it and returns metadata and signed evidence references. See the security model.

Get an org and a token

The Control plan provisions your org, runner connection, and roles. Start with a drill to see the job flow end to end.

Talk to us