Skip to content

Set or revert an organization's shared-storage quota

PUT
/api/v1/admin/organizations/{orgID}/storage-quota
curl --request PUT \
--url https://api.aetherplatform.cloud/api/v1/admin/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/storage-quota \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "quota_gb": 200 }'

Sets the org’s shared-storage cap and publishes it to the org’s StorageInventory so a raise takes effect immediately; the provisioner syncer is the durable path, so a failed publish is logged rather than returned. A null quota_gb REVERTS the org to the platform default and publishes a REMOVAL of spec.sharedQuotaBytes from the org’s StorageInventory (never 0 — ceph reads 0 as unlimited, the exact inversion of a revert).

Lowering is pre-flighted against the bytes already stored and rejected with 409 when it would fall below them: ceph accepts such a quota and then refuses every write to the pool until usage drops, an org-wide outage whose only undo is raising the quota back. The check is advisory — when no observed figure is available it is skipped, because a StorageInventory with no status yet is the ordinary state of a young org.

The change is recorded in the admin audit log with its before and after values. Requires the platform-admin realm role.

orgID
required
string format: uuid

Organization UUID.

Media typeapplication/json
object
quota_gb
required

The cap in GiB, between 1 and 10240, or null to revert to the platform default. 1 is the floor because 0 means UNLIMITED to ceph.

integer | null
>= 1 <= 10240
Example
{
"quota_gb": 200
}

The stored quota, with the observed figures when available.

Media typeapplication/json

An organization’s shared-storage (CephFS) cap: what is configured, what applies, and what the cluster actually reports. Every optional member is nullable rather than absent — a 0 quota would read as “unlimited”, and a 0 observed pair would claim the org has no cap and has written nothing, neither of which can be asserted without a figure.

object
configured_gb
required

The per-org cap in GiB, or null when none is set and the platform default applies.

integer | null
effective_gb
required

The cap in force — configured_gb when set, otherwise default_gb.

integer
default_gb
required

The platform default cap in GiB.

integer
observed_quota_bytes
required

The quota ceph is currently ENFORCING on the org’s CephFS data pool — the configured-vs-observed drift readout. null when the management cluster has published no figure or could not be reached.

integer | null format: int64
observed_used_bytes
required

Bytes already written to that pool. null under the same conditions as observed_quota_bytes.

integer | null format: int64
Examplegenerated
{
"configured_gb": 1,
"effective_gb": 1,
"default_gb": 1,
"observed_quota_bytes": 1,
"observed_used_bytes": 1
}

Malformed request — e.g. an invalid path UUID or an unparseable JSON body.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The credential was accepted but lacks the required role or access (e.g. a non-platform-admin calling an /api/v1/admin endpoint).

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

The requested resource was not found.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

quota_below_usage — the requested cap is below the bytes already stored in the org’s pool.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}

Request validation failed.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}