# What the organisation is entitled to, and what it is using `GET /billing` **Required scope:** `billing:read` Read entitlements rather than inferring capability from a plan name: access is granted per feature, and a name tells you nothing an agent can act on. There is no MCP tool for this one; GET /billing/usage is the upload allowance an agent actually needs before a sweep. Requires billing:read, which agent keys do not carry by default. Read billing. Requires scope billing:read. ## Responses | Status | Meaning | |---|---| | `200` | Success Returns: plan, status, entitlements, and usage {storageBytes, users, workspaces}. A snapshot of what the organisation is entitled to and what it currently consumes. | | `400` | BadRequest | | `401` | Unauthorized | | `403` | Forbidden | | `429` | RateLimited | ## Example ```bash curl -X GET "https://backend.immut.io/api/v1/billing" \ -H "Authorization: Bearer $IMMUT_API_KEY" ``` ## OpenAPI fragment ```json { "/billing": { "get": { "operationId": "getbilling", "summary": "What the organisation is entitled to, and what it is using. Read entitlements rather than inferring capability from a plan name: access is granted per feature, and a name tells you nothing an agent can act on. There is no MCP tool for this one; GET /billing/usage is the upload allowance an agent actually needs before a sweep. Requires billing:read, which agent keys do not carry by default.", "description": "Read billing. Requires scope billing:read.", "responses": { "200": { "description": "Success Returns: plan, status, entitlements, and usage {storageBytes, users, workspaces}. A snapshot of what the organisation is entitled to and what it currently consumes." }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" } }, "x-required-scope": "billing:read" } } } ```