Create secret API Reference
const url = 'https://api.kupe.cloud/api/v1/tenants/acme/secrets';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"name":"database-creds","secretPath":"services/database/credentials","sync":[{"cluster":"production","keys":["username","password"],"namespace":"app","secretName":"db-credentials"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.kupe.cloud/api/v1/tenants/acme/secrets \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "name": "database-creds", "secretPath": "services/database/credentials", "sync": [ { "cluster": "production", "keys": [ "username", "password" ], "namespace": "app", "secretName": "db-credentials" } ] }'Create a new secret. The secretPath points to a key in the tenant’s Vault (a KV v2 store). Optionally configure sync targets to automatically replicate the secret into Kubernetes namespaces across your managed clusters.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Tenant name
Request Body
Section titled “ Request Body ”Secret configuration
object
Secret name (DNS-safe, 2-63 characters)
Example
database-credsPath in the tenant’s Vault (a KV v2 store). Paths under encryption/ are reserved for the platform.
Example
services/database/credentialsOptional sync targets to replicate the secret into clusters
object
Target cluster name
Example
productionSelected keys; omitted means the whole entry.
Example
[ "username", "password"]Target namespace within the cluster
Example
appOverride the Kubernetes secret name (defaults to the secret name)
Example
db-credentialsResponses
Section titled “ Responses ”Secret created
object
The definition’s generation increments on a change; compare with status.observedGeneration.
object
object
object
pending is true while a requested token differs from observedAt.
object
Synced confirms delivery into the cluster namespace. Withdrawing tracks a removed target until its source is withdrawn.
object
Omitted keys means the whole entry. Selected keys must be unique, with at most 1,024 across all targets.
Example
{ "createdAt": "2026-03-10T09:15:00Z", "generation": 3, "name": "database-creds", "resourceVersion": "582019", "secretPath": "services/database/credentials", "status": { "observedRefresh": "2026-10-27T12:00:00Z", "phase": "Pending", "refresh": { "observedAt": "2026-10-27T12:00:00Z", "pending": false, "requestedAt": "2026-10-27T12:00:00Z" }, "syncStatuses": [ { "cluster": "production", "deliveredRefresh": "2026-10-27T12:00:00Z", "lastDeliveredAt": "2026-10-27T12:00:01Z", "namespace": "app", "phase": "Pending", "reason": "Delivered", "secretName": "db-credentials" } ] }, "sync": [ { "cluster": "production", "keys": [ "username", "password" ], "namespace": "app", "secretName": "db-credentials" } ]}Headers
Section titled “ Headers ”Resource version
Validation error
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Missing or invalid authentication
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Admin access required
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Secret name already exists
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}Rate limit exceeded
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}