---
title: "Get organization-wide µ spend total (owner/admin/auditor)"
method: GET
path: "/billing/usage/org"
tags: ["Billing"]
---

# Get organization-wide µ spend total (owner/admin/auditor)

`GET /billing/usage/org`

## Request

- Base URL: `https://api.mnemom.ai/v1`
- URL: `https://api.mnemom.ai/v1/billing/usage/org`
- Auth: HTTP bearer

Returns the ORG-WIDE µ spend total — the sum of all members' consumption over the requested lookback window. Each endpoint returns a RATE-CARD ESTIMATE (not the authoritative account-scoped ledger burn) derived from token counts, since usage_events stores no cost column — the response carries `basis: "rate_card_estimate"` and every µ field is named `estimated_*`. µ is the display unit (1 µ = 1¢ = 1000 mmu). Requires org owner, admin, or auditor. Feature-gated by `ORG_TOTAL_SPEND_ENABLED`; returns 404 to every caller (before auth) while the flag is off.

## Query parameters

- `org_id` string, required
- `days` 7 | 30 | 90
- `product` 'research' | 'design' | 'develop' | 'operate' | 'canon' | 'unattributed' | 'all'

## Response `200`

Organization-wide spend total (estimated) for the window.

- object
  - `from` string, date-time, required
  - `to` string, date-time, required
  - `basis` 'rate_card_estimate', required: Always `rate_card_estimate` — the µ figures are derived from token counts, not the settled ledger burn.
  - `totals` object, required
    - `turn_count` string, required
    - `tokens_in` string, required: 64-bit-safe string.
    - `tokens_out` string, required: 64-bit-safe string.
    - `estimated_cost_usd` number, required
    - `estimated_mmu` string, required
    - `estimated_mu` string, required
    - `totals_unavailable` boolean, required: True if the window-totals aggregation failed.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Resource not found
- `422`: Request was well-formed but semantically invalid (e.g., business-rule validation failure, malformed YAML inside a JSON payload).
- `429`: Rate-limit exceeded. The global per-IP limiter (100 requests/minute, applied to every `/v1/*` route) rejected this request. Back off until the window resets — `Retry-After` carries the cooldown in seconds and `X-RateLimit-Reset` the absolute reset time.
- `500`: Server error — request was well-formed but the server failed to fulfill it. Typically a downstream dependency (DB / RPC / external API) returned an unexpected error.

---

[API](https://skmtc.dev/mnemom/apis/mnemom-api.md) · [All operations](https://skmtc.dev/mnemom/apis/mnemom-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mnemom/apis/mnemom-api/revisions/274b7a6ea182?raw)
