Application API

2026-10-22

Application API

Application hosts your Workers: upload code and static assets as a version, deploy it, and serve it on its own *.praxisusercontent.com URL (use the url that publish returns). Concepts and behavior follow Cloudflare Workers (Workers, versions, deployments, static assets with _headers/_redirects, secrets, bindings), so Cloudflare experience applies. Differences: there are no Service Bindings, so applications call each other with fetch on their public URL; a deployment runs exactly one version at 100 percent (no gradual rollout); changing a secret creates a new version and deploys it. Application runtime data belongs in its own d1, kv or r2 components; Database, File and Knowledge are shared content stores that applications can read through public APIs, not private runtime storage. Start with praxis.application.publish, which uploads, versions and deploys in one call.

Base URL

Loading…

Authentication

Authorization: Bearer <PRAXIS_API_KEY>

Endpoints

Get account subdomain

GET /application/v1/subdomain

Return the account subdomain used in every Worker URL. A default is created on first use.

Support: supported

Response

HTTP 200

Success

application/json

NameTypeDescription
subdomainstringAccount subdomain, 8–32 lowercase letters and digits; part of every Worker URL.

Change account subdomain

PUT /application/v1/subdomain

Change the account subdomain. Every Worker moves to the new address at once; old addresses stop resolving.

Support: supported

Request body (application/json)

Required: true

NameTypeDescription
subdomainstringAccount subdomain, 8–32 lowercase letters and digits; part of every Worker URL.
{
  "type": "object",
  "required": [
    "subdomain"
  ],
  "properties": {
    "subdomain": {
      "type": "string",
      "description": "Account subdomain, 8–32 lowercase letters and digits; part of every Worker URL.",
      "pattern": "^[a-z0-9]{8,32}$",
      "example": "acme1234"
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
subdomainstringAccount subdomain, 8–32 lowercase letters and digits; part of every Worker URL.

List Workers

GET /application/v1/workers

List Workers in your account. Filter by status or by label with label.<key>=<value>.

Support: supported

Parameters

NameLocationTypeRequiredDescription
cursorquerystringfalsenext_cursor from the previous page.
limitqueryintegerfalseItems per page.
statusquerystringfalseWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).

Response

HTTP 200

Success

application/json

NameTypeDescription
dataarray<object>Workers.
data[].idstringWorker ID, prefixed wkr_.
data[].namestringUnique per account; lowercase letters, digits and single hyphens.
data[].subdomainobjectPublic address of the Worker.
data[].tagsarray<string>Up to 8 tags.
data[].observabilityobjectObservability settings.
data[].logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
data[].created_onstringWhen the Worker was created.
data[].updated_onstringWhen the Worker last changed.
data[].deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
data[].praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
next_cursorstring | nullCursor for the next page; null on the last page.

Create Worker

POST /application/v1/workers

Create a Worker. It serves nothing until a version is deployed.

Support: supported

Request body (application/json)

Required: true

NameTypeDescription
namestringWorker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanCollect logs.
subdomainobjectSubdomain settings.
subdomain.enabledbooleanServe the Worker on its public subdomain (default true).
praxisobjectPraxis settings.
praxis.labelsobjectUp to 16 labels.
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved.",
      "pattern": "^(?!(?:www|api|admin|app|canary|canary-probe|status|docs|console)$)(?!.*--)[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$",
      "example": "my-app"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 8,
      "description": "Up to 8 tags."
    },
    "observability": {
      "type": "object",
      "description": "Observability settings.",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Collect logs."
        }
      }
    },
    "subdomain": {
      "type": "object",
      "description": "Subdomain settings.",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Serve the Worker on its public subdomain (default true)."
        }
      }
    },
    "praxis": {
      "type": "object",
      "description": "Praxis settings.",
      "required": [],
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Up to 16 labels."
        }
      }
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringWorker ID, prefixed wkr_.
namestringUnique per account; lowercase letters, digits and single hyphens.
subdomainobjectPublic address of the Worker.
subdomain.enabledbooleanWhether the public subdomain serves this Worker.
subdomain.urlstringPublic URL of the Worker.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanWhether logs are collected.
logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
created_onstringWhen the Worker was created.
updated_onstringWhen the Worker last changed.
deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
praxis.statusstringWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).
praxis.current_deployment_idstring | nullID of the active deployment.
praxis.labelsobjectUp to 16 key-value labels for your own grouping.
praxis.deleted_onstring | nullWhen the Worker was deleted.
praxis.purge_onstring | nullWhen a deleted Worker is permanently removed.
praxis.suspended_reasonstring | nullWhy an administrator suspended the Worker.

Get Worker

GET /application/v1/workers/{worker_id}

Get a Worker. expand returns related objects in the same response.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
expandquerystringfalseComma-separated: versions, deployments, components, secrets, grants.

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringWorker ID, prefixed wkr_.
namestringUnique per account; lowercase letters, digits and single hyphens.
subdomainobjectPublic address of the Worker.
subdomain.enabledbooleanWhether the public subdomain serves this Worker.
subdomain.urlstringPublic URL of the Worker.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanWhether logs are collected.
logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
created_onstringWhen the Worker was created.
updated_onstringWhen the Worker last changed.
deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
praxis.statusstringWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).
praxis.current_deployment_idstring | nullID of the active deployment.
praxis.labelsobjectUp to 16 key-value labels for your own grouping.
praxis.deleted_onstring | nullWhen the Worker was deleted.
praxis.purge_onstring | nullWhen a deleted Worker is permanently removed.
praxis.suspended_reasonstring | nullWhy an administrator suspended the Worker.
expandedobjectPresent only for the members named in expand.
expanded.versionsobjectVersions of the Worker, newest first.
expanded.deploymentsobjectDeployments of the Worker, newest first.
expanded.componentsarray<object>Components of the Worker.
expanded.secretsarray<object>Secrets of the Worker (names only).
expanded.grantsarray<object>Grants of the Worker.

Update Worker

PATCH /application/v1/workers/{worker_id}

Change name, tags, observability, subdomain or labels. Omitted fields stay unchanged.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Request body (application/json)

Required: true

NameTypeDescription
namestringWorker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved.
tagsarray<string>Replaces the tags.
observabilityobjectObservability settings.
observability.enabledbooleanCollect logs.
subdomainobjectSubdomain settings.
subdomain.enabledbooleanServe the Worker on its public subdomain.
praxisobjectPraxis settings.
praxis.labelsobjectReplaces the labels.
{
  "type": "object",
  "required": [],
  "properties": {
    "name": {
      "type": "string",
      "description": "Worker name, unique in your account: 3–40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, with no two hyphens in a row. The names www, api, admin, app, canary, canary-probe, status, docs and console are reserved.",
      "pattern": "^(?!(?:www|api|admin|app|canary|canary-probe|status|docs|console)$)(?!.*--)[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$",
      "example": "my-app"
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 8,
      "description": "Replaces the tags."
    },
    "observability": {
      "type": "object",
      "description": "Observability settings.",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Collect logs."
        }
      }
    },
    "subdomain": {
      "type": "object",
      "description": "Subdomain settings.",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Serve the Worker on its public subdomain."
        }
      }
    },
    "praxis": {
      "type": "object",
      "description": "Praxis settings.",
      "required": [],
      "properties": {
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Replaces the labels."
        }
      }
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringWorker ID, prefixed wkr_.
namestringUnique per account; lowercase letters, digits and single hyphens.
subdomainobjectPublic address of the Worker.
subdomain.enabledbooleanWhether the public subdomain serves this Worker.
subdomain.urlstringPublic URL of the Worker.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanWhether logs are collected.
logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
created_onstringWhen the Worker was created.
updated_onstringWhen the Worker last changed.
deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
praxis.statusstringWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).
praxis.current_deployment_idstring | nullID of the active deployment.
praxis.labelsobjectUp to 16 key-value labels for your own grouping.
praxis.deleted_onstring | nullWhen the Worker was deleted.
praxis.purge_onstring | nullWhen a deleted Worker is permanently removed.
praxis.suspended_reasonstring | nullWhy an administrator suspended the Worker.

Delete Worker

DELETE /application/v1/workers/{worker_id}

Soft-delete a Worker. Unlike Cloudflare, deletion is reversible: it stops serving at once and can be restored with RestoreWorker for 7 days, after which it is purged.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringWorker ID, prefixed wkr_.
namestringUnique per account; lowercase letters, digits and single hyphens.
subdomainobjectPublic address of the Worker.
subdomain.enabledbooleanWhether the public subdomain serves this Worker.
subdomain.urlstringPublic URL of the Worker.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanWhether logs are collected.
logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
created_onstringWhen the Worker was created.
updated_onstringWhen the Worker last changed.
deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
praxis.statusstringWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).
praxis.current_deployment_idstring | nullID of the active deployment.
praxis.labelsobjectUp to 16 key-value labels for your own grouping.
praxis.deleted_onstring | nullWhen the Worker was deleted.
praxis.purge_onstring | nullWhen a deleted Worker is permanently removed.
praxis.suspended_reasonstring | nullWhy an administrator suspended the Worker.

Restore Worker

POST /application/v1/workers/{worker_id}/restore

Bring back a soft-deleted Worker within 7 days of deletion, with its versions and deployments. Cloudflare has no equivalent.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringWorker ID, prefixed wkr_.
namestringUnique per account; lowercase letters, digits and single hyphens.
subdomainobjectPublic address of the Worker.
subdomain.enabledbooleanWhether the public subdomain serves this Worker.
subdomain.urlstringPublic URL of the Worker.
tagsarray<string>Up to 8 tags.
observabilityobjectObservability settings.
observability.enabledbooleanWhether logs are collected.
logpushbooleanAlways false: unlike Cloudflare, Logpush is not offered.
created_onstringWhen the Worker was created.
updated_onstringWhen the Worker last changed.
deployed_onstring | nullWhen the current deployment became active; null before the first deployment.
praxisobjectPlatform fields: lifecycle status, labels, and soft-delete timestamps.
praxis.statusstringWorker status: draft (no deployment yet), active (serving), suspended (stopped by an administrator), deleted (soft-deleted, restorable for 7 days), purging (resources being removed), purged (gone).
praxis.current_deployment_idstring | nullID of the active deployment.
praxis.labelsobjectUp to 16 key-value labels for your own grouping.
praxis.deleted_onstring | nullWhen the Worker was deleted.
praxis.purge_onstring | nullWhen a deleted Worker is permanently removed.
praxis.suspended_reasonstring | nullWhy an administrator suspended the Worker.

List versions

GET /application/v1/workers/{worker_id}/versions

List the versions of a Worker, newest first, to pick one to deploy or inspect. Page with next_cursor.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
cursorquerystringfalsenext_cursor from the previous page.
limitqueryintegerfalseItems per page.

Response

HTTP 200

Success

application/json

NameTypeDescription
dataarray<object>Versions, newest first.
data[].idstringVersion ID, prefixed ver_.
data[].numberintegerPer-Worker counter (v1, v2, …).
data[].created_onstringWhen the version was created.
data[].main_modulestring | nullEntry module name, or null for a version containing only static assets.
data[].modulesarray<object>Module names and types; content is never returned.
data[].compatibility_datestringWorkers runtime compatibility date.
data[].compatibility_flagsarray<string>Runtime compatibility flags.
data[].bindingsarray<object>Bindings; secret values are never returned.
data[].assetsobject | nullStatic asset settings.
data[].annotationsobjectFree-form annotations.
data[].author_idstring | nullWho created the version.
data[].sourcestringUpload origin, e.g. api or sdk.
data[].urlsarray<string>Preview URLs of this version.
data[].praxisobjectPlatform fields: owning Worker, build source, script size and asset manifest summary.
next_cursorstring | nullCursor for the next page; null on the last page.

Create version

POST /application/v1/workers/{worker_id}/versions

Upload code and bindings as a new version; a version serves nothing until deployed. Set deploy true to create the pending deployment in the same call. Rejected binding types return UNSUPPORTED.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Request body (application/json)

Required: true

NameTypeDescription
deploybooleanAlso create a deployment of this version (own face only; on the compatible face use the deploy query parameter).
main_modulestringEntry module name; must equal the name of one of modules. Defaults to the first module; omit it when there are no modules.
modulesarray<object>Inline modules.
modules[].namestringModule file name.
modules[].content_typestringModule content type: application/javascript+module, text/javascript, application/javascript, application/wasm, text/plain, application/octet-stream, application/json or application/x-python. Omit it to use application/javascript+module.
modules[].content_base64stringModule content, base64.
compatibility_datestringWorkers runtime compatibility date: a real date in YYYY-MM-DD form, not later than today (UTC). Defaults to today (UTC).
compatibility_flagsarray<string>Runtime compatibility flags.
bindingsarray<object>Bindings of this version.
bindings[].typestringBinding type; see the binding description for what each needs and which are unavailable.
bindings[].namestringName of the binding in the Worker's env: 1–64 letters, digits or underscores, not starting with a digit; unique within a version.
assetsobjectStatic assets. Pass either manifest (every file already uploaded through an upload session) or jwt (the completion token from the last upload batch), not both.
assets.configobjectRouting settings for the static assets.
assets.manifestobjectMap of static file path to content hash and byte size. Paths start with /; the same hash must declare the same size. The root paths /_headers and /_redirects are response-header and redirect rule files and are not served as assets; same-named files in subdirectories are ordinary assets. _headers allows at most 100 rules and 2000 characters per line (whitespace included); _redirects allows at most 2000 static and 100 dynamic rules and 1000 characters per rule (whitespace included), and rules after the first dynamic rule count toward the dynamic quota. Exceeding a limit makes CreateVersion return INVALID_PARAMS, with violations.field pointing at the manifest entry.
assets.jwtstringCompletion token from the last assets/upload batch; it carries this version's manifest, so do not also pass manifest.
annotationsobjectFree-form annotations.
annotations.workers/messagestringVersion message.
annotations.workers/tagstringVersion tag.
praxisobjectPraxis settings.
praxis.sourceobjectBuild source: {type:inline}, {type:machine, path} or {type:file, file_id}.
{
  "type": "object",
  "required": [],
  "properties": {
    "deploy": {
      "type": "boolean",
      "description": "Also create a deployment of this version (own face only; on the compatible face use the deploy query parameter)."
    },
    "main_module": {
      "type": "string",
      "description": "Entry module name; must equal the name of one of modules. Defaults to the first module; omit it when there are no modules.",
      "example": "index.js"
    },
    "modules": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/application-Module"
      },
      "description": "Inline modules."
    },
    "compatibility_date": {
      "type": "string",
      "description": "Workers runtime compatibility date: a real date in YYYY-MM-DD form, not later than today (UTC). Defaults to today (UTC).",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "example": "2026-01-01"
    },
    "compatibility_flags": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Runtime compatibility flags."
    },
    "bindings": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/application-Binding"
      },
      "description": "Bindings of this version."
    },
    "assets": {
      "type": "object",
      "description": "Static assets. Pass either manifest (every file already uploaded through an upload session) or jwt (the completion token from the last upload batch), not both.",
      "required": [],
      "properties": {
        "config": {
          "$ref": "#/components/schemas/application-AssetsConfig",
          "description": "Routing settings for the static assets."
        },
        "manifest": {
          "$ref": "#/components/schemas/application-AssetManifest"
        },
        "jwt": {
          "type": "string",
          "description": "Completion token from the last assets/upload batch; it carries this version's manifest, so do not also pass manifest."
        }
      }
    },
    "annotations": {
      "type": "object",
      "description": "Free-form annotations.",
      "required": [],
      "properties": {
        "workers/message": {
          "type": "string",
          "description": "Version message."
        },
        "workers/tag": {
          "type": "string",
          "description": "Version tag."
        }
      }
    },
    "praxis": {
      "type": "object",
      "description": "Praxis settings.",
      "required": [],
      "properties": {
        "source": {
          "type": "object",
          "additionalProperties": true,
          "description": "Build source: {type:inline}, {type:machine, path} or {type:file, file_id}."
        }
      }
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
versionobjectThe version that was created.
version.idstringVersion ID, prefixed ver_.
version.numberintegerPer-Worker counter (v1, v2, …).
version.created_onstringWhen the version was created.
version.main_modulestring | nullEntry module name, or null for a version containing only static assets.
version.modulesarray<object>Module names and types; content is never returned.
version.compatibility_datestringWorkers runtime compatibility date.
version.compatibility_flagsarray<string>Runtime compatibility flags.
version.bindingsarray<object>Bindings; secret values are never returned.
version.assetsobject | nullStatic asset settings.
version.annotationsobjectFree-form annotations.
version.author_idstring | nullWho created the version.
version.sourcestringUpload origin, e.g. api or sdk.
version.urlsarray<string>Preview URLs of this version.
version.praxisobjectPlatform fields: owning Worker, build source, script size and asset manifest summary.
deploymentobject | nullThe pending deployment; null unless deploy was requested.
deployment.idstringDeployment ID, prefixed dep_.
deployment.created_onstringWhen the deployment was created.
deployment.sourcestringOrigin: api, sdk, console or rollback.
deployment.strategystringRollout strategy.
deployment.versionsarray<object>Exactly one version at 100 percent.
deployment.annotationsobjectFree-form annotations.
deployment.author_emailstring | nullWho created the deployment.
deployment.praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.

Get version

GET /application/v1/workers/{worker_id}/versions/{version_id}

Get one version of a Worker with its modules, bindings and asset settings; secret values are never returned.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
version_idpathstringtrueVersion ID (ver_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringVersion ID, prefixed ver_.
numberintegerPer-Worker counter (v1, v2, …).
created_onstringWhen the version was created.
main_modulestring | nullEntry module name, or null for a version containing only static assets.
modulesarray<object>Module names and types; content is never returned.
modules[].namestringModule name.
modules[].content_typestringMIME type.
compatibility_datestringWorkers runtime compatibility date.
compatibility_flagsarray<string>Runtime compatibility flags.
bindingsarray<object>Bindings; secret values are never returned.
bindings[].typestringBinding type; see the binding description for what each needs and which are unavailable.
bindings[].namestringName of the binding in the Worker's env: 1–64 letters, digits or underscores, not starting with a digit; unique within a version.
assetsobject | nullStatic asset settings.
assets.configobjectRouting settings for the static assets.
annotationsobjectFree-form annotations.
annotations.workers/messagestringVersion message.
annotations.workers/tagstringVersion tag.
author_idstring | nullWho created the version.
sourcestringUpload origin, e.g. api or sdk.
urlsarray<string>Preview URLs of this version.
praxisobjectPlatform fields: owning Worker, build source, script size and asset manifest summary.
praxis.worker_idstringOwning Worker.
praxis.sourceobjectWhere the build came from: inline, machine (a tar.gz on a session machine) or file (an uploaded tar.gz).
praxis.size_bytesintegerScript size in bytes.
praxis.assets_manifestobject | nullStatic asset manifest summary.

List deployments

GET /application/v1/workers/{worker_id}/deployments

List the deployments of a Worker, newest first; the first active one is serving. Page with next_cursor.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
cursorquerystringfalsenext_cursor from the previous page.
limitqueryintegerfalseItems per page.

Response

HTTP 200

Success

application/json

NameTypeDescription
dataarray<object>Deployments, newest first.
data[].idstringDeployment ID, prefixed dep_.
data[].created_onstringWhen the deployment was created.
data[].sourcestringOrigin: api, sdk, console or rollback.
data[].strategystringRollout strategy.
data[].versionsarray<object>Exactly one version at 100 percent.
data[].annotationsobjectFree-form annotations.
data[].author_emailstring | nullWho created the deployment.
data[].praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.
next_cursorstring | nullCursor for the next page; null on the last page.

Create deployment

POST /application/v1/workers/{worker_id}/deployments

Deploy one version to serve the Worker. Unlike Cloudflare, a deployment holds exactly one version at 100 percent (no gradual rollout), so strategy must be percentage. Deployment is asynchronous; poll the deployment until praxis.status is active or failed.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Request body (application/json)

Required: true

NameTypeDescription
strategystringRollout strategy.
versionsarray<object>Exactly one version at 100 percent.
versions[].version_idstringVersion to deploy.
versions[].percentagenumberMust be 100.
forcebooleanOwn face only; on the compatible face use the force query parameter.
annotationsobjectFree-form annotations.
annotations.workers/messagestringDeployment message.
{
  "type": "object",
  "required": [
    "strategy",
    "versions"
  ],
  "properties": {
    "strategy": {
      "type": "string",
      "description": "Rollout strategy.",
      "enum": [
        "percentage"
      ],
      "x-enum-descriptions": {
        "percentage": "Split traffic by percentage; only a single version at 100 is accepted."
      },
      "example": "percentage"
    },
    "versions": {
      "type": "array",
      "description": "Exactly one version at 100 percent.",
      "items": {
        "type": "object",
        "required": [
          "version_id",
          "percentage"
        ],
        "properties": {
          "version_id": {
            "type": "string",
            "description": "Version to deploy."
          },
          "percentage": {
            "type": "number",
            "description": "Must be 100."
          }
        }
      }
    },
    "force": {
      "type": "boolean",
      "description": "Own face only; on the compatible face use the force query parameter."
    },
    "annotations": {
      "type": "object",
      "description": "Free-form annotations.",
      "required": [],
      "properties": {
        "workers/message": {
          "type": "string",
          "description": "Deployment message."
        }
      }
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringDeployment ID, prefixed dep_.
created_onstringWhen the deployment was created.
sourcestringOrigin: api, sdk, console or rollback.
strategystringRollout strategy.
versionsarray<object>Exactly one version at 100 percent.
versions[].version_idstringDeployed version.
versions[].percentagenumberTraffic share; always 100.
annotationsobjectFree-form annotations.
annotations.workers/messagestringDeployment message.
annotations.workers/triggered_bystringWhat triggered the deployment.
author_emailstring | nullWho created the deployment.
praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.
praxis.worker_idstringOwning Worker.
praxis.statusstringDeployment status: pending (queued), uploading (pushing components and assets), activating (switching traffic), active (serving), superseded (replaced by a later deployment), failed (see error), cancelled (replaced before it finished).
praxis.progressobject | nullUpload progress.
praxis.errorobject | nullWhy the deployment failed.
praxis.finished_onstring | nullWhen the deployment reached a final status.

Get deployment

GET /application/v1/workers/{worker_id}/deployments/{deployment_id}

Get one deployment with its status and upload progress; poll this after CreateDeployment until praxis.status is active or failed.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
deployment_idpathstringtrueID from the id of CreateDeployment or ListDeployments, prefixed dep_.

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringDeployment ID, prefixed dep_.
created_onstringWhen the deployment was created.
sourcestringOrigin: api, sdk, console or rollback.
strategystringRollout strategy.
versionsarray<object>Exactly one version at 100 percent.
versions[].version_idstringDeployed version.
versions[].percentagenumberTraffic share; always 100.
annotationsobjectFree-form annotations.
annotations.workers/messagestringDeployment message.
annotations.workers/triggered_bystringWhat triggered the deployment.
author_emailstring | nullWho created the deployment.
praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.
praxis.worker_idstringOwning Worker.
praxis.statusstringDeployment status: pending (queued), uploading (pushing components and assets), activating (switching traffic), active (serving), superseded (replaced by a later deployment), failed (see error), cancelled (replaced before it finished).
praxis.progressobject | nullUpload progress.
praxis.errorobject | nullWhy the deployment failed.
praxis.finished_onstring | nullWhen the deployment reached a final status.

List components

GET /application/v1/workers/{worker_id}/components

List the databases, namespaces and buckets this Worker owns.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
[].idstringComponent ID, prefixed cmp_.
[].worker_idstringOwning Worker.
[].bindingstringBinding name in the Worker's env.
[].typestringComponent type: d1 database, kv namespace or r2 bucket.
[].statusstringComponent status: provisioning, ready, failed, deleting or deleted.
[].location_hintstringAlways apac.
[].usageobject | nullStorage usage.
[].usage.bytesintegerStored bytes.
[].usage.itemsintegerStored items.
[].created_onstringWhen the component was created.

List secrets

GET /application/v1/workers/{worker_id}/secrets

List secret names and sources. Values are never returned.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
[].worker_idstringOwning Worker.
[].namestringSecret name, as seen by the Worker's env.
[].sourceobject{type: value} for a stored value, or {type: vault, vault_id, secret} for a vault reference. Values are never returned.
[].updated_onstringWhen the secret last changed.

Put secret

PUT /application/v1/workers/{worker_id}/secrets/{name}

Create or replace a secret by value or vault reference. Unlike Cloudflare, this derives a new version from the current one and deploys it, so the change is live only once that deployment is active.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
namepathstringtrueSecret name as seen in the Worker's env: 1–64 letters, digits or underscores, not starting with a digit.

Request body (application/json)

Required: true

NameTypeDescription
sourceobject{type: value, text} stores a value; {type: vault, vault_id, secret} references a vault secret.
{
  "type": "object",
  "required": [
    "source"
  ],
  "properties": {
    "source": {
      "type": "object",
      "additionalProperties": true,
      "description": "{type: value, text} stores a value; {type: vault, vault_id, secret} references a vault secret."
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
secretobjectThe secret after the write; its value is not returned.
secret.worker_idstringOwning Worker.
secret.namestringSecret name, as seen by the Worker's env.
secret.sourceobject{type: value} for a stored value, or {type: vault, vault_id, secret} for a vault reference. Values are never returned.
secret.updated_onstringWhen the secret last changed.
deploymentobjectThe deployment of the version derived from this change.
deployment.idstringDeployment ID, prefixed dep_.
deployment.created_onstringWhen the deployment was created.
deployment.sourcestringOrigin: api, sdk, console or rollback.
deployment.strategystringRollout strategy.
deployment.versionsarray<object>Exactly one version at 100 percent.
deployment.annotationsobjectFree-form annotations.
deployment.author_emailstring | nullWho created the deployment.
deployment.praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.

Delete secret

DELETE /application/v1/workers/{worker_id}/secrets/{name}

Delete a secret. Unlike Cloudflare, this derives a new version without it and deploys that version.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
namepathstringtrueSecret name as seen in the Worker's env: 1–64 letters, digits or underscores, not starting with a digit.

Response

HTTP 200

Success

application/json

NameTypeDescription
deploymentobjectThe deployment of the version derived without this secret.
deployment.idstringDeployment ID, prefixed dep_.
deployment.created_onstringWhen the deployment was created.
deployment.sourcestringOrigin: api, sdk, console or rollback.
deployment.strategystringRollout strategy.
deployment.versionsarray<object>Exactly one version at 100 percent.
deployment.annotationsobjectFree-form annotations.
deployment.author_emailstring | nullWho created the deployment.
deployment.praxisobjectPlatform fields: deployments run asynchronously, so track status, progress and error here.

List grants

GET /application/v1/workers/{worker_id}/grants

List resources this Worker's platform token may access.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
[].idstringGrant ID, prefixed grt_.
[].worker_idstringOwning Worker.
[].resourceobjectGranted resource.
[].resource.typestringResource type.
[].resource.idstringResource ID.
[].accessstringAccess level.
[].created_onstringWhen the grant was created.

Create grant

POST /application/v1/workers/{worker_id}/grants

Let this Worker's platform token access one of your databases, folders or knowledge bases.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Request body (application/json)

Required: true

NameTypeDescription
resourceobjectResource to grant.
resource.typestringResource type.
resource.idstringResource ID in your account.
accessstringAccess level.
{
  "type": "object",
  "required": [
    "resource",
    "access"
  ],
  "properties": {
    "resource": {
      "type": "object",
      "description": "Resource to grant.",
      "required": [
        "type",
        "id"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Resource type.",
          "enum": [
            "database",
            "folder",
            "knowledge"
          ],
          "x-enum-descriptions": {
            "database": "A database.",
            "folder": "A file folder.",
            "knowledge": "A knowledge base."
          },
          "example": "database"
        },
        "id": {
          "type": "string",
          "description": "Resource ID in your account.",
          "example": "db_01example"
        }
      }
    },
    "access": {
      "type": "string",
      "description": "Access level.",
      "enum": [
        "read",
        "read_write"
      ],
      "x-enum-descriptions": {
        "read": "Read only.",
        "read_write": "Read and write."
      },
      "example": "read"
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
idstringGrant ID, prefixed grt_.
worker_idstringOwning Worker.
resourceobjectGranted resource.
resource.typestringResource type.
resource.idstringResource ID.
accessstringAccess level.
created_onstringWhen the grant was created.

Delete grant

DELETE /application/v1/workers/{worker_id}/grants/{grant_id}

Revoke a grant so this Worker's platform token can no longer access the granted resource. Takes effect for new requests at once.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
grant_idpathstringtrueGrant ID (grt_…).

Response

HTTP 200

Success

application/json

NameTypeDescription
deletedbooleanAlways true.

List events

GET /application/v1/workers/{worker_id}/events

List lifecycle events of a Worker in sequence order.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).
after_seqqueryintegerfalseReturn events after this sequence number.
limitqueryintegerfalseItems per page.

Response

HTTP 200

Success

application/json

NameTypeDescription
dataarray<object>Events in sequence order.
data[].seqintegerMonotonic sequence within the Worker.
data[].idstringEvent ID.
data[].typestringEvent type, e.g. deployment.status_active.
data[].processed_atstringWhen the event was recorded.
data[].worker_idstringWorker the event belongs to.
data[].version_idstringRelated version.
data[].deployment_idstringRelated deployment.
data[].component_idstringRelated component.
data[].detailobjectEvent-specific detail.
next_cursorstring | nullCursor for the next page; null on the last page.

Create asset upload session

POST /application/v1/workers/{worker_id}/assets-upload-session

Declare the static file manifest. The answer lists the hashes still missing, grouped into upload batches, and an upload token.

Support: supported

Parameters

NameLocationTypeRequiredDescription
worker_idpathstringtrueWorker ID (wkr_…).

Request body (application/json)

Required: true

NameTypeDescription
manifestobjectMap of static file path to content hash and byte size. Paths start with /; the same hash must declare the same size. The root paths /_headers and /_redirects are response-header and redirect rule files and are not served as assets; same-named files in subdirectories are ordinary assets. _headers allows at most 100 rules and 2000 characters per line (whitespace included); _redirects allows at most 2000 static and 100 dynamic rules and 1000 characters per rule (whitespace included), and rules after the first dynamic rule count toward the dynamic quota. Exceeding a limit makes CreateVersion return INVALID_PARAMS, with violations.field pointing at the manifest entry.
{
  "type": "object",
  "required": [
    "manifest"
  ],
  "properties": {
    "manifest": {
      "$ref": "#/components/schemas/application-AssetManifest"
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
jwtstringUpload token, valid for one hour.
bucketsarray<array<string>>Hashes still missing, grouped into upload batches.

Upload assets

POST /application/v1/assets/upload

Upload one batch: files maps hash to base64 content. The last batch returns the completion token.

Support: supported

Request body (application/json)

Required: true

NameTypeDescription
jwtstringUpload token from the session.
filesobjectHash → base64 file content.
{
  "type": "object",
  "required": [
    "jwt",
    "files"
  ],
  "properties": {
    "jwt": {
      "type": "string",
      "description": "Upload token from the session."
    },
    "files": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Hash → base64 file content."
    }
  }
}

Response

HTTP 200

Success

application/json

NameTypeDescription
jwtstring | nullCompletion token after the last batch; null for earlier batches.