Reference
View as MarkdownInstance services API
6 operations. Every call needs a session cookie or an Authorization: Bearer nct_… token unless marked Public. Conventions, errors and scopes
/admin/instance-servicesBuilt-in services: health, default quota and every team's slice
Instance administrator only (403 instance_admin_required). S3 holds NebulaCtrl's own data (backups), the registry the teams' images, Loki their central logs. Each team has a slice of each; slices of deleted teams stay until purgeAt. No key, bucket or address is returned.
Response 200 · OK · application/json
- defaultQuotaBytesinteger (int64)requiredThe S3 quota of every team without its own
- InstanceServiceView[] | nullrequired
- SliceView[] | nullrequired
401Unauthorized403Forbiddeninstance_admin_required500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/admin/instance-servicesSet the default S3 quota of the teams
Instance administrator only. The default applies to every team without its own quota (50 GiB until changed); the minimum is 1 GiB (422 quota_too_small). Lowering it below what a team already uses only blocks that team's new backups: nothing is deleted. Audited.
Request body · application/json · required
- defaultQuotaBytesinteger (int64)requiredThe S3 quota of every team without its own, in bytes. At least 1 GiB.
Response 200 · OK · application/json
- defaultQuotaBytesinteger (int64)requiredThe S3 quota of every team without its own
- InstanceServiceView[] | nullrequired
- SliceView[] | nullrequired
401Unauthorized403Forbidden422Unprocessable Entityquota_too_small500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/admin/instance-services/checkCheck the built-in services now
Instance administrator only. Runs the same check as the minute-by-minute one: health of each service, the system bucket, and a slice for every team that lacks one.
Response 200 · OK · application/json
- defaultQuotaBytesinteger (int64)requiredThe S3 quota of every team without its own
- InstanceServiceView[] | nullrequired
- SliceView[] | nullrequired
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/admin/team-slices/{sliceId}/quotaSet one team's S3 quota
Instance administrator only. quotaBytes null resets the team to the instance default. Only the S3 slice has a quota (422 quota_not_supported). Lowering it below use only blocks new backups; existing backups are never deleted to make room. Audited.
| Parameter | In | Type | Description |
|---|---|---|---|
sliceIdrequired | path | string |
Request body · application/json · required
- quotaBytesinteger (int64) | nullrequiredThe team's own quota in bytes, at least 1 GiB; null resets it to the instance default.
Response 200 · OK · application/json
- deletedAtstring (date-time) | nullrequiredSet when the team was deleted; the slice is purged at purgeAt
- effectiveQuotaBytesinteger (int64)requiredThe quota that applies (s3); 0 for kinds without a quota
- idstringrequired
- kindenum: s3 | registry | lokirequired
- messagestringrequiredWhy the slice is failed; empty otherwise
- purgeAtstring (date-time) | nullrequired
- quotaBytesinteger (int64) | nullrequiredThe team's own quota; null = the instance default (s3 only)
- stateenum: provisioning | ready | full | failedrequired
- teamIdstringrequired
- teamNamestringrequired
- usedBytesinteger (int64)required
401Unauthorized403Forbidden404Not Found409Conflict422Unprocessable Entityquota_not_supported500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/admin/team-slices/{teamId}Purge a deleted team's slices now
Instance administrator only. Deletes the bucket, its key, the registry images and the logs of a team that was deleted, instead of waiting for the 30 days. confirm is the team's name. 409 team_still_exists while the team exists, 404 when it has no slices left, 422 confirmation_mismatch. Audited.
| Parameter | In | Type | Description |
|---|---|---|---|
teamIdrequired | path | string | |
confirm | query | string | The deleted team's name, as the slice table shows it. |
Response 204 · No Content
No body.
401Unauthorized403Forbidden404Not Found409Conflictteam_still_exists422Unprocessable Entityconfirmation_mismatch500Internal Server Error502Bad Gateway
Errors are RFC 9457 application/problem+json with a stable code field.
/team-sliceThe team's built-in backup storage, registry and logs
Used space and quota of the team's built-in backup storage, the size of its registry images and the log retention. Never a key, bucket, repository prefix or address: the services are managed by the instance administrator.
Response 200 · OK · application/json
- BackupSliceViewrequired
- LogsSliceViewrequired
- RegistrySliceViewrequired
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.