Admin API surface#

This is the operator index. Authoritative contract lives in the admin API OpenAPI document — rendered interactively at the Admin API viewer; raw bytes at /openapi.yaml.

All paths are relative to the /admin/v1 prefix on the gateway port. Auth: SigV4 or the strata_session cookie issued by POST /auth/login. The Full schema column links to the interactive viewer with a Redoc operation anchor (#operation/<operationId>) — the anchor is auto-generated from the operationId field on each path’s method entry.

The Audit verb column reflects the audit override stamped by each handler. GET/HEAD/OPTIONS requests skip the audit middleware — those rows show . Write operations (POST/PUT/DELETE) always emit one audit row.

Session#

MethodPathAudit verbSummaryFull schema
POST/auth/loginIssue a 24h session cookie from IAM credentials.authLogin
POST/auth/logoutClear the session cookie.authLogout
GET/auth/whoamiProbe current session; 401 when expired.authWhoami

Cluster status#

MethodPathAudit verbSummaryFull schema
GET/cluster/statusCluster-wide status hero (version, uptime, node counts, meta + data backend).getClusterStatus
GET/cluster/nodesHeartbeat table — one row per replica with workers + leader-for chips.getClusterNodes

Cluster lifecycle#

MethodPathAudit verbSummaryFull schema
GET/clustersList data-backend clusters with persisted drain / weight state (rows missing → live).listClusters
POST/clusters/{id}/drainadmin:DrainClusterFlip cluster_state to draining_readonly or evacuating. Body {mode} required.drainCluster
POST/clusters/{id}/undrainadmin:UndrainClusterClear draining state — drops the row. Works from draining_readonly or evacuating.undrainCluster
POST/clusters/{id}/activateadmin:ActivateClusterPromote a pending cluster to live with the supplied default-routing weight.activateCluster
PUT/clusters/{id}/weightadmin:UpdateClusterWeightAdjust default-routing weight [0, 100] on a live cluster. Cache invalidates synchronously.updateClusterWeight
GET/clusters/{id}/bucket-referencesBuckets whose Placement[<id>] > 0, joined with bucket-usage stats (paginated).getClusterBucketReferences

Drain & rebalance#

MethodPathAudit verbSummaryFull schema
GET/clusters/{id}/rebalance-progressPer-destination cluster rebalance counters + 1h sparkline. Degrades when Prom is unset.getClusterRebalanceProgress
GET/clusters/{id}/drain-progressIn-process drain-progress cache (chunks remaining, ETA, deregister_ready). 503 when no rebalance worker on this replica.getClusterDrainProgress
GET/clusters/{id}/drain-impactSynchronous bucket scan — migratable / stuck_single_policy / stuck_no_policy categorisation. 5-min cache.getClusterDrainImpact
GET/gc-configResolved STRATA_GC_* tunables snapshot (grace, interval, batch_size, concurrency, shards).getGCConfig
GET/rebalance-configResolved STRATA_REBALANCE_* tunables + live replica count.getRebalanceConfig
GET/rebalance-bandwidthCluster-wide 1m rebalance bandwidth + chunks/sec roll-up.getRebalanceBandwidth

Placement#

MethodPathAudit verbSummaryFull schema
GET/buckets/{bucket}/placementGet per-bucket placement policy + mode (weighted / strict).getBucketPlacement
PUT/buckets/{bucket}/placementadmin:PutBucketPlacement (or admin:UpdateBucketPlacementMode when body carries mode)Replace placement policy. Weights [0, 100], sum > 0. Optional mode flips weighted ↔ strict.putBucketPlacement
DELETE/buckets/{bucket}/placementadmin:DeleteBucketPlacementIdempotent — 204 even when no policy was configured.deleteBucketPlacement

Buckets#

MethodPathAudit verbSummaryFull schema
GET/bucketsList buckets (search, sort, paginate). total is unpaginated row count.listBuckets
GET/buckets/topTop buckets by size or 24h request count.getBucketsTop
GET/buckets/{bucket}Bucket detail — metadata + size + object count (bounded ListObjects walk).getBucket
GET/buckets/{bucket}/distributionPer-shard byte / object distribution + skew banner trigger.getBucketDistribution
GET/buckets/{bucket}/replication-lagPer-bucket replication_queue_age_seconds time-series (recharts shape).getBucketReplicationLag
GET/buckets/{bucket}/objectsRead-only object browser. marker-paginated, delimiter default /.listObjects
GET/buckets/{bucket}/usagePer-bucket daily usage history from usage_aggregates (default 30-day window).getBucketUsage
GET/buckets/{bucket}/quotaGet bucket quota.getBucketQuota
PUT/buckets/{bucket}/quotaadmin:PutBucketQuotaReplace bucket quota. Zero on any field means unlimited.putBucketQuota
DELETE/buckets/{bucket}/quotaadmin:DeleteBucketQuotaIdempotent quota removal.deleteBucketQuota

IAM#

MethodPathAudit verbSummaryFull schema
GET/iam/users/{userName}/quotaGet user quota.getUserQuota
PUT/iam/users/{userName}/quotaadmin:PutUserQuotaReplace user quota.putUserQuota
DELETE/iam/users/{userName}/quotaadmin:DeleteUserQuotaIdempotent quota removal.deleteUserQuota
GET/iam/users/{userName}/usagePer-user daily usage rolled across owned buckets + cross-row totals.getUserUsage

Consumers & metrics#

MethodPathAudit verbSummaryFull schema
GET/consumers/topTop consumers by 24h requests or bytes.getConsumersTop
GET/metrics/timeseriesCluster-wide Prometheus-backed time-series (request rate, latency p50/p95/p99, error rate, bytes in/out).getMetricsTimeseries

Diagnostics#

MethodPathAudit verbSummaryFull schema
GET/diagnostics/tracesList recently-captured traces from the in-process OTel ring buffer (LRU; filter by method / status / path / duration). 503 when ring buffer is disabled.getDiagnosticsTraces

Scope note#

The admin API router registers additional /admin/v1/* routes that are not yet documented in the OpenAPI contract — bucket lifecycle / CORS / policy / inventory / logging / ACL / object actions / multipart admin / IAM users + access keys + managed policies / audit log / diagnostics extras (hot buckets, hot shards, slow queries, node detail, trace by request id) / storage probes / settings. Stamping those endpoints into the YAML is tracked as a separate doc follow-up and not in scope for this reference page.