Velocity • Durability

Appendix B. Schema Index

Every schema referenced anywhere in this guide, alphabetically, with a one-line description and the fields of any object schema. Enum schemas (such as VolumeLayout or EfsaMode) show their allowed values instead of a field table. Field tables include an Example column drawn from the specification’s own sample values where the field carries one, and a schema carrying a whole-object example (such as AboutResponse) shows it as a JSON block after its field table. Request and response bodies in Chapters 3 through 14 already expand the schema they use directly, examples included; this appendix is for looking up a schema named only in passing, such as a nested field’s type.

Schema entries below have been deliberately left out of the table of contents. Use the index table here or the in-page search to jump to an entry.

Schema Schema Schema
AboutResponse Action AlertEvent
ApiTokenCreateRequest ApiTokenCreatedResponse ApiTokenListResponse
ApiTokenResponse ApiTokenState ApiTokenStateReason
ArchivedTenantSchema Attachment AttachmentCreateRequest
AttachmentListResponse AttachmentTunnel AuditDiagnostics
AuditRecord AuditRecordDetail Body_refresh_api_v1_auth_refresh_post
ChangePasswordRequest DelegatedTokenResponse DirectorEntry
EfsaMode FsUser FsUserCreateRequest
FsUserListResponse FsUserPatchRequest FsUserResponse
FsUserS3View FsUserSecretResponse GetS3ConfigResponse
GetTenantResponse GetTenantStorageSetResponse GetUserResponse
HTTPValidationError Hardware HardwareBlinkDriveLedActionRequest
HardwareBlinkNodeLedActionRequest HardwareDriveLedActionParams HardwareGetResponse
HardwareListResponse HardwareStopDriveLedActionRequest HardwareStopNodeLedActionRequest
ListArchivedTenantResponse ListS3BucketsResponse ListTenantResponse
ListTenantStorageSetResponse LocalAuthSettings LoginForm
MeResponse MountInfoResponse Node
NodeDrainState NodeDrainStatusResponse NodeFlag
NodeGetResponse NodeHaltActionRequest NodeListResponse
NodeRebootActionRequest NodeRole NodeStartDrainRequest
NodeStatus NodeStopDrainRequest ObservabilityLabels
ObservabilityTarget PamAuthSettings PanfsEvent
Principal QuotasPolicy RaidType
Realm RealmClientMode RealmLockActionRequest
RealmLogSizing RealmMoveServiceActionParams RealmMoveServiceActionRequest
RealmOfflineActionParams RealmOfflineActionRequest RealmOfflineMode
RealmOnlineActionRequest RealmPresidentFlag RealmRebootActionRequest
RealmRehomeRootActionParams RealmRehomeRootActionRequest RealmResponse
RealmSegmentTypeRequest RealmSegmentTypeResponse RealmState
RealmStateFlag RealmUnlockActionRequest Resource
RolesResponse S3AggregatorConfigSchema S3BucketCreateRequest
S3BucketSchema S3ConfigCreateRequest S3ConfigPatchRequest
S3ConfigSchema S3ConfigUpdateResponse S3CredentialsRevealResponse
S3DnsConfigSchema S3DnsMode S3EnabledRequest
S3EnabledResponse S3InstanceCreateRequest S3InstanceCreateResponse
S3InstanceFanoutResponse S3InstanceHealthSchema S3InstanceListResponse
S3InstancePerNodeResult S3InstanceSchema S3InstanceViewSchema
S3PrefixRequest S3PrefixResponse S3Profile
S3TlsConfigResponseSchema S3TlsConfigSchema S3TlsMode
ServiceAccountCreateRequest ServiceAccountListResponse ServiceAccountResponse
ServiceAccountUpdateRequest ServiceInstance SetRolesRequest
StorageSet StorageSetAddStorageActionRequest StorageSetAddStorageMode
StorageSetAddStorageParams StorageSetAlertStatus StorageSetAssignment
StorageSetCondition StorageSetCreateRequest StorageSetCreateResponse
StorageSetFlag StorageSetGetResponse StorageSetListResponse
StorageSetPatchRequest StorageSetSpaceCapacity StorageSetSpaceResponse
StorageSetState StorageSetStatus SubjectKind
Subnet SubnetCreateRequest SubnetCreateResponse
SubnetGetResponse SubnetListResponse SubnetPatchRequest
SubnetSegmentType Tenant TenantCreateRequest
TenantCreateResponse TenantPatchRequest TenantRole
TenantRolesResponse TenantStatus TenantStorageSetQuotaRequest
TenantSummarySchema TenantSwitchRequest TokenResponse
User UserCreateRequest UserCreateResponse
UserListResponse UserPatchRequest ValidationError
VictoriaLogsLogsqlEndpoint Volume VolumeAccessMode
VolumeCompressionMode VolumeCreateRequest VolumeCreateResponse
VolumeGetResponse VolumeLayout VolumeListResponse
VolumePatchRequest VolumePermission VolumeRecoverActionParams
VolumeRecoverActionRequest VolumeRecoverMode VolumeRenameActionParams
VolumeRenameActionRequest VolumeSpaceResponse VolumeStateOption
VolumeStatus

AboutResponse

About response exposing service identity and version.

Field Type Required Default Example Description
name string yes n/a PanAPI Service name
panfs_version string, nullable no null freebsd_142_amd64/release 2026.18.0-pioneer_swift.1885669 PanFS realm software version read from the local filesystem; null when unavailable
version string yes n/a 1.2.3 Service version, derived from the package metadata at build time

Action

RBAC actions that can be performed on resources.

Allowed values: list, view, create, update, delete, action, read-s3-secret, rotate-s3-secret, switch, finalize-delete

AlertEvent

One alert vmalert is currently firing, projected from an ALERTS series.

The server-shaped payload for both the alerts snapshot (GET /observability/alerts) and the added / resolved SSE deltas.

Which fields carry a value depends on the rule that fired: only alert_rule, message, severity, alert_group and source come from every rule. There is no timestamp - an alert states that a condition is true now.

Field Type Required Default Example Description
action_message string no (empty string) Recommended action (“User Action”); empty when none.
alert_code string no (empty string) PanFS alert code, shown as #CODE in the UI. Empty on non-PanFS rules.
alert_group string no (empty string) Rule group, e.g. panfs.alerts, panfs.processes.
alert_name string no (empty string) PanFS event constant, e.g. PAN_MGMT_EV_BRICK_NIC6_NOT_ACTIVE.
alert_rule string yes n/a vmalert rule that fired, e.g. PanFSAlertActive, ProcessDown.
category string no (empty string) Condition category, e.g. hardware, software.
id string yes n/a Stable alert id (alert_rule\|node_name\|message).
ip_address string no (empty string) That node’s management IP address.
is_manually_clearable boolean no false Whether the alert can be cleared by a user.
kind string no (empty string) Condition kind, e.g. state.
message string yes n/a Human-readable alert message.
node_dataserial string no (empty string) That node’s data serial, for linking to its detail page.
node_name string no (empty string) Name of the node the alert is about; empty on realm-wide alerts.
node_type string no (empty string) Type of that node (e.g. vpod, vdp, director_l).
process_name string no (empty string) Process the alert is about (ProcessDown only).
severity one of: error, warning, info yes n/a Normalized severity level.
source string no (empty string) Signal source, e.g. panfs.
tenant_id string no (empty string) Tenant the alert is about; the platform tenant on a realm-wide condition. Attribution only - it does not scope who may read the alert.

ApiTokenCreateRequest

Request to issue a long-lived API token for the caller.

Field Type Required Default Example Description
description string, nullable no null What this token is for. Optional; name remains the handle an operator identifies it by.
expires_in_days integer yes n/a 30, 90, 180, 365 Lifetime in days. Required, and must name one of the offered values (30, 90, 180, 365), so a long lifetime is always a deliberate choice.
name string yes n/a Name for this token, unique among the caller’s usable tokens. An operator identifies a token by it. A revoked or expired token releases its name, so a rotated credential can keep the name it had.

Example

{
   "description" : "Nightly backup runner",
   "expires_in_days" : 90,
   "name" : "nightly-backup@ci-runner-04"
}

ApiTokenCreatedResponse

The issuance response - the only one that ever contains the secret.

Field Type Required Default Example Description
created_at string (date-time) yes n/a When the secret was created. Never changes.
created_by Principal object yes n/a Who issued the token.
description string, nullable no null What this token is for, if a description was given.
expires_at string (date-time) yes n/a Absolute expiry.
id string yes n/a Public token identifier. Appears in audit events; not a secret.
name string yes n/a The handle given at issuance, unique among the owner’s usable tokens.
revoked_at string (date-time), nullable no null When the token was revoked, if it was. The only lifecycle fact the record stores.
revoked_by Principal object, nullable no null Who revoked the token, if it was.
roles array of string, nullable no null The role ceiling held in the record: the owner’s own roles as at issuance. Not chosen - a token carries what its owner held, and never more than they hold now. Null for a service account key, which carries no ceiling: it resolves whatever the account holds at the time of each request.
state ApiTokenState (active, disabled) yes n/a Whether the token still authenticates. Computed per response, never stored.
state_reason ApiTokenStateReason (expired, revoked), nullable no null Why the token is disabled. Null while it is active. Revocation outranks expiry.
token string yes n/a vdt1_6XuU1pyDS0abcDEF12345w_9fK3mZq7Xw2Lb1cD_hT8n...7bQ2xM The token. Returned once and never retrievable again; a lost token must be replaced.
warning string no Store this token now. It cannot be retrieved again. Reminder that the secret is shown exactly once.

ApiTokenListResponse

The caller’s own tokens.

Field Type Required Default Example Description
tokens array of ApiTokenResponse object yes n/a Token metadata, newest first.
total integer yes n/a Number of tokens returned.

ApiTokenResponse

A token’s metadata. Carries neither the secret nor its digest.

Field Type Required Default Example Description
created_at string (date-time) yes n/a When the secret was created. Never changes.
created_by Principal object yes n/a Who issued the token.
description string, nullable no null What this token is for, if a description was given.
expires_at string (date-time) yes n/a Absolute expiry.
id string yes n/a Public token identifier. Appears in audit events; not a secret.
name string yes n/a The handle given at issuance, unique among the owner’s usable tokens.
revoked_at string (date-time), nullable no null When the token was revoked, if it was. The only lifecycle fact the record stores.
revoked_by Principal object, nullable no null Who revoked the token, if it was.
roles array of string, nullable no null The role ceiling held in the record: the owner’s own roles as at issuance. Not chosen - a token carries what its owner held, and never more than they hold now. Null for a service account key, which carries no ceiling: it resolves whatever the account holds at the time of each request.
state ApiTokenState (active, disabled) yes n/a Whether the token still authenticates. Computed per response, never stored.
state_reason ApiTokenStateReason (expired, revoked), nullable no null Why the token is disabled. Null while it is active. Revocation outranks expiry.

ApiTokenState

Whether a token still authenticates. Derived per response from the record’s own dates.

Allowed values: active, disabled

ApiTokenStateReason

Why a disabled token stopped authenticating.

Allowed values: expired, revoked

ArchivedTenantSchema

A deleted tenant, as the platform archive kept it.

Its own entity, not a tenant with fields missing: nothing here can be acted on, and the tenant it describes exists in neither the storage fabric nor the configuration store. display_name and email are the values it was deleted with - the archive is the only remaining copy - while created_at and updated_at are the RM timestamps as they stood at that moment.

Field Type Required Default Example Description
created_at string (date-time) yes n/a 2026-01-10T08:00:00Z Tenant creation timestamp.
deleted_at string (date-time) yes n/a 2026-04-02T11:20:00Z When the tenant was deleted.
description string yes n/a Decommissioned engineering tenant Free-form description the tenant held when it was deleted.
display_name string, nullable no null Engineering (retired) Human-readable name the tenant held when it was deleted. Null when its configuration detail was already gone at that point, so the name was never captured.
email string, nullable no null eng-owner@vdura.example.com Contact email the tenant held when it was deleted. Null when its configuration detail was already gone at that point.
id string (uuid) yes n/a 3f2b1c0d-5e4a-4b8c-9d7e-6a5b4c3d2e1f Identifier (UUID) of the deleted tenant.
name string yes n/a oldeng Name the tenant held when it was deleted. Free for reuse by a new tenant.
status TenantStatus (pending, configuring, active, archived) no archived archived Always archived, so a client merging this list with the live one can tell them apart.
updated_at string (date-time) yes n/a 2026-04-02T11:15:00Z Tenant last-modification timestamp, as it stood when the tenant was deleted.

Example

{
   "created_at" : "2026-01-10T08:00:00Z",
   "deleted_at" : "2026-04-02T11:20:00Z",
   "description" : "Decommissioned engineering tenant",
   "display_name" : "Engineering (retired)",
   "email" : "eng-owner@vdura.example.com",
   "id" : "3f2b1c0d-5e4a-4b8c-9d7e-6a5b4c3d2e1f",
   "name" : "oldeng",
   "status" : "archived",
   "updated_at" : "2026-04-02T11:15:00Z"
}

Attachment

One host’s binding to one subnet, as reads and creates return it.

Field Type Required Default Example Description
hostname string no (empty string) Host name as supplied at create. Informational.
id string (uuid) yes n/a Unique identifier of the attachment.
joined_at string (date-time) yes n/a First attach time (UTC).
mtu integer yes n/a The MTU the host sets on its tenant interface, which is the MTU the realm nodes run the subnet at: the subnet’s declared MTU, or the realm’s primary network MTU less the encapsulation overhead when the subnet declares 0. Never 0.
overlay_ip string yes n/a The host’s address on the tenant network.
overlay_prefix integer yes n/a CIDR prefix length of the subnet, which the host applies to its own address.
segment_id integer yes n/a The subnet VLAN ID under one segment type and its VNI under the other. 0 means unassigned.
segment_type SubnetSegmentType (none, vlan, vxlan) yes n/a Kind of network segment the subnet is placed on, as the realm has it configured.
subnet_id string (uuid) yes n/a UUID of the subnet the host is attached to.
tenant_id string (uuid) yes n/a UUID of the tenant owning the subnet.
tunnel AttachmentTunnel object, nullable no null Tunnel recipe, present only when the segment is tunnelled and null otherwise.
underlay_ip string yes n/a 10.128.9.0 The host’s address on the realm underlay. Identifies the attachment inside its subnet, and on a tunnelled segment it is the endpoint the realm sends the host traffic to.

Example

{
   "hostname" : "client-0",
   "id" : "8f14e45f-ceea-467a-9575-5c4bcbdcd2f1",
   "joined_at" : "2026-08-28T12:00:00Z",
   "mtu" : 1450,
   "overlay_ip" : "192.168.50.100",
   "overlay_prefix" : 24,
   "segment_id" : 4257216,
   "segment_type" : "vxlan",
   "subnet_id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
   "tenant_id" : "00000000-0000-0000-0000-000000000001",
   "tunnel" : {
      "mac" : "92:b2:99:59:f3:fa",
      "udp_port" : 4789,
      "vteps" : [
         "10.128.1.0",
         "10.128.1.1",
         "10.128.1.2"
      ]
   },
   "underlay_ip" : "10.128.9.0"
}

AttachmentCreateRequest

Request body for attaching one host to a subnet.

Field Type Required Default Example Description
hostname string no (empty string) client-0 Informational host name, carried for the operator and never interpreted.
overlay_ip string, nullable no null 192.168.50.100 Requested address on the tenant network. Must sit inside the subnet, outside the realm node pool and be unallocated. Omit to let the backend allocate one. Applied on first attach only, so a repeated create never moves a host.
underlay_ip string yes n/a 10.128.9.0 The host’s address on the realm underlay. Identifies the attachment inside its subnet, and on a tunnelled segment it is the endpoint the realm sends the host traffic to.

Example

{
   "hostname" : "client-0",
   "overlay_ip" : "192.168.50.100",
   "underlay_ip" : "10.128.9.0"
}

AttachmentListResponse

A collection of attachments with a total count.

Field Type Required Default Example Description
attachments array of Attachment object no n/a Array of attachment objects. Empty array if none are found.
total integer yes n/a 0, 1, 12 Total count of attachments returned.

Example

{
   "attachments" : [
      {
         "hostname" : "client-0",
         "id" : "8f14e45f-ceea-467a-9575-5c4bcbdcd2f1",
         "joined_at" : "2026-08-28T12:00:00Z",
         "mtu" : 1450,
         "overlay_ip" : "192.168.50.100",
         "overlay_prefix" : 24,
         "segment_id" : 4257216,
         "segment_type" : "vxlan",
         "subnet_id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
         "tenant_id" : "00000000-0000-0000-0000-000000000001",
         "tunnel" : {
            "mac" : "92:b2:99:59:f3:fa",
            "udp_port" : 4789,
            "vteps" : [
               "10.128.1.0",
               "10.128.1.1",
               "10.128.1.2"
            ]
         },
         "underlay_ip" : "10.128.9.0"
      }
   ],
   "total" : 1
}

AttachmentTunnel

The tunnel recipe, present only on a tunnelled segment.

A VLAN fabric forwards, learns and floods on its own, so a subnet on it produces no tunnel: no link-layer address is assigned, no encapsulation port applies and no flood list exists.

Field Type Required Default Example Description
mac string yes n/a 92:b2:99:59:f3:fa Link-layer address assigned by the backend, derived from the subnet and the host so that every realm node computes the same value without the host publishing it. The host must set it on its interface, because the realm programs a static entry for it.
udp_port integer yes n/a 4789 UDP port carrying the encapsulation.
vteps array of string no n/a The realm nodes’ underlay addresses, which are the host’s flood list. Realm nodes only: another attached host is deliberately absent.

AuditDiagnostics

Failure diagnostics for one audit record, parsed from the correlated pan-api ERROR line.

Attached to the single-record get (GET /observability/audit/{request_id}) response, never to the list. Every structured field is empty when its source is absent - parsed, never guessed. log_lines is returned to platform callers only; tenant callers always receive it empty.

Field Type Required Default Example Description
code string no (empty string) Error code token parsed from the error line, e.g. 11411.
log_lines array of string no n/a Correlated pan-api log lines, ascending time. Always empty for a non-platform caller.
message string no (empty string) Human-readable message parsed from the error line.
subsystem string no (empty string) Subsystem token parsed from the error line, e.g. rmm.
summary string no (empty string) Error classification, e.g. RpcUnexpected subsystem=rmm code=11411.
symbol string no (empty string) Error symbol token parsed from the error line, e.g. PANFS_11411.

AuditRecord

One audit record, projected from the API’s own audit-trail log line.

The payload for the audit snapshot (GET /observability/audit).

Field Type Required Default Example Description
action string no (empty string) Action performed on that resource, e.g. create.
auth_token_id string no (empty string) Id of the API token that authenticated the request; empty for a session.
client_ip string no (empty string) Client IP address of the request.
duration_ms number no 0 Request duration in milliseconds.
id string yes n/a The record’s own identifier, which is its request_id.
method string yes n/a HTTP method of the audited request.
principal_id string no (empty string) Who acted, as <tenant id>/<principal id>. Under a tenant switch this is the person who switched, in their own tenant. Empty when the request was not authenticated.
principal_name string no (empty string) <tenant name>/<name>, or the bare name when the tenant name was not known.
principal_type string no (empty string) user | service-account.
query string no (empty string) Query string of the audited request.
reason any, nullable no null Reason for a denied or failed result, if recorded.
request_body any, nullable no null Request body, secret-redacted at write time.
request_id string yes n/a Audit request id; the identity used for deduplication.
resource string no (empty string) Resource the request acted on, e.g. volumes.
result string yes n/a Outcome of the request: success | denied | failed.
severity string yes n/a Audit-significance severity: INFO | WARNING.
status_code integer, nullable no null HTTP response status code.
target_id string no (empty string) Id of the specific instance acted on, if any.
tenant_id string no (empty string) The tenant the credential acts in: the caller’s own, or under a tenant switch the tenant switched into. It differs from the tenant half of principal_id only under a switch.
time string yes n/a When the request was audited (RFC 3339, from VictoriaLogs _time).
url string yes n/a URL path of the audited request.
user_agent string no (empty string) Client User-Agent header of the request.

AuditRecordDetail

The single-record get’s response (GET /observability/audit/{request_id}).

Shared fields agree field-for-field with the list’s AuditRecord, which stays unchanged.

Field Type Required Default Example Description
action string no (empty string) Action performed on that resource, e.g. create.
auth_token_id string no (empty string) Id of the API token that authenticated the request; empty for a session.
client_ip string no (empty string) Client IP address of the request.
diagnostics AuditDiagnostics object no n/a Correlated pan-api log detail for this request.
duration_ms number no 0 Request duration in milliseconds.
id string yes n/a The record’s own identifier, which is its request_id.
method string yes n/a HTTP method of the audited request.
principal_id string no (empty string) Who acted, as <tenant id>/<principal id>. Under a tenant switch this is the person who switched, in their own tenant. Empty when the request was not authenticated.
principal_name string no (empty string) <tenant name>/<name>, or the bare name when the tenant name was not known.
principal_type string no (empty string) user | service-account.
query string no (empty string) Query string of the audited request.
reason any, nullable no null Reason for a denied or failed result, if recorded.
request_body any, nullable no null Request body, secret-redacted at write time.
request_id string yes n/a Audit request id; the identity used for deduplication.
resource string no (empty string) Resource the request acted on, e.g. volumes.
result string yes n/a Outcome of the request: success | denied | failed.
severity string yes n/a Audit-significance severity: INFO | WARNING.
status_code integer, nullable no null HTTP response status code.
target_id string no (empty string) Id of the specific instance acted on, if any.
tenant_id string no (empty string) The tenant the credential acts in: the caller’s own, or under a tenant switch the tenant switched into. It differs from the tenant half of principal_id only under a switch.
time string yes n/a When the request was audited (RFC 3339, from VictoriaLogs _time).
url string yes n/a URL path of the audited request.
user_agent string no (empty string) Client User-Agent header of the request.

Body_refresh_api_v1_auth_refresh_post

Field Type Required Default Example Description
refresh_token string yes n/a

ChangePasswordRequest

Self-service change-password payload. Carries no user/tenant id - the caller comes from the token.

Field Type Required Default Example Description
current_password string (password) yes n/a The caller’s current password, verified server-side.
new_password string (password) yes n/a New password. Must contain at least 8 characters with an upper-case letter, a lower-case letter, a digit, and a special character, and must not exceed 72 bytes.

Example

{
   "current_password" : "Curr3nt!pw",
   "new_password" : "N3w!password"
}

DelegatedTokenResponse

Assumed-tenant token issued by the tenant-switch endpoint. Deliberately carries no refresh token.

Field Type Required Default Example Description
access_token string yes n/a Short-lived JWT scoped to the target tenant.
expires_in integer yes n/a 3600 Granted token lifetime in seconds.
tenant_id string (uuid) yes n/a Target tenant the token acts in (tid claim).
token_type literal bearer no bearer

DirectorEntry

One realm director’s address on the subnet.

Field Type Required Default Example Description
dataserial string yes n/a SN-D01 The director’s serial, which is how the realm’s own tooling names the node.
ip string yes n/a 10.20.0.11 The director’s address on this tenant subnet, which a client mounts to.
repset boolean yes n/a True when the node carries a replica of the realm database. These are the realm managers a client bootstraps against, so rmlist is built from them.
status NodeStatus (unknown, new, secure_erase, fsck, booting, shutdown, online, offline, mia_timer, dead, mia_notimer, lowbattery, clocksync, not_ready, network_err, not_reconciled, config_err) yes n/a Operational state of the node, as the realm manager reports it, carried for the operator to read. An address for a node that is down is inert and starts working the moment that node returns, so it stays in the list.

Example

{
   "dataserial" : "SN-D01",
   "ip" : "10.20.0.11",
   "repset" : true,
   "status" : "online"
}

EfsaMode

Extended File System Availability (EFSA) mode.

Mirrors CLI EFSA Mode column and volume list options.

Modes: - retry: clients block and retry I/O until storage recovers (default) - file-unavailable: I/O requests fail with errors when FT is exceeded - default: apply system default EFSA setting

Allowed values: retry, file-unavailable, default

FsUser

A PanFS user as published.

Field Type Required Default Example Description
gid integer yes n/a 65534 POSIX group id. Always concrete.
id string (uuid) yes n/a b7c1f0e2-3a4d-4c5e-8f90-1a2b3c4d5e6f PanFS user identifier (UUID).
name string yes n/a alice Unique handle within the tenant. A POSIX short name by convention.
s3 FsUserS3View object, nullable no null S3 access, or null if the user has none.
uid integer yes n/a 65534 POSIX user id. Always concrete.

Example

{
   "gid" : 65534,
   "id" : "b7c1f0e2-3a4d-4c5e-8f90-1a2b3c4d5e6f",
   "name" : "alice",
   "s3" : {
      "access_key" : "alice",
      "profile" : "user"
   },
   "uid" : 65534
}

FsUserCreateRequest

Request payload for creating a PanFS user.

Field Type Required Default Example Description
access_key string, nullable no null S3 access key. Defaults to name, which is why both carry the same charset rule.
gid integer, nullable no null POSIX group id. Same defaulting and bounds as uid.
name string yes n/a Unique handle within the tenant.
profile S3Profile (disabled, user, privileged) no user S3 access profile.
uid integer, nullable no null POSIX user id. Omit to take the tenant’s configured default, or nobody (65534) when it has none or when that default is not a usable id, 0 included. The resolved value is written onto the record, so a later change to the tenant default does not move this identity. 0 is not accepted: it would name root. Nor is anything above 4294967294, the last id a 32-bit uid_t can hold.

Example

{
   "gid" : 1000,
   "name" : "alice",
   "uid" : 1000
}

FsUserListResponse

Envelope for a PanFS user listing.

Field Type Required Default Example Description
fs_users array of FsUser object yes n/a
total integer yes n/a How many users the listing carries.

FsUserPatchRequest

Request payload for updating a PanFS user. The secret is not among the fields.

Field Type Required Default Example Description
access_key string, nullable no null Updated S3 access key.
gid integer, nullable no null Updated POSIX group id.
profile S3Profile (disabled, user, privileged), nullable no null Updated S3 access profile.
uid integer, nullable no null Updated POSIX user id.

FsUserResponse

Envelope for a single PanFS user.

Field Type Required Default Example Description
fs_user FsUser object yes n/a A PanFS user as published.

FsUserS3View

The S3 half of a PanFS user, as published. No secret.

Field Type Required Default Example Description
access_key string yes n/a S3 access key. The handle the gateway resolves a request by.
profile S3Profile (disabled, user, privileged) yes n/a S3 access profile.
secret_rotated_at string (date-time), nullable no null When the S3 secret was last rotated, or null if it never has been.

FsUserSecretResponse

The one place an S3 secret reaches a caller.

Field Type Required Default Example Description
access_key string yes n/a The access key the secret belongs to.
secret_key string yes n/a The S3 secret key.

Example

{
   "access_key" : "alice",
   "secret_key" : "..."
}

GetS3ConfigResponse

Response wrapper for S3 config retrieval.

Returned on GET /api/v1/tenants/{tenant_id}/s3.

Field Type Required Default Example Description
s3_config S3ConfigSchema object yes n/a Tenant S3 gateway configuration.

Example

{
   "s3_config" : {
      "default_dir_mode" : "755",
      "default_group" : "gid:65534",
      "default_obj_mode" : "644",
      "default_owner" : "uid:65534",
      "default_prefix" : "/vol1/t1",
      "enabled" : true,
      "tls" : {}
   }
}

GetTenantResponse

Detailed view of a single tenant.

Returned on GET /api/v1/tenants/{tenant_id}.

Field Type Required Default Example Description
tenant Tenant object yes n/a Tenant entity with all available details.

GetTenantStorageSetResponse

Detailed view of a single tenant storageset assignment.

Field Type Required Default Example Description
storageset StorageSetAssignment object yes n/a Storageset assignment (id + quota + name).

Example

{
   "storageset" : {
      "quota_bytes" : 2199023255552,
      "storageset_id" : 1,
      "storageset_name" : "Set 1"
   }
}

GetUserResponse

Detailed view of a single Tenant User.

Returned on GET /tenants/{tenant_id}/users/{user_id}.

Field Type Required Default Example Description
user User object yes n/a Tenant User entity with all available details.

Example

{
   "user" : {
      "auth_settings" : {
         "auth_mode" : "local"
      },
      "created_at" : "2026-01-01T00:00:00Z",
      "display_name" : "Alice Anderson",
      "email" : "alice@fintech.example.com",
      "id" : "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "updated_at" : "2026-01-01T00:00:00Z",
      "username" : "alice"
   }
}

HTTPValidationError

Field Type Required Default Example Description
detail array of ValidationError object no n/a

Hardware

A single hardware model from the catalog.

Declared attributes are typed for documentation; any further catalog fields are preserved as-is. Only id is guaranteed to be present.

Field Type Required Default Example Description
allow_lacp_link_agg integer, nullable no null Whether LACP link aggregation is allowed.
allow_static_link_agg integer, nullable no null Whether static link aggregation is allowed.
allow_upgrade integer, nullable no null Whether upgrade is allowed (0 or 1).
arch integer, nullable no null 64 CPU architecture width.
capacity_gb integer, nullable no null Storage capacity in GB.
codename string, nullable no null Internal codename(s).
compatibility_type string, nullable no null bravo Compatibility line.
component_type string, nullable no null node, enclosure Component type.
cpu string, nullable no null CPU description.
data_sector_size integer, nullable no null Drive data sector size in bytes.
datastores array of any, nullable no null Datastore definitions.
deny_downgrade_to string, nullable no null Version this model must not be downgraded to.
drives object, nullable no null Drive definitions keyed by drive number.
generation string, nullable no null 100 Hardware generation.
has_bladeset_affinity boolean, nullable no null Whether the model has bladeset affinity.
hdinfo string, nullable no null (1) 512GB SSD Human-readable drive summary.
id string yes n/a 301002001 Catalog identifier of the hardware model.
intent_log object, nullable no null Intent log configuration.
introduced string, nullable no null 7.0.0 First version to support this model.
loops object, nullable no null Loop device definitions.
manufacturer string, nullable no null Hardware manufacturer.
memory string, nullable no null 96GB Amount of memory.
metadatastores array of any, nullable no null Metadata store definitions.
name string, nullable no null ASD-1-100-96-80 Model name (SKU).
network string, nullable no null 2x200GbE Network interface summary.
node_osd_filesystem_version integer, nullable no null Node OSD filesystem version.
node_role_ids array of integer, nullable no null Node role identifiers.
nvdimm_namespaces object, nullable no null NVDIMM namespace definitions.
osd_filesystem_version integer, nullable no null OSD filesystem version.
platform string, nullable no null freebsd_142_amd64 OS/platform identifier.
powerdraw integer, nullable no null 400 Power draw in watts.
product_name string, nullable no null Product name (product type plus generation).
product_type string, nullable no null Product type (name without generation).
role string, nullable no null director Software role the device serves.
storage_controller string, nullable no null Storage controller description.
tlsize integer, nullable no null Transaction log size in GB.
vpod_skus object, nullable no null Associated VPOD SKUs and counts.
watts integer, nullable no null Power supply rating in watts.

Example

{
   "arch" : 64,
   "compatibility_type" : "bravo",
   "component_type" : "node",
   "cpu" : "Intel Xeon E5-1630 v4 3.7GHz",
   "generation" : "100",
   "hdinfo" : "(1) 512GB SSD",
   "id" : "301002001",
   "introduced" : "7.0.0",
   "memory" : "96GB",
   "name" : "ASD-1-100-96-80",
   "network" : "2x200GbE",
   "platform" : "freebsd_142_amd64",
   "powerdraw" : 400,
   "product_name" : "Bravo Director Node 100",
   "product_type" : "Bravo Director Node",
   "role" : "director"
}

HardwareBlinkDriveLedActionRequest

Request to turn on a drive’s identify (‘locate’) LED so the drive can be found physically.

Field Type Required Default Example Description
action literal blink_drive_led yes n/a The action to perform on the component.
params HardwareDriveLedActionParams object yes n/a Identifies the drive on the hosting node.

HardwareBlinkNodeLedActionRequest

Request to turn on a node’s identify (‘locate’) LED so the component can be found physically.

Field Type Required Default Example Description
action literal blink_node_led yes n/a The action to perform on the component.
params null (not used) no n/a

HardwareDriveLedActionParams

Identifies the drive whose LED to drive, by its number on the hosting node.

Field Type Required Default Example Description
drive_number integer yes n/a 1, 3 The drive’s number on the hosting node (the panfs_drive drive_number). Numbering starts at 1, so a node with four drives accepts 1 to 4.

HardwareGetResponse

Detailed representation of a single hardware model.

Field Type Required Default Example Description
hardware Hardware object yes n/a Hardware model with all available details.

Example

{
   "hardware" : {
      "arch" : 64,
      "compatibility_type" : "bravo",
      "component_type" : "node",
      "cpu" : "Intel Xeon E5-1630 v4 3.7GHz",
      "generation" : "100",
      "hdinfo" : "(1) 512GB SSD",
      "id" : "301002001",
      "introduced" : "7.0.0",
      "memory" : "96GB",
      "name" : "ASD-1-100-96-80",
      "network" : "2x200GbE",
      "platform" : "freebsd_142_amd64",
      "powerdraw" : 400,
      "product_name" : "Bravo Director Node 100",
      "product_type" : "Bravo Director Node",
      "role" : "director"
   }
}

HardwareListResponse

A collection of hardware models with the total number available.

Field Type Required Default Example Description
hardware array of Hardware object no n/a Array of hardware models present in the current realm. Empty array if none are found.
total integer yes n/a 0, 1, 3 Total count of hardware models present in the current realm.

Example

{
   "hardware" : [
      {
         "arch" : 64,
         "compatibility_type" : "bravo",
         "component_type" : "node",
         "cpu" : "Intel Xeon E5-1630 v4 3.7GHz",
         "generation" : "100",
         "hdinfo" : "(1) 512GB SSD",
         "id" : "301002001",
         "introduced" : "7.0.0",
         "memory" : "96GB",
         "name" : "ASD-1-100-96-80",
         "network" : "2x200GbE",
         "platform" : "freebsd_142_amd64",
         "powerdraw" : 400,
         "product_name" : "Bravo Director Node 100",
         "product_type" : "Bravo Director Node",
         "role" : "director"
      }
   ],
   "total" : 1
}

HardwareStopDriveLedActionRequest

Request to turn off a drive’s identify (‘locate’) LED.

Field Type Required Default Example Description
action literal stop_drive_led yes n/a The action to perform on the component.
params HardwareDriveLedActionParams object yes n/a Identifies the drive on the hosting node.

HardwareStopNodeLedActionRequest

Request to turn off a node’s identify (‘locate’) LED.

Field Type Required Default Example Description
action literal stop_node_led yes n/a The action to perform on the component.
params null (not used) no n/a

ListArchivedTenantResponse

Collection response for the archive listing.

Returned on GET /api/v1/tenants/archived (Platform Admin only), newest deletion first.

Field Type Required Default Example Description
tenants array of ArchivedTenantSchema object no n/a Array of archived tenants, newest deletion first. Empty array if none were ever deleted.
total integer yes n/a 0, 5, 50 Total count of archived tenants in this response.

Example

{
   "tenants" : [
      {
         "created_at" : "2026-01-10T08:00:00Z",
         "deleted_at" : "2026-04-02T11:20:00Z",
         "description" : "Decommissioned engineering tenant",
         "display_name" : "Engineering (retired)",
         "email" : "eng-owner@vdura.example.com",
         "id" : "3f2b1c0d-5e4a-4b8c-9d7e-6a5b4c3d2e1f",
         "name" : "oldeng",
         "status" : "archived",
         "updated_at" : "2026-04-02T11:15:00Z"
      }
   ],
   "total" : 1
}

ListS3BucketsResponse

Response wrapper for listing S3 buckets.

Field Type Required Default Example Description
s3_buckets array of S3BucketSchema object yes n/a List of S3 buckets.

ListTenantResponse

Collection response for tenant list operations.

Returned on GET /api/v1/tenants, to any platform role holding tenants:list. Returns summary info for each tenant, not full details.

Field Type Required Default Example Description
tenants array of TenantSummarySchema object no n/a Array of tenant summary objects. Empty array if no tenants found
total integer yes n/a 0, 5, 50 Total count of tenants in this response.

Example

{
   "tenants" : [
      {
         "created_at" : "2026-03-02T12:00:00Z",
         "description" : "FinTech tenant",
         "id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd",
         "name" : "fintech",
         "status" : "active",
         "updated_at" : "2026-03-02T12:00:00Z"
      }
   ],
   "total" : 1
}

ListTenantStorageSetResponse

Collection response listing a tenant’s storageset assignments.

Field Type Required Default Example Description
storagesets array of StorageSetAssignment object no n/a Array of storageset assignments (id + quota + name). Empty array if none are assigned.
total integer yes n/a 0, 2, 5 Total count of storageset assignments in this response.

Example

{
   "storagesets" : [
      {
         "quota_bytes" : 2199023255552,
         "storageset_id" : 1,
         "storageset_name" : "Set 1"
      },
      {
         "quota_bytes" : 5497558138880,
         "storageset_id" : 3,
         "storageset_name" : "Set 3"
      }
   ],
   "total" : 2
}

LocalAuthSettings

Local bcrypt-based authentication.

Field Type Required Default Example Description
auth_mode literal local no local

LoginForm

Credentials for POST /auth/login, where the user name carries the tenant.

Any other form field an OAuth2 client sends is accepted and ignored.

Field Type Required Default Example Description
password string (password) yes n/a The user password.
username string yes n/a User name, tenant-qualified as <tenant-name>/<user> (for example fintech/alice). An unprefixed name belongs to the platform tenant.

Example

{
   "password" : "Secret1!",
   "username" : "admin"
}

MeResponse

Current user identity, and what it may do in the effective tenant.

roles and permissions are the same policy read from either end: the roles are the bindings the caller holds, permissions the effective set they resolve to. A client that only gates on capability reads permissions; one that also names the caller’s role reads roles. Both are scoped to tenant_id, so a tenant switch reports the target tenant.

Field Type Required Default Example Description
actor_tenant_id string (uuid), nullable no null 00000000-0000-0000-0000-000000000000 Home tenant of the acting user; set only while a tenant switch is active.
actor_user_id string (uuid), nullable no null 00000000-0000-0000-0000-000000000001 The user that asked for the switch; set only while a tenant switch is active.
is_delegated boolean no false True while the caller acts in another tenant through a tenant switch. user_id is then the platform-support principal, and the delegation fields name the real caller.
is_platform_admin boolean yes n/a True if the authenticated user is the built-in Platform Admin account acting in its own tenant. Informational only - it grants nothing that the platform policy does not already grant. Always false while a tenant switch is active.
permissions array of string no n/a ["volumes:list","volumes:create","users:view"] Every permission the caller’s roles grant, as resource:action, deduplicated and in policy order. This is the effective set the server enforces against, so a client can gate a control on membership alone without knowing which role supplied it.
roles array of string no n/a ["admin"] Roles the caller holds in the effective tenant. Empty when the caller is bound to no role there - a role defined by another tenant grants nothing here. The full catalog, with the permissions of every role the tenant defines, is at GET /tenants/roles.
tenant_id string (uuid) yes n/a 123e4567-e89b-12d3-a456-426614174000 Effective tenant UUID. Resolved from the tid claim in the JWT.
user_id string (uuid) yes n/a 123e4567-e89b-12d3-a456-426614174000 The authenticated user identifier (JWT sub claim).

Example

{
   "is_delegated" : false,
   "is_platform_admin" : false,
   "permissions" : [
      "tenants:view",
      "volumes:list",
      "volumes:view",
      "users:list",
      "users:view",
      "users:update",
      "users:delete",
      "observability:list",
      "observability:view",
      "roles:view",
      "roles:update"
   ],
   "roles" : [
      "admin"
   ],
   "tenant_id" : "123e4567-e89b-12d3-a456-426614174000",
   "user_id" : "123e4567-e89b-12d3-a456-426614174000"
}

MountInfoResponse

The mount targets a client on one tenant subnet can use.

Field Type Required Default Example Description
directors array of DirectorEntry object no n/a The realm directors holding an address on this subnet, nodes carrying a realm-database replica first and then ordered by address. Every such director appears here, in either address family. An empty array means the subnet exists and carries no address records yet.
rmlist string yes n/a 10.20.0.11;10.20.0.12 The addresses for mount_panfs, joined with “;” in the order above and wrapped by the caller as rmlist=(). It narrows the directors array to replica nodes, which is what the option means and what keeps it under the five addresses mount_panfs accepts, and to IPv4, which is all that grammar can express. Empty when no replica node holds an IPv4 address here, even when directors is not empty.
subnet_id string (uuid) yes n/a UUID of the subnet the addresses belong to.
tenant_id string (uuid) yes n/a UUID of the tenant owning the subnet.

Example

{
   "directors" : [
      {
         "dataserial" : "SN-D01",
         "ip" : "10.20.0.11",
         "repset" : true,
         "status" : "online"
      },
      {
         "dataserial" : "SN-D02",
         "ip" : "10.20.0.12",
         "repset" : true,
         "status" : "online"
      },
      {
         "dataserial" : "SN-D03",
         "ip" : "10.20.0.13",
         "repset" : false,
         "status" : "online"
      }
   ],
   "rmlist" : "10.20.0.11;10.20.0.12",
   "subnet_id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
   "tenant_id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd"
}

Node

Node representation.

Field Type Required Default Example Description
capacity_bytes integer no 0 55650025472, 0 Storage capacity of the node in bytes.
dataserial string yes n/a e9ff4075d18233 The data serial identifier used for data replication and recovery processes
flags array of NodeFlag (impaired, jettisoned, upgrade, reinit, offline, reinit_pending, recon_pending, need_to_offline, draining, alias_uncommitted, disallow_aliases, repset, drained, activated, 10ge_secondary_only, admin_nic_disabled) yes n/a repset, activated Operational flags indicating special conditions or states of the node
hw_serial string yes n/a 3e7e0000310fff001 The hardware serial identifier used for inventory tracking and support
ip_address string yes n/a 10.97.18.200 The management interface IP address used to reach the node for control and monitoring
name string yes n/a ASD-1,1, VCH-2,2 Human-readable node name formed as <node group>,<slot> (e.g. ASD-1,1, VCH-2,2).
role NodeRole (none, any, any_director, any_storage, qnode, snode, ibr_node, vhost, vosd) yes n/a any_director The functional role of the node indicating how the node is used in the system
shelf_id string yes n/a 3e7e0001402001001 Unique identifier of a storage shelf
status NodeStatus (unknown, new, secure_erase, fsck, booting, shutdown, online, offline, mia_timer, dead, mia_notimer, lowbattery, clocksync, not_ready, network_err, not_reconciled, config_err) yes n/a online The status of the node
storageset_id integer no 0 1, 2, 5 StorageSet ID where this node resides
vhost_id string yes n/a bf806fa0c17feb Identifier of the virtual host (vhost) the node belongs to; empty if not associated with a vhost

Example

{
   "capacity_bytes" : 55650025472,
   "dataserial" : "e9ff4075d18233",
   "flags" : [
      "repset",
      "activated"
   ],
   "hw_serial" : "3e7e0000310fff001",
   "ip_address" : "10.97.18.200",
   "name" : "ASD-1,1",
   "role" : "any_director",
   "shelf_id" : "3e7e0001402001001",
   "status" : "online",
   "storageset_id" : 1,
   "vhost_id" : "bf806fa0c17feb"
}

NodeDrainState

High-level state of an OSD drain operation.

Allowed values: draining, not_draining, suspended, unknown

NodeDrainStatusResponse

Progress of an OSD drain, including derived completion percentage and ETA.

Field Type Required Default Example Description
amount_error integer yes n/a Bytes that could not be migrated.
amount_moved integer yes n/a Bytes already migrated off the node.
amount_remaining integer yes n/a Bytes still to be migrated off the node.
eta_seconds integer, nullable yes n/a 51, 0, null Estimated seconds to completion at the current rate, or null when the rate is zero.
objects_error integer yes n/a Objects that could not be migrated.
objects_moved integer yes n/a Objects already migrated off the node.
objects_remaining integer yes n/a Objects still to be migrated off the node.
percent_complete number, nullable yes n/a 50, 100, null Percentage of bytes migrated, or null when there is nothing to drain.
pm_id integer yes n/a Identifier of the performance manager (PM) reporting this drain.
rate_bytes_per_sec integer yes n/a Current data-movement rate for the drain, in bytes per second.
state NodeDrainState (draining, not_draining, suspended, unknown) yes n/a High-level state of the drain operation.

Example

{
   "amount_error" : 0,
   "amount_moved" : 5368709120,
   "amount_remaining" : 5368709120,
   "eta_seconds" : 51,
   "objects_error" : 0,
   "objects_moved" : 1024,
   "objects_remaining" : 1024,
   "percent_complete" : 50,
   "pm_id" : 4,
   "rate_bytes_per_sec" : 104857600,
   "state" : "draining"
}

NodeFlag

Node flags.

Allowed values: impaired, jettisoned, upgrade, reinit, offline, reinit_pending, recon_pending, need_to_offline, draining, alias_uncommitted, disallow_aliases, repset, drained, activated, 10ge_secondary_only, admin_nic_disabled

NodeGetResponse

Detailed representation of a single node.

Field Type Required Default Example Description
node Node object yes n/a Node entity with all available details.

Example

{
   "node" : {
      "capacity_bytes" : 55650025472,
      "dataserial" : "e9ff4075d18233",
      "flags" : [
         "repset",
         "activated"
      ],
      "hw_serial" : "3e7e0000310fff001",
      "ip_address" : "10.97.18.200",
      "name" : "ASD-1,1",
      "role" : "any_director",
      "shelf_id" : "3e7e0001402001001",
      "status" : "online",
      "storageset_id" : 1,
      "vhost_id" : "bf806fa0c17feb"
   }
}

NodeHaltActionRequest

Request to perform a halt (power-down without auto-restart) action on a Node.

Field Type Required Default Example Description
action literal halt yes n/a The action to perform on the node.
params null (not used) no n/a

NodeListResponse

Represents a collection of node objects along with the total number of available objects.

Field Type Required Default Example Description
nodes array of Node object no n/a Array of node objects matching the query. Empty array if no nodes found
total integer yes n/a 0, 2, 150 Total count of nodes available (may exceed returned array size if paginated).

Example

{
   "nodes" : [
      {
         "capacity_bytes" : 55650025472,
         "dataserial" : "e9ff4075d18233",
         "flags" : [
            "repset",
            "activated"
         ],
         "hw_serial" : "3e7e0000310fff001",
         "ip_address" : "10.97.18.200",
         "name" : "ASD-1,1",
         "role" : "any_director",
         "shelf_id" : "3e7e0001402001001",
         "status" : "online",
         "storageset_id" : 1,
         "vhost_id" : "bf806fa0c17feb"
      }
   ],
   "total" : 1
}

NodeRebootActionRequest

Request to perform a reboot action on a Node.

Field Type Required Default Example Description
action literal reboot yes n/a The action to perform on the node.
params null (not used) no n/a

NodeRole

Node roles.

Allowed values: none, any, any_director, any_storage, qnode, snode, ibr_node, vhost, vosd

NodeStartDrainRequest

Request to start draining a node (migrate its data onto other nodes in the StorageSet).

Field Type Required Default Example Description
action literal start_drain yes n/a The drain action to perform.
params null (not used) no n/a

NodeStatus

Node operational statuses.

Allowed values: unknown, new, secure_erase, fsck, booting, shutdown, online, offline, mia_timer, dead, mia_notimer, lowbattery, clocksync, not_ready, network_err, not_reconciled, config_err

NodeStopDrainRequest

Request to stop an in-progress node drain.

Field Type Required Default Example Description
action literal stop_drain yes n/a The drain action to perform.
params null (not used) no n/a

ObservabilityLabels

Labels for observability targets.

Field Type Required Default Example Description
__meta_node_state string yes n/a online, offline The PanFS node state (mgmt node status) of the nodes in this group. It describes the node, not whether the scrape endpoint answers.
__meta_node_type string yes n/a any_director, vhost, vosd The type/role of the node

Example

{
   "__meta_node_state" : "online",
   "__meta_node_type" : "any_director"
}

ObservabilityTarget

Target for observability metrics collection.

Field Type Required Default Example Description
labels ObservabilityLabels object yes n/a Labels associated with these targets
targets array of string yes n/a ["10.97.15.200:9273"] Scrape endpoints as host:port. The port is the observability agent (telegraf) Prometheus exporter on each node, which serves /metrics; 9273 unless the deployment overrides it.

Example

{
   "labels" : {
      "__meta_node_state" : "online",
      "__meta_node_type" : "any_director"
   },
   "targets" : [
      "10.97.15.200:9273"
   ]
}

PamAuthSettings

PAM-based authentication.

The service field maps to /etc/pam.d/<service>.

Field Type Required Default Example Description
auth_mode literal pam no pam
service string no login

PanfsEvent

One PanFS management event, projected from a job="EVENTS" log record.

The payload for both the events snapshot (GET /observability/events) and the append SSE deltas. Every field describes the event’s subject node; the record’s stream labels name the director that shipped the log line and are not carried here.

Field Type Required Default Example Description
blade_serial string no (empty string) Blade serial of the subject node.
category string no (empty string) Event category, e.g. hardware, volume.
component_type string no (empty string) Subject component type, e.g. Director, VPOD Container.
event_code string no (empty string) PanFS event code, shown as #CODE in the UI.
event_name string no (empty string) PanFS event constant, e.g. PAN_MGMT_EV_BRICK_ONLINE.
hw_serial string no (empty string) Subject node’s hardware serial.
id string yes n/a PanFS event_id - a hash of the event, unique per occurrence.
ip_address string no (empty string) Subject node’s management IP address.
message string yes n/a Human-readable event message.
node_dataserial string no (empty string) Subject node’s data serial, for linking to its detail page.
severity one of: error, warning, info yes n/a Normalized severity level.
shelf_id string no (empty string) Serial of the shelf holding the subject node.
slot_id string no (empty string) Slot the subject node occupies in that shelf.
tenant_id string no (empty string) Tenant the event belongs to; empty for a realm-wide event.
time string yes n/a When the event occurred (ISO 8601).
volume_service_id string no (empty string) Volume-service handle for volume events, e.g. 0x0400000000000005.

Principal

A principal as a token record names it: ids and names, recorded at the time and never re-read.

Field Type Required Default Example Description
id string (uuid) yes n/a Principal id.
kind SubjectKind (user, service-account) yes n/a user | service-account.
name string yes n/a Username or service account name.
tenant_id string (uuid) yes n/a The principal’s own tenant.
tenant_name string yes n/a The principal’s tenant name.

QuotasPolicy

User and Group Quotas Policy status.

Determines whether user and group quota enforcement is enabled on the volume.

States: - DISABLE: quotas enforcement is disabled - ENABLE: quotas enforcement is enabled and active - REPORT: quota reporting mode without enforcement - INHERIT: quota policy inherited from system defaults - INVALID: invalid quota state, indicates an error condition

Allowed values: disable, enable, report, inherit, invalid

RaidType

RAID types supported by volume layout.

Allowed values: raid6+, raid5+, raid10+, raid5, raid10, default

Realm

Realm for the API response.

Field Type Required Default Example Description
boot_epoch_seconds number yes n/a Realm boot epoch timestamp in seconds
clientmode_current RealmClientMode (invalid, balanced, favor_df) yes n/a Current client mode
clientmode_next RealmClientMode (invalid, balanced, favor_df) yes n/a Next client mode (after reboot)
data_generation integer yes n/a Data generation counter
heartbeat_failure_grace_seconds number yes n/a Heartbeat failure grace period in seconds
heartbeat_period_seconds number yes n/a Heartbeat period in seconds
id string yes n/a Realm unique identifier as a hex string
locked boolean yes n/a Whether the realm is locked to new node joins (via PanDHCP). true prevents new nodes from joining; false allows joins. Independent of state - a realm can be online and locked at the same time.
log_sizing RealmLogSizing (invalid, 4g, 12g, dm1, custom_1, custom_2, custom_3, custom_4, custom_5, current) yes n/a Log sizing configuration
mem_sizing_current integer yes n/a Current memory sizing level
mem_sizing_next integer yes n/a Next memory sizing level (after reboot)
mia_timer integer yes n/a MIA timer in seconds
name string yes n/a Realm display name
panfs_mounted boolean yes n/a Whether the realm root filesystem is mounted. Creating a tenant, and creating or renaming a volume, need it: while it is false, those calls answer 503. Each API host checks its own mount on every request, so two hosts behind a load balancer may disagree.
president_flags array of RealmPresidentFlag (settled_storage, settled_mgr, vsm_backup_rebal) yes n/a President flags
state RealmState (invalid, unknown, online, going_offline, offline, powered_down, rebooting, snapping, powering_down, reinitializing, pausing, paused, upgrade_quiescing, upgrade) yes n/a Current operational state of the realm
state_flags array of RealmStateFlag (offline, paused, upgrade, ure_default, log_sizing_bad) yes n/a Active realm state flags
volume_layout_type_default RaidType (raid6+, raid5+, raid10+, raid5, raid10, default) yes n/a Default volume RAID layout type
volume_max_vols_realm integer yes n/a Maximum number of volumes in the realm
volume_recovery_priority_default integer yes n/a Default volume recovery priority

Example

{
   "boot_epoch_seconds" : 0,
   "clientmode_current" : "balanced",
   "clientmode_next" : "balanced",
   "data_generation" : 6,
   "heartbeat_failure_grace_seconds" : 30,
   "heartbeat_period_seconds" : 30,
   "id" : "a538deadbeef0001889abcdef1234567",
   "locked" : false,
   "log_sizing" : "12g",
   "mem_sizing_current" : 1,
   "mem_sizing_next" : 1,
   "mia_timer" : 360,
   "name" : "exp-aic-97-5",
   "panfs_mounted" : true,
   "president_flags" : [
      "settled_storage",
      "settled_mgr"
   ],
   "state" : "online",
   "state_flags" : [],
   "volume_layout_type_default" : "raid6+",
   "volume_max_vols_realm" : 1200,
   "volume_recovery_priority_default" : 50
}

RealmClientMode

Realm client modes.

Allowed values: invalid, balanced, favor_df

RealmLockActionRequest

Request to lock the realm (prevent new nodes from joining via PanDHCP).

Field Type Required Default Example Description
action literal lock yes n/a The action to perform on the realm.
params null (not used) no n/a

RealmLogSizing

Realm log sizing options.

Allowed values: invalid, 4g, 12g, dm1, custom_1, custom_2, custom_3, custom_4, custom_5, current

RealmMoveServiceActionParams

Parameters for moving a service to a different director node.

Field Type Required Default Example Description
node_dataserial string yes n/a 50f6dd3e7103a9, 253d193e710424 Dataserial of the destination director node that will host the service.
service_id string yes n/a 0x0400000000000004, 0x0400000000000005 Hexadecimal manager id of the service to move, e.g. “0x0400000000000004”. A volume service’s volume_service_id (from the volumes API) is one such id.
service_type ServiceInstance (primary, backup) yes n/a primary, backup Which service instance to move: “primary” (live failover) or “backup” (standby).

RealmMoveServiceActionRequest

Request to move a service to a different director node.

Field Type Required Default Example Description
action literal move_service yes n/a The action to perform on the realm.
params RealmMoveServiceActionParams object yes n/a Parameters identifying the service to move and its destination node.

RealmOfflineActionParams

Parameters for the offline realm action.

Field Type Required Default Example Description
mode RealmOfflineMode (paused, unavailable) no paused paused, unavailable How to take the realm offline. paused performs a graceful drain; unavailable makes volumes inaccessible immediately. Defaults to paused.

RealmOfflineActionRequest

Request to take the realm offline.

Field Type Required Default Example Description
action literal offline yes n/a The action to perform on the realm.
params RealmOfflineActionParams object no n/a Parameters for taking the realm offline.

RealmOfflineMode

Mode for the offline realm action.

Allowed values: paused, unavailable

RealmOnlineActionRequest

Request to bring the realm online.

Field Type Required Default Example Description
action literal online yes n/a The action to perform on the realm.
params null (not used) no n/a

RealmPresidentFlag

Realm president flags.

Allowed values: settled_storage, settled_mgr, vsm_backup_rebal

RealmRebootActionRequest

Request to reboot the realm.

Field Type Required Default Example Description
action literal reboot yes n/a The action to perform on the realm.
params null (not used) no n/a

RealmRehomeRootActionParams

Parameters required to reassign the realm root volume to a different StorageSet.

Field Type Required Default Example Description
raid_type VolumeLayout (raid6+, raid5+, raid10+, raid5, raid10) no raid6+ raid6+, raid5+, raid10+ RAID layout for the new realm root volume. Defaults to raid6+ when omitted.
storageset_id integer yes n/a 1, 3, 5 Identifier of the StorageSet that will host the new realm root volume.

RealmRehomeRootActionRequest

Request to reassign the realm root volume to a different StorageSet.

Field Type Required Default Example Description
action literal rehome_root yes n/a The action to perform on the realm.
params RealmRehomeRootActionParams object yes n/a Parameters required to reassign the realm root volume to a different StorageSet.

RealmResponse

Response wrapper for realm, plus the API host’s timezone.

Field Type Required Default Example Description
realm Realm object yes n/a Realm details
server_tzone string yes n/a America/Los_Angeles, UTC IANA timezone name of the API server’s host (e.g. ‘America/Los_Angeles’).

Example

{
   "realm" : {
      "boot_epoch_seconds" : 0,
      "clientmode_current" : "balanced",
      "clientmode_next" : "balanced",
      "data_generation" : 6,
      "heartbeat_failure_grace_seconds" : 30,
      "heartbeat_period_seconds" : 30,
      "id" : "a538deadbeef0001889abcdef1234567",
      "locked" : false,
      "log_sizing" : "12g",
      "mem_sizing_current" : 1,
      "mem_sizing_next" : 1,
      "mia_timer" : 360,
      "name" : "exp-aic-97-5",
      "panfs_mounted" : true,
      "president_flags" : [
         "settled_storage",
         "settled_mgr"
      ],
      "state" : "online",
      "state_flags" : [],
      "volume_layout_type_default" : "raid6+",
      "volume_max_vols_realm" : 1200,
      "volume_recovery_priority_default" : 50
   },
   "server_tzone" : "America/Los_Angeles"
}

RealmSegmentTypeRequest

Set the network segment type new subnets are placed on.

Field Type Required Default Example Description
segment_type one of: vlan, vxlan yes n/a vlan, vxlan The segment type new subnets are placed on.

Example

{
   "segment_type" : "vlan"
}

RealmSegmentTypeResponse

The network segment type every new subnet of this realm is placed on.

Realm-wide rather than a property of any subnet, so it answers before the first one exists, which is what a client building a create request needs.

Field Type Required Default Example Description
segment_type SubnetSegmentType (none, vlan, vxlan) yes n/a vxlan, vlan, none The segment type a new subnet is placed on. vlan carries a VLAN ID in segment_id and vxlan a VNI. none is the realm naming no segment at all, which is a state to report rather than an error: a create on such a realm is refused, with a reason.

Example

{
   "segment_type" : "vxlan"
}

RealmState

Realm operational states.

Allowed values: invalid, unknown, online, going_offline, offline, powered_down, rebooting, snapping, powering_down, reinitializing, pausing, paused, upgrade_quiescing, upgrade

RealmStateFlag

Realm state flags.

Allowed values: offline, paused, upgrade, ure_default, log_sizing_bad

RealmUnlockActionRequest

Request to unlock the realm (re-enable PanDHCP joins).

Field Type Required Default Example Description
action literal unlock yes n/a The action to perform on the realm.
params null (not used) no n/a

Resource

RBAC-protected resources.

Allowed values: tenants, storagesets, nodes, hardware, volumes, subnets, attachments, users, service-accounts, s3-config, s3-instances, fs-users, s3-buckets, s3-admin, s3-reconcile-state, realm, observability, observability-realm, roles, tokens

RolesResponse

The current role set of a principal, returned by every GET and PATCH on a roles route.

Field Type Required Default Example Description
roles array of string yes n/a ["admin"] Roles currently bound to the principal.

S3AggregatorConfigSchema

Per-tenant tenant-level aggregator policy.

Opt-in, and defaulting to off. The per-instance endpoints are the tenant’s data plane: the same fixed port on every node, inside the tenant’s own network namespace, on a subnet its clients are already attached to. enabled=true adds an agg_<uuid> frontend and backend on each director, scoped to the tenant namespace.

There is no port field. The aggregator binds a fixed realm-wide port inside that namespace, so there is nothing to allocate or report.

Field Type Required Default Example Description
enabled boolean no false Whether the tenant-level S3 aggregator is generated for this tenant.

Example

{
   "enabled" : false
}

S3BucketCreateRequest

Request payload for creating an S3 bucket.

Field Type Required Default Example Description
name string yes n/a Bucket name.
owner string yes n/a S3 access_key of the PanFS user the bucket belongs to. Required, and must name a PanFS user in this tenant: the gateway resolves the owner through its IAM backend, so a value that is not a PanFS user cannot be resolved there at all.

Example

{
   "name" : "my-bucket",
   "owner" : "alice"
}

S3BucketSchema

S3 bucket data model for API responses.

owner names a PanFS user, by access key. It is not an authorization input: deletion is governed by s3-buckets:delete and ownership is not consulted, matching S3’s own s3:DeleteBucket semantics. It is the owner in the bucket’s ACL on the gateway, which the create sets, so the owning user holds the bucket creator’s rights.

The caller is a control-plane principal and has no S3 identity of its own, which is why the owner is named in the request rather than derived from whoever made it.

Field Type Required Default Example Description
name string yes n/a Bucket name.
owner string no (empty string) S3 access_key of the PanFS user the bucket belongs to, as the bucket ACL on the gateway records it. Empty string for a bucket whose ACL names no owner.

S3ConfigCreateRequest

Request payload for creating a tenant’s S3 configuration.

Every field carries a default, so PUT /s3 {} is a complete request: it creates the disabled config with the empty prefix and the POSIX defaults a tenant starts with. Those defaults live here rather than in a factory beside the service, because this is the only place that can publish them - an operator reading the API document sees what an omitted field will be, and there is no second copy to drift from it.

access_key, secret_key and control_plane have no field here at all; :mod:app.use_cases.create_s3_config mints all three.

Field Type Required Default Example Description
access_log boolean no true Whether the S3 access log is enabled for this tenant (the S3 gateway’s –access-log audit log). Defaults to true.
aggregator S3AggregatorConfigSchema object no n/a Tenant-level S3 aggregator policy (opt-in via enabled=true).
debug_log boolean no false Whether the S3 debug request log is enabled for this tenant. Defaults to false.
default_dir_mode string no 755 755, 0755 Default directory permission mode in octal (e.g. 755).
default_group string no gid:65534 gid:65534, gid:1000 Default POSIX group for objects (e.g. gid:65534). An fs-user created without a gid takes it. gid:65534 (nogroup) is the unset value; an empty string is not accepted.
default_obj_mode string no 644 644, 0644 Default object/file permission mode in octal (e.g. 644).
default_owner string no uid:65534 uid:65534, uid:1000 Default POSIX owner for objects (e.g. uid:65534). An fs-user created without a uid takes it. uid:65534 (nobody) is the unset value; an empty string is not accepted.
default_prefix string no (empty string) /vol1, /vol1/data Tenant-relative path served by S3 (e.g. /vol1 or /vol1/data). Must name an existing volume of the tenant (or a directory inside one); stored resolved into the tenant volume namespace. Optional: omit it to create the config before the tenant has a volume to serve. The empty value skips volume validation and cannot be enabled until a real prefix is set by PATCH.
dns S3DnsConfigSchema object no n/a DNS/named-access policy (default mode=off).
enabled boolean no false Whether S3 access is enabled for this tenant.
metrics_enabled boolean no true Whether S3 metrics are collected for this tenant (the S3 gateway’s StatsD counters to the node-local Telegraf listener). Defaults to true.
tls S3TlsConfigSchema object no n/a TLS configuration for the S3 gateway.

Example

{
   "aggregator" : {
      "enabled" : false
   },
   "default_dir_mode" : "755",
   "default_group" : "gid:65534",
   "default_obj_mode" : "644",
   "default_owner" : "uid:65534",
   "default_prefix" : "/vol1/t1",
   "enabled" : true,
   "tls" : {}
}

S3ConfigPatchRequest

Request payload for partially updating a tenant’s S3 configuration.

At least one field must be provided. Null values are not allowed - omit fields that should not change.

Field Type Required Default Example Description
access_log boolean, nullable no null Whether the S3 access log is enabled for this tenant.
aggregator S3AggregatorConfigSchema object, nullable no null Tenant-level S3 aggregator policy (opt-in via enabled=true).
debug_log boolean, nullable no null Whether the S3 debug request log is enabled for this tenant.
default_dir_mode string, nullable no null Default directory permission mode in octal.
default_group string, nullable no null Default POSIX group for objects. To unset it, send gid:65534 (nogroup), the value a new config starts with; an empty string is not accepted.
default_obj_mode string, nullable no null Default object/file permission mode in octal.
default_owner string, nullable no null Default POSIX owner for objects. To unset it, send uid:65534 (nobody), the value a new config starts with; an empty string is not accepted.
default_prefix string, nullable no null Tenant-relative path served by S3. Must name an existing volume of the tenant (or a directory inside one); immutable while the tenant has S3 enabled.
dns S3DnsConfigSchema object, nullable no null DNS/named-access policy (mode off/panfs/external).
enabled boolean, nullable no null Whether S3 access is enabled for this tenant.
metrics_enabled boolean, nullable no null Whether S3 metrics are collected for this tenant.
tls S3TlsConfigSchema object, nullable no null TLS configuration for the S3 gateway.

Example

{
   "default_prefix" : "/vol1/t1",
   "enabled" : false
}

S3ConfigSchema

S3 configuration data model for API responses.

The tenant-root access_key/secret_key are not returned by this API at all, neither in full nor redacted: they are the gateway’s own administrator account, internal to PanFS. tls.private_key is the one value still redacted rather than dropped - it has a field because a tenant supplies it, so the response has to say whether one is set.

That is what makes s3-config:view an ordinary read, held by the read-only platform roles like any other: it describes a configuration and hands over no credential at all.

Field Type Required Default Example Description
access_log boolean no true Whether the S3 access log is enabled for this tenant.
aggregator S3AggregatorConfigSchema object yes n/a Tenant-level S3 aggregator policy.
debug_log boolean no false Whether the S3 debug request log is enabled for this tenant.
default_dir_mode string yes n/a Default directory permission mode in octal.
default_group string yes n/a Default POSIX group for objects.
default_obj_mode string yes n/a Default object/file permission mode in octal.
default_owner string yes n/a Default POSIX owner for objects.
default_prefix string yes n/a Filesystem path served by S3.
enabled boolean yes n/a Whether S3 access is enabled for this tenant.
metrics_enabled boolean no true Whether S3 metrics are collected for this tenant.
tls S3TlsConfigResponseSchema object yes n/a TLS configuration for the S3 gateway.

Example

{
   "aggregator" : {
      "enabled" : false
   },
   "default_dir_mode" : "755",
   "default_group" : "gid:65534",
   "default_obj_mode" : "644",
   "default_owner" : "uid:65534",
   "default_prefix" : "/vol1/t1",
   "enabled" : true,
   "tls" : {
      "ca_certificate" : "-----BEGIN CERTIFICATE-----\n...",
      "certificate" : "-----BEGIN CERTIFICATE-----\n...",
      "mode" : "realm-generated",
      "private_key" : "***"
   }
}

S3ConfigUpdateResponse

What a PATCH of the S3 config could not apply to the gateways already running.

It is a body so the answer travels in the OpenAPI document and through a JSON client, which is what a header or a log line could not do. An empty list is the ordinary case and is a positive statement - every change this request made is in effect now.

restart_required names the fields this request actually changed whose new value a running gateway will only pick up when it is restarted - never the tenant’s other standing configuration, and never a field re-sent at the value it already held. A tenant with no started instance always answers []: there is nothing holding the old values. Which instances those are is deliberately not repeated here - GET /tenants/{tenant_id}/s3/instances already answers that, and a second copy could disagree with it.

Field Type Required Default Example Description
restart_required array of string yes n/a Names of S3 config fields this request changed whose new value reaches already-running S3 gateway instances only after those instances are restarted. Empty when every change is in effect now, when the request changed nothing, or when the tenant has no started instance. The set of names can change between releases.

Example

{
   "restart_required" : [
      "access_log",
      "debug_log"
   ]
}

S3CredentialsRevealResponse

Everything the S3 gateway needs to build an auth.Account from an access key.

Field Type Required Default Example Description
access_key string yes n/a The access key that was resolved.
gid integer yes n/a POSIX group id objects written by this user are owned by.
profile S3Profile (disabled, user, privileged) yes n/a S3 access profile. The gateway maps it to a role: privileged carries bucket-creation rights, anything else is an ordinary user.
secret_key string yes n/a Plaintext S3 secret key.
uid integer yes n/a POSIX user id objects written by this user are owned by.

Example

{
   "access_key" : "alice",
   "gid" : 65534,
   "profile" : "user",
   "secret_key" : "7f9a3d2e8c1b4a6f0d5e2c8b9f1a3d7e",
   "uid" : 65534
}

S3DnsConfigSchema

Per-tenant DNS / named-access policy.

mode selects whether the realm publishes DNS records; it is never a precondition for reachability (every endpoint is reachable by IP:port) and drives no routing:

  • off (default): IP:port only - no DNS records.
  • panfs: pan_dns_server publishes the aggregator + per-instance records. Not supported for a tenant other than the platform tenant, and refused with 400: the realm DNS server cannot publish addresses on a tenant subnet.
  • external: the customer runs their own DNS at the tenant’s addresses; PanFS publishes nothing.
Field Type Required Default Example Description
mode S3DnsMode (off, panfs, external) no off DNS/named-access mode: off (default), panfs, or external. panfs is supported for the platform tenant only; any other tenant is refused with 400.

Example

{
   "mode" : "off"
}

S3DnsMode

Per-tenant DNS / named-access mode.

DNS records are optional, never a precondition for reachability - every endpoint is reachable by IP:port in all modes, and no mode drives routing. The mode is tenant-scoped (the aggregator apex is a tenant name; per-instance names are derived subdomains).

Allowed values: off, panfs, external

S3EnabledRequest

Request body for PUT /s3/enabled.

Field Type Required Default Example Description
enabled boolean yes n/a Realm-wide S3 enable flag.

Example

{
   "enabled" : true
}

S3EnabledResponse

Response body for GET /s3/enabled and PUT /s3/enabled.

When PUT disables S3 at the realm level while at least one tenant still has tenant-level S3 enabled, warning carries a human- readable message and tenants_with_s3_enabled lists the short names of the offending tenants. Both fields are absent on GET and on PUT-enable.

Field Type Required Default Example Description
enabled boolean yes n/a Realm-wide S3 enable flag.
tenants_with_s3_enabled array of string, nullable no null Tenant short names that still have tenant-level S3 enabled after the realm-wide disable. Absent on get and on enable.
warning string, nullable no null Warning surfaced when realm-disable leaves tenants with S3 enabled.

Example

{
   "enabled" : false,
   "tenants_with_s3_enabled" : [
      "tn1"
   ],
   "warning" : "1 tenant(s) still have S3 enabled at the tenant level"
}

S3InstanceCreateRequest

Create a new S3 gateway instance for a tenant on a specific node.

Field Type Required Default Example Description
dataserial string yes n/a Target node’s dataserial (14 hex chars) as returned by GET /nodes and consumed by every /nodes/{dataserial} endpoint (e.g. 08823f71a1eecc). The stable placement identity - unaffected by node renames.
instance_id string yes n/a Instance identifier: exactly 5 alphanumeric characters (D10).

Example

{
   "dataserial" : "08823f71a1eecc",
   "instance_id" : "abc12"
}

S3InstanceCreateResponse

Response body for a successful instance create.

Field Type Required Default Example Description
instance S3InstanceSchema object yes n/a Desired-state view of an S3 gateway instance.

S3InstanceFanoutResponse

Aggregate body for fan-out verbs (start / stop / delete / show).

aggregate_status reflects the worst-case per-node outcome. Callers that want a single success/failure signal should inspect this field; detail-level consumers should walk results.

Field Type Required Default Example Description
aggregate_status integer yes n/a Aggregate HTTP status: the rows’ shared success code (202 for a recorded state change, 200 for a read) if every node succeeded, the shared error code if every node failed with the same code, otherwise 207. delete-all answers 200 once every instance is gone, and start-all/stop-all answer 200 with no results for a tenant with no instances.
confirmed boolean no true For delete fan-out, true once the caller has confirmed the destructive operation. When false, the request body enumerates matches without deleting anything.
results array of S3InstancePerNodeResult object yes n/a

S3InstanceHealthSchema

Observed/health view merged in by the reader path.

Field Type Required Default Example Description
consecutive_failures integer yes n/a
last_error string, nullable no null
last_seen_ts integer, nullable yes n/a When a probe last reached the gateway (epoch seconds); null until one has.
restart_count_60s integer yes n/a

S3InstanceListResponse

Response body for list and fan-out operations.

Field Type Required Default Example Description
instances array of S3InstanceViewSchema object yes n/a

S3InstancePerNodeResult

Per-node outcome inside a fan-out response body (D10).

status is the HTTP status the call would have returned if it had targeted this single node; error carries the detail message on non-2xx cases. instance is populated on read verbs; null for start/stop/delete outcomes, which record the new desired state without waiting for the instance to reach it (show the instance for its observed state). data_serial identifies the target node.

Field Type Required Default Example Description
data_serial string yes n/a
error string, nullable no null
instance S3InstanceViewSchema object, nullable no null
status integer yes n/a Per-node HTTP status (200, 202, 404, 409, 503, …).

S3InstanceSchema

Desired-state view of an S3 gateway instance.

Field Type Required Default Example Description
created_at integer yes n/a
data_serial string yes n/a
desired string yes n/a created | started | stopped | deleting
instance_id string yes n/a
last_transition_at integer yes n/a
module_instance_token string yes n/a

S3InstanceViewSchema

Merged desired + observed/health row returned by list/show.

Field Type Required Default Example Description
desired S3InstanceSchema object yes n/a Desired-state view of an S3 gateway instance.
dns_name string, nullable no null Optional DNS endpoint https://.s3-., populated only when the tenant has dns.mode=panfs.
endpoint string, nullable no null Primary S3 endpoint as https://:3000; null when the hosting node holds no address on the tenant subnet.
health S3InstanceHealthSchema object, nullable no null Null when the observed state could not be read: nothing was measured.
last_health_transition_at integer, nullable no null When observed last changed (epoch seconds); null when it could not be read or is not yet known.
observed string yes n/a unknown | starting | running | unresponsive | crashloop | stopped; unknown, with observed_reason, when the hosting node has no provider for the instance yet or cannot be reached.
observed_reason string, nullable no null Why PanAPI could not read the instance’s observed state, when observed is unknown for that reason. Never the gateway’s own error, which is health.last_error.
tenant_id string yes n/a

S3PrefixRequest

Request body for PUT /s3/prefix.

Field Type Required Default Example Description
prefix string yes n/a Realm-wide POSIX-style path prefix. Empty string means “no realm-wide prefix”; otherwise the value MUST begin with “/” and MUST NOT contain trailing whitespace.

Example

{
   "prefix" : "/realm-root"
}

S3PrefixResponse

Response body for GET /s3/prefix and PUT /s3/prefix.

Field Type Required Default Example Description
prefix string yes n/a Current realm-wide path prefix.

Example

{
   "prefix" : "/realm-root"
}

S3Profile

S3 access profile of a PanFS user.

  • DISABLED - credentials are stored but the reveal endpoint returns 404 (which the S3 gateway maps to auth.ErrNoSuchUser).
  • USER - S3 gateway role=user.
  • PRIVILEGED - S3 gateway role=userplus (bucket-creation rights). The operator-facing profile name is privileged; the gateway-internal role string it maps to stays userplus.

This docstring is published as the enum’s description in the OpenAPI document, so it says what a caller may choose and nothing else.

Allowed values: disabled, user, privileged

S3TlsConfigResponseSchema

TLS settings as returned by GET /tenants/{tid}/s3.

Same fields as the TLS settings accepted on write, but with private_key redacted, so the response body never carries the tenant TLS private key in plaintext.

Field Type Required Default Example Description
ca_certificate string, nullable no null PEM-encoded CA certificate.
certificate string, nullable no null PEM-encoded server certificate.
mode S3TlsMode (realm-generated, tenant-provided) no realm-generated Source of the tenant-wide S3 edge cert.
private_key string, nullable no null PEM-encoded private key. Redacted to *** on response when present; null when no key is configured.

Example

{
   "ca_certificate" : "-----BEGIN CERTIFICATE-----\n...",
   "certificate" : "-----BEGIN CERTIFICATE-----\n...",
   "mode" : "realm-generated",
   "private_key" : "***"
}

S3TlsConfigSchema

Tenant-wide TLS material for the S3 gateway.

The S3 data plane is always TLS-terminated. A single cert+key is served by the whole tenant S3 surface (the aggregator frontend and every per-instance endpoint), whatever SNI the client sends.

mode selects the cert source explicitly - never inferred from the presence of cert material:

  • realm-generated (default): the realm mints the cert and stores it, with the SANs *.s3-<short>.<zone>, s3-<short>.<zone> when the aggregator is on, and the addresses on the tenant’s subnets of the nodes that serve it. The request body MUST NOT carry cert material in this mode.
  • tenant-provided: the tenant supplies certificate and private_key (and optionally ca_certificate); the realm validates them at config-set. The cert carries the names and addresses its clients use; only with dns.mode=panfs must it also carry the names the realm publishes (*.s3-<short>.<zone>, plus s3-<short>.<zone> when the aggregator is on).
Field Type Required Default Example Description
ca_certificate string, nullable no null PEM-encoded CA certificate.
certificate string, nullable no null PEM-encoded server certificate.
mode S3TlsMode (realm-generated, tenant-provided) no realm-generated Explicit source of the tenant-wide S3 edge cert: realm-generated (the realm mints it) or tenant-provided (tenant supplies the cert+key).
private_key string, nullable no null PEM-encoded private key.

Example

{
   "ca_certificate" : "-----BEGIN CERTIFICATE-----\n...",
   "certificate" : "-----BEGIN CERTIFICATE-----\n...",
   "mode" : "tenant-provided",
   "private_key" : "-----BEGIN PRIVATE KEY-----\n..."
}

S3TlsMode

Explicit source of the tenant-wide S3 edge cert.

The cert source is an explicit, tenant-wide choice - never inferred from the presence of cert material. A single cert+key in the blob is served by the whole tenant S3 surface in both modes; the mode decides who produced the bytes, and with it which names the cert must carry ().

Allowed values: realm-generated, tenant-provided

ServiceAccountCreateRequest

Request to create a service account.

Field Type Required Default Example Description
description string, nullable no null What this account is for. Newlines and tabs are allowed; other control characters are not.
display_name string, nullable no null Human-readable label. Control and invisible characters are not allowed.
name string yes n/a Unique name within the tenant, 4-30 characters of lowercase letters, digits and hyphens, starting with a letter. Identifies the account wherever it appears; it cannot be changed afterwards.

Example

{
   "display_name" : "Nightly CI",
   "name" : "ci-nightly"
}

ServiceAccountListResponse

Every service account in the caller’s tenant, newest first.

Field Type Required Default Example Description
service_accounts array of ServiceAccountResponse object yes n/a The accounts.
total integer yes n/a How many accounts are listed.

ServiceAccountResponse

One service account.

Field Type Required Default Example Description
created_at string (date-time) yes n/a When the account was created.
created_by string (uuid) yes n/a The user that created it.
description string, nullable no null What this account is for.
display_name string, nullable no null Human-readable label.
id string (uuid) yes n/a Identifier of the service account.
name string yes n/a Unique name within the tenant, 4-30 characters of lowercase letters, digits and hyphens, starting with a letter. Identifies the account wherever it appears; it cannot be changed afterwards.
updated_at string (date-time) yes n/a When the account was last changed.

ServiceAccountUpdateRequest

Request to update a service account. Only the fields present are applied.

Field Type Required Default Example Description
description string, nullable no null What this account is for. Newlines and tabs are allowed; other control characters are not.
display_name string, nullable no null Human-readable label. Control and invisible characters are not allowed.

Example

{
   "description" : "Nightly backup runner"
}

ServiceInstance

Which instance of a service the move_service action targets.

Allowed values: primary, backup

SetRolesRequest

Request payload for replacing the full role set of a Tenant User.

Field Type Required Default Example Description
roles array of string yes n/a ["admin"] Roles to assign to the user; replaces the current set. A role the target tenant does not define, or a reserved one, is rejected with HTTP 400.

StorageSet

StorageSet for list/detail responses.

Only fields relevant for the API response are included; more can be added in future versions.

Field Type Required Default Example Description
capacity_balancing boolean yes n/a Whether automatic capacity balancing across nodes is enabled
encrypted boolean yes n/a Whether the StorageSet encrypts data at rest
fips_mode boolean yes n/a Whether the StorageSet operates in FIPS mode
id integer yes n/a StorageSet ID
mlec boolean yes n/a Whether Multi-Level Erasure Coding is enabled. Fixed when the StorageSet is created
name string yes n/a StorageSet name
nodes_not_responding integer yes n/a Number of offline nodes/OSDs that are unreachable with a recovery timer still running
nodes_offline integer yes n/a Number of nodes/OSDs not online for any reason. Includes nodes_not_responding
nodes_online integer yes n/a Number of nodes/OSDs currently online in this StorageSet
nodes_reconstructing integer yes n/a Number of nodes/OSDs with a pending data rebuild, whether or not they are online
nodes_total integer yes n/a Total number of nodes/OSDs assigned to this StorageSet
spares_available integer yes n/a Current number of spare units available for reconstruction
spares_requested integer yes n/a Configured number of requested spare units
state StorageSetState object yes n/a Conditions the StorageSet currently holds, and their severity.
topology_aware_placement boolean yes n/a Whether objects are placed with the enclosure topology in mind
ure_default boolean yes n/a Whether the StorageSet uses the default unrecoverable-read-error handling
vhosts_total integer yes n/a Total number of virtual storage hosts assigned to this StorageSet

Example

{
   "capacity_balancing" : true,
   "encrypted" : false,
   "fips_mode" : false,
   "id" : 1,
   "mlec" : false,
   "name" : "Set 1",
   "nodes_not_responding" : 0,
   "nodes_offline" : 0,
   "nodes_online" : 6,
   "nodes_reconstructing" : 0,
   "nodes_total" : 6,
   "spares_available" : 2,
   "spares_requested" : 2,
   "state" : {
      "conditions" : [],
      "status" : "ok"
   },
   "topology_aware_placement" : false,
   "ure_default" : false,
   "vhosts_total" : 6
}

StorageSetAddStorageActionRequest

Request to perform an add_storage action on a StorageSet.

Field Type Required Default Example Description
action literal add_storage yes n/a The action to perform on the storageset.
params StorageSetAddStorageParams object yes n/a Parameters required to perform the add_storage action.

StorageSetAddStorageMode

Operation mode for add_storage action.

Allowed values: add_spare, migration

StorageSetAddStorageParams

Parameters for the add_storage action on a StorageSet.

Supports two modes: - add_spare: Expand capacity and adjust spare storage node count - migration: Add storage to help drain another enclosure

Dataserials are storage nodes (OSDs/VPODs) by name or serial. If not specified, all unassigned nodes are added.

Field Type Required Default Example Description
dataserials array of string no n/a List of dataserial names or serial numbers (OSD and VPOD nodes) to add. If omitted or provided as an empty list ([]), the behavior is the same: all unassigned OSD and VPOD nodes in the system are added.
mode StorageSetAddStorageMode (add_spare, migration) yes n/a Operation mode: “add_spare” to expand capacity while adjusting spare storage nodes, “migration” to add storage for draining another enclosure
spares_requested integer, nullable no null For add_spare mode: count of spare storage nodes to add (0 or greater). A value of 0 means add zero spare nodes, keeping the current spare count unchanged. For migration mode: must not be provided (omit from request). Providing this field in migration mode will fail validation.

StorageSetAlertStatus

Active-alert presence for one storage set.

Feeds the storage-set status badge, which the frontend computes by combining this with the set’s node/spare counts. Only sets carrying at least one active PanFS alert appear in the response; absence means “no alerts”.

Field Type Required Default Example Description
has_critical boolean yes n/a At least one active critical/error alert.
has_warning boolean yes n/a At least one active warning alert.
storageset_name string yes n/a Storage set name as it appears in the alert message.

StorageSetAssignment

Storage set assignment with per-tenant quota.

Represents the allocation of a specific storage set to a tenant, including the maximum storage quota the tenant can consume within that storage set.

Field Type Required Default Example Description
quota_bytes integer yes n/a 2199023255552, 5497558138880 Maximum storage quota in bytes that the tenant can consume within this storage set.
storageset_id integer yes n/a 1, 2, 5 Identifier of the assigned storage set.
storageset_name string no (empty string) Set 1, Production Set Name of the assigned storage set, resolved server-side so tenant callers need no access to the platform storageset endpoints. Empty only if the storage set is no longer present on the cluster.

Example

{
   "quota_bytes" : 2199023255552,
   "storageset_id" : 1,
   "storageset_name" : "Set 1"
}

StorageSetCondition

A condition a storageset can be in. Several hold at once; each carries a status.

Allowed values: no_osds_assigned, activating, partly_offline, all_nodes_offline, reconstructing, spare_shortfall, recon_reserve_not_enough_osds, recon_reserve_not_enough_space

StorageSetCreateRequest

Request payload for creating a StorageSet.

Requires a unique StorageSet name. Optional parameters use system defaults when omitted.

Field Type Required Default Example Description
flags array of StorageSetFlag (ure_default, capacity_balancing_disabled, encrypted, fips_mode, topology_aware_placement, mlec) no n/a ["mlec"], [] Flags to set during StorageSet creation.
name string yes n/a Set 2, Production Set Unique display name of the StorageSet. Must be unique within the realm.
spares_requested integer no 2 2, 4, 6 Number of VPODs to be reserved for reconstruction within the new StorageSet. Default: 2.

Example

{
   "flags" : [
      "mlec"
   ],
   "name" : "Set 1",
   "spares_requested" : 4
}

StorageSetCreateResponse

Minimal response for successful StorageSet creation.

Returned on POST /storagesets to signal successful creation. Clients should fetch full details via GET /storagesets if needed.

Field Type Required Default Example Description
id integer yes n/a 1, 2, 3 Unique StorageSet identifier assigned by the system

Example

{
   "id" : 3
}

StorageSetFlag

Flags a client may set when creating a storageset. The realm’s own flags are read back as fields.

Allowed values: ure_default, capacity_balancing_disabled, encrypted, fips_mode, topology_aware_placement, mlec

StorageSetGetResponse

Detailed view of a single StorageSet.

Field Type Required Default Example Description
storageset StorageSet object yes n/a StorageSet entity with all available details.

Example

{
   "storageset" : {
      "capacity_balancing" : true,
      "encrypted" : false,
      "fips_mode" : false,
      "id" : 1,
      "mlec" : false,
      "name" : "Set 1",
      "nodes_not_responding" : 0,
      "nodes_offline" : 0,
      "nodes_online" : 6,
      "nodes_reconstructing" : 0,
      "nodes_total" : 6,
      "spares_available" : 2,
      "spares_requested" : 2,
      "state" : {
         "conditions" : [],
         "status" : "ok"
      },
      "topology_aware_placement" : false,
      "ure_default" : false,
      "vhosts_total" : 6
   }
}

StorageSetListResponse

Collection response for StorageSet list operations.

Field Type Required Default Example Description
storagesets array of StorageSet object no n/a Array of StorageSet objects
total integer yes n/a 1, 5, 10 Total count of StorageSets in this response.

Example

{
   "storagesets" : [
      {
         "capacity_balancing" : true,
         "encrypted" : false,
         "fips_mode" : false,
         "id" : 1,
         "mlec" : false,
         "name" : "Set 1",
         "nodes_not_responding" : 0,
         "nodes_offline" : 0,
         "nodes_online" : 6,
         "nodes_reconstructing" : 0,
         "nodes_total" : 6,
         "spares_available" : 2,
         "spares_requested" : 2,
         "state" : {
            "conditions" : [],
            "status" : "ok"
         },
         "topology_aware_placement" : false,
         "ure_default" : false,
         "vhosts_total" : 6
      }
   ],
   "total" : 1
}

StorageSetPatchRequest

Request payload for updating an existing StorageSet via PATCH.

Field Type Required Default Example Description
capacity_balancing_disabled boolean, nullable no null true, false True to disable capacity balancing (set flag), False to enable it (clear flag).
name string, nullable no null Set 3, Production Set Updated StorageSet name. Must be unique within the realm.
spares_requested integer, nullable no null 1, 2, 4 Optional updated number of VPOD spares reserved for reconstruction. If provided, must be at least 1.

Example

{
   "capacity_balancing_disabled" : false,
   "name" : "Set 3",
   "spares_requested" : 3
}

StorageSetSpaceCapacity

Capacity bucket with total, free, and used bytes.

Field Type Required Default Example Description
free integer yes n/a 278234398720, 55650041856 Free (available) capacity in this bucket in bytes.
total integer yes n/a 333900152832, 278250110976 Total capacity of this bucket in bytes.
used integer yes n/a 15712256, 0 Used capacity in this bucket in bytes (total - free).

StorageSetSpaceResponse

Space usage response for a StorageSet.

Three capacity buckets: raw - overall physical capacity across all buckets. usable - capacity available for data storage. reserved - reconstruction reserve held for spare rebuilds.

Field Type Required Default Example Description
capacity_balancing_active boolean yes n/a true, false Whether automatic capacity balancing is currently active for this StorageSet.
node_count integer yes n/a 12, 6 Number of OSD nodes (storage blades) in this StorageSet.
raw StorageSetSpaceCapacity object yes n/a Overall physical capacity across all buckets in this StorageSet.
reserved StorageSetSpaceCapacity object yes n/a Reconstruction reserve capacity. Held for spare rebuilds; not available for regular data storage.
usable StorageSetSpaceCapacity object yes n/a Capacity available for data storage (usable bucket).
volume_hard_quota integer yes n/a 524288000, 0 Sum of hard quotas for all volumes in this StorageSet, in bytes. A create is reflected immediately; after a delete the RM releases the quota asynchronously, so this figure can briefly overstate the true sum.

Example

{
   "capacity_balancing_active" : true,
   "node_count" : 6,
   "raw" : {
      "free" : 333884440576,
      "total" : 333900152832,
      "used" : 15712256
   },
   "reserved" : {
      "free" : 55650041856,
      "total" : 55650041856,
      "used" : 0
   },
   "usable" : {
      "free" : 278234398720,
      "total" : 278250110976,
      "used" : 15712256
   },
   "volume_hard_quota" : 524288000
}

StorageSetState

Conditions a StorageSet currently holds, and the status they reduce to.

Field Type Required Default Example Description
conditions array of StorageSetCondition (no_osds_assigned, activating, partly_offline, all_nodes_offline, reconstructing, spare_shortfall, recon_reserve_not_enough_osds, recon_reserve_not_enough_space) no n/a ["partly_offline","reconstructing"], [] Every condition currently active. More than one can hold at a time; an empty list means “ok”.
status StorageSetStatus (ok, informational, warning, critical) yes n/a ok, warning Severity of the most severe active condition, ordered “ok” < “informational” < “warning” < “critical”. “ok” means no condition is active.

StorageSetStatus

Severity of a storageset’s worst active condition. Declared in ascending severity.

Allowed values: ok, informational, warning, critical

SubjectKind

What a token authenticates as.

Allowed values: user, service-account

Subnet

Subnet representation.

Field Type Required Default Example Description
addr_count integer no 0 Number of addresses bound to this subnet. Computed by the server.
addr_external boolean no false True when an outside allocator hands out the addresses. Fixed at create.
created_at string (date-time) yes n/a Creation timestamp (UTC).
gateway string, nullable no null Default gateway address, or null when none is configured.
id string (uuid) yes n/a Unique identifier of the subnet.
ip_range_base string yes n/a Base IP address of the subnet range (IPv4 or IPv6).
ip_range_prefix integer yes n/a CIDR prefix length.
mtu integer yes n/a Maximum transmission unit (0 means the platform default).
name string yes n/a Subnet name, unique per tenant.
range_end string, nullable no null Upper bound of the usable-address window, or null when the subnet has no window.
range_start string, nullable no null Lower bound of the usable-address window, or null when the subnet has no window.
segment_id integer no 0 Network segment identifier: a VLAN ID when segment_type is vlan and a VNI when it is vxlan. 0 means the identifier is unassigned. Bounded by 0-16777215, the wider of the two identifier spaces, so the document states the same ceiling a create request is held to. Fixed at create.
segment_type SubnetSegmentType (none, vlan, vxlan) no none Kind of network segment the subnet is placed on. The realm owns the choice, so this is returned and never accepted. Fixed at create.
tenant_id string (uuid) yes n/a UUID of the owning tenant, which is always a named tenant.
tunnel_udp_port integer no 0 UDP port carrying a tunnelled segment. 0 means unset, and the realm manager applies its own default. Bounded by 0-65535, the width of a UDP port. Fixed at create.
updated_at string (date-time) yes n/a Last-modification timestamp (UTC).

Example

{
   "addr_count" : 12,
   "addr_external" : false,
   "created_at" : "2026-06-29T12:00:00Z",
   "gateway" : "192.168.50.1",
   "id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
   "ip_range_base" : "192.168.50.0",
   "ip_range_prefix" : 24,
   "mtu" : 1450,
   "name" : "storage-net",
   "range_end" : "192.168.50.200",
   "range_start" : "192.168.50.10",
   "segment_id" : 10,
   "segment_type" : "vlan",
   "tenant_id" : "00000000-0000-0000-0000-000000000001",
   "tunnel_udp_port" : 0,
   "updated_at" : "2026-06-29T12:30:00Z"
}

SubnetCreateRequest

Request payload for creating a subnet.

Field Type Required Default Example Description
addr_external boolean no false false, true Selects the address-allocation model. False leaves PanFS managing the addresses, true hands that to an outside allocator. Fixed at create and cannot be changed afterwards.
gateway string, nullable no null 192.168.50.1, null Optional default gateway address, in the same family as ip_range_base.
ip_range_base string yes n/a 192.168.50.0, fd00:dead:beef:: Base IP address of the subnet range (IPv4 or IPv6).
ip_range_prefix integer yes n/a 24, 64 CIDR prefix length. 1-32 for IPv4, 1-128 for IPv6.
mtu integer no 0 0, 1450, 8950 The MTU of the subnet’s tenant interface on every realm node and every attached host. 0 selects the default, which is the realm’s primary network MTU less the encapsulation overhead (50 bytes on vxlan, 4 bytes on vlan): 1450 on vxlan over a 1500-byte primary network. Any other value, from 68 to 9216, has to leave that overhead within the primary network MTU. A larger one is refused with 400 naming the largest value that fits.
name string yes n/a storage-net, tenant_a-vlan10 Subnet name, unique per tenant. 3-31 chars from [A-Za-z0-9_-].
range_end string, nullable no null 192.168.50.200, null Upper bound of the usable-address window, which is the range the realm allocates its own node addresses from. Supply it together with range_start, or omit both and let the realm derive the window, as range_start describes.
range_start string, nullable no null 192.168.50.10, null Lower bound of the usable-address window, which is the range the realm allocates its own node addresses from. The window must hold at least as many addresses as the realm primary pool. A host attached from outside the realm is placed outside this window. Supply it together with range_end, or omit both and the realm derives the window from the first usable host, as deep as its primary pool, so the subnet as stored reports a window this request did not carry. The realm refuses with 400 when it cannot read that pool, and then the window has to be named. Nothing is derived for a subnet whose addresses an outside allocator owns.
segment_id integer no 0 0, 10, 100100 Network segment identifier: a VLAN ID when the realm runs 802.1Q and a VNI when it runs VXLAN. 0 leaves it unassigned. Otherwise the bound here is the wider of the two spaces, 1-16777215. The realm manager owns the narrower range that follows the realm segment type, and the uniqueness of the identifier across the realm. Fixed at create and cannot be changed afterwards.
tunnel_udp_port integer no 0 0, 4789 UDP port carrying a tunnelled segment, which is meaningful when the realm runs VXLAN. 0 leaves it unset and the realm manager applies its own default. Otherwise the bound is 1-65535. Fixed at create and cannot be changed afterwards.

Example

{
   "addr_external" : false,
   "gateway" : "192.168.50.1",
   "ip_range_base" : "192.168.50.0",
   "ip_range_prefix" : 24,
   "mtu" : 1450,
   "name" : "storage-net",
   "range_end" : "192.168.50.200",
   "range_start" : "192.168.50.10",
   "segment_id" : 10,
   "tunnel_udp_port" : 0
}

SubnetCreateResponse

Minimal response for successful subnet creation.

Field Type Required Default Example Description
id string (uuid) yes n/a Server-assigned unique identifier of the created subnet.

Example

{
   "id" : "36a8995f-026b-47e1-88bd-7fb9e7239995"
}

SubnetGetResponse

Detailed representation of a single subnet.

Field Type Required Default Example Description
subnet Subnet object yes n/a Subnet entity with all available details.

Example

{
   "subnet" : {
      "addr_count" : 12,
      "addr_external" : false,
      "created_at" : "2026-06-29T12:00:00Z",
      "gateway" : "192.168.50.1",
      "id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
      "ip_range_base" : "192.168.50.0",
      "ip_range_prefix" : 24,
      "mtu" : 1450,
      "name" : "storage-net",
      "range_end" : "192.168.50.200",
      "range_start" : "192.168.50.10",
      "segment_id" : 10,
      "segment_type" : "vlan",
      "tenant_id" : "00000000-0000-0000-0000-000000000001",
      "tunnel_udp_port" : 0,
      "updated_at" : "2026-06-29T12:30:00Z"
   }
}

SubnetListResponse

A collection of subnets with a total count.

Field Type Required Default Example Description
subnets array of Subnet object no n/a Array of subnet objects. Empty array if none are found.
total integer yes n/a 0, 1, 12 Total count of subnets returned.

Example

{
   "subnets" : [
      {
         "addr_count" : 12,
         "addr_external" : false,
         "created_at" : "2026-06-29T12:00:00Z",
         "gateway" : "192.168.50.1",
         "id" : "36a8995f-026b-47e1-88bd-7fb9e7239995",
         "ip_range_base" : "192.168.50.0",
         "ip_range_prefix" : 24,
         "mtu" : 1450,
         "name" : "storage-net",
         "range_end" : "192.168.50.200",
         "range_start" : "192.168.50.10",
         "segment_id" : 10,
         "segment_type" : "vlan",
         "tenant_id" : "00000000-0000-0000-0000-000000000001",
         "tunnel_udp_port" : 0,
         "updated_at" : "2026-06-29T12:30:00Z"
      }
   ],
   "total" : 1
}

SubnetPatchRequest

Request payload for updating a subnet via PATCH (partial update).

Only the supplied fields are modified, and a patch carrying no field at all is refused here, so it answers 422 with the same envelope every other patch schema uses. A field supplied as null is cleared, which is how a gateway is removed and how a usable window is withdrawn by clearing both of its endpoints. name and mtu carry no meaning when cleared, so an explicit null is refused for them.

addr_external is absent by design: the flag is fixed at create, and extra='forbid' refuses a request that carries it. The four network segment values are absent for the same reason, and a patch naming any of them is refused with that field in the error location.

Field Type Required Default Example Description
gateway string, nullable no null 192.168.50.254, null New default gateway address (IPv4 or IPv6). Null clears the gateway.
mtu integer, nullable no null 1450, 8950 New MTU. The MTU of the subnet’s tenant interface on every realm node and every attached host. 0 selects the default, which is the realm’s primary network MTU less the encapsulation overhead (50 bytes on vxlan, 4 bytes on vlan): 1450 on vxlan over a 1500-byte primary network. Any other value, from 68 to 9216, has to leave that overhead within the primary network MTU. A larger one is refused with 400 naming the largest value that fits.
name string, nullable no null
range_end string, nullable no null 192.168.50.220, null New upper bound of the usable-address window. Patchable on its own. Null clears it, and clearing both bounds together has the realm derive the window anew, as range_start describes.
range_start string, nullable no null 192.168.50.20, null New lower bound of the usable-address window. Patchable on its own, and the realm manager validates the resulting pair against the subnet CIDR. Null clears it. Clearing both bounds together has the realm derive the window anew, on the same terms a create naming none gets one, and is refused with 409 while a subnet the realm addresses itself has an attached host.

Example

{
   "gateway" : "192.168.50.254",
   "mtu" : 1500,
   "name" : "storage-net-2",
   "range_end" : "192.168.50.220",
   "range_start" : "192.168.50.20"
}

SubnetSegmentType

Kind of network segment a subnet is placed on.

The realm owns the choice, so a create request never names it. none means the realm named no type when the subnet was created.

  • none: the subnet’s segment is not described
  • vlan: 802.1Q, and the segment identifier is a VLAN ID
  • vxlan: VXLAN, and the segment identifier is a VNI

Allowed values: none, vlan, vxlan

Tenant

Core tenant data model.

Represents a tenant with all its attributes. Used as the inner model in response wrappers (GetTenantResponse, ListTenantResponse).

The two names are published the other way round from the domain: name is the handle the domain calls short_name, and display_name is the label the domain calls name. The aliases hold that mapping, so a domain object validates straight into this view.

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object yes n/a {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Tenant authentication settings.
created_at string (date-time) yes n/a 2026-03-02T12:00:00Z Tenant creation timestamp.
description string, nullable no null FinTech department tenant, Engineering team workspace Tenant description.
display_name string yes n/a FinTech, Engineering Human-readable tenant name.
email string yes n/a admin@fintech.example.com Tenant contact email address.
id string (uuid) yes n/a e97b94d6-9cc1-4325-a267-1064ae538ccd Tenant identifier (UUID).
name string yes n/a fintech, eng Tenant name used for volume mounting (3-10 alphanumeric characters).
status TenantStatus (pending, configuring, active, archived) yes n/a pending, configuring, active How far the tenant’s network has been provisioned, as the realm manager reports it on every read: pending owns no subnet, configuring owns subnets that hold no node address yet, and active carries at least one node address.
storageset_assignments array of StorageSetAssignment object no n/a List of storage sets assigned to the tenant, with per-set quotas and names.
updated_at string (date-time) yes n/a 2026-03-15T09:30:00Z Last update timestamp.

TenantCreateRequest

Request payload for creating a tenant.

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object yes n/a {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Tenant authentication settings. Discriminated on auth_mode.
description string, nullable no null FinTech department tenant, Engineering team workspace Tenant description.
display_name string yes n/a FinTech, Engineering, Data Science Human-readable tenant name. Must be 1-255 printable characters.
email string yes n/a admin@fintech.example.com, ops@vdura.example.com Tenant contact email address.
name string yes n/a fintech, eng, datasci Tenant name, used for volume mounting and as the prefix of a tenant-qualified username. Must be 3-10 alphanumeric characters and unique within the system. Stored in lower case. platform is reserved. Immutable after creation.

TenantCreateResponse

Minimal response for successful tenant creation.

Returned on POST /tenants to signal successful creation. Clients should fetch full details via GET /tenants/{tenant_id} if needed.

Field Type Required Default Example Description
id string (uuid) yes n/a e97b94d6-9cc1-4325-a267-1064ae538ccd Unique tenant identifier (UUID) assigned by the system

Example

{
   "id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd"
}

TenantPatchRequest

Request payload for updating a tenant via PATCH.

Allows partial updates. At least one field must be provided. Patchable fields: display_name, email, description, auth_settings. Tenant Admin can update display_name, email, description and auth_settings. name is the immutable handle and is not patchable.

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object, nullable no null {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Updated tenant authentication settings.
description string, nullable no null Updated tenant description, New department focus Updated tenant description.
display_name string, nullable no null FinTech Renamed, Engineering 2.0 Updated human-readable tenant name. Must be 1-255 printable characters.
email string, nullable no null admin@fintech.example.com Updated tenant contact email address.

TenantRole

One role of the tenant catalog: its id, and the actions it allows on each resource.

Field Type Required Default Example Description
id string yes n/a admin Role identifier, as sent and received on the roles endpoints.
permissions object no n/a Resource to the actions this role may perform on it.
reserved boolean no false false Whether the role is reserved: a reserved role cannot be assigned to or revoked from any principal through the API.

Example

{
   "id" : "admin",
   "permissions" : {
      "roles" : [
         "view",
         "update"
      ],
      "tenants" : [
         "view"
      ],
      "users" : [
         "list",
         "view",
         "create",
         "update",
         "delete"
      ],
      "volumes" : [
         "list",
         "view",
         "create",
         "update",
         "delete",
         "action"
      ]
   },
   "reserved" : false
}

TenantRolesResponse

Catalog of roles available on the current tenant.

Returned on GET /tenants/roles.

Field Type Required Default Example Description
roles array of TenantRole object no n/a Array of roles the tenant policy defines. Empty array if the policy defines none.
total integer yes n/a 2, 5 Total count of roles in this response.

Example

{
   "roles" : [
      {
         "id" : "admin",
         "permissions" : {
            "roles" : [
               "view",
               "update"
            ],
            "tenants" : [
               "view"
            ],
            "users" : [
               "list",
               "view",
               "create",
               "update",
               "delete"
            ],
            "volumes" : [
               "list",
               "view",
               "create",
               "update",
               "delete",
               "action"
            ]
         },
         "reserved" : false
      },
      {
         "id" : "s3-gateway",
         "permissions" : {
            "fs-users" : [
               "read-s3-secret",
               "list"
            ]
         },
         "reserved" : true
      }
   ],
   "total" : 2
}

TenantStatus

Tenant lifecycle statuses.

States: - PENDING: tenant owns no subnet - CONFIGURING: the tenant owns subnets and no node has taken an address on any of them - ACTIVE: at least one node holds an address on one of the tenant’s subnets - ARCHIVED: tenant deleted and its data removed, and only the archive entry remains

Allowed values: pending, configuring, active, archived

TenantStorageSetQuotaRequest

Request body for assigning or resizing a tenant storageset quota.

Field Type Required Default Example Description
quota_bytes integer yes n/a 2199023255552, 5497558138880 Maximum storage quota in bytes that the tenant can consume within this storageset.

Example

{
   "quota_bytes" : 2199023255552
}

TenantSummarySchema

Short tenant info visible to platform admin.

The display_name and email are returned only by GET /tenants/{tenant_id}, not in this list view.

Deleted tenants are not here at all: they have their own entity and their own endpoint, GET /tenants/archived.

Field Type Required Default Example Description
created_at string (date-time) yes n/a 2026-03-02T12:00:00Z Tenant creation timestamp.
description string yes n/a FinTech tenant Free-form tenant description.
id string (uuid) yes n/a e97b94d6-9cc1-4325-a267-1064ae538ccd Tenant identifier (UUID).
name string yes n/a fintech, eng Tenant name used for volume mounting.
status TenantStatus (pending, configuring, active, archived) yes n/a pending, configuring, active How far the tenant’s network has been provisioned, as the realm manager reports it on every read: pending owns no subnet, configuring owns subnets that hold no node address yet, and active carries at least one node address.
updated_at string (date-time) yes n/a 2026-03-02T12:00:00Z Tenant last-modification timestamp.

Example

{
   "created_at" : "2026-03-02T12:00:00Z",
   "description" : "FinTech tenant",
   "id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd",
   "name" : "fintech",
   "status" : "active",
   "updated_at" : "2026-03-02T12:00:00Z"
}

TenantSwitchRequest

Platform Admin request to exchange the current access token for a target-tenant one.

Field Type Required Default Example Description
tenant_id string (uuid) yes n/a e97b94d6-9cc1-4325-a267-1064ae538ccd Target tenant to act in.
ttl_minutes integer, nullable no null 60, 480 Requested lifetime in minutes. Clamped server-side to the supported range (30 minutes - 12 hours); the granted lifetime is returned in expires_in.

Example

{
   "tenant_id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd",
   "ttl_minutes" : 60
}

TokenResponse

Issued token pair returned by login and refresh endpoints.

Field Type Required Default Example Description
access_token string yes n/a Short-lived JWT access token.
expires_in integer yes n/a 3600 Access token lifetime in seconds.
refresh_token string yes n/a Long-lived JWT refresh token.
token_type literal bearer no bearer

User

Core Tenant User data model.

Represents a user account scoped to a single tenant. Used as the inner model in response wrappers (GetUserResponse, UserListResponse).

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object yes n/a {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Authentication backend for this user, discriminated on auth_mode.
created_at string (date-time) yes n/a When the user was created.
created_by string (uuid), nullable no null The user that created it. Null for the built-in admin, which the bootstrap seeds.
display_name string, nullable no null Alice Anderson Human-readable full name. Optional; username remains the unique handle.
email string, nullable no null alice@fintech.example.com Contact email for the Tenant User, or null if none is on file.
id string (uuid) yes n/a a1b2c3d4-e5f6-7890-abcd-ef1234567890 Tenant User identifier (UUID).
updated_at string (date-time) yes n/a When the user was last changed.
username string yes n/a alice Tenant User username.

Example

{
   "auth_settings" : {
      "auth_mode" : "local"
   },
   "created_at" : "2026-01-01T00:00:00Z",
   "display_name" : "Alice Anderson",
   "email" : "alice@fintech.example.com",
   "id" : "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
   "updated_at" : "2026-01-01T00:00:00Z",
   "username" : "alice"
}

UserCreateRequest

Request payload for creating a Tenant User.

The password is hashed server-side before storage; the plaintext value is never persisted. The name must be unique within the tenant.

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object yes n/a {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Authentication backend for this user, discriminated on auth_mode.
display_name string, nullable no null Alice Anderson Human-readable full name. Optional; username remains the unique handle.
email string, nullable no null alice@fintech.example.com Optional contact email for the Tenant User.
password string (password) yes n/a Tenant User password (min 8 characters). Hashed server-side before storage.
username string yes n/a alice Tenant User username. Must be unique within the tenant. Whitespace, control and invisible characters are not allowed.

Example

{
   "auth_settings" : {
      "auth_mode" : "local"
   },
   "display_name" : "Alice Anderson",
   "email" : "alice@fintech.example.com",
   "password" : "secure-password",
   "username" : "alice"
}

UserCreateResponse

Minimal response for successful Tenant User creation.

Returned on POST /tenants/{tenant_id}/users. Clients should fetch full details via GET /tenants/{tenant_id}/users/{user_id} if needed.

Field Type Required Default Example Description
id string (uuid) yes n/a a1b2c3d4-e5f6-7890-abcd-ef1234567890 Unique Tenant User identifier (UUID) assigned by the system.

Example

{
   "id" : "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

UserListResponse

Collection response for Tenant User list operations.

Returned on GET /tenants/{tenant_id}/users.

Field Type Required Default Example Description
total integer yes n/a 0, 5, 50 Total count of Tenant Users in this response.
users array of User object no n/a Array of Tenant User objects. Empty array if no users found.

Example

{
   "total" : 1,
   "users" : [
      {
         "auth_settings" : {
            "auth_mode" : "local"
         },
         "created_at" : "2026-01-01T00:00:00Z",
         "display_name" : "Alice Anderson",
         "email" : "alice@fintech.example.com",
         "id" : "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
         "updated_at" : "2026-01-01T00:00:00Z",
         "username" : "alice"
      }
   ]
}

UserPatchRequest

Request payload for updating a Tenant User.

Allows partial updates of new_password, auth_settings, email and/or display_name; at least one must be supplied. Administrative operation - the caller does not need to supply the current password. Intended for Tenant Admin or Platform Admin use only.

Field Type Required Default Example Description
auth_settings LocalAuthSettings object or PamAuthSettings object, nullable no null {"auth_mode":"local"}, {"auth_mode":"pam","service":"login"} Updated authentication backend for this user, discriminated on auth_mode.
display_name string, nullable no null Alice Anderson Updated human-readable full name for the Tenant User.
email string, nullable no null alice@fintech.example.com Updated contact email for the Tenant User.
new_password string (password), nullable no null New password for the Tenant User (min 8 characters). Hashed server-side before storage.

ValidationError

Field Type Required Default Example Description
ctx object no n/a
input any no n/a
loc array of string or integer yes n/a
msg string yes n/a
type string yes n/a

VictoriaLogsLogsqlEndpoint

Allowed path segments under VictoriaLogs /select/logsql/ (HTTP API).

Allowed values: query, tail, hits, facets, stats_query, stats_query_range, stream_ids, streams, stream_field_names, stream_field_values, field_names, field_values

Volume

Storage volume representation.

A volume is a logical storage container within a StorageSet that provides isolated namespace, quota management, and configurable data protection. Volumes can be exported via NFS and support features like snapshots, quotas, and recovery operations.

Field Type Required Default Example Description
efsa_mode EfsaMode (retry, file-unavailable, default) yes n/a retry, file-unavailable, default Current Extended File System Availability (EFSA) mode. Defines volume behavior during partial storage unavailability.
hard_quota_bytes integer, nullable no null 549755813888, 1099511627776 Configured hard quota limit in bytes. null indicates that no hard limit is enforced.
id integer yes n/a 1, 2, 42 Unique volume identifier within the system
max_width integer, nullable no null 12, 20 Configured maximum number of VPODs used for striping data in the volume.
object_id string yes n/a I-xD0200000000000005-xG82c418af-xU00004a75726a656e Root object ID as compound identifier string
pathname string yes n/a /, /home, /data Unique volume pathname within the system.
quotas_policy QuotasPolicy (disable, enable, report, inherit, invalid) yes n/a disable, report, enable User and Group Quotas Policy status indicating whether quota enforcement is active
raid_type string yes n/a raid6+, raid5+, raid10+ Configured RAID layout of the volume.
recovery_priority integer no 50 0, 1, 50, 100 Recovery priority of the volume (1-100). Lower values indicate higher recovery priority.
rg_depth integer, nullable no null 4, 16 Configured RAID group depth for the volume.
rg_width integer, nullable no null 8, 12 Configured RAID group width.
soft_quota_bytes integer, nullable no null 524288000000, 989560465024 Configured soft quota limit in bytes. null indicates that no soft limit is enforced.
status VolumeStatus (none, creating, deleting, online, fsrc, offline, down, degraded, recon_available, snapping, recon_unavailable, paused) no none Current operational status: ONLINE, DEGRADED, OFFLINE, etc.
storageset_id integer yes n/a 1, 2, 5 Identifier of the StorageSet where this volume resides.
stripe_unit_bytes integer, nullable no null 262144, 1048576 Configured stripe unit size. Specifies the number of bytes written to a VPOD before advancing to the next VPOD in the stripe.
tenant_id string (uuid) yes n/a 550e8400-e29b-41d4-a716-446655440000, 00000000-0000-0000-0000-000000000000 UUID of the owning tenant. System/backend-created volumes with no tenant prefix (e.g. “/”, “/home”) are owned by the default tenant (all-zeros / PAN_UUID_ZERO).
volume_service_id string yes n/a 0x0400000000000005, 0x0400000000000006 Hexadecimal identifier of the volume service currently managing this volume.

Example

{
   "efsa_mode" : "retry",
   "hard_quota_bytes" : 549755813888,
   "id" : 1,
   "max_width" : 12,
   "object_id" : "I-xD0200000000000005-xG82c418af-xU00004a75726a656e",
   "pathname" : "/",
   "quotas_policy" : "enable",
   "raid_type" : "raid6+",
   "recovery_priority" : 1,
   "rg_depth" : 4,
   "rg_width" : 8,
   "soft_quota_bytes" : 524288000000,
   "status" : "online",
   "storageset_id" : 1,
   "stripe_unit_bytes" : 262144,
   "tenant_id" : "00000000-0000-0000-0000-000000000001",
   "volume_service_id" : "0x0400000000000005"
}

VolumeAccessMode

Volume access permission modes.

Used by the ‘volume set’ CLI command to control read/write access to the volume.

Modes: - read-only: volume is read-only for administrative purposes - read-write: volume is readable and writable (default)

Allowed values: read-only, read-write

VolumeCompressionMode

Volume compression mode.

Controls whether data compression is enabled for the volume.

Modes: - enable: compression is enabled for new data - disable: compression is disabled

Allowed values: enable, disable

VolumeCreateRequest

Request payload for creating a volume.

Mirrors the CLI “volume create” command. Requires a volume name and a StorageSet ID. Optional parameters use system defaults when omitted.

Field Type Required Default Example Description
efsa_mode EfsaMode (retry, file-unavailable, default) no default retry, file-unavailable, default EFSA mode for the volume. Defines behavior during partial storage unavailability. Supported: retry, file-unavailable, default. If not specified, system default (retry) is applied. Only for RAID 5+, 6+, 10+ volumes.
group string, nullable no null 0, 100 Owner GID of the volume, as a numeric string (e.g. “0”, “100”). Defaults to root group (gid=0) if not specified. String name resolution and Windows SID are not supported.
group_permissions VolumePermission (none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all), nullable no null read-only, read-execute Filesystem permissions for the owner group on the root of the volume. Allowed values: none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all.
hard_quota_bytes integer, nullable no null 549755813888, null Hard quota in bytes. Prevents additional writes when limit is reached. A volume in a tenant requires a value greater than 0; a request without one returns 400.
max_width integer, nullable no null 12, 20 Maximum number of VPODs to stripe data across. Minimum depends on RAID layout: 2 for RAID 5+, 3 for RAID 6+, 2 for RAID 10+. If not specified, the system allows striping across the StorageSet.
other_permissions VolumePermission (none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all), nullable no null none, read-only Filesystem permissions for others on the root of the volume. Allowed values: none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all.
pathname string yes n/a /vol2, /data Required unique mount path of the volume. Must start with / and be unique within the system.
raid_type VolumeLayout (raid6+, raid5+, raid10+, raid5, raid10) no raid6+ raid6+, raid5+, raid10+, raid5, raid10 RAID layout for the volume. Default: raid6+. Cannot be changed after creation.
recovery_priority integer no 50 0, 1, 50, 100 Recovery priority (1-100) of the volume. Lower values indicate higher recovery priority, where 1 represents the highest priority. If not specified the system default (50) is applied.
rg_depth integer, nullable no null 4, 16 RAID group depth (number of stripes per RAID parity group). Only for RAID 5+, 6+. If not specified, a system default value is applied.
rg_width integer, nullable no null 8, 12 RAID group width (VPODs to stripe over per single RAID group, 3-20). Only for RAID 5+, 6+. If not specified, a system default value is applied.
soft_quota_bytes integer, nullable no null 549755813888, null Soft quota limit in bytes. Triggers quota notifications when the threshold is exceeded. Use 0 or null for unlimited.
storageset_id integer yes n/a 1, 2, 5 Identifier of the StorageSet where the volume will be created. Required if multiple StorageSets exist.
stripe_unit_bytes integer, nullable no null 262144, 1048576 Specifies the number of bytes written to a VPOD before advancing to the next VPOD in the stripe. Must be a multiple of 16 KB (min: 16 KB, max: 4 MB). If not specified, a system default value is applied.
user string, nullable no null 0, 1001 Owner UID of the volume, as a numeric string (e.g. “0”, “1001”). Defaults to root (uid=0) if not specified. String name resolution and Windows SID are not supported.
user_permissions VolumePermission (none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all), nullable no null read-write, all Filesystem permissions for the owner user on the root of the volume. Allowed values: none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all.
volume_service_id string, nullable no null 0x0400000000000005 Identifier of the volume service that will manage this volume, in hexadecimal format (e.g., “0x0400000000000005”). This allows control over how volume management load is distributed across Directors. If not specified, the system automatically assigns the volume to an existing service.

Example

{
   "efsa_mode" : "retry",
   "pathname" : "/vol2",
   "raid_type" : "raid6+",
   "recovery_priority" : 50,
   "storageset_id" : 1
}

VolumeCreateResponse

Minimal response for successful volume creation.

Returned on POST /volumes to signal successful creation without the full volume detail payload. Clients should fetch full details via GET /volumes/{volume_id} if needed.

Field Type Required Default Example Description
id integer yes n/a 1, 2, 42 Unique volume identifier assigned by RM

Example

{
   "id" : 1
}

VolumeGetResponse

Detailed representation of a single volume.

Field Type Required Default Example Description
volume Volume object yes n/a Volume entity with all available details.

Example

{
   "volume" : {
      "efsa_mode" : "retry",
      "hard_quota_bytes" : 549755813888,
      "id" : 1,
      "max_width" : 12,
      "object_id" : "I-xD0200000000000005-xG82c418af-xU00004a75726a656e",
      "pathname" : "/",
      "quotas_policy" : "disable",
      "raid_type" : "raid6+",
      "recovery_priority" : 1,
      "rg_depth" : 4,
      "rg_width" : 8,
      "soft_quota_bytes" : 524288000000,
      "status" : "online",
      "storageset_id" : 1,
      "stripe_unit_bytes" : 262144,
      "tenant_id" : "00000000-0000-0000-0000-000000000001",
      "volume_service_id" : "0x0400000000000005"
   }
}

VolumeLayout

Volume layout options derived from the CLI “volume create” command.

Layouts: - raid6+: RAID 6+ with dual parity and enhanced metadata redundancy (default) - raid5+: RAID 5+ with single parity and enhanced metadata redundancy - raid10+: RAID 10+ with mirroring and enhanced metadata redundancy - raid5: Legacy RAID 5 layout (service mode only) - raid10: Legacy RAID 10 layout (service mode only)

Allowed values: raid6+, raid5+, raid10+, raid5, raid10

VolumeListResponse

Represents a collection of volume objects along with the total number of available objects.

Field Type Required Default Example Description
total integer yes n/a 0, 2, 150 Total count of volumes available (may exceed returned array size if paginated).
volumes array of Volume object no n/a Array of volume objects matching the query. Empty array if no volumes found

Example

{
   "total" : 2,
   "volumes" : [
      {
         "efsa_mode" : "retry",
         "hard_quota_bytes" : 549755813888,
         "id" : 1,
         "object_id" : "I-xD0200000000000005-xG82c418af-xU00004a75726a656e",
         "pathname" : "/",
         "quotas_policy" : "enable",
         "raid_type" : "raid6+",
         "recovery_priority" : 1,
         "soft_quota_bytes" : 524288000000,
         "status" : "online",
         "storageset_id" : 1,
         "tenant_id" : "00000000-0000-0000-0000-000000000001",
         "volume_service_id" : "0x0400000000000005"
      },
      {
         "efsa_mode" : "retry",
         "id" : 2,
         "object_id" : "I-xD0200000000000006-xGc4f7a724-xU00004a75726a656e",
         "pathname" : "/home",
         "quotas_policy" : "disable",
         "raid_type" : "raid6+",
         "recovery_priority" : 50,
         "status" : "online",
         "storageset_id" : 1,
         "tenant_id" : "e97b94d6-9cc1-4325-a267-1064ae538ccd",
         "volume_service_id" : "0x0400000000000006"
      }
   ]
}

VolumePatchRequest

Request payload for updating an existing volume via PATCH.

Field Type Required Default Example Description
access_permission VolumeAccessMode (read-only, read-write), nullable no null read-only, read-write Volume access permission mode. Set to read-only for administrative purposes
compression VolumeCompressionMode (enable, disable), nullable no null enable, disable Enable or disable compression for the volume. Affects new data only
efsa_mode EfsaMode (retry, file-unavailable, default), nullable no null retry, file-unavailable, default EFSA mode for the volume. Defines behavior during partial storage unavailability. Supported: retry, file-unavailable, default. If not specified, system default (retry) is applied. Only for RAID 5+, 6+, 10+ volumes.
hard_quota_bytes integer, nullable no null 1099511627776, 0 Hard quota in bytes. Prevents additional writes when limit is reached. A volume in a tenant requires a value greater than 0; a request without one returns 400.
recovery_priority integer, nullable no null 0, 1, 50, 100 Recovery priority (1-100) of the volume. Lower values indicate higher recovery priority, where 1 represents the highest priority. If not specified the system default (50) is applied.
soft_quota_bytes integer, nullable no null 549755813888, 0 Soft quota limit in bytes. Triggers quota notifications when the threshold is exceeded. Use 0 for unlimited.
state VolumeStateOption (online, offline, paused), nullable no null online, offline, paused Target operational state for the volume. Use to bring volume online/offline

Example

{
   "access_permission" : "read-write",
   "efsa_mode" : "file-unavailable",
   "hard_quota_bytes" : 1099511627776,
   "recovery_priority" : 75,
   "soft_quota_bytes" : 549755813888,
   "state" : "online"
}

VolumePermission

File permission presets for volume ownership configuration.

Permissions: - none: no permissions (000) - read-only: read-only access (r–) - write-only: write-only access (-w-) - execute-only: execute-only access (–x) - read-write: read and write access (rw-) - read-execute: read and execute access (r-x) - write-execute: write and execute access (-wx) - all: full permissions (rwx)

Allowed values: none, read-only, write-only, execute-only, read-write, read-execute, write-execute, all

VolumeRecoverActionParams

Parameters required to start File System Recovery on a volume.

Field Type Required Default Example Description
ignore_eligibility boolean no false When true, skip the volume eligibility precondition (PAN_VOLUME_F_FSRC_RECOMMENDED or PAN_VOLUME_F_FSRC_FAILED).
mode VolumeRecoverMode (recover, parity_scrub, no_scrub, check_only) no recover recover, parity_scrub, no_scrub, check_only File System Recovery mode controlling the underlying RPC flag bitmask.

VolumeRecoverActionRequest

Request to start File System Recovery on a volume.

Field Type Required Default Example Description
action literal recover yes n/a The action to perform on the volume.
params VolumeRecoverActionParams object yes n/a Parameters required to perform the recover action.

VolumeRecoverMode

Modes available when starting File System Recovery on a volume.

Allowed values: recover, parity_scrub, no_scrub, check_only

VolumeRenameActionParams

Parameters required to perform a rename action on a volume.

Field Type Required Default Example Description
new_pathname string yes n/a /new_volume_name, /data_archive The new unique mount path for the volume. Must start with / and be unique within the system.

VolumeRenameActionRequest

Request to perform a rename action on a Volume.

Field Type Required Default Example Description
action literal rename yes n/a The action to perform on the volume.
params VolumeRenameActionParams object yes n/a Parameters required to perform the rename action.

VolumeSpaceResponse

Space usage response for a volume.

A volume’s capacity is bounded by its hard quota. Free space is the remaining capacity within that quota: hard_quota_bytes - used_bytes.

Field Type Required Default Example Description
free_bytes integer yes n/a 107374182400, 0 Remaining capacity within the hard quota (hard_quota_bytes - used_bytes).
hard_quota_bytes integer, nullable yes n/a 214748364800, 549755813888 Hard quota limit in bytes. This is the total capacity allocated to the volume.
soft_quota_bytes integer, nullable no null 193273528320, null Soft quota limit in bytes. Advisory threshold that triggers warnings. Null if not configured.
used_bytes integer yes n/a 107374182400, 0 Bytes consumed by this volume on disk.

Example

{
   "free_bytes" : 107374182400,
   "hard_quota_bytes" : 214748364800,
   "soft_quota_bytes" : 193273528320,
   "used_bytes" : 107374182400
}

VolumeStateOption

Volume state options for administrative state transitions.

Used by the ‘volume state’ CLI command to move volumes between operational states.

States: - online: bring volume online and serve I/O - offline: take volume offline (clients block and retry) - paused: take volume offline with I/O errors (service mode only)

Allowed values: online, offline, paused

VolumeStatus

Human-readable volume status.

Mirrors pan_volume_state from the proto definition and exposes descriptive string values in the REST API instead of raw integers.

States: - NONE: state is unknown or not yet initialized - CREATING: volume is being created and not fully available - DELETING: volume is being deleted and may be partially unavailable - ONLINE: volume is fully online and serving I/O - FSRC: volume is undergoing FSRC (file system recovery/check) operations - OFFLINE: volume is intentionally offline and not serving I/O - DOWN: volume is down due to failures and not accessible - DEGRADED: volume is online but running with reduced redundancy - RECON_AVAILABLE: reconstruction is in progress but volume is still available - SNAPPING: volume snapshot operation is in progress - RECON_UNAVAILABLE: reconstruction is in progress and volume is unavailable - PAUSED: volume activity is administratively paused

Allowed values: none, creating, deleting, online, fsrc, offline, down, degraded, recon_available, snapping, recon_unavailable, paused