Secrets
Covers the 3 API operations in the secrets category.
| Method | Path | Description |
|---|---|---|
| GET | /v1/orgs/{orgSlug}/projects/{projectName}/secrets | List secret names and versions (runlot secret list) |
| PUT | /v1/orgs/{orgSlug}/projects/{projectName}/secrets/{secretName} | Create or update a secret (runlot secret set) |
| DELETE | /v1/orgs/{orgSlug}/projects/{projectName}/secrets/{secretName} | Delete a secret (runlot secret delete) |
GET /v1/orgs/{orgSlug}/projects/{projectName}/secrets
The value is in no response. The only path out for a value is the worker's env.<NAME> (docs/phase6.md B3·B4). Requires member or above.
operationId listSecrets
| Status | Description | Response body |
|---|---|---|
| 200 | List | SecretList |
| 403 | — | — |
| 404 | — | — |
PUT /v1/orgs/{orgSlug}/projects/{projectName}/secrets/{secretName}
Not idempotent — every call raises version, and at the next convergence the node performs a zero-downtime swap of that project's workerd onto the new environment (the same path as a deploy). No redeploy is needed.
cp-public does not store the value. cp-core seals it with the master key (docs/phase6.md B1). The audit event secret.set carries the name only.
Requires member or above.
operationId setSecret
Request body: application/json · object
| Status | Description | Response body |
|---|---|---|
| 200 | The stored name and version | SecretMeta |
| 400 | The name does not match the rules (bad_request) or is a reserved name (reserved_name: DB, ASSETS, RUNLOT_* — the uppercase counterparts of the bindings env.db·env.assets, and the node prefix) | Error |
| 403 | — | — |
| 404 | — | — |
DELETE /v1/orgs/{orgSlug}/projects/{projectName}/secrets/{secretName}
A name that does not exist is a 404 — we do not keep an answer that reports a deletion while deleting nothing. Requires member or above. Audit secret.delete.
operationId deleteSecret
| Status | Description | Response body |
|---|---|---|
| 204 | Deleted | — |
| 403 | — | — |
| 404 | — | — |