Skip to content

Spokes

Provisioning, lifecycle, and observability for spokes. The largest API surface — most customer automation calls one of these endpoints.

List spokes the caller has access to

GET
/api/my-spokes

Role-aware spoke list. Operators see everything; hub admins see spokes in their federations; spoke admins see only their own spokes.

Authorizations

bearer
Type
HTTP (bearer)

Responses

application/json
JSON
[
{
}
]

Playground

Server
Authorization

Samples


Get a spoke by id

GET
/api/spokes/{spokeId}

Authorizations

bearer
Type
HTTP (bearer)

Parameters

Path Parameters

spokeId*

Spoke id.

Type
string
Required

Responses

application/json
JSON
{
}

Playground

Server
Authorization
Variables
Key
Value

Samples


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
string
Required

Responses

Playground

Server
Authorization
Variables
Key
Value

Samples


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
string
Required

Request Body

application/json
JSON
{
"email": "string",
"displayName": "string"
}

Responses

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


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
string
Required

Query Parameters

limit

1–100, default 25.

Type
number
before

Cursor: ms-since-epoch timestamp.

Type
string

Responses

application/json
JSON
[
{
}
]

Playground

Server
Authorization
Variables
Key
Value

Samples


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
string
Required

Responses

application/json
JSON
{
}

Playground

Server
Authorization
Variables
Key
Value

Samples


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
string
Required

Request Body

application/json
JSON
{
"action": "string"
}

Responses

application/json
JSON
{
}

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


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
JSON
{
"ids": [
"string"
],
"action": "string"
}

Responses

application/json
JSON
[
{
}
]

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


List spokes in a federation

GET
/api/federations/{federationId}/spokes

Returns every spoke under the given federation that the caller can see.

Authorizations

bearer
Type
HTTP (bearer)

Parameters

Path Parameters

federationId*

Federation slug or id.

Type
string
Required

Responses

application/json
JSON
[
{
}
]

Playground

Server
Authorization
Variables
Key
Value

Samples


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
string
Required

Request Body

application/json
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
JSON
{
}

Playground

Server
Authorization
Variables
Key
Value
Body

Samples


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
string
Required

Query Parameters

size

Per-spoke capacity tier. Defaults to medium.

Type
string
Valid values
"small""medium""large"

Responses

application/json
JSON
{
}

Playground

Server
Authorization
Variables
Key
Value

Samples


Powered by VitePress OpenAPI

Released under the GPL v3 license.