List objects
Lists one folder level of a bucket. Folder-style by default: sub-prefixes come back as directory entries, which is the file-manager view.
GET /v1/s3/buckets/{bucket}/objects
| Address | https://api.hanzo.ai/v1/s3/buckets/{bucket}/objects |
| Method | GET |
| Operation | get_s3_buckets_by_bucket_objects |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Lists one folder level of a bucket.
Folder-style by default: sub-prefixes come back as directory entries, which is
the file-manager view. ?recursive=true lists every key flat under the prefix
instead. Keys are RELATIVE to ?prefix=, and the listing is bounded so a huge
bucket cannot exhaust memory — Total is what came back, not what the bucket
holds.
Billed per call: the balance is checked BEFORE anything is touched, so an unfunded org is refused with nothing read, and the debit lands only once the listing has succeeded.
Request
3 fields.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
bucket | path | string | yes | Bucket is the bucket to list, from the path. |
prefix | query | string | — | |
recursive | query | string | — |
Response
| Status | Body | Meaning |
|---|---|---|
200 | objectList | ok |
200 body — 9 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
bucket | body | string | — | Bucket is the bucket that was listed, friendly name. |
objects | body | objectItem[] | — | Objects are the entries at this level, keys RELATIVE to Prefix. |
objects[].etag | body | string | — | ETag is the store's entity tag for the bytes currently at this key, with the quotes the store wraps it in stripped. |
objects[].isDir | body | boolean | — | true for a folder (common prefix) |
objects[].key | body | string | — | key RELATIVE to the requested prefix |
objects[].lastModified | body | integer | — | unix seconds (0 for a folder) |
objects[].size | body | integer | — | bytes (0 for a folder) |
prefix | body | string | — | Prefix is the sub-folder the listing was scoped to, cleaned. |
total | body | integer | — | Total is how many entries came back. The listing is BOUNDED, so a bucket with more keys than the cap answers the cap and this says so — it is not a count of… |
Failure carries the platform error shape — see Errors.
Examples
hanzo s3 buckets objects get <bucket>import { Configuration, S3Api } from 'hanzoai';
const api = new S3Api(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getS3BucketsByBucketObjects({ bucket: 'bucket' });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_by_bucket_objects(bucket='bucket')cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.S3API.GetS3BucketsByBucketObjects(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_by_bucket_objects(&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).getS3BucketsByBucketObjects();curl https://api.hanzo.ai/v1/s3/buckets/<bucket>/objects \
-H "Authorization: Bearer $HANZO_API_KEY"MCP reaches s3 through the storage tool, which names its 8 operations with its own verbs — this one among them, under a name only MCP 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?