Conventions
Responses#
A list is named after what it holds, with a summary of totals where there is one:
{
"summary": { "total": 2, "accounts": 1, "regions": 1 },
"instances": [
{
"id": "i-0a1b2c3d",
"type": "m5.large",
"region": "us-east-1",
"state": "running",
"price": 70.08,
"account_id": "123456789012"
}
]
}A single record comes under its own name, like { "organization": { … } } or { "bill": { … } }.
Field types#
- Money is in USD, as a number, like
12.5. - Timestamps are ISO 8601 in UTC, like
2026-11-08T09:00:00Z. - Accounts are identified by their 12-digit AWS
account_id.
Filters#
- A filter is named after the field it matches, without an
_idor_typesuffix:?region=us-east-1returns the records whoseregionisus-east-1, and?account=123456789012the ones whoseaccount_idis123456789012. - Repeat a filter to match any of several values:
?region=us-east-1®ion=eu-west-1. statefilters by lifecycle state, including on resources where AWS names the fieldstatus, like EKS clusters.- An unknown filter value returns
422with theinvalid_filtercode.
Errors#
An error always has a code and a message:
{ "error": "invalid_filter", "message": "role must be one of data, master, warm" }| Status | Code | When |
|---|---|---|
401 | unauthorized | The key is missing, expired, or revoked |
403 | forbidden | The key can't read this, like a locked project |
404 | not_found | The organization or record doesn't exist, or isn't yours |
422 | invalid_filter | A filter value is unknown, or a required parameter is missing |
429 | rate_limited | The key made more than 60 requests in a minute |
Rate limits#
An API key can make 60 requests a minute, across every endpoint. Past that, the API returns 429 until the minute is up.