Resources
Cloud infrastructure components discovered across connected cloud accounts. Statuses, Kubernetes workload discovery, list and refresh APIs, filters, and the resource object schema.
Resources are cloud infrastructure components (VMs, databases, clusters, etc.) discovered across your connected cloud accounts.
Overview
When you connect a cloud account, ZopNight’s discoverer service scans for resources across all enabled regions. Each resource is classified by type, tagged as schedulable or inventory-only, and stored with its cloud metadata.
Resource Statuses
| Status | Description |
|---|---|
running | Resource is active and running |
stopped | Resource has been stopped |
starting | Resource is transitioning to running state |
stopping | Resource is transitioning to stopped state |
pending | Resource state is being determined |
Kubernetes workload discovery
ZopNight discovers what runs inside your clusters, not just the cluster nodes. EKS, GKE, and AKS expose a uniform set of workload children, listed alongside compute and network resources for inventory. Workloads are not scheduled one by one: Kubernetes start/stop is done per namespace (eks-namespace, gke-namespace, aks-namespace).
| Category | Resource types |
|---|---|
| Workloads | deployment, statefulset, daemonset, job, cronjob, replicaset |
| Services & networking | service, ingress, networkpolicy |
| Configuration | configmap, secret, serviceaccount |
| Storage | persistentvolume, persistentvolumeclaim, storageclass |
| Autoscaling | horizontalpodautoscaler, verticalpodautoscaler |
| Cluster | namespace, node, pod, role, rolebinding, clusterrole, clusterrolebinding |
Cluster types (eks-cluster, gke-cluster, aks-cluster) gain a detail page that lists workloads, breaks down nodes, filters by namespace, and renders pod- and workload-level CPU/memory metrics from the cluster’s metrics backend.
List Resources
/resources List all discovered resources with filtering and pagination.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
search | string | Search by resource name or UID |
type | string | Filter by resource type (e.g., ec2 with provider=aws, compute with provider=gcp) |
provider | string | Filter by cloud provider (aws, gcp, azure) |
status | string | Filter by status (running, stopped, etc.) |
region | string | Filter by cloud region |
schedulable | boolean | Filter by schedulable capability |
page | integer | Page number (default: 1) |
limit | integer | Items per page (default: 20) |
sort_by | string | Sort field (name, type, status, provider) |
sort_order | string | asc or desc |
curl "https://api.zop.dev/resources?provider=aws&type=ec2&status=running&limit=10" \ -H "Authorization: Bearer <token>"{ "data": { "items": [ { "id": "0b7d5c3e-2f1a-4e9b-8c6d-5a4b3c2d1e0f", "orgId": "3f6c2a9e-8b1d-4c7e-9f2a-1d5e6b7c8a90", "name": "web-server-prod", "uid": "i-0abc123def456", "type": "ec2", "instanceType": "t3.medium", "region": "us-east-1", "status": "running", "cloudAccountId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "provider": "aws", "childCount": 0, "schedulable": true, "scalable": false, "tags": { "Environment": "production", "Team": "platform" }, "createdAt": "2025-01-15T10:30:00Z", "updatedAt": "2025-01-20T08:00:00Z" } ], "total": 1, "hasMore": false, "page": 1, "limit": 10 }}The list is paginated. Keep requesting the next page until hasMore is false; limit is capped at 1000.
Get Resource
/resources/{resourceID} Get detailed information about a specific resource.
Get Resources by IDs
/resources/by-ids Fetch multiple resources by their IDs in a single request.
curl "https://api.zop.dev/resources/by-ids?ids=0b7d5c3e-2f1a-4e9b-8c6d-5a4b3c2d1e0f,6a5b4c3d-2e1f-4a0b-9c8d-7e6f5a4b3c2d" \ -H "Authorization: Bearer <token>"Get Resources by UIDs
Look up resources by their cloud-native UIDs (e.g., AWS instance IDs, GCP self-link paths, Azure resource IDs). Useful when you have UIDs from cost data, recommendations, or topology and need the corresponding ZopNight resource records.
/resources/by-uids Fetch resources by cloud UIDs (query string).
curl "https://api.zop.dev/resources/by-uids?uids=i-0abc,i-0def" \ -H "Authorization: Bearer <token>"/resources/by-uids Fetch resources by cloud UIDs (large lists in JSON body).
curl -X POST https://api.zop.dev/resources/by-uids \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{ "uids": ["i-0abc", "i-0def", "vm-prod-1"] }'Count Resources
/resources/count Total resource count for the org. Accepts the same filters as the list endpoint.
Discovery Summary
/resources/discovery-summary Discovery rollup: refresh status, resource count, discovered types and regions. Used during onboarding.
{ "data": { "status": "completed", "count": 1284, "types": ["ec2", "rds", "eks-cluster"], "regions": ["us-east-1", "us-west-2"], "hasCompletedFullScan": true, "startedAt": "2026-04-29T05:00:00Z", "completedAt": "2026-04-29T05:02:10Z" }}Access Check
/resources/{id}/access Check whether the stored cloud credentials can access a managed Kubernetes cluster. Returns the IAM access verdict and, for EKS, the network-reachability verdict (so a private or IP-restricted control plane surfaces the IPs to allowlist).
{ "data": { "accessible": true, "principal": "arn:aws:iam::123456789012:role/zopnight-cluster-reader", "network": { "reachable": false, "reason": "ip_not_allowlisted", "publicAccess": true, "ourIps": [ "34.29.167.157/32", "203.0.113.9/32" ] } }}network.reason is one of private (public access is disabled),
ip_not_allowlisted (the endpoint’s allowlist is missing one of our IPs), or
egress_config_error (our own egress configuration is incomplete, so we could
not evaluate reachability; nothing for you to fix). It is absent when reachable.
The response also carries a deprecated ourIp string holding the first entry of
ourIps. Do not rely on it; read ourIps.
Last Synced At
/resources/last-synced Returns the most recent successful discovery timestamp for the org. Used by the sync status banner.
{ "data": { "lastSyncedAt": "2026-04-29T05:00:00Z" }}Get Filter Fields
/resources/filter-fields Get available filter options (distinct providers, cloud accounts, types, regions, statuses) for building filter UIs.
{ "data": { "providers": ["aws", "gcp", "azure"], "cloudAccounts": [ ... ], "types": [ "ec2", "rds", "eks-cluster", "eks-nodegroup", "eks-deployment", "eks-statefulset", "eks-cronjob", "compute", "cloudsql", "gke-cluster", "gke-nodepool", "vm", "aks-cluster", "aks-agentpool", "databricks", "databricks-cluster", "databricks-pool", "databricks-sqlwarehouse" ], "regions": ["us-east-1", "us-west-2", "europe-west1"], "statuses": ["running", "stopped"] }}Refresh Discovery
Trigger an on-demand resource discovery scan for a specific cloud account. Discovery runs across all enabled regions and updates the resource inventory.
/resources/refresh Trigger a resource discovery refresh.
curl -X POST https://api.zop.dev/resources/refresh \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{ "cloudAccountId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d", "provider": "aws" }'{ "data": { "refreshId": "c3d2e1f0-9a8b-4c7d-8e6f-5a4b3c2d1e0f", "status": "queued" }}Refresh Status
/resources/refresh/status Check the status of a discovery refresh. Pass the refreshId returned by the refresh call.
curl "https://api.zop.dev/resources/refresh/status?refreshId=c3d2e1f0-9a8b-4c7d-8e6f-5a4b3c2d1e0f" \ -H "Authorization: Bearer <token>"{ "data": { "id": "c3d2e1f0-9a8b-4c7d-8e6f-5a4b3c2d1e0f", "status": "completed", "discovered": 47, "startedAt": "2025-01-20T08:00:00Z", "completedAt": "2025-01-20T08:02:15Z" }}In progress: running, or canceling (a stop has been requested and the scan finishes its
current provider first). Keep polling through both.
Finished: completed, partial (some accounts failed), failed, cancelled, skipped (every
account was already being discovered), or idle: no refresh has run for this organisation, or its status has
expired, since entries are kept for one hour.
Resource Object
| Field | Type | Description |
|---|---|---|
id | string | Unique resource ID |
orgId | string | Organization ID |
name | string | Resource display name |
uid | string | Cloud provider native resource identifier |
type | string | Resource type, without a provider prefix (e.g., ec2, compute, vm) |
instanceType | string | Instance size/type (e.g., t3.medium) |
sizeGb | number? | Storage size in GB (storage resources) |
unitCount | integer? | Container/unit count (containerized resources) |
region | string | Cloud region |
status | string | Current status (running, stopped, etc.) |
cloudAccountId | string | Connected cloud account ID |
provider | string | Cloud provider (aws, gcp, azure) |
parentUid | string | Parent resource UID (e.g., cluster for a node) |
childCount | integer | Number of child resources |
schedulable | boolean | Whether the resource supports start/stop scheduling |
scalable | boolean | Whether the resource can be scaled |
metadata | object | Provider-specific details |
tags | object | Cloud provider tags as key-value pairs |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 last update timestamp |
See Cloud Support Matrix for the full list of supported resource types per cloud provider.