List your org's buckets
Returns the caller's own buckets under the friendly names they were created with, each with its creation time.
GET /v1/s3/buckets
| Address | https://api.hanzo.ai/v1/s3/buckets |
| Method | GET |
| Operation | get_s3_buckets |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Returns the caller's own buckets under the friendly names they were created with, each with its creation time.
Another tenant's bucket is not refused, it is INVISIBLE — a bucket outside the caller's namespace is skipped during the listing rather than reported, so the operation cannot be used to discover that a name is taken elsewhere.
A validated principal is required, and every bucket and key is resolved inside the caller's own org: physical bucket names are derived from the org, so a tenant cannot name another's storage. The operation is billed per call — the balance is checked BEFORE anything is touched, so an unfunded org is refused with nothing done, and the debit happens only after the work succeeds. Object storage that is not configured answers 503 under this subsystem's own name rather than falling through to another.
Request
GET /v1/s3/buckets takes no parameters and no body — the credential is the whole request.
Response
The document declares no response body for this operation. It answers 200 on success and the platform error shape on failure — see Errors.
Examples
hanzo s3 buckets listimport { Configuration, S3Api } from 'hanzoai';
const api = new S3Api(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getS3Buckets();from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import S3Api
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = S3Api(client).get_s3_buckets()cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.S3API.GetS3Buckets(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, s3_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = s3_api::get_s3_buckets(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.S3Api;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new S3Api(client).getS3Buckets();curl https://api.hanzo.ai/v1/s3/buckets \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches s3 through the storage tool, which names its 8 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "list_s3_buckets"
}
}
}'How is this guide?