Volume statuses
Snapshots use a shorter set:
creating, available, deleting, error.
Quotas
Four storage counters, all scoped to your organization within a region:Quota is consumed for the lifetime of a row, not just while it is healthy. A
volume parked in
error still counts against volumes and
volume_storage_gb — which mirrors what you can see — so delete failed
volumes rather than leaving them.volume_storage_gb is refused up front rather than half-applied.
Listing and pagination
Volumes, snapshots and policies are listed newest-first and paginated with an opaque cursor. Passmarker from the previous page’s meta to get the next
one:
name (case-insensitive substring) and
status; snapshots take volume_id to narrow to one volume, and policies take
volume_id and enabled.
Troubleshooting
Create rejected the volume type
Create rejected the volume type
Not every tier a volume can report is one you may create on. Use
ssd or
nvme. GET /v1/volume-types always lists exactly what is creatable.Extend returns 409 VOLUME_NOT_AVAILABLE
Extend returns 409 VOLUME_NOT_AVAILABLE
The volume is not in
available. Attached volumes (in_use) are the
common case — detach, extend, re-attach. A volume mid-creating,
extending or deleting also refuses, and settles on its own.A boot volume can never reach available while its instance exists, so an
extend on one has no path to success. Move the data onto a separate volume,
or rebuild the instance with a larger boot volume.Delete returns 409 VOLUME_HAS_SNAPSHOTS
Delete returns 409 VOLUME_HAS_SNAPSHOTS
List them with
GET /v1/snapshots?volume_id=<id> and delete them first. If
a snapshot policy is still attached it may be creating new ones behind you
— delete the policy, or pause it with enabled: false, before clearing the
backlog.A snapshot policy has stopped taking snapshots
A snapshot policy has stopped taking snapshots
Read
last_error on the policy. The usual causes are an exhausted
snapshots quota — clear space by lowering retention_count or deleting
old snapshots — and a volume that was in a transient state when the window
came around, which resolves itself on the next run.A policy with enabled: false produces nothing at all, and next_run_at
tells you whether the schedule believes it is due.A restored volume came back the wrong size
A restored volume came back the wrong size
A restore clones the snapshot and then grows to the
size_gb you asked
for, so it is never smaller than the snapshot’s frozen size. The
filesystem inside it is still the size it was when the snapshot was taken —
expand it in the guest.Status is error
Status is error
error_message carries the last failure. The row keeps its quota while it
exists, so delete a volume or snapshot you do not intend to retry.Quotas
Two counters, both scoped to your organization within a region:object_storage_gb is enforced by comparing what you actually store against the
limit, not by a running counter. That means space freed by a lifecycle
expiration, a version delete or a bucket purge comes back on its own — there is
no counter left holding a phantom charge against your cap.
Troubleshooting
SignatureDoesNotMatch
SignatureDoesNotMatch
The secret does not match the access key, or something the client signed
was rewritten in transit. Check first that the credential is right, then
that your client is signing with SigV4 (
signature_version="s3v4") — the
endpoint accepts nothing older.A key or query value containing a space or a + is a classic case: those
have to be percent-encoded in the canonical request, and an SDK doing it
correctly will interoperate.RequestTimeTooSkewed
RequestTimeTooSkewed
Your clock is more than 15 minutes from the server’s. Fix time sync on the
machine making the request; there is no way to widen the window.
AccessDenied on a bucket you own
AccessDenied on a bucket you own
An explicit
deny in either layer wins, so start there: a bucket
policy denying something is enough to block a caller their IAM policies
allow, and the reverse holds too. With no explicit deny anywhere, you need
an allow from one of the two — a bucket policy that names other principals
is not itself a denial, but it will not stand in for the IAM grant you are
missing.Deleting an object also fails with 403 when it is protected by an active
retention period or a legal hold, which reads like a permission problem but
is not one.BucketNotEmpty on delete
BucketNotEmpty on delete
Objects, versions, or in-flight multipart uploads remain. List uploads with
GET /v1/buckets/{bucket}/multipart-uploads — an abandoned upload holds
the bucket open just as an object does, and does not show in an object
listing.EntityTooSmall at completion
EntityTooSmall at completion
A part other than the last one is under 5 MiB. The floor is checked when
the upload completes, so this surfaces after every part has been staged.
Re-upload with larger parts.
The object is not encrypted despite the bucket default
The object is not encrypted despite the bucket default
A bucket default applies to writes made after it was set; existing
objects are untouched. Re-upload anything already stored if you need it
covered. Check
ServerSideEncryption on a HEAD of the stored object,
which is the only answer that reflects what was written.