Ops API (managed deployments)¶
The ops API (/api/v1/ops) is an opt-in management surface used by a Turbo EA
Cloud control plane to operate hosted instances. On a self-hosted installation it is
disabled by default — every route answers 404 unless the instance was started
with an OPS_PUBLIC_KEY environment variable. There is no billing or licensing
logic anywhere in Turbo EA itself.
Authentication¶
Every ops request must be signed with the Ed25519 private key held by the
control plane; the instance verifies the signature with the public key from
OPS_PUBLIC_KEY (base64, raw 32 bytes). The signature covers the HTTP method, the
path with query string, a SHA-256 hash of the body, a timestamp, and a single-use
nonce:
canonical = METHOD \n PATH_WITH_QUERY \n sha256(body) \n timestamp \n nonce
Headers: X-Ops-Timestamp (unix seconds, ±5 minutes), X-Ops-Nonce (used once,
replay-protected), X-Ops-Signature (base64 Ed25519 signature).
Endpoints¶
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/ops/info |
Version, user/card counts, database health |
| POST | /api/v1/ops/rescue-access |
Create a time-boxed operator admin account |
| DELETE | /api/v1/ops/rescue-access |
Revoke a rescue account immediately |
| GET | /api/v1/ops/export |
Stream the secret-stripped workspace export bundle |
Rescue access — transparency guarantees¶
Time-limited operator access ("rescue access") is designed so it can never happen invisibly:
- Every grant and revocation notifies all instance admins in-app and by email, including the operator's name, the reason given, and the expiry time.
- Every action is recorded in the instance's own event log.
- Expiry is enforced by the instance itself: rescue accounts carry an
access_expires_attimestamp; expired accounts are rejected at authentication time and deactivated by an hourly background task. An outage of the control plane can never extend access. - Rescue accounts use a dedicated reserved address
(
rescue-…@rescue.turboea.invalid), so they are easy to recognise in the user list and can be deactivated manually at any time.
Workspace export¶
GET /api/v1/ops/export returns the same bundle as Admin → Settings →
Migration → Workspace transfer → Export: the full workspace with all secrets
stripped. The control plane uses it for customer-requested data exports (GDPR data
portability) and for safety backups before upgrades or deletions.