---
title: "GET /api/v1/admin/ai/quotas"
method: GET
path: "/api/v1/admin/ai/quotas"
tags: ["Administration", "AI Operations"]
---

# GET /api/v1/admin/ai/quotas

`GET /api/v1/admin/ai/quotas`

Lists weekly AI spend limits and balances by subscriber, entitlement and plan, including explicit fail-closed unconfigured entitlements and pending AI Gateway reconciliation. Email filtering is performed server-side against the account email, while response rows expose only a stable maskedEmail value.

## Query parameters

- `email` string
- `exhausted` union
  - boolean
  - 'true' | 'false'
- `limit` integer
- `offset` integer, nullable
- `planId` integer
- `productId` integer
- `status` 'trialing' | 'active' | 'past_due' | 'ended' | 'demo' | 'unconfigured'
- `subscriberUserId` integer

## Cookies

- `billing_session` string

## Response `200`

Weekly subscriber quotas.

- object
  - `generatedAt` string, date-time, required
  - `pagination` object, required
    - `hasMore` boolean, required
    - `limit` integer, required
    - `offset` integer, required
    - `total` integer, required
  - `provenance` 'exact_postgres', required
  - `quotas` object[], required
    - `gatewayStatus` 'not_applicable' | 'pending' | 'estimated' | 'reconciled' | 'mixed', required
    - `maskedEmail` string, required
    - `membership` object, nullable, required
      - `aiWeeklyLimitMicrousd` integer, nullable, required
      - `id` integer, required
      - `planId` integer, required
      - `planName` string, required
      - `startedAt` string, date-time, required
      - `status` 'trialing' | 'active' | 'past_due' | 'ended', required
    - `periodEnd` string, date-time, required
    - `periodStart` string, date-time, required
    - `plan` object, nullable, required
      - `aiWeeklyLimitMicrousd` integer, nullable, required
      - `id` integer, required
      - `name` string, required
      - `status` 'active' | 'archived', required
    - `productId` integer, required
    - `reconciled` boolean, required
    - `status` 'trialing' | 'active' | 'past_due' | 'ended' | 'demo' | 'unconfigured', required
    - `subscriberUserId` integer, required
    - `updatedAt` string, date-time, required
    - `costCeilingBreached` boolean, required
    - `exhausted` boolean, required
    - `limitMicrousd` integer, nullable, required
    - `nextTurnReservationMicrousd` integer, nullable, required
    - `remainingMicrousd` integer, nullable, required
    - `reservedMicrousd` integer, required
    - `settledMicrousd` integer, required
    - `usedPercent` number, nullable, required
  - `summaryByPlan` object[], required
    - `exhaustedUsers` integer, required
    - `limitMicrousd` integer, nullable, required
    - `pendingReconciliationUsers` integer, required
    - `planId` integer, nullable, required
    - `planName` string, nullable, required
    - `planStatus` 'active' | 'archived' | 'null', nullable, required
    - `reconciledUsers` integer, required
    - `remainingMicrousd` integer, nullable, required
    - `reservedMicrousd` integer, required
    - `settledMicrousd` integer, required
    - `usedPercent` number, nullable, required
    - `users` integer, required

## Other responses

- `400` — The filters, pagination, or session cookie are invalid.
- `401` — No valid global administrator session exists.
- `503` — The quota ledger is unavailable.

---

[API](https://skmtc.dev/expertschat/apis/billing-core-api.md) · [All operations](https://skmtc.dev/expertschat/apis/billing-core-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/expertschat/billing-core-api/revisions/c6d0e986ce32/schema)
