# Get objects

URL: https://docs.hanzo.ai/docs/openapi/s3/get-s3-buckets-by-bucket-objects-by-wildcard1

> Mints a presigned GET URL the caller downloads from DIRECTLY.

`GET /v1/s3/buckets/{bucket}/objects/{wildcard1}`

> [S3 →](https://docs.hanzo.ai/docs/openapi/s3) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                                   |
| ------------- | ----------------------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/s3/buckets/{bucket}/objects/{wildcard1}` |
| **Method**    | `GET`                                                             |
| **Operation** | `get_s3_buckets_by_bucket_objects_by_wildcard1`                   |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                            |

Mints a presigned GET URL the caller downloads from DIRECTLY.

The bytes never pass through this binary and the admin credential never leaves
the server: the URL is signed against the PUBLIC host, scoped to exactly this
bucket and key, and expires. It carries a content disposition of attachment
naming the object's file name, so a browser following it saves the object rather
than rendering it in place. A deployment with no public endpoint configured
cannot mint one and answers 503 rather than a URL that will not work.

Billed per call — for MINTING the URL, which is the work this operation does;
the download that follows it comes straight from the store and is not seen here.
The balance is checked BEFORE anything is touched, so an unfunded org is refused
with no URL issued.

## Request

2 fields.

| Field       | In   | Type   | Required | Description                                                                           |
| ----------- | ---- | ------ | -------- | ------------------------------------------------------------------------------------- |
| `bucket`    | path | string | yes      | Bucket is the bucket's friendly name, from the path.                                  |
| `wildcard1` | path | string | yes      | Key is the object's key within the bucket — everything after that bucket's /objects/. |

## Response

| Status    | Body               | Meaning |
| --------- | ------------------ | ------- |
| `200`     | s3.presignResponse | ok      |
| `default` | problem-details    | refused |

`200` body — 4 fields.

| Field       | In   | Type            | Always | Description                                                                                                                                                                                       |
| ----------- | ---- | --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expiresIn` | body | integer (int64) | —      | seconds until the URL expires                                                                                                                                                                     |
| `key`       | body | string          | —      | Key is the object key the URL was signed for, relative to the bucket root and path-cleaned — so it is what the store will actually read or write, which is not always the string the caller sent. |
| `method`    | body | string          | —      | "PUT" (upload) or "GET" (download)                                                                                                                                                                |
| `url`       | body | string          | —      | presigned URL the browser follows directly                                                                                                                                                        |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo s3 buckets objects get <bucket> <wildcard1>
```

**SDK**

**.ts**

```ts
import { Configuration, S3Api } from 'hanzoai';

const api = new S3Api(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getS3BucketsByBucketObjectsByWildcard1({ bucket: 'bucket', wildcard1: 'wildcard1' });
```

**.py**

```python
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_by_wildcard1(bucket='bucket', wildcard1='wildcard1')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.S3API.GetS3BucketsByBucketObjectsByWildcard1(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::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_by_wildcard1(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.S3Api;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new S3Api(client).getS3BucketsByBucketObjectsByWildcard1();
```

The method above is the one at the current release of the document. `hanzoai@8.5.914` (npm) and `hanzoai@8.5.914` (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. [SDKs →](https://docs.hanzo.ai/docs/sdks)

**HTTP**

```bash
curl https://api.hanzo.ai/v1/s3/buckets/<bucket>/objects/<wildcard1> \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **s3** through the `s3` tool, which names its 13 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
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"
         }
       }
     }'
```

---

[S3 API](https://docs.hanzo.ai/docs/openapi/s3) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
