Read the status of a CloudAccount
const url = 'https://example.com/apis/nodus.dev/v1/cloudaccounts/example/status';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/apis/nodus.dev/v1/cloudaccounts/example/statusParameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”The object’s name.
Responses
Section titled “ Responses ”OK
CloudAccount is read-only observation of a customer’s AWS or GCP account: inventory, GPUs and spend. Nodus never launches, stops or changes anything in the customer’s cloud. The object holds only the non-secret binding; the grant material is stored encrypted and owned by the account.
object
object
object
object
object
object
object
CloudAccountSpec is the binding to one cloud account.
object
AWSAccount is an AWS binding through a read-only IAM role.
object
AccountID is the 12-digit AWS account id.
Regions limits observation; empty means every enabled region.
RoleARN is the read-only role the CloudFormation stack created; onboarding fills it.
GCPAccount is a GCP binding through a read-only grant.
object
Method is how the customer granted access; OAuth, the default, is the only method accepted.
ProjectIDs are the projects Nodus observes. Empty starts Google consent before project selection.
WorkloadIdentityProvider names a workload identity provider (WorkloadIdentity, which is refused).
Observe lists the reads that run. Default [Inventory, GPUs, Spend].
Provider is AWS or GCP. Immutable.
CloudAccountSync sets the observation cadence.
object
Interval is from 15m to 24h. Default 1h.
CloudAccountStatus is the latest observation.
object
Conditions carries Verified and Synced.
object
ExternalID is the AWS external id the role’s trust policy must name.
HandledRequests records the nodus.dev/verify-requested-at value the last requested sync answered.
object
CloudInventorySummary counts what the latest sync saw.
object
GPUs counts GPUs per accelerator model.
object
Instances is the number of instances observed.
Regions are the regions with instances.
LastSyncTime is when the latest sync finished.
Phase is Pending, Ready or Failed.
CloudSpendSummary is the month’s observed cloud spend; it never enters Nodus billing.
object
AsOfTime is when the spend was read.
MonthToDateUSD is observed month-to-date USD, possibly partial; empty when no USD was observed.
CloudSpendReport is the latest observation window, never a Nodus charge or a savings claim.
object
Basis explains adjustments and provisional billing data.
Currencies keeps different currencies separate; absent rows are unknown, not zero.
CloudSpendCurrency is one currency’s observed bill and optional projection.
object
CloudSpendService is one service’s observed subtotal in the currency report’s window.
object
ComputeServiceTotal is a service subtotal, including CPU and associated charges, never GPU-only spend.
CloudSpendCoverage describes past UTC days in the requested window; today’s partial day is excluded.
object
BilledThrough is the latest day explicitly reported non-estimated by the source, not invoice finality.
CloudSpendPoint leaves cost absent when no amount was observed. Unknown finality never means complete.
object
CloudSpendForecast extrapolates eligible observed days; it is neither a price guarantee nor a confidence band.
object
ComputeServiceTotal projects only the explicitly classified compute-service subtotal.
HistoryThrough is the latest UTC day used, exposing the export lag buffer.
Status is Ready, InsufficientHistory, BillingAdjustments or ProvisionalSource.
Total is the next HorizonDays at the recent daily average, not a month-end prediction.
MonthToDate sums returned amounts since the current month’s start; coverage may be partial.
ObservedTotal sums only returned amounts over the observation window.
FromDay is the first requested UTC day; ToDay is exclusive.
Source identifies the customer’s cloud billing source.
Example generated
{ "apiVersion": "example", "kind": "example", "metadata": { "annotations": { "additionalProperty": "example" }, "creationTimestamp": "example", "deletionGracePeriodSeconds": 1, "deletionTimestamp": "example", "finalizers": [ "example" ], "generateName": "example", "generation": 1, "labels": { "additionalProperty": "example" }, "managedFields": [ { "apiVersion": "example", "fieldsType": "example", "fieldsV1": { "additionalProperty": "example" }, "manager": "example", "operation": "example", "subresource": "example", "time": "example" } ], "name": "example", "namespace": "example", "ownerReferences": [ { "apiVersion": "example", "blockOwnerDeletion": true, "controller": true, "kind": "example", "name": "example", "uid": "example" } ], "resourceVersion": "example", "selfLink": "example", "uid": "example" }, "spec": { "aws": { "accountId": "example", "regions": [ "example" ], "roleArn": "example" }, "gcp": { "method": "example", "projectIds": [ "example" ], "workloadIdentityProvider": "example" }, "observe": [ "example" ], "provider": "example", "sync": { "interval": "example" } }, "status": { "conditions": [ { "lastTransitionTime": "example", "message": "example", "observedGeneration": 1, "reason": "example", "status": "example", "type": "example" } ], "externalId": "example", "handledRequests": { "additionalProperty": "example" }, "inventory": { "gpus": { "additionalProperty": 1 }, "instances": 1, "regions": [ "example" ] }, "lastSyncTime": "example", "phase": "example", "spend": { "asOfTime": "example", "report": { "basis": "example", "currencies": [ { "byService": [ { "cost": "example", "service": "example" } ], "computeDescription": "example", "computeServiceTotal": "example", "coverage": { "billedThrough": "example", "completeDays": 1, "estimatedDays": 1, "missingDays": 1, "observedDays": 1 }, "currency": "example", "daily": [ { "complete": true, "cost": "example", "day": "example", "estimated": true } ], "forecast": { "computeDescription": "example", "computeServiceTotal": "example", "historyDays": 1, "historyThrough": "example", "horizonDays": 1, "method": "example", "status": "example", "total": "example" }, "monthToDate": "example", "observedTotal": "example" } ], "fromDay": "example", "source": "example", "toDay": "example" } } }}default
Section titled “ default ”An error: a metav1.Status whose reason is a registered code.
Status is the error body of every API response: a Kubernetes metav1.Status (so kubectl and client-go understand it) plus three top-level extensions that those clients ignore (ADR-028).
object
object
object
Docs is the URL of the code’s docs page.
Fix says what to do next, for example a CLI command or the field to change.
object
object
RequestID identifies the request in logs and support tickets.
Example generated
{ "apiVersion": "example", "code": 1, "details": { "causes": [ { "field": "example", "message": "example", "reason": "example" } ], "group": "example", "kind": "example", "name": "example", "retryAfterSeconds": 1, "uid": "example" }, "docs": "example", "fix": "example", "kind": "example", "message": "example", "metadata": { "continue": "example", "remainingItemCount": 1, "resourceVersion": "example", "selfLink": "example", "shardInfo": { "selector": "example" } }, "reason": "example", "requestId": "example", "status": "example"}