Documentation

API Reference

Index of the main public ZopNight API endpoints, grouped by domain.

An index of the main public API endpoints, grouped by domain. Request and response examples live on each feature's page. For the machine-readable spec, see openapi.json.

Paths are relative to the base URL. Do not add /orgs/{orgId} to a path: the gateway reads the organization from your token and adds it for you.

Base URL: https://api.zop.dev

Authentication

POST/auth/login

Authenticate and receive tokens

GET/auth/{provider}/callback

Complete Google, GitHub or Microsoft (azure) sign-in with an authorization code (?code=)

POST/auth/signup

Create a new user account

POST/auth/refresh

Refresh access token

POST/auth/logout

Invalidate session

POST/auth/email/verify

Request email verification OTP

PATCH/auth/otp/validate

Validate OTP code

POST/auth/password/forget

Initiate password reset

PATCH/auth/password/reset

Complete password reset

POST/auth/saml/initiate

Begin SAML SSO flow

POST/organisations

Create organization

GET/organisations

List the organizations you belong to

Cloud Accounts

GET/cloud-accounts

List cloud accounts

POST/cloud-accounts

Connect cloud account

GET/cloud-accounts/{accountID}

Get cloud account

PUT/cloud-accounts/{accountID}

Update cloud account

DELETE/cloud-accounts/{accountID}

Delete cloud account

GET/connect/gcp/oauth-url

Get GCP OAuth URL

POST/connect/gcp/oauth-exchange

Exchange GCP OAuth code

POST/connect/gcp/oauth-finalize

Finalize GCP OAuth

GET/cloud-accounts/{accountID}/clusters

List clusters in a cloud account

PUT/cloud-accounts/{accountID}/clusters/{region}/{clusterName}/access

Register a cluster for kubeconfig access

DELETE/cloud-accounts/{accountID}/clusters/{region}/{clusterName}/access

Deregister a cluster

Resources

GET/resources

List resources with filtering

GET/resources/count

Count resources matching filters

GET/resources/{resourceID}

Get resource detail

GET/resources/by-ids

Get resources by IDs

GET/resources/by-uids

Get resources by cloud UIDs (query)

POST/resources/by-uids

Get resources by cloud UIDs (body)

GET/resources/discovery-summary

Per-provider discovery rollup

GET/resources/{id}/access

Check IAM + network access to a managed Kubernetes cluster

GET/resources/last-synced

Most recent discovery timestamp per provider/account

GET/resources/filter-fields

Get available filter options

POST/resources/refresh

Trigger discovery refresh

GET/resources/refresh/status

Check refresh status

Schedules

GET/schedules

List schedules

POST/schedules

Create schedule

GET/schedules/{scheduleID}

Get schedule

PUT/schedules/{scheduleID}

Update schedule

DELETE/schedules/{scheduleID}

Delete schedule

POST/schedules/{scheduleID}/resources/{resourceID}

Attach resource

DELETE/schedules/{scheduleID}/resources/{resourceID}

Detach resource

POST/schedules/{scheduleID}/groups/{groupID}

Attach group

DELETE/schedules/{scheduleID}/groups/{groupID}

Detach group

Resource Groups

GET/resource-groups

List resource groups

POST/resource-groups

Create resource group

GET/resource-groups/{groupID}

Get resource group

PUT/resource-groups/{groupID}

Update resource group

DELETE/resource-groups/{groupID}

Delete resource group

GET/resource-groups/{groupID}/schedules

Get group schedules

POST/resource-groups/{groupID}/resources/{resourceID}

Add member

PATCH/resource-groups/{groupID}/resources/{resourceID}/sequence

Update execution order

DELETE/resource-groups/{groupID}/resources/{resourceID}

Remove member

Overrides

GET/overrides

List overrides

POST/overrides

Create override

GET/overrides/{overrideID}

Get override

DELETE/overrides/{overrideID}

Delete override

GET/resource-groups/{groupID}/overrides

List group overrides

POST/resource-groups/{groupID}/overrides

Create group override

Actions & Execution

POST/actions

Submit manual action

POST/actions/bulk

Submit bulk action

GET/actions/{actionID}

Get action status

GET/actions/bulk/{bulkActionID}

Get bulk action status

GET/actions/bulk/latest

Get the most recent bulk action

GET/state-history

Get state history

Reports & Analytics

GET/reports/summary

Dashboard summary

GET/reports/trends

Cost trends

GET/reports/cost-history

Long-range cost history

GET/reports/metrics

Aggregate utilization metrics

GET/reports/costs/resources

Resource costs

GET/reports/costs/breakdown

Cost breakdown by dimensions (Sankey)

GET/reports/providers/summary

Provider summary

GET/resources/summary

Resource summary

GET/reports/resources/metrics

Per-resource utilization metrics

GET/resources/{resourceID}/metrics/live

Live container state of a VM: scope=vm, optional container=<name>. source is backend or exec

GET/resources/{resourceID}/metrics/range

Usage history for one VM container from the attached metrics backend: scope=vm, container=<name>, range=15m|1h|6h|24h. 404 without a backend; 409 backend_host_unresolvable when the host of the stored URL does not resolve

GET/resources/{resourceID}/logs/range

Log history for one VM container from the attached logs backend, newest first: scope=vm, container=<name>, range=15m|1h|6h|24h, limit (default 200, max 1000), optional q and cursor. Returns items, hasMore, nextCursor, provider. 404 without a logs backend; 409 backend_host_unresolvable when the host of the stored URL does not resolve

GET/resources/{resourceID}/traces/range

Traces for one VM container from the attached traces backend (Tempo, Jaeger or Zipkin), newest first: scope=vm, container=<name>, range=15m|1h|6h|24h, limit (default 20, max 100), optional q (span name) and cursor. Returns items (traceId, rootService, rootName, startTime, durationMs, spanCount, errorCount), hasMore, nextCursor, provider. 409 traces_not_configured without a traces backend; 409 backend_host_unresolvable when the host of the stored URL does not resolve

GET/resources/{resourceID}/traces/{traceID}

One trace's spans for one VM container from the attached traces backend: scope=vm, container=<name>. Returns traceId, provider and spans (spanId, parentSpanId, name, service, kind, startTime, durationMs, status, attributes). 404 when the trace has none of the container's spans; 409 traces_not_configured without a traces backend

GET/reports/resources/activity

Per-resource activity timeline

GET/reports/snapshots

Monthly snapshots

GET/reports/anomalies

List anomaly records

POST/reports/export

Export a report as CSV/JSON

Showback (Cost Attribution)

GET/reports/teams

Cost per team

GET/reports/teams/{teamID}

Team breakdown

GET/reports/teams/{teamID}/resources

Per-resource cost for a team

GET/reports/teams/trends

Team cost trends

GET/reports/tags

Tag keys with attributed cost

GET/reports/tags/{tagKey}

Tag values for a key

GET/reports/tags/{tagKey}/values/{tagValue}/resources

Resources by tag

GET/reports/tags/trends

Tag cost trends

Budgets

GET/budgets/summary

Budget summary

GET/budgets

List budgets

POST/budgets

Create budget

PUT/budgets/{budgetID}

Update budget

DELETE/budgets/{budgetID}

Delete budget

GET/events

List scheduler events

POST/events

Record scheduler event

GET/currency-exchange-rate

Current foreign-exchange rates used by reports

Billing

GET/billing/sync-status

Billing sync status for every cloud account in the org

POST/billing/verify

Verify billing access for one cloud account. Body: {cloudAccountId, provider}

Recommendations

GET/recommendations/resources

List resources with recommendation summaries

GET/recommendations/rules

List rules with recommendation summaries

GET/recommendations

List individual recommendations

GET/recommendations/summary

Recommendation summary

GET/recommendations/summary/providers

Provider breakdown

GET/recommendations/filter-fields

Get available filter fields

GET/recommendations/resources/{resourceUID}

Resource recommendations (deprecated)

GET/recommendations/{recID}/detail

Recommendation detail

PATCH/recommendations/{recommendationID}

Update recommendation

POST/recommendations/refresh

Refresh recommendations

Smart Tags

GET/smart-tags

List derived/accepted virtual tags + org-wide counts

PATCH/smart-tags

Accept or revoke tags (body: resourceUid, keys, all, accepted)

GET/tagging/policies/catalog

Tagging-policy form vocabulary

POST/tagging/policies/validations

Validate a tagging-policy spec before create

VM Autoscaling

GET/autoscaler-policies

List autoscaler policies

POST/autoscaler-policies

Create policy

GET/autoscaler-policies/count

Count policies by status

GET/autoscaler-policies/filters

Distinct filter values

GET/autoscaler-policies/smart-defaults

Smart defaults for a target

GET/autoscaler/cloud-scaling-policies

Inspect the scaling policies already configured on a target in your cloud account

GET/autoscaler-policies/required-permissions

IAM permissions to provision infra

POST/autoscaler-policies/create-infrastructure

Provision autoscaler infrastructure

GET/autoscaler-policies/infrastructure-status

Provisioning status for a cloud account

GET/autoscaler-policies/{policyID}

Get policy

PUT/autoscaler-policies/{policyID}

Update policy

DELETE/autoscaler-policies/{policyID}

Delete policy

POST/autoscaler-policies/{policyID}/apply

Apply latest recommendation

POST/autoscaler-policies/{policyID}/pause

Pause evaluation

POST/autoscaler-policies/{policyID}/resume

Resume evaluation

POST/autoscaler-policies/{policyID}/remove

Soft-delete the policy

GET/autoscaler-policies/{policyID}/events

Per-policy event log

Event Readiness

GET/event-readiness

List plans

POST/event-readiness

Create a plan

GET/event-readiness/calculate

Preview scaled capacity

GET/event-readiness/calculate-db

Preview database tier change

POST/event-readiness/preview-readiness

Preview a full plan without saving

GET/event-readiness/count

Count plans

GET/event-readiness/filters

Filter values

GET/event-readiness/{eventID}

Get a plan

PUT/event-readiness/{eventID}

Update a plan

DELETE/event-readiness/{eventID}

Delete a plan

GET/event-readiness/{eventID}/db-impact

Estimated DB impact

GET/event-readiness/{eventID}/cost-estimate

Estimated extra cost

GET/event-readiness/{eventID}/readiness-check

Re-validate the plan

POST/event-readiness/{eventID}/schedule

Dispatch the plan to executor

POST/event-readiness/{eventID}/cancel

Cancel an active plan

GET/event-readiness/{eventID}/logs

Plan audit log

Dashboards

GET/dashboards

List dashboards (system presets + user-created)

POST/dashboards

Create a dashboard

GET/dashboards/{dashboardID}

Get a dashboard

PATCH/dashboards/{dashboardID}

Update a dashboard

DELETE/dashboards/{dashboardID}

Delete a dashboard

PUT/dashboards/default

Set the org default dashboard

Notifications

GET/notifications

List notifications (legacy)

POST/notifications

Create notification (legacy)

PUT/notifications/{notificationID}

Update notification (legacy)

DELETE/notifications/{notificationID}

Delete notification (legacy)

GET/notifications/channels

List notification channels

POST/notifications/channels

Create notification channel

PUT/notifications/channels/{channelID}

Update notification channel

DELETE/notifications/channels/{channelID}

Delete notification channel

GET/notifications/subscriptions

List subscriptions

POST/notifications/subscriptions

Create subscription

PUT/notifications/subscriptions/{subID}

Update subscription

DELETE/notifications/subscriptions/{subID}

Delete subscription

POST/notifications/subscriptions/bulk

Bulk create/update subscriptions

GET/notifications/event-types

List event types

GET/notifications/email-preferences

Get email preferences

PUT/notifications/email-preferences/{eventKey}

Update email preference

POST/notifications/share/recommendation/{recID}

Share recommendation

POST/notifications/channels/{channelID}/test

Test channel delivery

Users & Teams

GET/users

List users

POST/users

Invite user

PATCH/users/{email}

Update user

DELETE/users/{email}

Remove user

GET/teams

List teams

POST/teams

Create team

GET/teams/{teamID}

Get team

PUT/teams/{teamID}

Update team

DELETE/teams/{teamID}

Delete team

GET/teams/{teamID}/members

List team members

POST/teams/{teamID}/members

Add team member. Body: {email, roleId}

PUT/teams/{teamID}/members/{email}

Change a member's team role. Body: {roleId}

DELETE/teams/{teamID}/members/{email}

Remove team member

GET/teams/{teamID}/resources

List team resources

POST/teams/{teamID}/resources

Assign resource to team

DELETE/teams/{teamID}/resources

Unassign a resource. Body: {resourceUid}

Roles & Permissions

GET/roles

List roles

POST/roles

Create role

GET/roles/{roleID}

Get role

PUT/roles/{roleID}

Update role

DELETE/roles/{roleID}

Delete role

GET/roles/policies

List policies

GET/assignments

List role assignments

POST/assignments

Create assignment

PUT/assignments/{assignmentID}

Update assignment

DELETE/assignments/{assignmentID}

Delete assignment

GET/permissions

Get current user permissions

GET/users/{email}/permissions

Get user permissions

GET/users/{email}/permissions/verify

Verify permission

Organizations

GET/organisations

List organizations

POST/organisations

Create organization

GET/organisations

List the organizations you belong to

GET/organisation

Get current organization

PUT/organisation

Update organization

DELETE/organisation

Delete organization

Audit Logs

GET/audit-logs

List audit logs

POST/audit-logs/export

Export audit logs as CSV

Deployment Spaces

GET/spaces

List deployment spaces

POST/spaces

Register an existing cluster as a space

GET/spaces/{spaceID}

Get a space

PATCH/spaces/{spaceID}/status

Toggle a space active/inactive

PATCH/spaces/{spaceID}

Update the space config, e.g. { config: { observability: { metrics: '<integrationID>' | null, logs: '<integrationID>' | null, traces: '<integrationID>' | null } } } to attach or detach a metrics, logs or traces backend

POST/components

Install or re-apply a cluster or VM component, e.g. { spaceId, targetType: 'vm', component: 'observability-agent' }. Returns an actionId to poll

GET/components

List the component catalog (?targetType=) or poll an install (?actionId=)

DELETE/spaces/{spaceID}

Delete a space

GET/space-discovery/{spaceID}/namespaces

List namespaces on a space’s cluster

POST/space-discovery/{spaceID}/namespaces

Create a namespace on a space’s cluster

GET/cloud-accounts/{accountID}/clusters

List clusters discovered on a cloud account

PUT/cloud-accounts/{accountID}/clusters/{region}/{clusterName}/access

Register cluster access for kubeconfig minting

DELETE/cloud-accounts/{accountID}/clusters/{region}/{clusterName}/access

Deregister cluster access

Provisioning

POST/provisioning-jobs

Create a provisioning job

GET/provisioning-jobs

List provisioning jobs

GET/provisioning-jobs/{jobID}

Get a job

PATCH/provisioning-jobs/{jobID}

Update lightweight job fields

DELETE/provisioning-jobs/{jobID}

Delete a job

POST/provisioning-jobs/{jobID}/retry

Retry a failed job

POST/provisioning-jobs/{jobID}/databases

Create a database on the parent datastore

GET/provisioning-jobs/{jobID}/databases

List databases

GET/provisioning-jobs/{jobID}/databases/{dbID}

Get a database

DELETE/provisioning-jobs/{jobID}/databases/{dbID}

Delete a database

POST/provisioning-jobs/{jobID}/connections

Create a job-scoped connection

GET/provisioning-jobs/{jobID}/connections

List job-scoped connections

GET/provisioning-jobs/{jobID}/connections/{connID}

Get a job-scoped connection

DELETE/provisioning-jobs/{jobID}/connections/{connID}

Delete a job-scoped connection

POST/provisioning-jobs/{jobID}/databases/{dbID}/connections

Create a database-scoped connection

GET/provisioning-jobs/{jobID}/databases/{dbID}/connections

List database-scoped connections

GET/provisioning-jobs/{jobID}/databases/{dbID}/connections/{connID}

Get a database-scoped connection

DELETE/provisioning-jobs/{jobID}/databases/{dbID}/connections/{connID}

Delete a database-scoped connection

Remediation Workflows

GET/recommendations/{recID}/workflow

Preview the remediation workflow for a recommendation

POST/recommendations/{recID}/workflow

Start the remediation workflow for a recommendation

GET/workflows/pending-approval

List workflow steps waiting for approval

GET/workflows/pending-confirmation

List workflow steps waiting for confirmation

GET/workflows/{jobID}

Get a workflow and its steps

POST/workflows/{jobID}/cancel

Cancel a running workflow

PATCH/workflows/{jobID}/steps-by-id/{stepID}

Approve, reject or advance a step. Body: {action: approve | reject | advance}

Deployments

GET/deployments

List deployments

POST/deployments

Create a deployment

GET/deployments/{id}

Get a deployment

DELETE/deployments/{id}

Delete a deployment and tear down what it runs

PATCH/deployments/{id}/configs

Update configs (creates a revision on next deploy)

PATCH/deployments/{id}/canvas-position

Persist canvas (x, y) coordinate

POST/deployments/{id}/analyze

Re-run deploy-readiness checks

POST/deployments/{id}/revisions

Create a revision

GET/deployments/{id}/revisions

List revisions

GET/deployments/{id}/revisions/{revID}

Get a revision

POST/deployments/{id}/rollback

Roll back to a prior revision

GET/deployments/{id}/events

Deployment event timeline

GET/deployments/{id}/loadbalancer

LoadBalancer status

GET/environments/{envID}/deployments

List deployments in env

POST/environments/{envID}/deployments

Create deployment in env

Builds

POST/analyze

Analyze a repo for deploy readiness (wizard pre-create)

GET/repositories

List connected repositories

GET/branches

List branches in a repository. Connected: integrationId + repo. Public: repoUrl (github.com only)

Projects & Environments

POST/projects

Create a project

GET/projects

List projects

GET/projects/stats

Batch project stats (env count, status buckets)

GET/projects/{projectID}

Get a project

PATCH/projects/{projectID}

Update a project

DELETE/projects/{projectID}

Delete a project

POST/projects/{projectID}/environments

Create environment

GET/projects/{projectID}/environments

List environments

GET/projects/{projectID}/environments/{envID}

Get env (nested)

PATCH/projects/{projectID}/environments/{envID}

Update env

DELETE/projects/{projectID}/environments/{envID}

Delete env

GET/environments/{envID}

Get env (flat lookup)

GET/environments/{envID}/cluster-discovery

Live cluster discovery (ingress + cert-manager)

Integrations

GET/integrations

List integrations

POST/integrations

Create an integration

POST/integrations/test

Observability backends only: run the write/read connection probe against the given backend without saving it

GET/integrations/{id}

Get an integration

PUT/integrations/{id}

Update an integration

DELETE/integrations/{id}

Delete an integration

GET/integrations/github/install

Begin GitHub App install flow. Optional ?role=read|write selects the App to install (write for IaC-CI orgs; defaults to read)

GET/integrations/github/callback

GitHub install/OAuth callback

Webhooks

POST/webhooks/github

GitHub event delivery (HMAC-signed; duplicate deliveries are ignored)

POST/build-callbacks/{revisionID}

Build runner reports image readiness (authenticated by the callback JWT in the body)