Skip to content

Get the authoritative month-to-date cost breakdown

GET
/api/v1/organizations/{orgID}/billing/breakdown
curl --request GET \
--url https://api.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/billing/breakdown \
--header 'Authorization: Bearer <token>'

Returns the current UTC month’s authoritative cost breakdown: flat monthly subscriptions (fixed pools, control plane, packages and package overage, public API endpoints and load balancers) plus server-priced autoscaling usage aggregated per node pool and resource type, with a reconciled subtotal in euros. The subtotal reconciles to UsageSummary.total_eur (to display precision; exact-cents parity lands with invoice generation in Phase 4) — this endpoint is the single source of truth for the month’s bill (unlike /billing/daily-spend, which is autoscaling-only). Each autoscaling line carries the server-computed unit_price_eur and amount_eur.

orgID
required
string format: uuid

Organization UUID.

The authoritative cost breakdown.

Media typeapplication/json
object
org_id
required
string format: uuid
period_start
required
string format: date-time
period_end
required
string format: date-time
subscriptions
required

Flat monthly committed fees: fixed pools, control plane, packages and package overage, public API endpoints and load balancers (see SubscriptionLine.kind).

Array<object>
object
kind
required

Which flat monthly charge this line is. plan is a package fee and plan_overage the resources beyond its allowance (both cluster-scoped, with a null node_pool_id); public_ip is the mandatory public API endpoint every cluster is required to have — one line per cluster per month at the published public_ip rate (€4 at the time of writing), a flat month locked the first time the billing sampler observes the endpoint address, so replacing that address within the month does not add a line; loadbalancer, by contrast, is one line per public load-balancer address, so a cluster with several produces several.

string
Allowed values: node_pool control_plane plan plan_overage public_ip loadbalancer
cluster_id
string | null format: uuid
node_pool_id
string | null format: uuid
name
required
string
amount_eur
required
number format: double
gross_amount_eur
required
number format: double
discount_eur
required
number format: double
autoscaling
required

Server-priced autoscaling usage aggregated per node pool and resource type.

Array<object>
object
node_pool_id
string | null format: uuid
pool_name
required
string
resource_type
required
string
Allowed values: vcpu memory disk
unit
required
string
quantity
required
number format: double
unit_price_eur
required

Server-computed per-resource-hour rate from the rate card.

number format: double
amount_eur
required

Server-computed line cost (quantity × unit_price_eur).

number format: double
subtotal_eur
required

Reconciled month-to-date total (subscriptions + autoscaling). Reconciles to UsageSummary.total_eur to display precision — equal by linearity of the rate card, but float64 round-then-sum vs sum-then-multiply can differ by a few ULPs. Exact-cents parity lands with invoice generation in Phase 4.

number format: double
Example
{
"subscriptions": [
{
"kind": "node_pool"
}
],
"autoscaling": [
{
"resource_type": "vcpu"
}
]
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
]
}
}