Skip to content
Start here

Upload Version

POST/accounts/{account_id}/workers/scripts/{script_name}/versions

Upload a Worker Version without deploying to Cloudflare’s network. You can find more about the multipart metadata on our docs: https://developers.cloudflare.com/workers/configuration/multipart-upload-metadata/.

Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
Accepted Permissions (at least one required)
Workers Scripts Write
Path ParametersExpand Collapse
account_id: string

Identifier.

maxLength32
script_name: string

Name of the script.

Query ParametersExpand Collapse
bindings_inherit: optional "strict"

When set to “strict”, the upload will fail if any inherit type bindings cannot be resolved against the previous version of the Worker. Without this, unresolvable inherit bindings are silently dropped.

Body ParametersForm DataExpand Collapse
metadata: object { main_module, annotations, bindings, 7 more }

JSON-encoded metadata about the uploaded parts and Worker configuration.

main_module: string

Name of the uploaded file that contains the main module (e.g. the file exporting a fetch handler). Indicates a module syntax Worker, which is required for Version Upload.

annotations: optional object { "workers/alias", "workers/message", "workers/tag" }
"workers/alias": optional string

Associated alias for a version.

maxLength63
"workers/message": optional string

Human-readable message about the version. Truncated to 1000 bytes if longer.

maxLength1000
"workers/tag": optional string

User-provided identifier for the version. Maximum 100 bytes.

maxLength100
bindings: optional array of object { name, type } or object { instance_name, name, type, namespace } or object { name, namespace, type } or 32 more

List of bindings attached to a Worker. You can find more about bindings on our docs: https://developers.cloudflare.com/workers/configuration/multipart-upload-metadata/#bindings.

One of the following:
AI object { name, type }
name: string

A JavaScript variable name for the binding.

type: "ai"

The kind of resource that the binding provides.

AISearch object { instance_name, name, type, namespace }
instance_name: string

The user-chosen instance name. Must exist at deploy time. The worker can search, chat, update, and manage items/jobs on this instance.

name: string

A JavaScript variable name for the binding.

type: "ai_search"

The kind of resource that the binding provides.

namespace: optional string

The namespace the instance belongs to. Defaults to “default” if omitted. Customers who don’t use namespaces can simply omit this field.

AISearchNamespace object { name, namespace, type }
name: string

A JavaScript variable name for the binding.

namespace: string

The user-chosen namespace name. Must exist before deploy — Wrangler handles auto-creation on deploy failure (R2 bucket pattern). The “default” namespace is auto-created by config-api for new accounts. Grants full access (CRUD + search + chat) to all instances within the namespace.

type: "ai_search_namespace"

The kind of resource that the binding provides.

AnalyticsEngine object { dataset, name, type }
dataset: string

The name of the dataset to bind to.

name: string

A JavaScript variable name for the binding.

type: "analytics_engine"

The kind of resource that the binding provides.

Assets object { name, type }
name: string

A JavaScript variable name for the binding.

type: "assets"

The kind of resource that the binding provides.

Browser object { name, type }
name: string

A JavaScript variable name for the binding.

type: "browser"

The kind of resource that the binding provides.

D1 object { database_id, name, type, id }
database_id: string

Identifier of the D1 database to bind to.

name: string

A JavaScript variable name for the binding.

type: "d1"

The kind of resource that the binding provides.

Deprecatedid: optional string

This property has been renamed to database_id.

Identifier of the D1 database to bind to.

DataBlob object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the data content. Only accepted for service worker syntax Workers.

Deprecatedtype: "data_blob"

The kind of resource that the binding provides.

DispatchNamespace object { name, namespace, type, outbound }
name: string

A JavaScript variable name for the binding.

namespace: string

The name of the dispatch namespace.

type: "dispatch_namespace"

The kind of resource that the binding provides.

outbound: optional object { params, worker }

Outbound worker.

params: optional array of object { name }

Pass information from the Dispatch Worker to the Outbound Worker through the parameters.

name: string

Name of the parameter.

worker: optional object { entrypoint, environment, service }

Outbound worker.

entrypoint: optional string

Entrypoint to invoke on the outbound worker.

environment: optional string

Environment of the outbound worker.

service: optional string

Name of the outbound worker.

DurableObjectNamespace object { name, type, class_name, 4 more }
name: string

A JavaScript variable name for the binding.

type: "durable_object_namespace"

The kind of resource that the binding provides.

class_name: optional string

The exported class name of the Durable Object.

dispatch_namespace: optional string

The dispatch namespace the Durable Object script belongs to.

environment: optional string

The environment of the script_name to bind to.

namespace_id: optional string

Namespace identifier tag.

maxLength32
script_name: optional string

The script where the Durable Object is defined, if it is external to this Worker.

Hyperdrive object { id, name, type }
id: string

Identifier of the Hyperdrive connection to bind to.

name: string

A JavaScript variable name for the binding.

type: "hyperdrive"

The kind of resource that the binding provides.

Inherit object { name, type, old_name, version_id }
name: string

The name of the inherited binding.

type: "inherit"

The kind of resource that the binding provides.

old_name: optional string

The old name of the inherited binding. If set, the binding will be renamed from old_name to name in the new version. If not set, the binding will keep the same name between versions.

version_id: optional string

Identifier for the version to inherit the binding from, which can be the version ID or the literal “latest” to inherit from the latest version. Defaults to inheriting the binding from the latest version.

Images object { name, type }
name: string

A JavaScript variable name for the binding.

type: "images"

The kind of resource that the binding provides.

Json object { json, name, type }
json: unknown

JSON data to use.

name: string

A JavaScript variable name for the binding.

type: "json"

The kind of resource that the binding provides.

KVNamespace object { name, namespace_id, type }
name: string

A JavaScript variable name for the binding.

namespace_id: string

Namespace identifier tag.

maxLength32
type: "kv_namespace"

The kind of resource that the binding provides.

Media object { name, type }
name: string

A JavaScript variable name for the binding.

type: "media"

The kind of resource that the binding provides.

MTLSCertificate object { certificate_id, name, type }
certificate_id: string

Identifier of the certificate to bind to.

name: string

A JavaScript variable name for the binding.

type: "mtls_certificate"

The kind of resource that the binding provides.

PlainText object { name, text, type }
name: string

A JavaScript variable name for the binding.

text: string

The text value to use.

type: "plain_text"

The kind of resource that the binding provides.

Pipelines object { name, pipeline, type }
name: string

A JavaScript variable name for the binding.

pipeline: string

Name of the Pipeline to bind to.

type: "pipelines"

The kind of resource that the binding provides.

Queue object { name, queue_name, type }
name: string

A JavaScript variable name for the binding.

queue_name: string

Name of the Queue to bind to.

type: "queue"

The kind of resource that the binding provides.

Ratelimit object { name, namespace_id, simple, type }
name: string

A JavaScript variable name for the binding.

namespace_id: string

Identifier of the rate limit namespace to bind to.

simple: object { limit, period, mitigation_timeout }

The rate limit configuration.

limit: number

The limit (requests per period).

period: number

The period in seconds.

mitigation_timeout: optional number

Duration in seconds to apply the mitigation action after the rate limit is exceeded. Valid values are 0 (disabled), 10, or multiples of 60 up to 86400. Must be greater than or equal to the period when non-zero.

type: "ratelimit"

The kind of resource that the binding provides.

R2Bucket object { bucket_name, name, type, jurisdiction }
bucket_name: string

R2 bucket to bind to.

name: string

A JavaScript variable name for the binding.

type: "r2_bucket"

The kind of resource that the binding provides.

jurisdiction: optional "eu" or "fedramp" or "fedramp-high"

The jurisdiction of the R2 bucket.

One of the following:
"eu"
"fedramp"
"fedramp-high"
SecretText object { name, text, type }
name: string

A JavaScript variable name for the binding.

text: string

The secret value to use.

type: "secret_text"

The kind of resource that the binding provides.

SendEmail object { name, type, allowed_destination_addresses, 2 more }
name: string

A JavaScript variable name for the binding.

type: "send_email"

The kind of resource that the binding provides.

allowed_destination_addresses: optional array of string

List of allowed destination addresses.

allowed_sender_addresses: optional array of string

List of allowed sender addresses.

destination_address: optional string

Destination address for the email.

formatemail
Service object { name, service, type, 2 more }
name: string

A JavaScript variable name for the binding.

service: string

Name of Worker to bind to.

type: "service"

The kind of resource that the binding provides.

entrypoint: optional string

Entrypoint to invoke on the target Worker.

environment: optional string

Optional environment if the Worker utilizes one.

TextBlob object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the text content. Only accepted for service worker syntax Workers.

Deprecatedtype: "text_blob"

The kind of resource that the binding provides.

Vectorize object { index_name, name, type }
index_name: string

Name of the Vectorize index to bind to.

name: string

A JavaScript variable name for the binding.

type: "vectorize"

The kind of resource that the binding provides.

VersionMetadata object { name, type }
name: string

A JavaScript variable name for the binding.

type: "version_metadata"

The kind of resource that the binding provides.

SecretsStoreSecret object { name, secret_name, store_id, type }
name: string

A JavaScript variable name for the binding.

secret_name: string

Name of the secret in the store.

store_id: string

ID of the store containing the secret.

type: "secrets_store_secret"

The kind of resource that the binding provides.

Flagship object { app_id, name, type }
app_id: string

ID of the Flagship app to bind to for feature flag evaluation.

maxLength128
name: string

A JavaScript variable name for the binding.

type: "flagship"

The kind of resource that the binding provides.

SecretKey object { algorithm, format, name, 4 more }
algorithm: unknown

Algorithm-specific key parameters. Learn more.

format: "raw" or "pkcs8" or "spki" or "jwk"

Data format of the key. Learn more.

One of the following:
"raw"
"pkcs8"
"spki"
"jwk"
name: string

A JavaScript variable name for the binding.

type: "secret_key"

The kind of resource that the binding provides.

usages: array of "encrypt" or "decrypt" or "sign" or 5 more

Allowed operations with the key. Learn more.

One of the following:
"encrypt"
"decrypt"
"sign"
"verify"
"deriveKey"
"deriveBits"
"wrapKey"
"unwrapKey"
key_base64: optional string

Base64-encoded key data. Required if format is “raw”, “pkcs8”, or “spki”.

key_jwk: optional unknown

Key data in JSON Web Key format. Required if format is “jwk”.

Workflow object { name, type, workflow_name, 2 more }
name: string

A JavaScript variable name for the binding.

type: "workflow"

The kind of resource that the binding provides.

workflow_name: string

Name of the Workflow to bind to.

class_name: optional string

Class name of the Workflow. Should only be provided if the Workflow belongs to this script.

script_name: optional string

Script name that contains the Workflow. If not provided, defaults to this script name.

WasmModule object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the WebAssembly module content. Only accepted for service worker syntax Workers.

Deprecatedtype: "wasm_module"

The kind of resource that the binding provides.

VPCService object { name, service_id, type }
name: string

A JavaScript variable name for the binding.

service_id: string

Identifier of the VPC service to bind to.

type: "vpc_service"

The kind of resource that the binding provides.

VPCNetwork object { name, type, network_id, tunnel_id }
name: string

A JavaScript variable name for the binding.

type: "vpc_network"

The kind of resource that the binding provides.

network_id: optional string

Identifier of the network to bind to. Only “cf1:network” is currently supported. Mutually exclusive with tunnel_id.

tunnel_id: optional string

UUID of the Cloudflare Tunnel to bind to. Mutually exclusive with network_id.

cache_options: optional object { enabled, cross_version_cache }

Global CacheW configuration for the Worker. When caching is on, the platform provisions a cloudflare.app zone for the Worker. A type: worker entry in the exports map can override this value for a single entrypoint.

enabled: boolean

Whether caching is enabled for this Worker.

cross_version_cache: optional boolean

Whether cached responses are shared across Worker version uploads. This is independent of enabled. It can stay true while caching is off, so the preference survives turning caching off and back on.

compatibility_date: optional string

Date indicating targeted support in the Workers runtime. Backwards incompatible fixes to the runtime following this date will not affect this Worker.

compatibility_flags: optional array of string

Flags that enable or disable certain features in the Workers runtime. Used to enable upcoming features or opt in or out of specific changes not included in a compatibility_date.

exports: optional map[object { type, cache, state } or object { storage, type, container, state } or object { state, type } or 3 more]

Declarative exports for this version. Worker entrypoint entries (type: worker) carry cache configuration for that entrypoint.

One of the following:
Worker object { type, cache, state }

A named Worker entrypoint export (type: worker). Worker entrypoints are always live (state: created) and carry no storage or lifecycle fields. The optional cache block overrides the Worker’s global cache_options.enabled for this entrypoint.

type: "worker"

Marks this entry as a Worker entrypoint export.

cache: optional object { enabled }

Cache override for this entrypoint. Overrides the Worker’s global cache_options.enabled for this entrypoint only.

enabled: boolean

Whether caching is enabled for this entrypoint.

state: optional "created"

Live export. May be omitted; defaults to created.

WorkersDurableObjectExport object { storage, type, container, state }

A live Durable Object export (state: created, the default). The platform auto-provisions the namespace on first deploy, matches it on subsequent deploys, and never mutates or deletes it as a side effect of a code-only change. storage is required; renamed_to, transferred_to and transfer_from are not allowed on a live entry.

storage: "sqlite" or "legacy-kv"

Durable Object storage backend. sqlite is the recommended (and only) backend for new namespaces. legacy-kv is accepted only for a class whose namespace already exists as KV-backed; the exports flow never provisions a new legacy-kv namespace.

One of the following:
"sqlite"
"legacy-kv"
type: "durable-object"

Marks this entry as a Durable Object export.

container: optional string

Name of the container (declared in the upload’s metadata.containers) that backs this Durable Object. When set, the namespace is container-enabled. Valid only on live entries.

maxLength128
state: optional "created"

Live export. May be omitted; defaults to created.

WorkersDurableObjectDeletedExport object { state, type }

A deleted tombstone: retires the provisioned namespace for this class and all of its data. The class must be absent from the uploaded code and no other Worker in the account may bind to the namespace, otherwise the deploy is rejected. No other fields are allowed. Deletion is irreversible.

state: "deleted"

Tombstone that deletes the namespace.

type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectRenamedExport object { renamed_to, state, type }

A renamed tombstone: rewrites the provisioned namespace’s class name from this map key to renamed_to. The source class may stay in code during the rollout window (an info notice is emitted). storage, transferred_to and transfer_from are not allowed.

renamed_to: string

The destination class name. Must differ from the source class (the map key) and must be declared as a live (created) entry in the same exports map. Write-only: never present in GET responses.

maxLength128
state: "renamed"

Tombstone that renames the namespace’s class.

type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectTransferredExport object { state, transferred_to, type }

A transferred tombstone (source side of a two-phase transfer): hands ownership of the provisioned namespace to another script in the same account, named by transferred_to. The target must have already deployed a matching expecting-transfer entry. The source class may stay in code during the rollout window (an info notice is emitted). storage, renamed_to and transfer_from are not allowed.

state: "transferred"

Tombstone that transfers the namespace to another script.

transferred_to: string

The destination script name. Must be in the same account and the same dispatch-namespace context (or both non-dispatch). Cross-dispatch-namespace transfers are rejected. Write-only: never present in GET responses.

maxLength128
type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectExpectingTransferExport object { state, storage, transfer_from, 2 more }

The target side of a two-phase transfer (state: expecting-transfer). Declares that this script expects to receive a namespace for this class from the transfer_from script. This is a live entry, not a tombstone: bindings resolve through the source’s namespace until the source commits with a transferred tombstone. storage and transfer_from are required; renamed_to and transferred_to are not allowed.

state: "expecting-transfer"

Target side of a two-phase transfer.

storage: "sqlite" or "legacy-kv"

Durable Object storage backend. sqlite is the recommended (and only) backend for new namespaces. legacy-kv is accepted only for a class whose namespace already exists as KV-backed; the exports flow never provisions a new legacy-kv namespace.

One of the following:
"sqlite"
"legacy-kv"
transfer_from: string

The source script name to receive the namespace from. Must be in the same account and dispatch-namespace context. Present on reads for expecting-transfer entries.

maxLength128
type: "durable-object"

Marks this entry as a Durable Object export.

container: optional string

Name of the container (declared in the upload’s metadata.containers) that backs this Durable Object once the transfer settles. Valid only on live entries.

maxLength128
keep_bindings: optional array of string

List of binding types to keep from previous_upload.

package_dependencies: optional array of object { installedVersion, name, packageJsonVersion }

The list of npm packages that were installed and used when this Worker version was built.

installedVersion: string

The exact version that was resolved and installed by the package manager.

name: string

The npm package name.

packageJsonVersion: string

The version constraint as written in package.json.

usage_model: optional "standard" or "bundled" or "unbound"

Usage model for the Worker invocations.

One of the following:
"standard"
"bundled"
"unbound"
files: optional array of string

An array of modules (often JavaScript files) comprising a Worker script. At least one module must be present and referenced in the metadata as main_module or body_part by filename.
Possible Content-Type(s) are: application/javascript+module, text/javascript+module, application/javascript, text/javascript, text/x-python, text/x-python-requirement, application/wasm, text/plain, application/octet-stream, application/source-map.

ReturnsExpand Collapse
errors: array of object { code, message, documentation_url, source }
code: number
minimum1000
message: string
documentation_url: optional string
source: optional object { pointer }
pointer: optional string
messages: array of object { code, message, documentation_url, source }
code: number
minimum1000
message: string
documentation_url: optional string
source: optional object { pointer }
pointer: optional string
result: object { resources, id, exports_reconciliation, 3 more }
resources: object { bindings, script, script_runtime }
bindings: optional array of object { name, type } or object { instance_name, name, type, namespace } or object { name, namespace, type } or 32 more

List of bindings attached to a Worker. You can find more about bindings on our docs: https://developers.cloudflare.com/workers/configuration/multipart-upload-metadata/#bindings.

One of the following:
AI object { name, type }
name: string

A JavaScript variable name for the binding.

type: "ai"

The kind of resource that the binding provides.

AISearch object { instance_name, name, type, namespace }
instance_name: string

The user-chosen instance name. Must exist at deploy time. The worker can search, chat, update, and manage items/jobs on this instance.

name: string

A JavaScript variable name for the binding.

type: "ai_search"

The kind of resource that the binding provides.

namespace: optional string

The namespace the instance belongs to. Defaults to “default” if omitted. Customers who don’t use namespaces can simply omit this field.

AISearchNamespace object { name, namespace, type }
name: string

A JavaScript variable name for the binding.

namespace: string

The user-chosen namespace name. Must exist before deploy — Wrangler handles auto-creation on deploy failure (R2 bucket pattern). The “default” namespace is auto-created by config-api for new accounts. Grants full access (CRUD + search + chat) to all instances within the namespace.

type: "ai_search_namespace"

The kind of resource that the binding provides.

AnalyticsEngine object { dataset, name, type }
dataset: string

The name of the dataset to bind to.

name: string

A JavaScript variable name for the binding.

type: "analytics_engine"

The kind of resource that the binding provides.

Assets object { name, type }
name: string

A JavaScript variable name for the binding.

type: "assets"

The kind of resource that the binding provides.

Browser object { name, type }
name: string

A JavaScript variable name for the binding.

type: "browser"

The kind of resource that the binding provides.

D1 object { database_id, name, type, id }
database_id: string

Identifier of the D1 database to bind to.

name: string

A JavaScript variable name for the binding.

type: "d1"

The kind of resource that the binding provides.

Deprecatedid: optional string

This property has been renamed to database_id.

Identifier of the D1 database to bind to.

DataBlob object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the data content. Only accepted for service worker syntax Workers.

Deprecatedtype: "data_blob"

The kind of resource that the binding provides.

DispatchNamespace object { name, namespace, type, outbound }
name: string

A JavaScript variable name for the binding.

namespace: string

The name of the dispatch namespace.

type: "dispatch_namespace"

The kind of resource that the binding provides.

outbound: optional object { params, worker }

Outbound worker.

params: optional array of object { name }

Pass information from the Dispatch Worker to the Outbound Worker through the parameters.

name: string

Name of the parameter.

worker: optional object { entrypoint, environment, service }

Outbound worker.

entrypoint: optional string

Entrypoint to invoke on the outbound worker.

environment: optional string

Environment of the outbound worker.

service: optional string

Name of the outbound worker.

DurableObjectNamespace object { name, type, class_name, 4 more }
name: string

A JavaScript variable name for the binding.

type: "durable_object_namespace"

The kind of resource that the binding provides.

class_name: optional string

The exported class name of the Durable Object.

dispatch_namespace: optional string

The dispatch namespace the Durable Object script belongs to.

environment: optional string

The environment of the script_name to bind to.

namespace_id: optional string

Namespace identifier tag.

maxLength32
script_name: optional string

The script where the Durable Object is defined, if it is external to this Worker.

Hyperdrive object { id, name, type }
id: string

Identifier of the Hyperdrive connection to bind to.

name: string

A JavaScript variable name for the binding.

type: "hyperdrive"

The kind of resource that the binding provides.

Inherit object { name, type, old_name, version_id }
name: string

The name of the inherited binding.

type: "inherit"

The kind of resource that the binding provides.

old_name: optional string

The old name of the inherited binding. If set, the binding will be renamed from old_name to name in the new version. If not set, the binding will keep the same name between versions.

version_id: optional string

Identifier for the version to inherit the binding from, which can be the version ID or the literal “latest” to inherit from the latest version. Defaults to inheriting the binding from the latest version.

Images object { name, type }
name: string

A JavaScript variable name for the binding.

type: "images"

The kind of resource that the binding provides.

Json object { json, name, type }
json: unknown

JSON data to use.

name: string

A JavaScript variable name for the binding.

type: "json"

The kind of resource that the binding provides.

KVNamespace object { name, namespace_id, type }
name: string

A JavaScript variable name for the binding.

namespace_id: string

Namespace identifier tag.

maxLength32
type: "kv_namespace"

The kind of resource that the binding provides.

Media object { name, type }
name: string

A JavaScript variable name for the binding.

type: "media"

The kind of resource that the binding provides.

MTLSCertificate object { certificate_id, name, type }
certificate_id: string

Identifier of the certificate to bind to.

name: string

A JavaScript variable name for the binding.

type: "mtls_certificate"

The kind of resource that the binding provides.

PlainText object { name, text, type }
name: string

A JavaScript variable name for the binding.

text: string

The text value to use.

type: "plain_text"

The kind of resource that the binding provides.

Pipelines object { name, pipeline, type }
name: string

A JavaScript variable name for the binding.

pipeline: string

Name of the Pipeline to bind to.

type: "pipelines"

The kind of resource that the binding provides.

Queue object { name, queue_name, type }
name: string

A JavaScript variable name for the binding.

queue_name: string

Name of the Queue to bind to.

type: "queue"

The kind of resource that the binding provides.

Ratelimit object { name, namespace_id, simple, type }
name: string

A JavaScript variable name for the binding.

namespace_id: string

Identifier of the rate limit namespace to bind to.

simple: object { limit, period, mitigation_timeout }

The rate limit configuration.

limit: number

The limit (requests per period).

period: number

The period in seconds.

mitigation_timeout: optional number

Duration in seconds to apply the mitigation action after the rate limit is exceeded. Valid values are 0 (disabled), 10, or multiples of 60 up to 86400. Must be greater than or equal to the period when non-zero.

type: "ratelimit"

The kind of resource that the binding provides.

R2Bucket object { bucket_name, name, type, jurisdiction }
bucket_name: string

R2 bucket to bind to.

name: string

A JavaScript variable name for the binding.

type: "r2_bucket"

The kind of resource that the binding provides.

jurisdiction: optional "eu" or "fedramp" or "fedramp-high"

The jurisdiction of the R2 bucket.

One of the following:
"eu"
"fedramp"
"fedramp-high"
SecretText object { name, text, type }
name: string

A JavaScript variable name for the binding.

text: string

The secret value to use.

type: "secret_text"

The kind of resource that the binding provides.

SendEmail object { name, type, allowed_destination_addresses, 2 more }
name: string

A JavaScript variable name for the binding.

type: "send_email"

The kind of resource that the binding provides.

allowed_destination_addresses: optional array of string

List of allowed destination addresses.

allowed_sender_addresses: optional array of string

List of allowed sender addresses.

destination_address: optional string

Destination address for the email.

formatemail
Service object { name, service, type, 2 more }
name: string

A JavaScript variable name for the binding.

service: string

Name of Worker to bind to.

type: "service"

The kind of resource that the binding provides.

entrypoint: optional string

Entrypoint to invoke on the target Worker.

environment: optional string

Optional environment if the Worker utilizes one.

TextBlob object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the text content. Only accepted for service worker syntax Workers.

Deprecatedtype: "text_blob"

The kind of resource that the binding provides.

Vectorize object { index_name, name, type }
index_name: string

Name of the Vectorize index to bind to.

name: string

A JavaScript variable name for the binding.

type: "vectorize"

The kind of resource that the binding provides.

VersionMetadata object { name, type }
name: string

A JavaScript variable name for the binding.

type: "version_metadata"

The kind of resource that the binding provides.

SecretsStoreSecret object { name, secret_name, store_id, type }
name: string

A JavaScript variable name for the binding.

secret_name: string

Name of the secret in the store.

store_id: string

ID of the store containing the secret.

type: "secrets_store_secret"

The kind of resource that the binding provides.

Flagship object { app_id, name, type }
app_id: string

ID of the Flagship app to bind to for feature flag evaluation.

maxLength128
name: string

A JavaScript variable name for the binding.

type: "flagship"

The kind of resource that the binding provides.

SecretKey object { algorithm, format, name, 4 more }
algorithm: unknown

Algorithm-specific key parameters. Learn more.

format: "raw" or "pkcs8" or "spki" or "jwk"

Data format of the key. Learn more.

One of the following:
"raw"
"pkcs8"
"spki"
"jwk"
name: string

A JavaScript variable name for the binding.

type: "secret_key"

The kind of resource that the binding provides.

usages: array of "encrypt" or "decrypt" or "sign" or 5 more

Allowed operations with the key. Learn more.

One of the following:
"encrypt"
"decrypt"
"sign"
"verify"
"deriveKey"
"deriveBits"
"wrapKey"
"unwrapKey"
key_base64: optional string

Base64-encoded key data. Required if format is “raw”, “pkcs8”, or “spki”.

key_jwk: optional unknown

Key data in JSON Web Key format. Required if format is “jwk”.

Workflow object { name, type, workflow_name, 2 more }
name: string

A JavaScript variable name for the binding.

type: "workflow"

The kind of resource that the binding provides.

workflow_name: string

Name of the Workflow to bind to.

class_name: optional string

Class name of the Workflow. Should only be provided if the Workflow belongs to this script.

script_name: optional string

Script name that contains the Workflow. If not provided, defaults to this script name.

WasmModule object { name, part, type }
name: string

A JavaScript variable name for the binding.

part: string

The name of the file containing the WebAssembly module content. Only accepted for service worker syntax Workers.

Deprecatedtype: "wasm_module"

The kind of resource that the binding provides.

VPCService object { name, service_id, type }
name: string

A JavaScript variable name for the binding.

service_id: string

Identifier of the VPC service to bind to.

type: "vpc_service"

The kind of resource that the binding provides.

VPCNetwork object { name, type, network_id, tunnel_id }
name: string

A JavaScript variable name for the binding.

type: "vpc_network"

The kind of resource that the binding provides.

network_id: optional string

Identifier of the network to bind to. Only “cf1:network” is currently supported. Mutually exclusive with tunnel_id.

tunnel_id: optional string

UUID of the Cloudflare Tunnel to bind to. Mutually exclusive with network_id.

script: optional object { etag, handlers, last_deployed_from, named_handlers }
etag: optional string

Hashed script content

handlers: optional array of string

The names of handlers exported as part of the default export.

last_deployed_from: optional string

The client most recently used to deploy this Worker.

named_handlers: optional array of object { handlers, name }

Named exports, such as Durable Object class implementations and named entrypoints.

handlers: optional array of string

The names of handlers exported as part of the named export.

name: optional string

The name of the exported class or entrypoint.

script_runtime: optional object { compatibility_date, compatibility_flags, exports, 3 more }

Runtime configuration for the Worker.

compatibility_date: optional string

Date indicating targeted support in the Workers runtime. Backwards incompatible fixes to the runtime following this date will not affect this Worker.

compatibility_flags: optional array of string

Flags that enable or disable certain features in the Workers runtime.

exports: optional map[object { type, cache, state } or object { storage, type, container, state } or object { state, type } or 3 more]

Declarative exports for this version, including Durable Object classes (with their storage backend) and named Worker entrypoints. Tombstoned lifecycle entries are omitted, so only live exports (created and expecting-transfer) are returned.

One of the following:
Worker object { type, cache, state }

A named Worker entrypoint export (type: worker). Worker entrypoints are always live (state: created) and carry no storage or lifecycle fields. The optional cache block overrides the Worker’s global cache_options.enabled for this entrypoint.

type: "worker"

Marks this entry as a Worker entrypoint export.

cache: optional object { enabled }

Cache override for this entrypoint. Overrides the Worker’s global cache_options.enabled for this entrypoint only.

enabled: boolean

Whether caching is enabled for this entrypoint.

state: optional "created"

Live export. May be omitted; defaults to created.

WorkersDurableObjectExport object { storage, type, container, state }

A live Durable Object export (state: created, the default). The platform auto-provisions the namespace on first deploy, matches it on subsequent deploys, and never mutates or deletes it as a side effect of a code-only change. storage is required; renamed_to, transferred_to and transfer_from are not allowed on a live entry.

storage: "sqlite" or "legacy-kv"

Durable Object storage backend. sqlite is the recommended (and only) backend for new namespaces. legacy-kv is accepted only for a class whose namespace already exists as KV-backed; the exports flow never provisions a new legacy-kv namespace.

One of the following:
"sqlite"
"legacy-kv"
type: "durable-object"

Marks this entry as a Durable Object export.

container: optional string

Name of the container (declared in the upload’s metadata.containers) that backs this Durable Object. When set, the namespace is container-enabled. Valid only on live entries.

maxLength128
state: optional "created"

Live export. May be omitted; defaults to created.

WorkersDurableObjectDeletedExport object { state, type }

A deleted tombstone: retires the provisioned namespace for this class and all of its data. The class must be absent from the uploaded code and no other Worker in the account may bind to the namespace, otherwise the deploy is rejected. No other fields are allowed. Deletion is irreversible.

state: "deleted"

Tombstone that deletes the namespace.

type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectRenamedExport object { renamed_to, state, type }

A renamed tombstone: rewrites the provisioned namespace’s class name from this map key to renamed_to. The source class may stay in code during the rollout window (an info notice is emitted). storage, transferred_to and transfer_from are not allowed.

renamed_to: string

The destination class name. Must differ from the source class (the map key) and must be declared as a live (created) entry in the same exports map. Write-only: never present in GET responses.

maxLength128
state: "renamed"

Tombstone that renames the namespace’s class.

type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectTransferredExport object { state, transferred_to, type }

A transferred tombstone (source side of a two-phase transfer): hands ownership of the provisioned namespace to another script in the same account, named by transferred_to. The target must have already deployed a matching expecting-transfer entry. The source class may stay in code during the rollout window (an info notice is emitted). storage, renamed_to and transfer_from are not allowed.

state: "transferred"

Tombstone that transfers the namespace to another script.

transferred_to: string

The destination script name. Must be in the same account and the same dispatch-namespace context (or both non-dispatch). Cross-dispatch-namespace transfers are rejected. Write-only: never present in GET responses.

maxLength128
type: "durable-object"

Marks this entry as a Durable Object export.

WorkersDurableObjectExpectingTransferExport object { state, storage, transfer_from, 2 more }

The target side of a two-phase transfer (state: expecting-transfer). Declares that this script expects to receive a namespace for this class from the transfer_from script. This is a live entry, not a tombstone: bindings resolve through the source’s namespace until the source commits with a transferred tombstone. storage and transfer_from are required; renamed_to and transferred_to are not allowed.

state: "expecting-transfer"

Target side of a two-phase transfer.

storage: "sqlite" or "legacy-kv"

Durable Object storage backend. sqlite is the recommended (and only) backend for new namespaces. legacy-kv is accepted only for a class whose namespace already exists as KV-backed; the exports flow never provisions a new legacy-kv namespace.

One of the following:
"sqlite"
"legacy-kv"
transfer_from: string

The source script name to receive the namespace from. Must be in the same account and dispatch-namespace context. Present on reads for expecting-transfer entries.

maxLength128
type: "durable-object"

Marks this entry as a Durable Object export.

container: optional string

Name of the container (declared in the upload’s metadata.containers) that backs this Durable Object once the transfer settles. Valid only on live entries.

maxLength128
limits: optional object { cpu_ms }

Resource limits for the Worker.

cpu_ms: optional number

The amount of CPU time this Worker can use in milliseconds.

migration_tag: optional string

The tag of the Durable Object migration that was most recently applied for this Worker.

usage_model: optional "bundled" or "unbound" or "standard"

Usage model for the Worker invocations.

One of the following:
"bundled"
"unbound"
"standard"
id: optional string

Unique identifier for the version.

exports_reconciliation: optional object { created, deleted, info, 6 more }

Summary of the declarative exports reconciliation that ran on this upload. Populated only when the uploaded metadata included an exports block. Durable Object entries drive reconciliation; type: worker entries do not contribute to this summary.

created: array of string

Class names for which a new namespace was provisioned.

deleted: array of string

Class names whose namespace was deleted by a deleted tombstone.

info: array of object { class, message, scenario, 2 more }

Non-blocking info entries (stale tombstones, tombstone applied with class still in code). See exports_reconciliation_info.

class: string

The class name the info entry is about.

message: string

Human-readable explanation.

scenario: "code_class_not_in_exports" or "provisioned_class_missing_from_config" or "config_export_not_in_code" or 30 more

Stable, machine-readable tag identifying which reconciliation scenario produced an error, warning, or info entry. Clients may branch on this value instead of parsing message.

One of the following:
"code_class_not_in_exports"
"provisioned_class_missing_from_config"
"config_export_not_in_code"
"config_references_nonexistent_class"
"orphaned_provisioned_namespace"
"storage_type_mismatch"
"free_tier_requires_sqlite"
"invalid_export"
"tombstone_delete_class_still_in_code"
"tombstone_delete_blocked_by_external_bindings"
"tombstone_renamed_to_occupied"
"transferred_pending_not_found"
"transferred_target_missing"
"transferred_target_mismatch"
"phase_one_transfer_source_missing"
"phase_one_transfer_source_namespace_missing"
"phase_one_transfer_target_class_provisioned"
"phase_one_transfer_after_commit_mismatch"
"phase_one_transfer_duplicate"
"phase_one_transfer_target_in_dispatch_namespace"
"phase_one_transfer_source_in_dispatch_namespace"
"transferred_source_in_dispatch_namespace"
"transferred_target_in_dispatch_namespace"
"container_undeclared_reference"
"container_class_not_durable_object"
"container_wiring_inconsistent"
"container_multiple_durable_objects"
"transfer_container_parity_mismatch"
"transfer_container_parity_mismatch_on_commit"
"tombstone_class_still_in_code"
"stale_tombstone"
"transfer_receive_already_applied"
"transfer_receive_cleanup_complete"
namespace_id: optional string

The provisioned namespace the entry relates to, when applicable.

formatuuid
referencing_scripts: optional array of string

Other Workers in the account that still bind to the affected class. Advisory: while non-empty the tombstone is not yet safe to remove — redeploy these Workers with bindings re-pointed first.

removable_entries: array of string

Source class names whose tombstone entry is now stale and safe to delete from exports (no remaining referencing scripts).

renamed: array of object { from, to }

Applied renamed tombstones.

from: string

The original (source) class name.

to: string

The new class name (renamed_to).

transfer_pending: array of object { class, from }

Phase-1 transfer hints recorded on the target side.

class: string

The target-side class name awaiting transfer.

from: string

The source script the namespace will be transferred from.

transferred: array of object { class, phase, to }

Committed transferred tombstones (phase-2).

class: string

The source class name that was transferred.

phase: "committed"

The transfer phase. Currently always committed.

to: string

The destination script that now owns the namespace.

updated: array of string

Class names whose provisioned namespace was mutated in place.

warnings: array of object { class, message, scenario, namespace_id }

Non-blocking warnings. See exports_reconciliation_warning.

class: string

The class name the warning is about.

message: string

Human-readable explanation of the warning.

scenario: "code_class_not_in_exports" or "provisioned_class_missing_from_config" or "config_export_not_in_code" or 30 more

Stable, machine-readable tag identifying which reconciliation scenario produced an error, warning, or info entry. Clients may branch on this value instead of parsing message.

One of the following:
"code_class_not_in_exports"
"provisioned_class_missing_from_config"
"config_export_not_in_code"
"config_references_nonexistent_class"
"orphaned_provisioned_namespace"
"storage_type_mismatch"
"free_tier_requires_sqlite"
"invalid_export"
"tombstone_delete_class_still_in_code"
"tombstone_delete_blocked_by_external_bindings"
"tombstone_renamed_to_occupied"
"transferred_pending_not_found"
"transferred_target_missing"
"transferred_target_mismatch"
"phase_one_transfer_source_missing"
"phase_one_transfer_source_namespace_missing"
"phase_one_transfer_target_class_provisioned"
"phase_one_transfer_after_commit_mismatch"
"phase_one_transfer_duplicate"
"phase_one_transfer_target_in_dispatch_namespace"
"phase_one_transfer_source_in_dispatch_namespace"
"transferred_source_in_dispatch_namespace"
"transferred_target_in_dispatch_namespace"
"container_undeclared_reference"
"container_class_not_durable_object"
"container_wiring_inconsistent"
"container_multiple_durable_objects"
"transfer_container_parity_mismatch"
"transfer_container_parity_mismatch_on_commit"
"tombstone_class_still_in_code"
"stale_tombstone"
"transfer_receive_already_applied"
"transfer_receive_cleanup_complete"
namespace_id: optional string

The provisioned namespace the warning relates to, when applicable.

formatuuid
metadata: optional object { author_email, author_id, created_on, 3 more }
author_email: optional string

Email of the user who created the version.

author_id: optional string

Identifier of the user who created the version.

created_on: optional string

When the version was created.

hasPreview: optional boolean

Whether the version can be previewed.

modified_on: optional string

When the version was last modified.

source: optional "unknown" or "api" or "wrangler" or 8 more

The source of the version upload.

One of the following:
"unknown"
"api"
"wrangler"
"terraform"
"dash"
"cf_cli"
"dash_template"
"integration"
"quick_editor"
"playground"
"workersci"
number: optional number

Sequential version number.

startup_time_ms: optional number

Time in milliseconds spent on Worker startup.

success: true

Whether the API call was successful.

Upload Version

curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/workers/scripts/$SCRIPT_NAME/versions \
    -H 'Content-Type: multipart/form-data' \
    -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    -F metadata='{"main_module":"worker.js"}'
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "result": {
    "resources": {
      "bindings": [
        {
          "name": "MY_ENV_VAR",
          "text": "my_data",
          "type": "plain_text"
        }
      ],
      "script": {
        "etag": "13a3240e8fb414561b0366813b0b8f42b3e6cfa0d9e70e99835dae83d0d8a794",
        "handlers": [
          "fetch"
        ],
        "last_deployed_from": "api",
        "named_handlers": [
          {
            "handlers": [
              "fetch"
            ],
            "name": "MyClass"
          }
        ]
      },
      "script_runtime": {
        "compatibility_date": "2022-11-08",
        "compatibility_flags": [
          "x"
        ],
        "exports": {
          "Admin": {
            "type": "worker",
            "cache": {
              "enabled": true
            },
            "state": "created"
          },
          "Counter": {
            "storage": "sqlite",
            "type": "durable-object",
            "container": "my-container",
            "state": "created"
          },
          "OldCounter": {
            "state": "renamed",
            "type": "durable-object"
          },
          "default": {
            "type": "worker",
            "cache": {
              "enabled": false
            },
            "state": "created"
          }
        },
        "limits": {
          "cpu_ms": 50
        },
        "migration_tag": "v1",
        "usage_model": "standard"
      }
    },
    "id": "18f97339-c287-4872-9bdd-e2135c07ec12",
    "exports_reconciliation": {
      "created": [
        "string"
      ],
      "deleted": [
        "string"
      ],
      "info": [
        {
          "class": "class",
          "message": "message",
          "scenario": "code_class_not_in_exports",
          "namespace_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
          "referencing_scripts": [
            "string"
          ]
        }
      ],
      "removable_entries": [
        "string"
      ],
      "renamed": [
        {
          "from": "from",
          "to": "to"
        }
      ],
      "transfer_pending": [
        {
          "class": "class",
          "from": "from"
        }
      ],
      "transferred": [
        {
          "class": "class",
          "phase": "committed",
          "to": "to"
        }
      ],
      "updated": [
        "string"
      ],
      "warnings": [
        {
          "class": "class",
          "message": "message",
          "scenario": "code_class_not_in_exports",
          "namespace_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
        }
      ]
    },
    "metadata": {
      "author_email": "user@example.com",
      "author_id": "408cbcdfd4dda4617efef40b04d168a1",
      "created_on": "2022-11-08T17:19:29.176266Z",
      "hasPreview": true,
      "modified_on": "2022-11-08T17:19:29.176266Z",
      "source": "api"
    },
    "number": 1,
    "startup_time_ms": 10
  },
  "success": true
}
Returns Examples
{
  "errors": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "messages": [
    {
      "code": 1000,
      "message": "message",
      "documentation_url": "documentation_url",
      "source": {
        "pointer": "pointer"
      }
    }
  ],
  "result": {
    "resources": {
      "bindings": [
        {
          "name": "MY_ENV_VAR",
          "text": "my_data",
          "type": "plain_text"
        }
      ],
      "script": {
        "etag": "13a3240e8fb414561b0366813b0b8f42b3e6cfa0d9e70e99835dae83d0d8a794",
        "handlers": [
          "fetch"
        ],
        "last_deployed_from": "api",
        "named_handlers": [
          {
            "handlers": [
              "fetch"
            ],
            "name": "MyClass"
          }
        ]
      },
      "script_runtime": {
        "compatibility_date": "2022-11-08",
        "compatibility_flags": [
          "x"
        ],
        "exports": {
          "Admin": {
            "type": "worker",
            "cache": {
              "enabled": true
            },
            "state": "created"
          },
          "Counter": {
            "storage": "sqlite",
            "type": "durable-object",
            "container": "my-container",
            "state": "created"
          },
          "OldCounter": {
            "state": "renamed",
            "type": "durable-object"
          },
          "default": {
            "type": "worker",
            "cache": {
              "enabled": false
            },
            "state": "created"
          }
        },
        "limits": {
          "cpu_ms": 50
        },
        "migration_tag": "v1",
        "usage_model": "standard"
      }
    },
    "id": "18f97339-c287-4872-9bdd-e2135c07ec12",
    "exports_reconciliation": {
      "created": [
        "string"
      ],
      "deleted": [
        "string"
      ],
      "info": [
        {
          "class": "class",
          "message": "message",
          "scenario": "code_class_not_in_exports",
          "namespace_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
          "referencing_scripts": [
            "string"
          ]
        }
      ],
      "removable_entries": [
        "string"
      ],
      "renamed": [
        {
          "from": "from",
          "to": "to"
        }
      ],
      "transfer_pending": [
        {
          "class": "class",
          "from": "from"
        }
      ],
      "transferred": [
        {
          "class": "class",
          "phase": "committed",
          "to": "to"
        }
      ],
      "updated": [
        "string"
      ],
      "warnings": [
        {
          "class": "class",
          "message": "message",
          "scenario": "code_class_not_in_exports",
          "namespace_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
        }
      ]
    },
    "metadata": {
      "author_email": "user@example.com",
      "author_id": "408cbcdfd4dda4617efef40b04d168a1",
      "created_on": "2022-11-08T17:19:29.176266Z",
      "hasPreview": true,
      "modified_on": "2022-11-08T17:19:29.176266Z",
      "source": "api"
    },
    "number": 1,
    "startup_time_ms": 10
  },
  "success": true
}