Documentation

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

StatusDescription
runningResource is active and running
stoppedResource has been stopped
startingResource is transitioning to running state
stoppingResource is transitioning to stopped state
pendingResource 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, schedulable where the underlying API allows it.

CategoryResource types
Workloadsdeployment, statefulset, daemonset, job, cronjob, replicaset
Services & networkingservice, ingress, networkpolicy
Configurationconfigmap, secret, serviceaccount
Storagepersistentvolume, persistentvolumeclaim, storageclass
Autoscalinghorizontalpodautoscaler, verticalpodautoscaler
Clusternamespace, node, pod, role, rolebinding, clusterrole, clusterrolebinding

Cluster types — aws-eks, gcp-gke, azure-aks — 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

GET/resources

List all discovered resources with filtering and pagination.

Query Parameters

ParameterTypeDescription
searchstringSearch by resource name or UID
typestringFilter by resource type (e.g., aws-ec2, gcp-compute)
providerstringFilter by cloud provider (aws, gcp, azure)
statusstringFilter by status (running, stopped, etc.)
regionstringFilter by cloud region
schedulablebooleanFilter by schedulable capability
pageintegerPage number (default: 1)
limitintegerItems per page (default: 20)
sort_bystringSort field (name, type, status, provider)
sort_orderstringasc or desc
Example · bash
curl "https://zopnight.com/api/resources?provider=aws&type=aws-ec2&status=running&limit=10" \
-H "Authorization: Bearer <token>"
Response · json
{
"data": [
  {
    "id": "res_001",
    "name": "web-server-prod",
    "uid": "i-0abc123def456",
    "type": "aws-ec2",
    "instanceType": "t3.medium",
    "region": "us-east-1",
    "status": "running",
    "cloudAccountID": "ca_abc123",
    "cloudAccountName": "Production AWS",
    "provider": "aws",
    "schedulable": true,
    "tags": {
      "Environment": "production",
      "Team": "platform"
    },
    "createdAt": "2025-01-15T10:30:00Z",
    "updatedAt": "2025-01-20T08:00:00Z"
  }
]
}

Get Resource

GET/resources/{resourceID}

Get detailed information about a specific resource.

Get Resources by IDs

GET/resources/by-ids

Fetch multiple resources by their IDs in a single request.

Example · bash
curl "https://zopnight.com/api/resources/by-ids?ids=res_001,res_002,res_003" \
-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.

GET/resources/by-uids

Fetch resources by cloud UIDs (query string).

Example · bash
curl "https://zopnight.com/api/resources/by-uids?uids=i-0abc,i-0def" \
-H "Authorization: Bearer <token>"
POST/resources/by-uids

Fetch resources by cloud UIDs (large lists in JSON body).

Request · bash
curl -X POST https://zopnight.com/api/resources/by-uids \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "uids": ["i-0abc", "i-0def", "vm-prod-1"] }'

Count Resources

GET/resources/count

Total resource count for the org. Accepts the same filters as the list endpoint.

Discovery Summary

GET/resources/discovery-summary

Per-provider discovery rollup — schedulable counts, scanned regions, and last-success timestamps. Used by the dashboard hero.

Response · json
{
"data": {
  "totalResources": 1284,
  "schedulableResources": 342,
  "providers": [
    { "provider": "aws", "resources": 821, "lastSyncedAt": "2026-04-29T05:00:00Z" },
    { "provider": "gcp", "resources": 287, "lastSyncedAt": "2026-04-29T05:01:30Z" },
    { "provider": "azure", "resources": 176, "lastSyncedAt": "2026-04-29T05:02:10Z" }
  ]
}
}

Access Check

GET/resources/access-check

Verify the connected cloud credentials still have list/describe permissions on each scanned region. Surfaces credential drift early.

Response · json
{
"data": [
  {
    "cloudAccountID": "ca_abc123",
    "provider": "aws",
    "region": "us-east-1",
    "status": "ok"
  },
  {
    "cloudAccountID": "ca_abc123",
    "provider": "aws",
    "region": "eu-west-1",
    "status": "denied",
    "message": "ec2:DescribeInstances denied"
  }
]
}

Last Synced At

GET/resources/last-synced

Returns the most recent successful discovery timestamp per provider/cloud account. Used by the sync status banner.

Response · json
{
"data": [
  {
    "cloudAccountID": "ca_abc123",
    "provider": "aws",
    "lastSyncedAt": "2026-04-29T05:00:00Z"
  }
]
}

Get Filter Fields

GET/resources/filter-fields

Get available filter options (distinct types, providers, regions, statuses) for building filter UIs.

Response · json
{
"data": {
  "types": [
    "aws-ec2", "aws-rds", "aws-eks", "aws-eks-nodegroup",
    "aws-eks-deployment", "aws-eks-statefulset", "aws-eks-cronjob",
    "gcp-compute", "gcp-cloud-sql", "gcp-gke", "gcp-gke-nodepool",
    "gcp-gke-deployment", "gcp-gke-statefulset", "gcp-gke-cronjob",
    "azure-vm", "azure-aks", "azure-aks-agentpool",
    "azure-databricks", "azure-databricks-cluster",
    "azure-databricks-instance-pool", "azure-databricks-warehouse"
  ],
  "providers": ["aws", "gcp", "azure"],
  "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.

POST/resources/refresh

Trigger a resource discovery refresh.

Request · bash
curl -X POST https://zopnight.com/api/resources/refresh \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
  "cloudAccountID": "ca_abc123",
  "cloudAccountName": "Production AWS",
  "provider": "aws"
}'
Response · json
{
"data": {
  "refreshID": "ref_xyz789",
  "status": "queued"
}
}

Refresh Status

GET/resources/refresh/status

Check the status of a discovery refresh.

Response · json
{
"data": {
  "id": "ref_xyz789",
  "status": "success",
  "discovered": 47,
  "startedAt": "2025-01-20T08:00:00Z",
  "completedAt": "2025-01-20T08:02:15Z"
}
}

Resource Object

FieldTypeDescription
idstringUnique resource ID
namestringResource display name
uidstringCloud provider native resource identifier
typestringResource type (e.g., aws-ec2, gcp-compute, azure-vm)
instanceTypestringInstance size/type (e.g., t3.medium)
sizeGBnumber?Storage size in GB (storage resources)
unitCountinteger?Container/unit count (containerized resources)
regionstringCloud region
statusstringCurrent status (running, stopped, etc.)
cloudAccountIDstringConnected cloud account ID
cloudAccountNamestringCloud account display name
providerstringCloud provider (aws, gcp, azure)
parentUIDstringParent resource UID (e.g., cluster for a node)
childCountintegerNumber of child resources
schedulablebooleanWhether the resource supports start/stop scheduling
tagsobjectCloud provider tags as key-value pairs
createdAtstringISO 8601 creation timestamp
updatedAtstringISO 8601 last update timestamp

See Cloud Support Matrix for the full list of supported resource types per cloud provider.