Reference
View as MarkdownRegistries API
7 operations. Every call needs a session cookie or an Authorization: Bearer nct_… token unless marked Public. Conventions, errors and scopes
/registriesList registries
Bring-your-own (external) and managed registries. Credentials are write-only and never returned.
Response 200 · OK · application/json
- RegistryView[] | nullrequired
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registriesAdd an external registry
Adds a registry that takes basic auth (GHCR, Docker Hub, GitLab, Harbor, self-hosted). Credentials are sealed and write-only. ECR, GAR and ACR tokens that expire are not supported. The managed registry is set up with POST /platform-services (kind registry). Requires the admin scope.
| Parameter | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | string | Client-chosen key (<=255 chars). A retry with the same key replays the original response for 24 hours. |
Request body · application/json · required
- hoststringrequiredregistry.example.com or registry.example.com:5000, without a scheme or path. ghcr.io, docker.io, registry.gitlab.com, a Harbor or self-hosted host.
- namestringrequiredUnique name in the team.
- namespacestringThe path between the host and the repository name: a GitHub user or organization, a Docker Hub namespace, a GitLab group/project. Images are pushed to <host>/<namespace>/<project>-<service>.
- pullPasswordstringWrite-only, never returned.
- pullUsernamestringOptional read-only credential the target servers pull with. Without it they use the push credential.
- pushPasswordstringrequiredWrite-only: a token or password, never returned.
- pushUsernamestringrequiredWrite-only credential used to push images (basic auth). A registry without authentication takes any pair.
Response 201 · Created · application/json
- createdAtstring (date-time)required
- hasPullAuthbooleanrequiredA separate read-only credential is set; targets pull with it. Otherwise they use the push credential.
- hasPushAuthbooleanrequired
- hoststringrequiredregistry.example.com[:port], no scheme.
- idstringrequired
- imageCountinteger (int64)requiredLive images.
- inUsebooleanrequiredA team, project or service setting uses it: it cannot be removed.
- insecurebooleanrequiredA loopback host: plain http is used.
- kindenum: external | managedrequired
- map of RegistryCheckrequiredResult of the last check, by server id.
- manageRetentionbooleanrequiredNebulaCtrl deletes images that fall out of the rollback window (managed registries; opt-in for external).
- RegistryManagedView
- namestringrequired
- namespacestringrequired
- platformServiceIdstring
- pullUsernamestring
- pushUsernamestring
- RegistryReferencesrequired
- sizeBytesinteger (int64)requiredSpace the live images take.
- updatedAtstring (date-time)required
401Unauthorized403Forbidden409Conflict422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registries/{registryId}Get a registry
| Parameter | In | Type | Description |
|---|---|---|---|
registryIdrequired | path | string |
Response 200 · OK · application/json
- createdAtstring (date-time)required
- hasPullAuthbooleanrequiredA separate read-only credential is set; targets pull with it. Otherwise they use the push credential.
- hasPushAuthbooleanrequired
- hoststringrequiredregistry.example.com[:port], no scheme.
- idstringrequired
- imageCountinteger (int64)requiredLive images.
- inUsebooleanrequiredA team, project or service setting uses it: it cannot be removed.
- insecurebooleanrequiredA loopback host: plain http is used.
- kindenum: external | managedrequired
- map of RegistryCheckrequiredResult of the last check, by server id.
- manageRetentionbooleanrequiredNebulaCtrl deletes images that fall out of the rollback window (managed registries; opt-in for external).
- RegistryManagedView
- namestringrequired
- namespacestringrequired
- platformServiceIdstring
- pullUsernamestring
- pushUsernamestring
- RegistryReferencesrequired
- sizeBytesinteger (int64)requiredSpace the live images take.
- updatedAtstring (date-time)required
401Unauthorized403Forbidden404Not Found422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registries/{registryId}Update a registry
Omitted fields stay as they are; an omitted password keeps the stored one. A managed registry can only be renamed and have its retention switched.
| Parameter | In | Type | Description |
|---|---|---|---|
registryIdrequired | path | string |
Request body · application/json · required
- clearPullbooleanRemove the read-only credential.
- hoststring
- manageRetentionbooleanLet NebulaCtrl delete images that fall out of the rollback window. Managed registries only.
- namestring
- namespacestring
- pullPasswordstringOmit to keep the stored password.
- pullUsernamestring
- pushPasswordstringOmit to keep the stored password.
- pushUsernamestring
Response 200 · OK · application/json
- createdAtstring (date-time)required
- hasPullAuthbooleanrequiredA separate read-only credential is set; targets pull with it. Otherwise they use the push credential.
- hasPushAuthbooleanrequired
- hoststringrequiredregistry.example.com[:port], no scheme.
- idstringrequired
- imageCountinteger (int64)requiredLive images.
- inUsebooleanrequiredA team, project or service setting uses it: it cannot be removed.
- insecurebooleanrequiredA loopback host: plain http is used.
- kindenum: external | managedrequired
- map of RegistryCheckrequiredResult of the last check, by server id.
- manageRetentionbooleanrequiredNebulaCtrl deletes images that fall out of the rollback window (managed registries; opt-in for external).
- RegistryManagedView
- namestringrequired
- namespacestringrequired
- platformServiceIdstring
- pullUsernamestring
- pushUsernamestring
- RegistryReferencesrequired
- sizeBytesinteger (int64)requiredSpace the live images take.
- updatedAtstring (date-time)required
401Unauthorized403Forbidden404Not Found409Conflict422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registries/{registryId}Delete an external registry
409 registry_in_use while a team default, a project or a service override uses it. A managed registry is removed with its platform service (409 managed_registry). Images already pushed stay in the registry.
| Parameter | In | Type | Description |
|---|---|---|---|
registryIdrequired | path | string |
Response 204 · No Content
No body.
401Unauthorized403Forbidden404Not Found409Conflictregistry_in_usemanaged_registry422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registries/{registryId}/checkTest a registry from a server
The agent on the chosen server contacts the registry with the stored credentials and reports whether push and pull are accepted. Waits up to 25 seconds; if the agent has not answered by then the response has pending: true and the result appears in the registry's lastCheck.
| Parameter | In | Type | Description |
|---|---|---|---|
registryIdrequired | path | string | |
serverId | query | string | The server whose agent runs the check. Builds and pulls reach the registry from servers, so this is the test that matters. |
Response 200 · OK · application/json
- atstring (date-time)required
- errorstring
- okbooleanrequired
- pendingbooleanThe agent has not answered within the wait; read the registry again for the result.
- pullbooleanrequired
- pushbooleanrequired
- serverIdstring
401Unauthorized403Forbidden404Not Found409Conflict422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/registries/{registryId}/imagesList the images pushed to a registry
Newest first. live images are inside the rollback window, expired ones are outside it (a managed registry deletes them at the next sweep), deleted ones are gone.
| Parameter | In | Type | Description |
|---|---|---|---|
registryIdrequired | path | string | |
state | query | enum: live | expired | deleted | Only images in this state. |
limit | query | integer (int64) | Page size (default 50). |
cursor | query | string |
Response 200 · OK · application/json
- RegistryImageView[] | nullrequired
- nextCursorstring
400Bad Request401Unauthorized403Forbidden404Not Found422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.