# Replace scripts

URL: https://docs.hanzo.ai/docs/openapi/cloudflare/put-cloudflare-workers-scripts-by-script

> Uploads or replaces a module Worker script.

`PUT /v1/cloudflare/workers/scripts/{script}`

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

|               |                                                               |
| ------------- | ------------------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/cloudflare/workers/scripts/{script}` |
| **Method**    | `PUT`                                                         |
| **Operation** | `put_cloudflare_workers_scripts_by_script`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                        |

Uploads or replaces a module Worker script. It publishes to the
org's OWN Cloudflare account under the name in the path, replacing whatever was
there, and relays Cloudflare's result. The compatibility date, compatibility
flags and bindings are packed into the multipart upload Cloudflare expects,
beside the module source.

Requires ORG ADMIN — a Worker is arbitrary code on the org's own account and
domains — so a caller who is only an org member is refused 403. An empty source
is 400, as is a `mainModule` that is not a plain file name; 503 if the org has
never connected a Cloudflare token.

## Request

6 fields, body `application/json` (required).

| Field                | In   | Type      | Required | Description                                                                                                                                                                                                                                  |
| -------------------- | ---- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `script`             | path | string    | yes      | Script means two things on this route, and the document says so in both places it appears: the PATH segment names the Worker to publish, and the BODY field carries that Worker's ES-module source — the code itself, never a name or a URL. |
| `bindings`           | body | any       | —        | Bindings are the resources the script can reach (KV, D1, R2, secrets, …), in Cloudflare's own binding vocabulary, passed through as written: this plane deliberately does not model Cloudflare's shapes.                                     |
| `compatibilityDate`  | body | string    | —        | CompatibilityDate pins which Workers runtime behaviour the script runs under, as a plain calendar date ("2024-01-01").                                                                                                                       |
| `compatibilityFlags` | body | string\[] | —        | CompatibilityFlags turn individual runtime behaviours on or off around that date ("nodejs\_compat"), in Cloudflare's own flag vocabulary.                                                                                                    |
| `mainModule`         | body | string    | —        | MainModule is the module file the runtime starts at.                                                                                                                                                                                         |
| `script`             | body | string    | —        | Script means two things on this route, and the document says so in both places it appears: the PATH segment names the Worker to publish, and the BODY field carries that Worker's ES-module source — the code itself, never a name or a URL. |

## Response

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

`200` body — 1 field.

| Field    | In   | Type | Always | Description |
| -------- | ---- | ---- | ------ | ----------- |
| `(body)` | body | any  | yes    |             |

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

## Examples

**CLI**

```bash
hanzo cloudflare workers scripts set <script>
```

**SDK**

**.ts**

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

const api = new CloudflareApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.putCloudflareWorkersScriptsByScript({ script: 'script', bindings: "<bindings>", compatibilityDate: "<compatibilityDate>" });
```

**.py**

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

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = CloudflareApi(client).put_cloudflare_workers_scripts_by_script(script='script', bindings="<bindings>", compatibility_date="<compatibilityDate>")
```

**.go**

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

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

**.rs**

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

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

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

**.java**

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

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

var result = new CloudflareApi(client).putCloudflareWorkersScriptsByScript();
```

**HTTP**

```bash
curl -X PUT https://api.hanzo.ai/v1/cloudflare/workers/scripts/<script> \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "bindings": "<bindings>",
       "compatibilityDate": "<compatibilityDate>"
     }'
```

**MCP**

MCP reaches **cloudflare** through the `cloudflare` tool, which names its 29 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_cloudflare_d1_databases"
         }
       }
     }'
```

---

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