API: Object storage
Generated from the API's OpenAPI schema. Paths are relative to https://cloud.tebibhost.com. Authentication, errors, pagination and idempotency are on the API overview.
GET/api/v1/projects/{project_id}/buckets
List Buckets (listBuckets)
IAM action: storage:DescribeBucket
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
limit | query | integer (nullable) | |
cursor | query | string (nullable) |
Responses
200OK (Page_BucketOut_)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of Page_BucketOut_
| Field | Type | Description |
|---|---|---|
items | array of BucketOut | |
next_cursor | string (nullable) |
POST/api/v1/projects/{project_id}/buckets
Create Bucket (createBucket)
A new bucket. Public-read also needs storage:PutBucketPolicy and a verified account.
IAM action: storage:CreateBucketstorage:PutBucketPolicy
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string |
Request body (JSON, BucketIn)
| Field | Type | Description |
|---|---|---|
description | string | Default: "". |
max_size_gib | integer (nullable) | |
name required | string | The S3 bucket name: 3-63 lowercase letters, digits and '-', unique in the region |
tags | object | |
visibility | "private" | "public-read" | Default: "private". |
Responses
202Accepted (BucketOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of BucketOut
| Field | Type | Description |
|---|---|---|
created_at | string (date-time) | |
description | string | |
endpoint | string | |
id | string | |
max_size_gib | integer (nullable) | |
name | string | |
object_count | integer | |
observed_at | string (date-time) (nullable) | |
project_id | string | |
state | string | |
status_message | string | |
stored_bytes | integer | As the controller last observed it (about 1 min) |
tags | object | |
trn | string | |
updated_at | string (date-time) | |
url | string | Path-style URL of the bucket |
visibility | string |
GET/api/v1/projects/{project_id}/buckets/{bucket_id}
Get Bucket (getBucket)
IAM action: storage:DescribeBucket
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
bucket_id required | path | string |
Responses
200OK (BucketOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of BucketOut
| Field | Type | Description |
|---|---|---|
created_at | string (date-time) | |
description | string | |
endpoint | string | |
id | string | |
max_size_gib | integer (nullable) | |
name | string | |
object_count | integer | |
observed_at | string (date-time) (nullable) | |
project_id | string | |
state | string | |
status_message | string | |
stored_bytes | integer | As the controller last observed it (about 1 min) |
tags | object | |
trn | string | |
updated_at | string (date-time) | |
url | string | Path-style URL of the bucket |
visibility | string |
PATCH/api/v1/projects/{project_id}/buckets/{bucket_id}
Update Bucket (updateBucket)
Description, tags, size cap; visibility needs storage:PutBucketPolicy.
IAM action: storage:UpdateBucketstorage:PutBucketPolicy
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
bucket_id required | path | string |
Request body (JSON, BucketPatch)
| Field | Type | Description |
|---|---|---|
description | string (nullable) | |
max_size_gib | integer (nullable) | 0 removes the bucket's own size cap |
tags | object (nullable) | |
visibility | "private" | "public-read" (nullable) |
Responses
200OK (BucketOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of BucketOut
| Field | Type | Description |
|---|---|---|
created_at | string (date-time) | |
description | string | |
endpoint | string | |
id | string | |
max_size_gib | integer (nullable) | |
name | string | |
object_count | integer | |
observed_at | string (date-time) (nullable) | |
project_id | string | |
state | string | |
status_message | string | |
stored_bytes | integer | As the controller last observed it (about 1 min) |
tags | object | |
trn | string | |
updated_at | string (date-time) | |
url | string | Path-style URL of the bucket |
visibility | string |
DELETE/api/v1/projects/{project_id}/buckets/{bucket_id}
Delete Bucket (deleteBucket)
Only an empty bucket, unless force. A bucket whose delete waits for it to be emptied takes no new objects; force on it finishes the job.
IAM action: storage:DeleteBucketstorage:ForceDeleteBucket
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
bucket_id required | path | string | |
force | query | boolean | Delete the objects too (needs storage:ForceDeleteBucket) |
Responses
202Accepted (BucketOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of BucketOut
| Field | Type | Description |
|---|---|---|
created_at | string (date-time) | |
description | string | |
endpoint | string | |
id | string | |
max_size_gib | integer (nullable) | |
name | string | |
object_count | integer | |
observed_at | string (date-time) (nullable) | |
project_id | string | |
state | string | |
status_message | string | |
stored_bytes | integer | As the controller last observed it (about 1 min) |
tags | object | |
trn | string | |
updated_at | string (date-time) | |
url | string | Path-style URL of the bucket |
visibility | string |
GET/api/v1/projects/{project_id}/storage
Get Storage (getStorage)
Where the project's buckets are served, and what it stores.
IAM action: storage:DescribeStorage
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string |
Responses
200OK (StorageOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageOut
| Field | Type | Description |
|---|---|---|
access_keys | integer | |
buckets | integer | |
endpoint | string | S3 endpoint, path-style (https://<endpoint>/<bucket>/<key>) |
project_id | string | |
quota_gib | integer | The project's storage quota (storage_gib) |
region | string | The region name S3 clients sign requests with |
state | string | The project's storage account: none, creating, active... |
stored_bytes | integer |
GET/api/v1/projects/{project_id}/storage-keys
List Storage Keys (listStorageKeys)
IAM action: storage:DescribeAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
limit | query | integer (nullable) | |
cursor | query | string (nullable) |
Responses
200OK (Page_StorageKeyOut_)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of Page_StorageKeyOut_
| Field | Type | Description |
|---|---|---|
items | array of StorageKeyOut | |
next_cursor | string (nullable) |
POST/api/v1/projects/{project_id}/storage-keys
Create Storage Key (createStorageKey)
A new S3 key for the caller or a service account. The secret is in this response only.
IAM action: storage:CreateAccessKeyiam:CreateAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string |
Request body (JSON, StorageKeyIn)
| Field | Type | Description |
|---|---|---|
description | string | Default: "". |
name required | string | |
service_account_id | string (nullable) | Give the key to this service account (default: the caller, a user) |
tags | object |
Responses
202Accepted (StorageKeyCreatedOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageKeyCreatedOut
| Field | Type | Description |
|---|---|---|
access_key_id | string | |
created_at | string (date-time) | |
description | string | |
effective_status | string | pending, active, inactive, holder-inactive or lost: what S3 sees now |
endpoint | string | |
holder | string | TRN of the user or service account holding the key |
id | string | |
name | string | |
previous_access_key_id | string (nullable) | After a rotation: the old key, still accepted until previous_expires_at |
previous_expires_at | string (date-time) (nullable) | |
project_id | string | |
region | string | |
rotated_at | string (date-time) (nullable) | |
secret_access_key | string (nullable) | Shown once, here. None when an Idempotency-Key replays an earlier create |
state | string | |
status | string | active or inactive, as set through the API |
status_message | string | |
tags | object | |
trn | string | |
updated_at | string (date-time) |
GET/api/v1/projects/{project_id}/storage-keys/{key_id}
Get Storage Key (getStorageKey)
IAM action: storage:DescribeAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
key_id required | path | string |
Responses
200OK (StorageKeyOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageKeyOut
| Field | Type | Description |
|---|---|---|
access_key_id | string | |
created_at | string (date-time) | |
description | string | |
effective_status | string | pending, active, inactive, holder-inactive or lost: what S3 sees now |
endpoint | string | |
holder | string | TRN of the user or service account holding the key |
id | string | |
name | string | |
previous_access_key_id | string (nullable) | After a rotation: the old key, still accepted until previous_expires_at |
previous_expires_at | string (date-time) (nullable) | |
project_id | string | |
rotated_at | string (date-time) (nullable) | |
state | string | |
status | string | active or inactive, as set through the API |
status_message | string | |
tags | object | |
trn | string | |
updated_at | string (date-time) |
PATCH/api/v1/projects/{project_id}/storage-keys/{key_id}
Update Storage Key (updateStorageKey)
Description, tags, or turn the key off and on (status).
IAM action: storage:UpdateAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
key_id required | path | string |
Request body (JSON, StorageKeyPatch)
| Field | Type | Description |
|---|---|---|
description | string (nullable) | |
status | "active" | "inactive" (nullable) | |
tags | object (nullable) |
Responses
200OK (StorageKeyOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageKeyOut
| Field | Type | Description |
|---|---|---|
access_key_id | string | |
created_at | string (date-time) | |
description | string | |
effective_status | string | pending, active, inactive, holder-inactive or lost: what S3 sees now |
endpoint | string | |
holder | string | TRN of the user or service account holding the key |
id | string | |
name | string | |
previous_access_key_id | string (nullable) | After a rotation: the old key, still accepted until previous_expires_at |
previous_expires_at | string (date-time) (nullable) | |
project_id | string | |
rotated_at | string (date-time) (nullable) | |
state | string | |
status | string | active or inactive, as set through the API |
status_message | string | |
tags | object | |
trn | string | |
updated_at | string (date-time) |
DELETE/api/v1/projects/{project_id}/storage-keys/{key_id}
Delete Storage Key (deleteStorageKey)
IAM action: storage:DeleteAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
key_id required | path | string |
Responses
202Accepted (StorageKeyOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageKeyOut
| Field | Type | Description |
|---|---|---|
access_key_id | string | |
created_at | string (date-time) | |
description | string | |
effective_status | string | pending, active, inactive, holder-inactive or lost: what S3 sees now |
endpoint | string | |
holder | string | TRN of the user or service account holding the key |
id | string | |
name | string | |
previous_access_key_id | string (nullable) | After a rotation: the old key, still accepted until previous_expires_at |
previous_expires_at | string (date-time) (nullable) | |
project_id | string | |
rotated_at | string (date-time) (nullable) | |
state | string | |
status | string | active or inactive, as set through the API |
status_message | string | |
tags | object | |
trn | string | |
updated_at | string (date-time) |
POST/api/v1/projects/{project_id}/storage-keys/{key_id}/rotate
Rotate Storage Key (rotateStorageKey)
A new key ID and secret for the same key. The old pair keeps working for previous_valid_hours (default 24), so clients can move over without downtime.
IAM action: storage:RotateAccessKey
| Parameter | In | Type | Description |
|---|---|---|---|
project_id required | path | string | |
key_id required | path | string |
Request body (JSON, RotateIn)
| Field | Type | Description |
|---|---|---|
previous_valid_hours | integer | How long the old key keeps working (0: stops at once) Default: 24. |
Responses
202Accepted (StorageKeyCreatedOut)400Invalid request (ErrorOut)401Not authenticated (ErrorOut)403Access denied: the error names the action and the resource (ErrorOut)404Not found (also: the resource belongs to another organization) (ErrorOut)409Conflict or quota exceeded (ErrorOut)422Idempotency key reused for a different request (ErrorOut)429Rate limited (ErrorOut)
Fields of StorageKeyCreatedOut
| Field | Type | Description |
|---|---|---|
access_key_id | string | |
created_at | string (date-time) | |
description | string | |
effective_status | string | pending, active, inactive, holder-inactive or lost: what S3 sees now |
endpoint | string | |
holder | string | TRN of the user or service account holding the key |
id | string | |
name | string | |
previous_access_key_id | string (nullable) | After a rotation: the old key, still accepted until previous_expires_at |
previous_expires_at | string (date-time) (nullable) | |
project_id | string | |
region | string | |
rotated_at | string (date-time) (nullable) | |
secret_access_key | string (nullable) | Shown once, here. None when an Idempotency-Key replays an earlier create |
state | string | |
status | string | active or inactive, as set through the API |
status_message | string | |
tags | object | |
trn | string | |
updated_at | string (date-time) |