# Storage classes

A storage class is a volume's performance tier. Learn which classes exist, which one you can select today, and how to read the catalog.

A storage class is the performance tier of a volume, chosen when you create or import it. `gp1` (general purpose, SSD-backed) is the only class you can select, and it’s the class a volume gets when you don’t name one.

## Published classes [#published-classes]

The platform publishes three classes. Only those with `available: true` in the catalog can be selected.

| Class | Display name | Media | Available |
| --- | --- | --- | --- |
| `gp1` | General Purpose | SSD | Yes (default) |
| `st1` | Throughput Optimized | HDD | No |
| `io1` | I/O Intensive | SSD | No |

Read the catalog rather than relying on this table. The `pvs.storageClasses` query and the `origin storage list-storage-classes` command return every published class with its display name, backing media, whether it’s the default, and its `available` flag. The catalog is platform-wide and needs no permission.

```graphql
query {
  pvs {
    storageClasses {
      storageClass
      displayName
      media
      isDefault
      available
    }
  }
}
```

## Choosing a class [#choosing-a-class]

Pass the class identifier as `storageClass` on the `createVolume` or `importVolume` mutation, or as `--storage-class` on `origin storage create-volume` and `origin storage import-volume`. Omit it to get the default.

The platform answers two kinds of wrong values differently:

| Value | What happens |
| --- | --- |
| A published class that isn’t available | For example, `st1` or `io1`. The request is refused with [`PRODUCT_UNAVAILABLE`](/docs/platform/reference/errors#product_unavailable), and the message lists the classes you can use. Nothing is created. |
| A class that doesn’t exist | For example, a typo such as `gp2`. The request is refused with [`BAD_REQUEST`](/docs/platform/reference/errors#bad_request) and the message `invalid storage_class`. Nothing is created. |

## Existing volumes [#existing-volumes]

A volume keeps the class it was created with. A volume that was created in a class that isn’t selectable now keeps working and stays on its own media. The `available` flag only governs new volumes.

## Price [#price]

Volumes are billed per GiB of provisioned size per hour. List prices as of 2026-10-13 (EUR, excluding VAT):

| Product | List price | About, per month (730 hours) |
| --- | --- | --- |
| `gp1` volume | €0.00009589 per GiB-hour | €0.07 per GiB, so a 20 GiB volume is about €1.40 |
| Snapshot | €0.000045644 per GiB-hour | €0.033 per GiB |

The price list also has entries for `st1` and `io1`, which you can’t select today. A completed snapshot is billed for the size of the volume it was taken from. Read the current values from the [price list](/docs/pricing/reference/price-list-api#storage_volume); see [Pricing](/docs/pricing).

## Related [#related]

- [Create a volume](/docs/storage/volumes/create)
- [Import a disk image as a volume](/docs/storage/volumes/import)
- [`list-storage-classes` command](/docs/storage/reference/cli#list-storage-classes)
- [Pricing](/docs/pricing)

Volume storage classes on origincloud.eu describes what each tier is for.

