Skip to content

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

ParameterInTypeDescription
project_id requiredpathstring
limitqueryinteger (nullable)
cursorquerystring (nullable)

Responses

  • 200 OK (Page_BucketOut_)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of Page_BucketOut_
FieldTypeDescription
itemsarray of BucketOut
next_cursorstring (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

ParameterInTypeDescription
project_id requiredpathstring

Request body (JSON, BucketIn)

FieldTypeDescription
descriptionstring Default: "".
max_size_gibinteger (nullable)
name requiredstringThe S3 bucket name: 3-63 lowercase letters, digits and '-', unique in the region
tagsobject
visibility"private" | "public-read" Default: "private".

Responses

  • 202 Accepted (BucketOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of BucketOut
FieldTypeDescription
created_atstring (date-time)
descriptionstring
endpointstring
idstring
max_size_gibinteger (nullable)
namestring
object_countinteger
observed_atstring (date-time) (nullable)
project_idstring
statestring
status_messagestring
stored_bytesintegerAs the controller last observed it (about 1 min)
tagsobject
trnstring
updated_atstring (date-time)
urlstringPath-style URL of the bucket
visibilitystring

GET/api/v1/projects/{project_id}/buckets/{bucket_id}

Get Bucket (getBucket)

IAM action: storage:DescribeBucket

ParameterInTypeDescription
project_id requiredpathstring
bucket_id requiredpathstring

Responses

  • 200 OK (BucketOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of BucketOut
FieldTypeDescription
created_atstring (date-time)
descriptionstring
endpointstring
idstring
max_size_gibinteger (nullable)
namestring
object_countinteger
observed_atstring (date-time) (nullable)
project_idstring
statestring
status_messagestring
stored_bytesintegerAs the controller last observed it (about 1 min)
tagsobject
trnstring
updated_atstring (date-time)
urlstringPath-style URL of the bucket
visibilitystring

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

ParameterInTypeDescription
project_id requiredpathstring
bucket_id requiredpathstring

Request body (JSON, BucketPatch)

FieldTypeDescription
descriptionstring (nullable)
max_size_gibinteger (nullable)0 removes the bucket's own size cap
tagsobject (nullable)
visibility"private" | "public-read" (nullable)

Responses

  • 200 OK (BucketOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of BucketOut
FieldTypeDescription
created_atstring (date-time)
descriptionstring
endpointstring
idstring
max_size_gibinteger (nullable)
namestring
object_countinteger
observed_atstring (date-time) (nullable)
project_idstring
statestring
status_messagestring
stored_bytesintegerAs the controller last observed it (about 1 min)
tagsobject
trnstring
updated_atstring (date-time)
urlstringPath-style URL of the bucket
visibilitystring

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

ParameterInTypeDescription
project_id requiredpathstring
bucket_id requiredpathstring
forcequerybooleanDelete the objects too (needs storage:ForceDeleteBucket)

Responses

  • 202 Accepted (BucketOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of BucketOut
FieldTypeDescription
created_atstring (date-time)
descriptionstring
endpointstring
idstring
max_size_gibinteger (nullable)
namestring
object_countinteger
observed_atstring (date-time) (nullable)
project_idstring
statestring
status_messagestring
stored_bytesintegerAs the controller last observed it (about 1 min)
tagsobject
trnstring
updated_atstring (date-time)
urlstringPath-style URL of the bucket
visibilitystring

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

ParameterInTypeDescription
project_id requiredpathstring

Responses

  • 200 OK (StorageOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageOut
FieldTypeDescription
access_keysinteger
bucketsinteger
endpointstringS3 endpoint, path-style (https://<endpoint>/<bucket>/<key>)
project_idstring
quota_gibintegerThe project's storage quota (storage_gib)
regionstringThe region name S3 clients sign requests with
statestringThe project's storage account: none, creating, active...
stored_bytesinteger

GET/api/v1/projects/{project_id}/storage-keys

List Storage Keys (listStorageKeys)

IAM action: storage:DescribeAccessKey

ParameterInTypeDescription
project_id requiredpathstring
limitqueryinteger (nullable)
cursorquerystring (nullable)

Responses

  • 200 OK (Page_StorageKeyOut_)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of Page_StorageKeyOut_
FieldTypeDescription
itemsarray of StorageKeyOut
next_cursorstring (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

ParameterInTypeDescription
project_id requiredpathstring

Request body (JSON, StorageKeyIn)

FieldTypeDescription
descriptionstring Default: "".
name requiredstring
service_account_idstring (nullable)Give the key to this service account (default: the caller, a user)
tagsobject

Responses

  • 202 Accepted (StorageKeyCreatedOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageKeyCreatedOut
FieldTypeDescription
access_key_idstring
created_atstring (date-time)
descriptionstring
effective_statusstringpending, active, inactive, holder-inactive or lost: what S3 sees now
endpointstring
holderstringTRN of the user or service account holding the key
idstring
namestring
previous_access_key_idstring (nullable)After a rotation: the old key, still accepted until previous_expires_at
previous_expires_atstring (date-time) (nullable)
project_idstring
regionstring
rotated_atstring (date-time) (nullable)
secret_access_keystring (nullable)Shown once, here. None when an Idempotency-Key replays an earlier create
statestring
statusstringactive or inactive, as set through the API
status_messagestring
tagsobject
trnstring
updated_atstring (date-time)

GET/api/v1/projects/{project_id}/storage-keys/{key_id}

Get Storage Key (getStorageKey)

IAM action: storage:DescribeAccessKey

ParameterInTypeDescription
project_id requiredpathstring
key_id requiredpathstring

Responses

  • 200 OK (StorageKeyOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageKeyOut
FieldTypeDescription
access_key_idstring
created_atstring (date-time)
descriptionstring
effective_statusstringpending, active, inactive, holder-inactive or lost: what S3 sees now
endpointstring
holderstringTRN of the user or service account holding the key
idstring
namestring
previous_access_key_idstring (nullable)After a rotation: the old key, still accepted until previous_expires_at
previous_expires_atstring (date-time) (nullable)
project_idstring
rotated_atstring (date-time) (nullable)
statestring
statusstringactive or inactive, as set through the API
status_messagestring
tagsobject
trnstring
updated_atstring (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

ParameterInTypeDescription
project_id requiredpathstring
key_id requiredpathstring

Request body (JSON, StorageKeyPatch)

FieldTypeDescription
descriptionstring (nullable)
status"active" | "inactive" (nullable)
tagsobject (nullable)

Responses

  • 200 OK (StorageKeyOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageKeyOut
FieldTypeDescription
access_key_idstring
created_atstring (date-time)
descriptionstring
effective_statusstringpending, active, inactive, holder-inactive or lost: what S3 sees now
endpointstring
holderstringTRN of the user or service account holding the key
idstring
namestring
previous_access_key_idstring (nullable)After a rotation: the old key, still accepted until previous_expires_at
previous_expires_atstring (date-time) (nullable)
project_idstring
rotated_atstring (date-time) (nullable)
statestring
statusstringactive or inactive, as set through the API
status_messagestring
tagsobject
trnstring
updated_atstring (date-time)

DELETE/api/v1/projects/{project_id}/storage-keys/{key_id}

Delete Storage Key (deleteStorageKey)

IAM action: storage:DeleteAccessKey

ParameterInTypeDescription
project_id requiredpathstring
key_id requiredpathstring

Responses

  • 202 Accepted (StorageKeyOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageKeyOut
FieldTypeDescription
access_key_idstring
created_atstring (date-time)
descriptionstring
effective_statusstringpending, active, inactive, holder-inactive or lost: what S3 sees now
endpointstring
holderstringTRN of the user or service account holding the key
idstring
namestring
previous_access_key_idstring (nullable)After a rotation: the old key, still accepted until previous_expires_at
previous_expires_atstring (date-time) (nullable)
project_idstring
rotated_atstring (date-time) (nullable)
statestring
statusstringactive or inactive, as set through the API
status_messagestring
tagsobject
trnstring
updated_atstring (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

ParameterInTypeDescription
project_id requiredpathstring
key_id requiredpathstring

Request body (JSON, RotateIn)

FieldTypeDescription
previous_valid_hoursintegerHow long the old key keeps working (0: stops at once) Default: 24.

Responses

  • 202 Accepted (StorageKeyCreatedOut)
  • 400 Invalid request (ErrorOut)
  • 401 Not authenticated (ErrorOut)
  • 403 Access denied: the error names the action and the resource (ErrorOut)
  • 404 Not found (also: the resource belongs to another organization) (ErrorOut)
  • 409 Conflict or quota exceeded (ErrorOut)
  • 422 Idempotency key reused for a different request (ErrorOut)
  • 429 Rate limited (ErrorOut)
Fields of StorageKeyCreatedOut
FieldTypeDescription
access_key_idstring
created_atstring (date-time)
descriptionstring
effective_statusstringpending, active, inactive, holder-inactive or lost: what S3 sees now
endpointstring
holderstringTRN of the user or service account holding the key
idstring
namestring
previous_access_key_idstring (nullable)After a rotation: the old key, still accepted until previous_expires_at
previous_expires_atstring (date-time) (nullable)
project_idstring
regionstring
rotated_atstring (date-time) (nullable)
secret_access_keystring (nullable)Shown once, here. None when an Idempotency-Key replays an earlier create
statestring
statusstringactive or inactive, as set through the API
status_messagestring
tagsobject
trnstring
updated_atstring (date-time)