Appearance
Spokes
Provisioning, lifecycle, and observability for spokes. The largest API surface — most customer automation calls one of these endpoints.
Spokes
Operations
GET/api/my-spokesGET/api/spokes/{spokeId}DELETE/api/spokes/{spokeId}POST/api/spokes/{spokeId}/delegateGET/api/spokes/{spokeId}/activityGET/api/spokes/{spokeId}/backupsPOST/api/spokes/{spokeId}/actionsPOST/api/spokes/actionsGET/api/federations/{federationId}/spokesPOST/api/federations/{federationId}/spokesGET/api/federations/{federationId}/spokes/preview-cost
List spokes the caller has access to
Get a spoke by id
Destroy a spoke
DELETE
/api/spokes/{spokeId}
Asynchronous. The 202 response acknowledges the request; subscribe to the federation events stream for the SpokeUpdateRemoved event that signals the namespace is fully torn down.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Type
Requiredstring
Responses
Delegate spoke-admin access to a user
POST
/api/spokes/{spokeId}/delegate
Idempotent on (email, spokeId). Pre-existing users get an additional spoke membership; new users are invited via email with a 7-day token. Hub admins may only delegate spokes in their own federations.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Type
Requiredstring
Request Body
application/json
{
"email": "string",
"displayName": "string"
}
Responses
List audit activity for a spoke
GET
/api/spokes/{spokeId}/activity
Reverse-chronological. before is an ISO timestamp cursor; pass the oldest result back in to paginate.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Type
Requiredstring
Query Parameters
limit
1–100, default 25.
Type
number
before
Cursor: ms-since-epoch timestamp.
Type
string
Responses
application/json
[
{
}
]
List backup status for a spoke
GET
/api/spokes/{spokeId}/backups
Read-only summary of the most recent volume snapshots, last success/failure, and retention. Restore is operator-driven via a support ticket — see /hosted/backups in the docs.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Type
Requiredstring
Responses
application/json
{
}
Run a lifecycle action against a spoke
POST
/api/spokes/{spokeId}/actions
Suspend, resume, or other lifecycle transitions. The body specifies the action; valid values are documented on the request schema.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Type
Requiredstring
Request Body
application/json
{
"action": "string"
}
Responses
application/json
{
}
Run a lifecycle action against many spokes
POST
/api/spokes/actions
Bulk variant of the per-spoke action. Hub admins are limited to spokes in their own federations; out-of-scope ids are silently skipped.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
spokeId*
Spoke id.
Required
Request Body
application/json
{
"ids": [
"string"
],
"action": "string"
}
Responses
application/json
[
{
}
]
List spokes in a federation
Provision a spoke
POST
/api/federations/{federationId}/spokes
Creates a new spoke under the given federation. Provisioning is asynchronous — the response is the row in provisioning state. Subscribe to GET /federations/:id/events for status updates.
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
federationId*
Federation slug or id.
Type
Requiredstring
Request Body
application/json
{
"federationId": "string",
"slug": "string",
"displayName": "string",
"domain": "string",
"size": "string",
"identity": true,
"content": true,
"contentMode": "string",
"brand": "string",
"adminEmail": "string",
"region": "string",
"moodleVersion": "string",
"seed": "string"
}
Responses
application/json
{
}
Preview the cost of provisioning a spoke
GET
/api/federations/{federationId}/spokes/preview-cost
Returns the recurring monthly + due-now proration for adding a spoke at the given size. Returns { available: false } when Stripe isn't wired (dev fixtures, staff-seeded federations).
Authorizations
bearer
Type
HTTP (bearer)
Parameters
Path Parameters
federationId*
Federation slug or id.
Type
Requiredstring
Query Parameters
size
Per-spoke capacity tier. Defaults to medium.
Type
string
Valid values
"small""medium""large"Responses
application/json
{
}