# Replace files

URL: https://docs.hanzo.ai/docs/openapi/space/put-space-by-space-drives-by-drive-files-by-wildcard1

> Mints a URL the caller uploads the file to DIRECTLY.

`PUT /v1/space/{space}/drives/{drive}/files/{wildcard1}`

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

|               |                                                                          |
| ------------- | ------------------------------------------------------------------------ |
| **Address**   | `https://api.hanzo.ai/v1/space/{space}/drives/{drive}/files/{wildcard1}` |
| **Method**    | `PUT`                                                                    |
| **Operation** | `put_space_by_space_drives_by_drive_files_by_wildcard1`                  |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                                   |

Mints a URL the caller uploads the file to DIRECTLY.

The bytes never pass through this binary and the store credential never leaves
the server: the URL is signed against the PUBLIC host, scoped to exactly this
space, drive and file, and expires. Writing into a folder that does not exist
is fine and creates nothing — a folder is emergent from "/" in the name. A
deployment with no public endpoint configured cannot mint a URL and answers 503
rather than one that will not work.

Billed per call — for MINTING the URL, which is the work this operation does;
the upload that follows goes straight to 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

3 fields.

| Field       | In   | Type   | Required | Description                                                                       |
| ----------- | ---- | ------ | -------- | --------------------------------------------------------------------------------- |
| `space`     | path | string | yes      | Space is the space's name, from the path.                                         |
| `drive`     | path | string | yes      | Drive is the drive's name, from the path.                                         |
| `wildcard1` | path | string | yes      | File is the file's name within the drive — everything after that drive's /files/. |

## Response

| Status    | Body            | Meaning |
| --------- | --------------- | ------- |
| `200`     | space.fileURL   | ok      |
| `default` | problem-details | refused |

`200` body — 4 fields.

| Field       | In   | Type            | Always | Description                                                                                                                                                                                 |
| ----------- | ---- | --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `expiresIn` | body | integer (int64) | —      | Expiry is how many seconds the URL stays valid.                                                                                                                                             |
| `file`      | body | string          | —      | File is the file name the URL was signed for, relative to the drive 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          | —      | Method is the verb the URL is signed for — "GET" to read, "PUT" to write.                                                                                                                   |
| `url`       | body | string          | —      | URL is the presigned URL, signed against the PUBLIC host so a browser can follow it.                                                                                                        |

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

## Examples

**CLI**

```bash
hanzo space drives files set <space> <drive> <wildcard1>
```

**SDK**

**.ts**

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

const api = new SpaceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.putSpaceBySpaceDrivesByDriveFilesByWildcard1({ space: 'space', drive: 'drive', wildcard1: 'wildcard1' });
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import SpaceApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = SpaceApi(client).put_space_by_space_drives_by_drive_files_by_wildcard1(space='space', drive='drive', wildcard1='wildcard1')
```

**.go**

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

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

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, space_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = space_api::put_space_by_space_drives_by_drive_files_by_wildcard1(&cfg, Default::default()).await?;
```

**.java**

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

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

var result = new SpaceApi(client).putSpaceBySpaceDrivesByDriveFilesByWildcard1();
```

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 -X PUT https://api.hanzo.ai/v1/space/<space>/drives/<drive>/files/<wildcard1> \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **space** through the `space` tool, which names its 10 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_space_drives"
         }
       }
     }'
```

---

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