Create registry API Reference
const url = 'https://api.kupe.cloud/api/v1/tenants/acme/registries';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"deletionProtection":true,"name":"registry","storageLimit":"10Gi"}'};
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/registries \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "deletionProtection": true, "name": "registry", "storageLimit": "10Gi" }'Create the tenant’s container registry. A tenant has one, named registry: images live at
registry.kupe.cloud/<tenant>/<repository>:<tag>. It is provisioned asynchronously; poll the GET
endpoint until status.phase is “Running”. storageLimit caps what it stores below the plan’s cap
(omit it to take the plan’s cap); deletionProtection defaults to true.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Tenant name
Request Body
Section titled “ Request Body ”Registry configuration (every field optional)
object
Must be false before the registry can be deleted. Default true.
Example
trueMust be “registry” when set; it is also the default.
Example
registryStorage cap below the plan’s, with a binary unit: Mi, Gi or Ti (“10Gi”). More than zero, at most 20 characters. Omit to take the plan’s cap.
Example
10GiResponses
Section titled “ Responses ”Registry created
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 ”Resource version
Validation error, a storage limit above the plan’s (code REGISTRY_STORAGE_LIMIT_ABOVE_PLAN, field spec.storageLimit), registry creation is paused (code creation_paused), or the plan includes no registry (code plan_limit_reached)
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"}The registry is not enabled (code registries_unavailable)
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}The tenant already has a registry (code REGISTRY_ALREADY_EXISTS), or the tenant is being deleted (code tenant_terminating), suspended (code tenant_suspended) or awaiting a payment method (code payment_setup_required)
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"}The tenant’s limit is still being set up (a new tenant’s first seconds); retry in a few seconds
object
Example generated
{ "code": "example", "error": "example", "field": "example", "message": "example", "severity": "example"}