Skip to content

Update registry API Reference

PATCH
/tenants/{tenant}/registries/{name}
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).

tenant
required
string

Tenant name

name
required
string

Registry name: always registry

If-Match
string

ETag for optimistic locking

Fields to update (at least one required)

Media type application/json
object
deletionProtection

Turn deletion protection on or off.

boolean
Example
false
storageLimit

New storage cap, with a binary unit (“20Gi”); “” removes it, so the plan’s cap applies.

string
Example
20Gi

Updated registry

Media type application/json
object
createdAt
string
deletionProtection

DeletionProtection must be false before the registry can be deleted.

boolean
generation

Generation increments on every spec change; compare with status.observedGeneration.

integer
name
string
resourceVersion
string
status
object
artifactCount

ArtifactCount counts every stored item: each image, each platform image of a multi-platform image, and signatures.

integer
conditions

Conditions include Ready, Provisioned and StorageFull.

Array<object>
object
key
additional properties
endpoint

Endpoint is the image path prefix to push to and pull from.

string
phase
string
Allowed values: Pending Provisioning Running Degraded Terminating
repositoryCount

RepositoryCount is the number of repositories.

integer
storageLimitBytes

StorageLimitBytes is the storage cap in force, in bytes; -1 means unlimited. Absent until a cap has been applied.

integer
storageUsedBytes

StorageUsedBytes is what the registry stores, in bytes.

integer
usageObservedAt

UsageObservedAt is when the usage figures were last read.

string
storageLimit

StorageLimit is the tenant’s own cap below the plan’s; empty means the plan’s cap.

string
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"
}
ETag
string

New resource version

Validation error, or a storage limit above the plan’s (code REGISTRY_STORAGE_LIMIT_ABOVE_PLAN, field spec.storageLimit)

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
Example generated
{
"code": "example",
"error": "example",
"field": "example",
"message": "example",
"severity": "example"
}

Missing or invalid authentication

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
Example generated
{
"code": "example",
"error": "example",
"field": "example",
"message": "example",
"severity": "example"
}

Admin access required

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
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)

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
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

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
Example generated
{
"code": "example",
"error": "example",
"field": "example",
"message": "example",
"severity": "example"
}

ETag mismatch

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
Example generated
{
"code": "example",
"error": "example",
"field": "example",
"message": "example",
"severity": "example"
}

Rate limit exceeded

Media type application/json
object
code
string
error
string
field
string
message
string
severity
string
Example generated
{
"code": "example",
"error": "example",
"field": "example",
"message": "example",
"severity": "example"
}