Replace scripts

Uploads or replaces a module Worker script.

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

Addresshttps://api.hanzo.ai/v1/cloudflare/workers/scripts/{script}
MethodPUT
Operationput_cloudflare_workers_scripts_by_script
AuthAuthorization: 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).

FieldInTypeRequiredDescription
scriptpathstringyesScript 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.
bindingsbodyany—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.
compatibilityDatebodystring—CompatibilityDate pins which Workers runtime behaviour the script runs under, as a plain calendar date ("2024-01-01").
compatibilityFlagsbodystring[]—CompatibilityFlags turn individual runtime behaviours on or off around that date ("nodejs_compat"), in Cloudflare's own flag vocabulary.
mainModulebodystring—MainModule is the module file the runtime starts at.
scriptbodystring—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

StatusBodyMeaning
200ok
defaultproblem-detailsrefused

200 body — 1 field.

FieldInTypeAlwaysDescription
(body)bodyanyyes

Failure carries the platform error shape — see Errors.

Examples

hanzo cloudflare workers scripts set <script>
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>" });
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>")
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
}
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?;
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();
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 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:

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 · All Hanzo APIs · Interactive reference

Was this page useful?