Groundfloor Docs

Workspace Provisioning

The four-step provisioning saga that creates workspaces, environments, and Dataplane tenants.

Creating a workspace triggers an asynchronous provisioning saga. The API returns 202 Accepted immediately with a provisioning_run_id; background tasks complete physical setup.

API entry point

POST /v1/workspaces
Authorization: Bearer <token>
Content-Type: application/json

{
  "account_id": "<uuid>",
  "name": "Production",
  "slug": "production",
  "tenancy_model": "direct"
}

Response:

{
  "workspace_id": "<uuid>",
  "provisioning_run_id": "<uuid>"
}

Requires administer on the parent account.

Saga steps

StepWhat happensStatus after
1 — LogicalWorkspace row, owner membership, default environments (dev, staging, prod), SpiceDB tuplesstep_1_done
2 — PhysicalRegister Dataplane tenant via Admin SDK; store dataplane_tenant_id in workspace settingsstep_2_done
3 — QuotaAllocate plan-tier quota ceilings (stubbed for some tiers)step_3_done
4 — CompleteMark run succeeded; emit client.provisioned eventsucceeded

Step 1 runs in a single Postgres transaction. SpiceDB writes use the DLQ pattern if gRPC fails after commit.

Default environments

Every new workspace gets three environments:

  • dev
  • staging
  • prod

Environment promotion (moving releases between them) is a separate pillar — not yet available in the Customer Portal.

Failure handling

  • Failed runs are marked in provisioning_runs with error details
  • A background reconciler retries stale runs
  • Workspace row may exist even if later steps fail — check run status before assuming Dataplane is ready

Customer Portal

Admins create workspaces from Workspaces. The list shows status; detail page exposes the workspace UUID needed for API and Shell registration.

On this page