# Storage Class Configuration

## List storage class configurations

> Retrieves a list of storage class configurations defined in the system.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"StorageClassConfigurationFilterBy":{"name":"filterBy","in":"query","required":false,"description":"Filter results by a parameter. Use the format field-name operator value. Operators are == Equals, != Not equals, <= Less than or equal, >= Greater than or equal, =@ contains, !@ Does not contains, =^ Starts with and =$ Ends with. Dates are in ISO 8601 timestamp format and available for operators ==, !=, <= and >=.","schema":{"type":"array","items":{"type":"string","pattern":"^(name|tenantId|scopeType|scopeId)(==|!=|<=|>=|=@|!@|=\\^|=\\$).+$"}},"explode":false},"StorageClassConfigurationSortBy":{"name":"sortBy","in":"query","required":false,"description":"Sort results by a parameters.","schema":{"type":"string","enum":["name","tenantId","scopeType","scopeId"]}},"SortOrder":{"name":"sortOrder","in":"query","required":false,"description":"Sort results in descending or ascending order.","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}},"Offset":{"name":"offset","in":"query","required":false,"description":"The offset of the first item returned in the collection.","schema":{"type":"integer","format":"int32"}},"Limit":{"name":"limit","in":"query","required":false,"description":"The maximum number of entries to return.","schema":{"type":"integer","format":"int32","default":50,"minimum":1,"maximum":500}}},"schemas":{"StorageClassConfigurationListResponse":{"type":"object","required":["storageClassConfigurations"],"properties":{"storageClassConfigurations":{"description":"A list of storage class configuration objects. Each object defines the configuration details for a specific storage class.","type":"array","items":{"$ref":"#/components/schemas/StorageClassConfiguration"}},"next":{"type":"integer"}}},"StorageClassConfiguration":{"type":"object","required":["id","tenantId","scopeType","scopeId","name"],"properties":{"id":{"description":"The unique identifier of the storage class configuration.","type":"string","format":"uuid"},"tenantId":{"$ref":"#/components/schemas/TenantId"},"scopeType":{"description":"Currently supported value: 'cluster', which is also the default.","type":"string","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"TenantId":{"description":"The id of the tenant.","type":"integer","format":"int32"},"ScopeClusterId":{"description":"The ID of the cluster.","type":"string","format":"uuid"},"StorageClassName":{"description":"The name of the storage class to which the configuration applies.","type":"string"},"StorageClassPermissions":{"type":"object","nullable":true,"description":"Defines the access permissions and behavioral rules for this storage class.","properties":{"allowedForAssets":{"$ref":"#/components/schemas/AllowedForAssets"},"allowedForWorkloads":{"$ref":"#/components/schemas/AllowedForWorkloads"},"allowedForEphemeralVolumes":{"$ref":"#/components/schemas/AllowedForEphemeralVolumes"},"allowedForPersistentVolumes":{"$ref":"#/components/schemas/AllowedForPersistentVolumes"},"allowDataSharing":{"$ref":"#/components/schemas/AllowDataSharing"}}},"AllowedForAssets":{"type":"boolean","nullable":true,"description":"Determines whether PVC assets can be created using this storage class."},"AllowedForWorkloads":{"type":"boolean","nullable":true,"description":"Allows workloads to include PVCs that use this storage class. When disabled, users cannot (a) include non-existing PVC assets created with this class in asset-based submissions, or (b) attach PVCs with existing=false to workloads using this class."},"AllowedForEphemeralVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create ephemeral volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowedForPersistentVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create persistent volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowDataSharing":{"type":"boolean","nullable":true,"description":"Allows creation of PVCs using a shared volume."},"StorageClassCustomization":{"description":"Optional UI/policy controls that define defaults and requirements when creating PVCs with this storage class.","properties":{"accessMode":{"$ref":"#/components/schemas/AccessModeCustomization"},"volumeMode":{"$ref":"#/components/schemas/VolumeModeCustomization"},"claimSize":{"$ref":"#/components/schemas/ClaimSizeCustomization"},"attributes":{"$ref":"#/components/schemas/AttributesCustomization"}},"type":"object","nullable":true},"AccessModeCustomization":{"description":"Controls whether PVC access modes are required and what defaults to apply.","properties":{"required":{"type":"boolean","description":"If true, the accessMode field is mandatory when creating a PVC that uses this storage class.","nullable":true},"default":{"$ref":"#/components/schemas/PvcAccessModes"},"supportedValues":{"$ref":"#/components/schemas/PvcSupportedAccessModes"}},"type":"object","nullable":true},"PvcAccessModes":{"description":"Default access mode(s) applied to newly created PVCs unless explicitly overridden.","properties":{"readWriteOnce":{"description":"Mount the volume as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Mount the volume as read-only by many nodes.","type":"boolean","default":false,"nullable":true},"readWriteMany":{"description":"Mount the volume as read/write by many nodes.","type":"boolean","default":false,"nullable":true}},"nullable":true,"type":"object"},"PvcSupportedAccessModes":{"description":"Defines the access modes supported by the given storage class. These values indicate which access configurations can be used when creating PVCs with this class.","properties":{"readWriteOnce":{"description":"Indicates whether the readWriteOnce access mode is supported. This mode allows a volume to be mounted as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Indicates whether the readOnlyMany access mode is supported. This mode allows a volume to be mounted as read-only by many nodes.","type":"boolean","default":true,"nullable":true},"readWriteMany":{"description":"Indicates whether the readWriteMany access mode is supported. This mode allows a volume to be mounted as read/write by many nodes.","type":"boolean","default":true,"nullable":true}},"nullable":true,"type":"object"},"VolumeModeCustomization":{"description":"Defines whether the volumeMode field is required when creating PVCs and specifies default and supported modes for the storage class.","properties":{"required":{"type":"boolean","description":"Indicates whether the volumeMode field is mandatory when creating a PVC.","nullable":true},"default":{"$ref":"#/components/schemas/PvcVolumeMode"},"supportedValues":{"description":"Lists which volume modes are supported for this storage class.","type":"object","nullable":true,"properties":{"filesystem":{"type":"boolean","description":"Indicates whether filesystem mode is supported. Filesystem allows the volume to be mounted as a filesystem, enabling the usage of directories and files.","default":true,"nullable":true},"block":{"type":"boolean","description":"Indicates whether block mode is supported. Exposes the volume as a block storage, which can be formatted or used by applications directly without a filesystem.","default":true,"nullable":true}}}},"type":"object","nullable":true},"PvcVolumeMode":{"description":"Default volume mode for the PVC. Choose between Filesystem (default) or Block.","type":"string","enum":["Filesystem","Block"],"nullable":true},"ClaimSizeCustomization":{"description":"Defines the default, supported units, and range constraints for PVC claim sizes. These settings control the requested storage capacity when creating a PVC using this storage class.","properties":{"default":{"$ref":"#/components/schemas/PvcClaimSize"},"supportedUnits":{"description":"Units supported for specifying PVC sizes. Valid values: \"MB\", \"MiB\", \"GB\", \"GiB\", \"TB\", \"TiB\".","type":"array","items":{"type":"string","enum":["MB","MiB","GB","GiB","TB","TiB"]}},"min":{"$ref":"#/components/schemas/PvcClaimMinSize"},"max":{"$ref":"#/components/schemas/PvcClaimMaxSize"},"step":{"$ref":"#/components/schemas/PvcClaimStepSize"}},"type":"object","nullable":true},"PvcClaimSize":{"description":"Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","maxLength":63,"nullable":true},"PvcClaimMinSize":{"description":"Minimum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimMaxSize":{"description":"Maximum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimStepSize":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"AttributesCustomization":{"description":"Defines additional annotation attributes to be applied to PVCs created under this storage class. Each attribute describes an annotation key and its expected value format, display name, and purpose.","type":"array","items":{"$ref":"#/components/schemas/PvcAddedAttribute"}},"PvcAddedAttribute":{"description":"Attribute that is added to any PVC of a given storage class.","required":["key"],"properties":{"key":{"type":"string","minLength":1,"description":"The annotation key for the PVC. Must comply with Kubernetes naming rules: ≤63 characters, beginning and ending with an alphanumeric character ([A-Za-z0-9]), and may include dashes (-), underscores (_), or dots (.).","maxLength":63,"pattern":"^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"},"format":{"description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","$ref":"#/components/schemas/PvcAddedAttributeFormat"},"display":{"type":"string","minLength":1,"description":"User-friendly display name for the attribute, shown in the UI.","nullable":true},"description":{"type":"string","minLength":1,"description":"A description of the attribute's purpose or expected values.","nullable":true},"placeholder":{"type":"string","minLength":1,"description":"Example or hint text for the attribute's value, displayed as a watermark or help message in the UI.","nullable":true},"required":{"description":"Indicates whether this attribute is mandatory.","type":"boolean","nullable":true},"defaultValue":{"description":"Default value assigned to the attribute when not explicitly provided.","type":"string","minLength":1,"nullable":true},"validationRegexp":{"description":"Regular expression used to validate user input for text attributes.","type":"string","minLength":1,"nullable":true},"minValue":{"description":"Minimum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"maxValue":{"description":"Maximum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"step":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"number","minLength":1,"nullable":true},"validationError":{"description":"Custom validation error message shown if input fails validation. If omitted, a default error message is generated automatically.","type":"string","minLength":1,"nullable":true}},"nullable":true,"type":"object"},"PvcAddedAttributeFormat":{"type":"string","description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","enum":["text","number","boolean"],"nullable":true},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/storage-class-configuration":{"get":{"summary":"List storage class configurations","description":"Retrieves a list of storage class configurations defined in the system.","operationId":"list_storage_class_configuration","tags":["Storage Class Configuration"],"parameters":[{"$ref":"#/components/parameters/StorageClassConfigurationFilterBy"},{"$ref":"#/components/parameters/StorageClassConfigurationSortBy"},{"$ref":"#/components/parameters/SortOrder"},{"$ref":"#/components/parameters/Offset"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Executed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfigurationListResponse"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Create storage class configuration

> Creates a new storage class configuration in the NVIDIA Run:ai platform.\
> This endpoint enables administrators to define storage class behavior and customize their usage settings.<br>

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"schemas":{"StorageClassConfigurationCreationRequest":{"type":"object","required":["scopeType","scopeId","name"],"properties":{"tenantId":{"type":"integer","nullable":true,"allOf":[{"$ref":"#/components/schemas/TenantId"}]},"scopeType":{"type":"string","description":"the scope type of the configuration.","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"TenantId":{"description":"The id of the tenant.","type":"integer","format":"int32"},"ScopeClusterId":{"description":"The ID of the cluster.","type":"string","format":"uuid"},"StorageClassName":{"description":"The name of the storage class to which the configuration applies.","type":"string"},"StorageClassPermissions":{"type":"object","nullable":true,"description":"Defines the access permissions and behavioral rules for this storage class.","properties":{"allowedForAssets":{"$ref":"#/components/schemas/AllowedForAssets"},"allowedForWorkloads":{"$ref":"#/components/schemas/AllowedForWorkloads"},"allowedForEphemeralVolumes":{"$ref":"#/components/schemas/AllowedForEphemeralVolumes"},"allowedForPersistentVolumes":{"$ref":"#/components/schemas/AllowedForPersistentVolumes"},"allowDataSharing":{"$ref":"#/components/schemas/AllowDataSharing"}}},"AllowedForAssets":{"type":"boolean","nullable":true,"description":"Determines whether PVC assets can be created using this storage class."},"AllowedForWorkloads":{"type":"boolean","nullable":true,"description":"Allows workloads to include PVCs that use this storage class. When disabled, users cannot (a) include non-existing PVC assets created with this class in asset-based submissions, or (b) attach PVCs with existing=false to workloads using this class."},"AllowedForEphemeralVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create ephemeral volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowedForPersistentVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create persistent volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowDataSharing":{"type":"boolean","nullable":true,"description":"Allows creation of PVCs using a shared volume."},"StorageClassCustomization":{"description":"Optional UI/policy controls that define defaults and requirements when creating PVCs with this storage class.","properties":{"accessMode":{"$ref":"#/components/schemas/AccessModeCustomization"},"volumeMode":{"$ref":"#/components/schemas/VolumeModeCustomization"},"claimSize":{"$ref":"#/components/schemas/ClaimSizeCustomization"},"attributes":{"$ref":"#/components/schemas/AttributesCustomization"}},"type":"object","nullable":true},"AccessModeCustomization":{"description":"Controls whether PVC access modes are required and what defaults to apply.","properties":{"required":{"type":"boolean","description":"If true, the accessMode field is mandatory when creating a PVC that uses this storage class.","nullable":true},"default":{"$ref":"#/components/schemas/PvcAccessModes"},"supportedValues":{"$ref":"#/components/schemas/PvcSupportedAccessModes"}},"type":"object","nullable":true},"PvcAccessModes":{"description":"Default access mode(s) applied to newly created PVCs unless explicitly overridden.","properties":{"readWriteOnce":{"description":"Mount the volume as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Mount the volume as read-only by many nodes.","type":"boolean","default":false,"nullable":true},"readWriteMany":{"description":"Mount the volume as read/write by many nodes.","type":"boolean","default":false,"nullable":true}},"nullable":true,"type":"object"},"PvcSupportedAccessModes":{"description":"Defines the access modes supported by the given storage class. These values indicate which access configurations can be used when creating PVCs with this class.","properties":{"readWriteOnce":{"description":"Indicates whether the readWriteOnce access mode is supported. This mode allows a volume to be mounted as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Indicates whether the readOnlyMany access mode is supported. This mode allows a volume to be mounted as read-only by many nodes.","type":"boolean","default":true,"nullable":true},"readWriteMany":{"description":"Indicates whether the readWriteMany access mode is supported. This mode allows a volume to be mounted as read/write by many nodes.","type":"boolean","default":true,"nullable":true}},"nullable":true,"type":"object"},"VolumeModeCustomization":{"description":"Defines whether the volumeMode field is required when creating PVCs and specifies default and supported modes for the storage class.","properties":{"required":{"type":"boolean","description":"Indicates whether the volumeMode field is mandatory when creating a PVC.","nullable":true},"default":{"$ref":"#/components/schemas/PvcVolumeMode"},"supportedValues":{"description":"Lists which volume modes are supported for this storage class.","type":"object","nullable":true,"properties":{"filesystem":{"type":"boolean","description":"Indicates whether filesystem mode is supported. Filesystem allows the volume to be mounted as a filesystem, enabling the usage of directories and files.","default":true,"nullable":true},"block":{"type":"boolean","description":"Indicates whether block mode is supported. Exposes the volume as a block storage, which can be formatted or used by applications directly without a filesystem.","default":true,"nullable":true}}}},"type":"object","nullable":true},"PvcVolumeMode":{"description":"Default volume mode for the PVC. Choose between Filesystem (default) or Block.","type":"string","enum":["Filesystem","Block"],"nullable":true},"ClaimSizeCustomization":{"description":"Defines the default, supported units, and range constraints for PVC claim sizes. These settings control the requested storage capacity when creating a PVC using this storage class.","properties":{"default":{"$ref":"#/components/schemas/PvcClaimSize"},"supportedUnits":{"description":"Units supported for specifying PVC sizes. Valid values: \"MB\", \"MiB\", \"GB\", \"GiB\", \"TB\", \"TiB\".","type":"array","items":{"type":"string","enum":["MB","MiB","GB","GiB","TB","TiB"]}},"min":{"$ref":"#/components/schemas/PvcClaimMinSize"},"max":{"$ref":"#/components/schemas/PvcClaimMaxSize"},"step":{"$ref":"#/components/schemas/PvcClaimStepSize"}},"type":"object","nullable":true},"PvcClaimSize":{"description":"Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","maxLength":63,"nullable":true},"PvcClaimMinSize":{"description":"Minimum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimMaxSize":{"description":"Maximum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimStepSize":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"AttributesCustomization":{"description":"Defines additional annotation attributes to be applied to PVCs created under this storage class. Each attribute describes an annotation key and its expected value format, display name, and purpose.","type":"array","items":{"$ref":"#/components/schemas/PvcAddedAttribute"}},"PvcAddedAttribute":{"description":"Attribute that is added to any PVC of a given storage class.","required":["key"],"properties":{"key":{"type":"string","minLength":1,"description":"The annotation key for the PVC. Must comply with Kubernetes naming rules: ≤63 characters, beginning and ending with an alphanumeric character ([A-Za-z0-9]), and may include dashes (-), underscores (_), or dots (.).","maxLength":63,"pattern":"^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"},"format":{"description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","$ref":"#/components/schemas/PvcAddedAttributeFormat"},"display":{"type":"string","minLength":1,"description":"User-friendly display name for the attribute, shown in the UI.","nullable":true},"description":{"type":"string","minLength":1,"description":"A description of the attribute's purpose or expected values.","nullable":true},"placeholder":{"type":"string","minLength":1,"description":"Example or hint text for the attribute's value, displayed as a watermark or help message in the UI.","nullable":true},"required":{"description":"Indicates whether this attribute is mandatory.","type":"boolean","nullable":true},"defaultValue":{"description":"Default value assigned to the attribute when not explicitly provided.","type":"string","minLength":1,"nullable":true},"validationRegexp":{"description":"Regular expression used to validate user input for text attributes.","type":"string","minLength":1,"nullable":true},"minValue":{"description":"Minimum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"maxValue":{"description":"Maximum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"step":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"number","minLength":1,"nullable":true},"validationError":{"description":"Custom validation error message shown if input fails validation. If omitted, a default error message is generated automatically.","type":"string","minLength":1,"nullable":true}},"nullable":true,"type":"object"},"PvcAddedAttributeFormat":{"type":"string","description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","enum":["text","number","boolean"],"nullable":true},"StorageClassConfiguration":{"type":"object","required":["id","tenantId","scopeType","scopeId","name"],"properties":{"id":{"description":"The unique identifier of the storage class configuration.","type":"string","format":"uuid"},"tenantId":{"$ref":"#/components/schemas/TenantId"},"scopeType":{"description":"Currently supported value: 'cluster', which is also the default.","type":"string","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"400BadRequest":{"description":"Bad request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/storage-class-configuration":{"post":{"summary":"Create storage class configuration","description":"Creates a new storage class configuration in the NVIDIA Run:ai platform.\nThis endpoint enables administrators to define storage class behavior and customize their usage settings.\n","operationId":"create_storage_class_configuration","tags":["Storage Class Configuration"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfigurationCreationRequest"}}}},"responses":{"201":{"description":"Executed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfiguration"}}}},"400":{"$ref":"#/components/responses/400BadRequest"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Get storage class configuration by id

> Retrieves a specific storage class configuration by its unique identifier. Use this endpoint to view detailed information about the configuration, including its permissions and customization options.<br>

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"StorageClassConfigurationId":{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"unique identifier of the storage class configuration"}},"schemas":{"StorageClassConfiguration":{"type":"object","required":["id","tenantId","scopeType","scopeId","name"],"properties":{"id":{"description":"The unique identifier of the storage class configuration.","type":"string","format":"uuid"},"tenantId":{"$ref":"#/components/schemas/TenantId"},"scopeType":{"description":"Currently supported value: 'cluster', which is also the default.","type":"string","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"TenantId":{"description":"The id of the tenant.","type":"integer","format":"int32"},"ScopeClusterId":{"description":"The ID of the cluster.","type":"string","format":"uuid"},"StorageClassName":{"description":"The name of the storage class to which the configuration applies.","type":"string"},"StorageClassPermissions":{"type":"object","nullable":true,"description":"Defines the access permissions and behavioral rules for this storage class.","properties":{"allowedForAssets":{"$ref":"#/components/schemas/AllowedForAssets"},"allowedForWorkloads":{"$ref":"#/components/schemas/AllowedForWorkloads"},"allowedForEphemeralVolumes":{"$ref":"#/components/schemas/AllowedForEphemeralVolumes"},"allowedForPersistentVolumes":{"$ref":"#/components/schemas/AllowedForPersistentVolumes"},"allowDataSharing":{"$ref":"#/components/schemas/AllowDataSharing"}}},"AllowedForAssets":{"type":"boolean","nullable":true,"description":"Determines whether PVC assets can be created using this storage class."},"AllowedForWorkloads":{"type":"boolean","nullable":true,"description":"Allows workloads to include PVCs that use this storage class. When disabled, users cannot (a) include non-existing PVC assets created with this class in asset-based submissions, or (b) attach PVCs with existing=false to workloads using this class."},"AllowedForEphemeralVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create ephemeral volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowedForPersistentVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create persistent volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowDataSharing":{"type":"boolean","nullable":true,"description":"Allows creation of PVCs using a shared volume."},"StorageClassCustomization":{"description":"Optional UI/policy controls that define defaults and requirements when creating PVCs with this storage class.","properties":{"accessMode":{"$ref":"#/components/schemas/AccessModeCustomization"},"volumeMode":{"$ref":"#/components/schemas/VolumeModeCustomization"},"claimSize":{"$ref":"#/components/schemas/ClaimSizeCustomization"},"attributes":{"$ref":"#/components/schemas/AttributesCustomization"}},"type":"object","nullable":true},"AccessModeCustomization":{"description":"Controls whether PVC access modes are required and what defaults to apply.","properties":{"required":{"type":"boolean","description":"If true, the accessMode field is mandatory when creating a PVC that uses this storage class.","nullable":true},"default":{"$ref":"#/components/schemas/PvcAccessModes"},"supportedValues":{"$ref":"#/components/schemas/PvcSupportedAccessModes"}},"type":"object","nullable":true},"PvcAccessModes":{"description":"Default access mode(s) applied to newly created PVCs unless explicitly overridden.","properties":{"readWriteOnce":{"description":"Mount the volume as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Mount the volume as read-only by many nodes.","type":"boolean","default":false,"nullable":true},"readWriteMany":{"description":"Mount the volume as read/write by many nodes.","type":"boolean","default":false,"nullable":true}},"nullable":true,"type":"object"},"PvcSupportedAccessModes":{"description":"Defines the access modes supported by the given storage class. These values indicate which access configurations can be used when creating PVCs with this class.","properties":{"readWriteOnce":{"description":"Indicates whether the readWriteOnce access mode is supported. This mode allows a volume to be mounted as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Indicates whether the readOnlyMany access mode is supported. This mode allows a volume to be mounted as read-only by many nodes.","type":"boolean","default":true,"nullable":true},"readWriteMany":{"description":"Indicates whether the readWriteMany access mode is supported. This mode allows a volume to be mounted as read/write by many nodes.","type":"boolean","default":true,"nullable":true}},"nullable":true,"type":"object"},"VolumeModeCustomization":{"description":"Defines whether the volumeMode field is required when creating PVCs and specifies default and supported modes for the storage class.","properties":{"required":{"type":"boolean","description":"Indicates whether the volumeMode field is mandatory when creating a PVC.","nullable":true},"default":{"$ref":"#/components/schemas/PvcVolumeMode"},"supportedValues":{"description":"Lists which volume modes are supported for this storage class.","type":"object","nullable":true,"properties":{"filesystem":{"type":"boolean","description":"Indicates whether filesystem mode is supported. Filesystem allows the volume to be mounted as a filesystem, enabling the usage of directories and files.","default":true,"nullable":true},"block":{"type":"boolean","description":"Indicates whether block mode is supported. Exposes the volume as a block storage, which can be formatted or used by applications directly without a filesystem.","default":true,"nullable":true}}}},"type":"object","nullable":true},"PvcVolumeMode":{"description":"Default volume mode for the PVC. Choose between Filesystem (default) or Block.","type":"string","enum":["Filesystem","Block"],"nullable":true},"ClaimSizeCustomization":{"description":"Defines the default, supported units, and range constraints for PVC claim sizes. These settings control the requested storage capacity when creating a PVC using this storage class.","properties":{"default":{"$ref":"#/components/schemas/PvcClaimSize"},"supportedUnits":{"description":"Units supported for specifying PVC sizes. Valid values: \"MB\", \"MiB\", \"GB\", \"GiB\", \"TB\", \"TiB\".","type":"array","items":{"type":"string","enum":["MB","MiB","GB","GiB","TB","TiB"]}},"min":{"$ref":"#/components/schemas/PvcClaimMinSize"},"max":{"$ref":"#/components/schemas/PvcClaimMaxSize"},"step":{"$ref":"#/components/schemas/PvcClaimStepSize"}},"type":"object","nullable":true},"PvcClaimSize":{"description":"Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","maxLength":63,"nullable":true},"PvcClaimMinSize":{"description":"Minimum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimMaxSize":{"description":"Maximum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimStepSize":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"AttributesCustomization":{"description":"Defines additional annotation attributes to be applied to PVCs created under this storage class. Each attribute describes an annotation key and its expected value format, display name, and purpose.","type":"array","items":{"$ref":"#/components/schemas/PvcAddedAttribute"}},"PvcAddedAttribute":{"description":"Attribute that is added to any PVC of a given storage class.","required":["key"],"properties":{"key":{"type":"string","minLength":1,"description":"The annotation key for the PVC. Must comply with Kubernetes naming rules: ≤63 characters, beginning and ending with an alphanumeric character ([A-Za-z0-9]), and may include dashes (-), underscores (_), or dots (.).","maxLength":63,"pattern":"^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"},"format":{"description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","$ref":"#/components/schemas/PvcAddedAttributeFormat"},"display":{"type":"string","minLength":1,"description":"User-friendly display name for the attribute, shown in the UI.","nullable":true},"description":{"type":"string","minLength":1,"description":"A description of the attribute's purpose or expected values.","nullable":true},"placeholder":{"type":"string","minLength":1,"description":"Example or hint text for the attribute's value, displayed as a watermark or help message in the UI.","nullable":true},"required":{"description":"Indicates whether this attribute is mandatory.","type":"boolean","nullable":true},"defaultValue":{"description":"Default value assigned to the attribute when not explicitly provided.","type":"string","minLength":1,"nullable":true},"validationRegexp":{"description":"Regular expression used to validate user input for text attributes.","type":"string","minLength":1,"nullable":true},"minValue":{"description":"Minimum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"maxValue":{"description":"Maximum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"step":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"number","minLength":1,"nullable":true},"validationError":{"description":"Custom validation error message shown if input fails validation. If omitted, a default error message is generated automatically.","type":"string","minLength":1,"nullable":true}},"nullable":true,"type":"object"},"PvcAddedAttributeFormat":{"type":"string","description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","enum":["text","number","boolean"],"nullable":true},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/storage-class-configuration/{id}":{"get":{"summary":"Get storage class configuration by id","description":"Retrieves a specific storage class configuration by its unique identifier. Use this endpoint to view detailed information about the configuration, including its permissions and customization options.\n","operationId":"get_storage_class_configuration_by_id","tags":["Storage Class Configuration"],"parameters":[{"$ref":"#/components/parameters/StorageClassConfigurationId"},{"name":"tenantId","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Storage class configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfiguration"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Update storage class configuration by id

> Updates an existing storage class configuration by its unique identifier. Use this endpoint to fully replace an existing configuration, including permissions and customization settings.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"StorageClassConfigurationId":{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"unique identifier of the storage class configuration"}},"schemas":{"StorageClassConfigurationUpdateRequest":{"type":"object","properties":{"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"StorageClassPermissions":{"type":"object","nullable":true,"description":"Defines the access permissions and behavioral rules for this storage class.","properties":{"allowedForAssets":{"$ref":"#/components/schemas/AllowedForAssets"},"allowedForWorkloads":{"$ref":"#/components/schemas/AllowedForWorkloads"},"allowedForEphemeralVolumes":{"$ref":"#/components/schemas/AllowedForEphemeralVolumes"},"allowedForPersistentVolumes":{"$ref":"#/components/schemas/AllowedForPersistentVolumes"},"allowDataSharing":{"$ref":"#/components/schemas/AllowDataSharing"}}},"AllowedForAssets":{"type":"boolean","nullable":true,"description":"Determines whether PVC assets can be created using this storage class."},"AllowedForWorkloads":{"type":"boolean","nullable":true,"description":"Allows workloads to include PVCs that use this storage class. When disabled, users cannot (a) include non-existing PVC assets created with this class in asset-based submissions, or (b) attach PVCs with existing=false to workloads using this class."},"AllowedForEphemeralVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create ephemeral volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowedForPersistentVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create persistent volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowDataSharing":{"type":"boolean","nullable":true,"description":"Allows creation of PVCs using a shared volume."},"StorageClassCustomization":{"description":"Optional UI/policy controls that define defaults and requirements when creating PVCs with this storage class.","properties":{"accessMode":{"$ref":"#/components/schemas/AccessModeCustomization"},"volumeMode":{"$ref":"#/components/schemas/VolumeModeCustomization"},"claimSize":{"$ref":"#/components/schemas/ClaimSizeCustomization"},"attributes":{"$ref":"#/components/schemas/AttributesCustomization"}},"type":"object","nullable":true},"AccessModeCustomization":{"description":"Controls whether PVC access modes are required and what defaults to apply.","properties":{"required":{"type":"boolean","description":"If true, the accessMode field is mandatory when creating a PVC that uses this storage class.","nullable":true},"default":{"$ref":"#/components/schemas/PvcAccessModes"},"supportedValues":{"$ref":"#/components/schemas/PvcSupportedAccessModes"}},"type":"object","nullable":true},"PvcAccessModes":{"description":"Default access mode(s) applied to newly created PVCs unless explicitly overridden.","properties":{"readWriteOnce":{"description":"Mount the volume as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Mount the volume as read-only by many nodes.","type":"boolean","default":false,"nullable":true},"readWriteMany":{"description":"Mount the volume as read/write by many nodes.","type":"boolean","default":false,"nullable":true}},"nullable":true,"type":"object"},"PvcSupportedAccessModes":{"description":"Defines the access modes supported by the given storage class. These values indicate which access configurations can be used when creating PVCs with this class.","properties":{"readWriteOnce":{"description":"Indicates whether the readWriteOnce access mode is supported. This mode allows a volume to be mounted as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Indicates whether the readOnlyMany access mode is supported. This mode allows a volume to be mounted as read-only by many nodes.","type":"boolean","default":true,"nullable":true},"readWriteMany":{"description":"Indicates whether the readWriteMany access mode is supported. This mode allows a volume to be mounted as read/write by many nodes.","type":"boolean","default":true,"nullable":true}},"nullable":true,"type":"object"},"VolumeModeCustomization":{"description":"Defines whether the volumeMode field is required when creating PVCs and specifies default and supported modes for the storage class.","properties":{"required":{"type":"boolean","description":"Indicates whether the volumeMode field is mandatory when creating a PVC.","nullable":true},"default":{"$ref":"#/components/schemas/PvcVolumeMode"},"supportedValues":{"description":"Lists which volume modes are supported for this storage class.","type":"object","nullable":true,"properties":{"filesystem":{"type":"boolean","description":"Indicates whether filesystem mode is supported. Filesystem allows the volume to be mounted as a filesystem, enabling the usage of directories and files.","default":true,"nullable":true},"block":{"type":"boolean","description":"Indicates whether block mode is supported. Exposes the volume as a block storage, which can be formatted or used by applications directly without a filesystem.","default":true,"nullable":true}}}},"type":"object","nullable":true},"PvcVolumeMode":{"description":"Default volume mode for the PVC. Choose between Filesystem (default) or Block.","type":"string","enum":["Filesystem","Block"],"nullable":true},"ClaimSizeCustomization":{"description":"Defines the default, supported units, and range constraints for PVC claim sizes. These settings control the requested storage capacity when creating a PVC using this storage class.","properties":{"default":{"$ref":"#/components/schemas/PvcClaimSize"},"supportedUnits":{"description":"Units supported for specifying PVC sizes. Valid values: \"MB\", \"MiB\", \"GB\", \"GiB\", \"TB\", \"TiB\".","type":"array","items":{"type":"string","enum":["MB","MiB","GB","GiB","TB","TiB"]}},"min":{"$ref":"#/components/schemas/PvcClaimMinSize"},"max":{"$ref":"#/components/schemas/PvcClaimMaxSize"},"step":{"$ref":"#/components/schemas/PvcClaimStepSize"}},"type":"object","nullable":true},"PvcClaimSize":{"description":"Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","maxLength":63,"nullable":true},"PvcClaimMinSize":{"description":"Minimum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimMaxSize":{"description":"Maximum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimStepSize":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"AttributesCustomization":{"description":"Defines additional annotation attributes to be applied to PVCs created under this storage class. Each attribute describes an annotation key and its expected value format, display name, and purpose.","type":"array","items":{"$ref":"#/components/schemas/PvcAddedAttribute"}},"PvcAddedAttribute":{"description":"Attribute that is added to any PVC of a given storage class.","required":["key"],"properties":{"key":{"type":"string","minLength":1,"description":"The annotation key for the PVC. Must comply with Kubernetes naming rules: ≤63 characters, beginning and ending with an alphanumeric character ([A-Za-z0-9]), and may include dashes (-), underscores (_), or dots (.).","maxLength":63,"pattern":"^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"},"format":{"description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","$ref":"#/components/schemas/PvcAddedAttributeFormat"},"display":{"type":"string","minLength":1,"description":"User-friendly display name for the attribute, shown in the UI.","nullable":true},"description":{"type":"string","minLength":1,"description":"A description of the attribute's purpose or expected values.","nullable":true},"placeholder":{"type":"string","minLength":1,"description":"Example or hint text for the attribute's value, displayed as a watermark or help message in the UI.","nullable":true},"required":{"description":"Indicates whether this attribute is mandatory.","type":"boolean","nullable":true},"defaultValue":{"description":"Default value assigned to the attribute when not explicitly provided.","type":"string","minLength":1,"nullable":true},"validationRegexp":{"description":"Regular expression used to validate user input for text attributes.","type":"string","minLength":1,"nullable":true},"minValue":{"description":"Minimum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"maxValue":{"description":"Maximum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"step":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"number","minLength":1,"nullable":true},"validationError":{"description":"Custom validation error message shown if input fails validation. If omitted, a default error message is generated automatically.","type":"string","minLength":1,"nullable":true}},"nullable":true,"type":"object"},"PvcAddedAttributeFormat":{"type":"string","description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","enum":["text","number","boolean"],"nullable":true},"StorageClassConfiguration":{"type":"object","required":["id","tenantId","scopeType","scopeId","name"],"properties":{"id":{"description":"The unique identifier of the storage class configuration.","type":"string","format":"uuid"},"tenantId":{"$ref":"#/components/schemas/TenantId"},"scopeType":{"description":"Currently supported value: 'cluster', which is also the default.","type":"string","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"TenantId":{"description":"The id of the tenant.","type":"integer","format":"int32"},"ScopeClusterId":{"description":"The ID of the cluster.","type":"string","format":"uuid"},"StorageClassName":{"description":"The name of the storage class to which the configuration applies.","type":"string"},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/storage-class-configuration/{id}":{"put":{"summary":"Update storage class configuration by id","description":"Updates an existing storage class configuration by its unique identifier. Use this endpoint to fully replace an existing configuration, including permissions and customization settings.","operationId":"update_storage_class_configuration_by_id","tags":["Storage Class Configuration"],"parameters":[{"$ref":"#/components/parameters/StorageClassConfigurationId"},{"name":"tenantId","in":"query","required":false,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfigurationUpdateRequest"}}}},"responses":{"200":{"description":"Storage class configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfiguration"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Delete storage class configuration by id

> Deletes a specific storage class configuration by its unique identifier. Use this endpoint to permanently remove configurations that are no longer needed.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"StorageClassConfigurationId":{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"unique identifier of the storage class configuration"}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}}},"paths":{"/api/v1/storage-class-configuration/{id}":{"delete":{"summary":"Delete storage class configuration by id","description":"Deletes a specific storage class configuration by its unique identifier. Use this endpoint to permanently remove configurations that are no longer needed.","operationId":"delete_storage_class_configuration_by_id","tags":["Storage Class Configuration"],"parameters":[{"$ref":"#/components/parameters/StorageClassConfigurationId"},{"name":"tenantId","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Storage class configuration deleted"},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```

## Patch storage class configuration by id

> Partially updates an existing storage class configuration by its unique identifier. Use this endpoint to modify specific fields, such as permissions, customization values, or attributes, without replacing the entire configuration.

```json
{"openapi":"3.0.3","info":{"title":"NVIDIA Run:ai","version":"2.24"},"tags":[{"name":"Storage Class Configuration"}],"servers":[{"url":"https://app.run.ai"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Bearer authentication"}},"parameters":{"StorageClassConfigurationId":{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"unique identifier of the storage class configuration"}},"schemas":{"StorageClassConfigurationPatchRequest":{"type":"object","properties":{"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"type":"object","allOf":[{"$ref":"#/components/schemas/StorageClassCustomization"},{"$ref":"#/components/schemas/PvcAttributesToRemove"}],"nullable":true}}},"StorageClassPermissions":{"type":"object","nullable":true,"description":"Defines the access permissions and behavioral rules for this storage class.","properties":{"allowedForAssets":{"$ref":"#/components/schemas/AllowedForAssets"},"allowedForWorkloads":{"$ref":"#/components/schemas/AllowedForWorkloads"},"allowedForEphemeralVolumes":{"$ref":"#/components/schemas/AllowedForEphemeralVolumes"},"allowedForPersistentVolumes":{"$ref":"#/components/schemas/AllowedForPersistentVolumes"},"allowDataSharing":{"$ref":"#/components/schemas/AllowDataSharing"}}},"AllowedForAssets":{"type":"boolean","nullable":true,"description":"Determines whether PVC assets can be created using this storage class."},"AllowedForWorkloads":{"type":"boolean","nullable":true,"description":"Allows workloads to include PVCs that use this storage class. When disabled, users cannot (a) include non-existing PVC assets created with this class in asset-based submissions, or (b) attach PVCs with existing=false to workloads using this class."},"AllowedForEphemeralVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create ephemeral volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowedForPersistentVolumes":{"type":"boolean","nullable":true,"description":"Allows workloads to create persistent volumes using this storage class. When disabled, users cannot (a) create PVC assets with autoDelete=true and ephemeral=true, or (b) include PVC instances with isEphemeral=false that use this storage class."},"AllowDataSharing":{"type":"boolean","nullable":true,"description":"Allows creation of PVCs using a shared volume."},"StorageClassCustomization":{"description":"Optional UI/policy controls that define defaults and requirements when creating PVCs with this storage class.","properties":{"accessMode":{"$ref":"#/components/schemas/AccessModeCustomization"},"volumeMode":{"$ref":"#/components/schemas/VolumeModeCustomization"},"claimSize":{"$ref":"#/components/schemas/ClaimSizeCustomization"},"attributes":{"$ref":"#/components/schemas/AttributesCustomization"}},"type":"object","nullable":true},"AccessModeCustomization":{"description":"Controls whether PVC access modes are required and what defaults to apply.","properties":{"required":{"type":"boolean","description":"If true, the accessMode field is mandatory when creating a PVC that uses this storage class.","nullable":true},"default":{"$ref":"#/components/schemas/PvcAccessModes"},"supportedValues":{"$ref":"#/components/schemas/PvcSupportedAccessModes"}},"type":"object","nullable":true},"PvcAccessModes":{"description":"Default access mode(s) applied to newly created PVCs unless explicitly overridden.","properties":{"readWriteOnce":{"description":"Mount the volume as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Mount the volume as read-only by many nodes.","type":"boolean","default":false,"nullable":true},"readWriteMany":{"description":"Mount the volume as read/write by many nodes.","type":"boolean","default":false,"nullable":true}},"nullable":true,"type":"object"},"PvcSupportedAccessModes":{"description":"Defines the access modes supported by the given storage class. These values indicate which access configurations can be used when creating PVCs with this class.","properties":{"readWriteOnce":{"description":"Indicates whether the readWriteOnce access mode is supported. This mode allows a volume to be mounted as read/write by a single node.","type":"boolean","default":true,"nullable":true},"readOnlyMany":{"description":"Indicates whether the readOnlyMany access mode is supported. This mode allows a volume to be mounted as read-only by many nodes.","type":"boolean","default":true,"nullable":true},"readWriteMany":{"description":"Indicates whether the readWriteMany access mode is supported. This mode allows a volume to be mounted as read/write by many nodes.","type":"boolean","default":true,"nullable":true}},"nullable":true,"type":"object"},"VolumeModeCustomization":{"description":"Defines whether the volumeMode field is required when creating PVCs and specifies default and supported modes for the storage class.","properties":{"required":{"type":"boolean","description":"Indicates whether the volumeMode field is mandatory when creating a PVC.","nullable":true},"default":{"$ref":"#/components/schemas/PvcVolumeMode"},"supportedValues":{"description":"Lists which volume modes are supported for this storage class.","type":"object","nullable":true,"properties":{"filesystem":{"type":"boolean","description":"Indicates whether filesystem mode is supported. Filesystem allows the volume to be mounted as a filesystem, enabling the usage of directories and files.","default":true,"nullable":true},"block":{"type":"boolean","description":"Indicates whether block mode is supported. Exposes the volume as a block storage, which can be formatted or used by applications directly without a filesystem.","default":true,"nullable":true}}}},"type":"object","nullable":true},"PvcVolumeMode":{"description":"Default volume mode for the PVC. Choose between Filesystem (default) or Block.","type":"string","enum":["Filesystem","Block"],"nullable":true},"ClaimSizeCustomization":{"description":"Defines the default, supported units, and range constraints for PVC claim sizes. These settings control the requested storage capacity when creating a PVC using this storage class.","properties":{"default":{"$ref":"#/components/schemas/PvcClaimSize"},"supportedUnits":{"description":"Units supported for specifying PVC sizes. Valid values: \"MB\", \"MiB\", \"GB\", \"GiB\", \"TB\", \"TiB\".","type":"array","items":{"type":"string","enum":["MB","MiB","GB","GiB","TB","TiB"]}},"min":{"$ref":"#/components/schemas/PvcClaimMinSize"},"max":{"$ref":"#/components/schemas/PvcClaimMaxSize"},"step":{"$ref":"#/components/schemas/PvcClaimStepSize"}},"type":"object","nullable":true},"PvcClaimSize":{"description":"Requested size for the PVC. Mandatory when existingPvc is false. Recommended sizes: TB/GB/MB/TIB/GIB/MIB","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","maxLength":63,"nullable":true},"PvcClaimMinSize":{"description":"Minimum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimMaxSize":{"description":"Maximum claim size allowed for PVCs created with this storage class. Mandatory when existingPvc = false. Recommended values: TB, GB, MB, TIB, GIB, MIB.","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"PvcClaimStepSize":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"string","pattern":"^([+]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$","nullable":true},"AttributesCustomization":{"description":"Defines additional annotation attributes to be applied to PVCs created under this storage class. Each attribute describes an annotation key and its expected value format, display name, and purpose.","type":"array","items":{"$ref":"#/components/schemas/PvcAddedAttribute"}},"PvcAddedAttribute":{"description":"Attribute that is added to any PVC of a given storage class.","required":["key"],"properties":{"key":{"type":"string","minLength":1,"description":"The annotation key for the PVC. Must comply with Kubernetes naming rules: ≤63 characters, beginning and ending with an alphanumeric character ([A-Za-z0-9]), and may include dashes (-), underscores (_), or dots (.).","maxLength":63,"pattern":"^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"},"format":{"description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","$ref":"#/components/schemas/PvcAddedAttributeFormat"},"display":{"type":"string","minLength":1,"description":"User-friendly display name for the attribute, shown in the UI.","nullable":true},"description":{"type":"string","minLength":1,"description":"A description of the attribute's purpose or expected values.","nullable":true},"placeholder":{"type":"string","minLength":1,"description":"Example or hint text for the attribute's value, displayed as a watermark or help message in the UI.","nullable":true},"required":{"description":"Indicates whether this attribute is mandatory.","type":"boolean","nullable":true},"defaultValue":{"description":"Default value assigned to the attribute when not explicitly provided.","type":"string","minLength":1,"nullable":true},"validationRegexp":{"description":"Regular expression used to validate user input for text attributes.","type":"string","minLength":1,"nullable":true},"minValue":{"description":"Minimum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"maxValue":{"description":"Maximum allowed value for attributes of type number.","type":"number","minLength":1,"nullable":true},"step":{"description":"Defines the incremental step between allowed numeric values (for example, 1, 0.1).","type":"number","minLength":1,"nullable":true},"validationError":{"description":"Custom validation error message shown if input fails validation. If omitted, a default error message is generated automatically.","type":"string","minLength":1,"nullable":true}},"nullable":true,"type":"object"},"PvcAddedAttributeFormat":{"type":"string","description":"Defines the data type the attribute can accept. Enum: \"text\" \"number\" \"boolean\"","enum":["text","number","boolean"],"nullable":true},"PvcAttributesToRemove":{"description":"optional list of attributes that you wish to remove","properties":{"attributesToRemove":{"type":"array","items":{"type":"string"}}},"type":"object","nullable":true},"StorageClassConfiguration":{"type":"object","required":["id","tenantId","scopeType","scopeId","name"],"properties":{"id":{"description":"The unique identifier of the storage class configuration.","type":"string","format":"uuid"},"tenantId":{"$ref":"#/components/schemas/TenantId"},"scopeType":{"description":"Currently supported value: 'cluster', which is also the default.","type":"string","enum":["cluster"],"default":"cluster"},"scopeId":{"$ref":"#/components/schemas/ScopeClusterId"},"name":{"$ref":"#/components/schemas/StorageClassName"},"permissions":{"$ref":"#/components/schemas/StorageClassPermissions"},"customization":{"$ref":"#/components/schemas/StorageClassCustomization"}}},"TenantId":{"description":"The id of the tenant.","type":"integer","format":"int32"},"ScopeClusterId":{"description":"The ID of the cluster.","type":"string","format":"uuid"},"StorageClassName":{"description":"The name of the storage class to which the configuration applies.","type":"string"},"Error":{"required":["code","message"],"properties":{"code":{"type":"integer","minimum":100,"maximum":599},"message":{"type":"string"},"details":{"type":"string"}}}},"responses":{"401Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404NotFound":{"description":"The specified resource was not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500InternalServerError":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503ServiceUnavailable":{"description":"unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/storage-class-configuration/{id}":{"patch":{"summary":"Patch storage class configuration by id","description":"Partially updates an existing storage class configuration by its unique identifier. Use this endpoint to modify specific fields, such as permissions, customization values, or attributes, without replacing the entire configuration.","operationId":"patch_storage_class_configuration_by_id","tags":["Storage Class Configuration"],"parameters":[{"$ref":"#/components/parameters/StorageClassConfigurationId"},{"name":"tenantId","in":"query","required":false,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfigurationPatchRequest"}}}},"responses":{"200":{"description":"Storage class configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StorageClassConfiguration"}}}},"401":{"$ref":"#/components/responses/401Unauthorized"},"403":{"$ref":"#/components/responses/403Forbidden"},"404":{"$ref":"#/components/responses/404NotFound"},"500":{"$ref":"#/components/responses/500InternalServerError"},"503":{"$ref":"#/components/responses/503ServiceUnavailable"}}}}}}
```
