Reference
View as MarkdownInstance API
8 operations. Every call needs a session cookie or an Authorization: Bearer nct_… token unless marked Public. Conventions, errors and scopes
/instance/backupGet the control-plane backup settings
A scheduled pg_dump of NebulaCtrl's own database to one instance-wide destination. The instance secret key is never part of a backup. Instance admin only.
Response 200 · OK · application/json
- InstanceDestinationViewrequired
- enabledbooleanrequired
- keyAcknowledgedAtstring (date-time)When an admin confirmed the instance secret key is stored separately. The reminder card shows until then.
- keyFingerprintstringrequired
- InstanceRunView
- lastSuccessAtstring (date-time)
- localDirEnabledbooleanrequiredFalse when NEBULACTRL_BACKUP_DIR is not set: local directory destinations are unavailable.
- nextRunAtstring (date-time)
- retentionCountinteger (int64)requiredSuccessful backups kept (the newest is never removed).
- schedulestringrequired5-field cron expression, evaluated in UTC.
- toolsAvailablebooleanrequiredFalse when pg_dump is missing on the control-plane host: backups can not run.
- toolsMessagestring
- updatedAtstring (date-time)required
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/backupUpdate the control-plane backup settings
Credentials are write-only. Enabling needs a complete destination. Instance admin only.
Request body · application/json · required
- accessKeystringWrite-only. Omit or leave empty to keep the stored key.
- bucketstring
- compatModeboolean
- enabledbooleanRun the schedule. Needs a complete destination.
- endpointstringS3-compatible endpoint URL; empty means AWS S3.
- kindenum: s3 | localChanging the kind starts the destination afresh.
- localDirstringLocal destinations: relative sub-directory of NEBULACTRL_BACKUP_DIR.
- pathStyleboolean
- prefixstringKey prefix inside the bucket or directory.
- regionstring
- retentionCountinteger (int64)Successful backups kept (default 14).
- schedulestring5-field cron expression or @daily etc., evaluated in UTC (default 30 3 * * *). At most one run every 5 minutes.
- secretKeystringWrite-only. Omit or leave empty to keep the stored key.
Response 200 · OK · application/json
- InstanceDestinationViewrequired
- enabledbooleanrequired
- keyAcknowledgedAtstring (date-time)When an admin confirmed the instance secret key is stored separately. The reminder card shows until then.
- keyFingerprintstringrequired
- InstanceRunView
- lastSuccessAtstring (date-time)
- localDirEnabledbooleanrequiredFalse when NEBULACTRL_BACKUP_DIR is not set: local directory destinations are unavailable.
- nextRunAtstring (date-time)
- retentionCountinteger (int64)requiredSuccessful backups kept (the newest is never removed).
- schedulestringrequired5-field cron expression, evaluated in UTC.
- toolsAvailablebooleanrequiredFalse when pg_dump is missing on the control-plane host: backups can not run.
- toolsMessagestring
- updatedAtstring (date-time)required
401Unauthorized403Forbidden422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/backup/key-acknowledgementConfirm the instance secret key is stored separately
Dismisses the reminder card. Backups do not contain NEBULACTRL_SECRET_KEY, and a restore is useless without it: store it in a password manager or vault, apart from the backups.
Response 200 · OK · application/json
- InstanceDestinationViewrequired
- enabledbooleanrequired
- keyAcknowledgedAtstring (date-time)When an admin confirmed the instance secret key is stored separately. The reminder card shows until then.
- keyFingerprintstringrequired
- InstanceRunView
- lastSuccessAtstring (date-time)
- localDirEnabledbooleanrequiredFalse when NEBULACTRL_BACKUP_DIR is not set: local directory destinations are unavailable.
- nextRunAtstring (date-time)
- retentionCountinteger (int64)requiredSuccessful backups kept (the newest is never removed).
- schedulestringrequired5-field cron expression, evaluated in UTC.
- toolsAvailablebooleanrequiredFalse when pg_dump is missing on the control-plane host: backups can not run.
- toolsMessagestring
- updatedAtstring (date-time)required
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/backup/runsList control-plane backup runs
| Parameter | In | Type | Description |
|---|---|---|---|
limit | query | integer (int64) |
Response 200 · OK · application/json
- InstanceRunView[] | nullrequired
401Unauthorized403Forbidden422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/backup/runsBack up the control plane now
Returns 202 with the running backup; poll the runs or listen for instance.backup.updated events. 409 backup_in_progress while one is running.
| 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. |
Response 202 · Accepted · application/json
- actorLabelstring
- destKindenum: s3 | localrequired
- destinationstringrequiredWhere the backup was written.
- errorstring
- finishedAtstring (date-time)
- idstringrequired
- objectDeletedbooleanrequiredRetention removed the stored objects; the row stays as history.
- objectKeystring
- pgVersionstring
- sha256string
- sizeBytesinteger (int64)required
- startedAtstring (date-time)required
- statusenum: running | succeeded | failedrequired
- triggerenum: schedule | manual | pre_upgraderequired
401Unauthorized403Forbidden409Conflictbackup_in_progress422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/backup/testTest the control-plane backup destination
The control plane writes, reads back and deletes a probe object. The verdict is stored on the settings.
Response 200 · OK · application/json
- InstanceDestinationViewrequired
- enabledbooleanrequired
- keyAcknowledgedAtstring (date-time)When an admin confirmed the instance secret key is stored separately. The reminder card shows until then.
- keyFingerprintstringrequired
- InstanceRunView
- lastSuccessAtstring (date-time)
- localDirEnabledbooleanrequiredFalse when NEBULACTRL_BACKUP_DIR is not set: local directory destinations are unavailable.
- nextRunAtstring (date-time)
- retentionCountinteger (int64)requiredSuccessful backups kept (the newest is never removed).
- schedulestringrequired5-field cron expression, evaluated in UTC.
- toolsAvailablebooleanrequiredFalse when pg_dump is missing on the control-plane host: backups can not run.
- toolsMessagestring
- updatedAtstring (date-time)required
401Unauthorized403Forbidden422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/dashboard-accessGet the dashboard access settings
Who may reach the dashboard's hostname (an IP allow list on its system route) and how its certificate is issued (automatic HTTP-01 or a DNS-01 resolver of the control-plane server). clientIp is the caller's address as the allow list sees it. Instance admin only.
Response 200 · OK · application/json
- allowCidrsstring[] | nullrequired
- DashboardCertificaterequired
- clientIpstringrequiredThe caller's address as the dashboard route's allow list sees it. Empty when it cannot be determined
- clientIpAllowedbooleanrequiredThe current allow list admits clientIp (always true while it is empty or the caller does not come through the route)
- dnsResolverstringrequiredDNS-01 provider of the certificate; empty is automatic HTTP-01
- enabledbooleanrequiredThe dashboard has a system route (an https public URL with a DNS name, installer layout). false: nothing to restrict
- hoststringrequiredThe dashboard's hostname
- proxyDeployRequiredbooleanrequired
- proxyServerIdstringrequiredThe control-plane server, where Deploy proxy lives
- DashboardResolverOption[] | nullrequiredProviders with a resolver on the control-plane server (Servers, Proxy)
- sourceenum: default | installer | adminrequiredWhere the stored settings come from. installer: seeded from the installer's environment and still overwritten by it on restart; admin: saved here, the installer's environment is ignored
- updatedAtstring (date-time) | nullrequired
- viaDashboardRoutebooleanrequiredThe caller reached the control plane through the dashboard route, so the allow list applies to them
401Unauthorized403Forbidden500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/instance/dashboard-accessUpdate the dashboard access settings
Replaces the allow list and the certificate method and re-sends the control-plane server's routes: an allow list applies immediately. Agents on other servers and webhooks reach the control plane through the same hostname, so keep their addresses in the list. 409 dashboard_lockout when a non-empty list excludes the caller's current address, unless confirmLockout is true. 422 resolver_not_configured when the control-plane server has no resolver of that provider. A resolver that is staged but not applied yet sets proxyDeployRequired: the dashboard keeps its HTTP-01 certificate until Deploy proxy. 409 dashboard_route_disabled when the dashboard has no system route. Instance admin only.
Request body · application/json · required
- allowCidrsstring[] | nullrequiredCIDRs or single addresses (IPv4 or IPv6) allowed to reach the dashboard. Empty lifts the restriction.
- confirmLockoutbooleanSave even though allowCidrs excludes the caller's current address (otherwise 409 dashboard_lockout).
- dnsResolverstringDNS-01 provider of the dashboard's certificate (a resolver the control-plane server already has, see resolverAvailable). Empty is automatic HTTP-01.
Response 200 · OK · application/json
- allowCidrsstring[] | nullrequired
- DashboardCertificaterequired
- clientIpstringrequiredThe caller's address as the dashboard route's allow list sees it. Empty when it cannot be determined
- clientIpAllowedbooleanrequiredThe current allow list admits clientIp (always true while it is empty or the caller does not come through the route)
- dnsResolverstringrequiredDNS-01 provider of the certificate; empty is automatic HTTP-01
- enabledbooleanrequiredThe dashboard has a system route (an https public URL with a DNS name, installer layout). false: nothing to restrict
- hoststringrequiredThe dashboard's hostname
- proxyDeployRequiredbooleanrequired
- proxyServerIdstringrequiredThe control-plane server, where Deploy proxy lives
- DashboardResolverOption[] | nullrequiredProviders with a resolver on the control-plane server (Servers, Proxy)
- sourceenum: default | installer | adminrequiredWhere the stored settings come from. installer: seeded from the installer's environment and still overwritten by it on restart; admin: saved here, the installer's environment is ignored
- updatedAtstring (date-time) | nullrequired
- viaDashboardRoutebooleanrequiredThe caller reached the control plane through the dashboard route, so the allow list applies to them
401Unauthorized403Forbidden409Conflictdashboard_lockoutdashboard_route_disabled422Unprocessable Entityresolver_not_configured500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.