Read what an organization was charged in a period
const url = 'https://api.katara.com/katara/v1/orgs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/statements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z';const options = {method: 'GET', headers: {cookie: 'katara_session=<katara_session>'}};
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://api.katara.com/katara/v1/orgs/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/statements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z' \ --cookie katara_session=<katara_session>Requires current billing:read permission. Billing is its own role: an administrator who can change what the agents do is not thereby entitled to what the organization spent. The figures are re-derived from the ledger on every read rather than stored, so the same period always answers the same way and a correction cannot leave a stale total behind. Lines are grouped by environment, usage class and purpose; totals are per usage class and never across them, because simulation credits, Test Compute and Live money are not the same money. The integrity digest is taken over the body and can be recomputed by a holder without this API. Periods longer than 366 days are refused.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Start of the period, inclusive, as an RFC 3339 moment.
End of the period, exclusive, as an RFC 3339 moment. Both ends are required: a default window would decide which month was meant.
Responses
Section titled “Responses”What the organization was charged in the period.
What an organization was charged in one period, grouped by environment, usage class, purpose and the price version that priced it. Totals are per usage class and never across them: simulation credits, Test Compute and Live money are not the same money. The figures are re-derived from the ledger on every read, so the same period always answers the same way.
object
object
object
Example
{ "schema_version": 2, "lines": [ { "mode": "test", "usage_class": "simulation", "purpose": "inference", "asset": "CREDIT_ATOMIC", "scale": 9 } ], "totals": [ { "usage_class": "simulation", "asset": "CREDIT_ATOMIC", "scale": 9 } ]}default
Section titled “default”Request rejected or unavailable.
object
object
Stable; branch on it. Any operation can answer invalid_request, with param naming the refused field when there is one; human_session_required, when an API key, service account or workload calls an operation only a signed-in person may perform; reauthentication_required, when a person’s sign-in is too old for the operation; permission_denied; route_not_found and method_not_allowed, when no operation matches the path or method; and feature_unavailable, when the operation’s service is not enabled on this deployment.
The request field a refusal is about, such as the agent_id or run_id query parameter; null when the refusal is not about one field.
Example
{ "error": { "action": "sign_in" }}