Update registry API Reference
const url = 'https://api.kupe.cloud/api/v1/tenants/acme/registries/registry';const options = { method: 'PATCH', headers: { 'If-Match': '582019', Authorization: '<Authorization>', 'Content-Type': 'application/json' }, body: '{"deletionProtection":false,"storageLimit":"20Gi"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.kupe.cloud/api/v1/tenants/acme/registries/registry \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --header 'If-Match: 582019' \ --data '{ "deletionProtection": false, "storageLimit": "20Gi" }'Update the registry with JSON merge-patch semantics: storageLimit and deletionProtection, at least
one. storageLimit: "" removes the limit, so the plan’s cap applies. Raising the limit is held to the
plan’s cap; lowering it is always accepted, also below what the registry stores (pushes are then
refused until images are deleted).
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Tenant name
Registry name: always registry
Header Parameters
Section titled “ Header Parameters ”ETag for optimistic locking
Request Body
Section titled “ Request Body ”Fields to update (at least one required)
object
Turn deletion protection on or off.
Example
falseNew storage cap, with a binary unit (“20Gi”); “” removes it, so the plan’s cap applies.
Example
20GiResponses
Section titled “ Responses ”Updated registry
object
DeletionProtection must be false before the registry can be deleted.
Generation increments on every spec change; compare with status.observedGeneration.
object
ArtifactCount counts every stored item: each image, each platform image of a multi-platform image, and signatures.
Conditions include Ready, Provisioned and StorageFull.
object
Endpoint is the image path prefix to push to and pull from.
RepositoryCount is the number of repositories.
StorageLimitBytes is the storage cap in force, in bytes; -1 means unlimited. Absent until a cap has been applied.
StorageUsedBytes is what the registry stores, in bytes.
UsageObservedAt is when the usage figures were last read.
StorageLimit is the tenant’s own cap below the plan’s; empty means the plan’s cap.
Example
{ "createdAt": "2026-10-21T10:00:00Z", "deletionProtection": true, "generation": 2, "name": "registry", "resourceVersion": "582019", "status": { "artifactCount": 12, "endpoint": "registry.kupe.cloud/acme", "phase": "Pending", "repositoryCount": 3, "storageLimitBytes": 10737418240, "storageUsedBytes": 1073741824, "usageObservedAt": "2026-10-21T10:05:00Z" }, "storageLimit": "10Gi"}Headers
Section titled “ Headers ”New resource version
Validation error, or a storage limit above the plan’s (code REGISTRY_STORAGE_LIMIT_ABOVE_PLAN, field spec.storageLimit)
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"}Registry not found, or the registry is switched off and the patch sets more than deletionProtection (code registries_unavailable)
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}The registry is being deleted (code terminating); a raise while the tenant is suspended, awaiting a payment method or being deleted (codes tenant_suspended, payment_setup_required, tenant_terminating); or the registry kept changing while it was being updated
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}ETag mismatch
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"}