# The account's subscription and weekly meter

`GET /v1/console/subscription` (operation id `getSubscription`)

The current plan, its status, the paid period, a scheduled downgrade or cancellation, and the weekly meter
(allowance, used, when it resets). An account that never subscribed, or whose subscription ended, has
`plan: null` and `status: none`; its requests are paid from the prepaid balance at the standard rate.

Authentication: Console session cookie (`__Host-dex_session`), or an app session token (`Authorization: Bearer dex_ses_...`). With the cookie, state-changing routes also need the `x-dex-csrf` header.

## Responses

### 200

The subscription (or its absence).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | (always "subscription") |
| `plan` | string \| null | yes | The current plan; null when the account has no subscription. (one of "base", "hot", "fierce", null) |
| `status` | string | yes | `none`: never subscribed, or the last subscription ended and the account is back on pay as you go. `incomplete`: Checkout started, the first payment is not settled yet (delayed payment methods). `active`: paid up; the weekly allowance is available. `past_due`: a renewal payment failed, the allowance stays available during the grace period. `frozen`: the grace period passed, requests are paid from the balance until the subscription is paid or ends. `canceled`: ended; `plan` is null.  (one of "none", "incomplete", "active", "past_due", "frozen", "canceled") |
| `cancel_at_period_end` | boolean | yes | The subscription ends at `current_period_end` (cancelSubscription). |
| `scheduled_plan` | string \| null | yes | A cheaper plan that applies at `current_period_end` (updateSubscription to a cheaper plan); null otherwise. (one of "base", "hot", "fierce", null) |
| `current_period_start` | string \| null | yes | (format date-time) |
| `current_period_end` | string \| null | yes | When the paid month ends and Stripe bills the next one; a cancellation or downgrade applies then. (format date-time) |
| `week_started_at` | string \| null | yes | Start of the current 7-day allowance week (weeks run from the subscription start). (format date-time) |
| `week_resets_at` | string \| null | yes | When the allowance refills (week_started_at plus 7 days). (format date-time) |
| `week_allowance_tokens` | integer | yes | (format int64; at least 0) |
| `week_used_tokens` | integer | yes | (format int64; at least 0) |
| `reset_price_cents` | integer \| null | yes | Price excluding VAT of a reset for the current plan; null without a plan. |
| `resets_bought_this_week` | integer | yes | (at least 0) |
| `billing_portal` | boolean | yes | Whether `createBillingPortalSession` works (the Stripe Customer Portal is configured for Dex and the account has a Stripe customer). |
| `currency` | string \| null | yes | The currency the plan is billed in (Stripe's subscription currency, else the account's `billing_currency`); null without a plan or before it is known. `reset_price_cents` stays in euro cents: the reset in this currency is `Plan.prices[currency].reset_price_cents`. New currencies may appear within v1.  (one of "EUR", "USD", "GBP", "INR", null) |

### 401

Missing, unknown, revoked or expired credentials.

### 403

The credentials are valid but not allowed to do this (missing scope, suspended account or failed CSRF check).

### 500

An unexpected error. Any charge was refunded. Retry with the same idempotency key.

### 503

`maintenance`: the console's database, sign-in or payments are unavailable for a moment (for
`createGoogleSession` also: Google sign-in is not configured, or Google's signing keys cannot be fetched).
Retry after `retry-after`. Nothing was changed.


## Examples

Illustrative values. Examples show the shape of requests and responses; the numbers in them are not measured results.

Response: Base plan, week 3 of the subscription, one reset bought this week

```json
{
  "object": "subscription",
  "plan": "base",
  "status": "active",
  "cancel_at_period_end": false,
  "scheduled_plan": null,
  "current_period_start": "2026-10-03T09:15:00Z",
  "current_period_end": "2026-11-03T09:15:00Z",
  "week_started_at": "2026-10-17T09:15:00Z",
  "week_resets_at": "2026-10-24T09:15:00Z",
  "week_allowance_tokens": 4611000,
  "week_used_tokens": 1204880,
  "reset_price_cents": 250,
  "resets_bought_this_week": 1,
  "billing_portal": true,
  "currency": "EUR"
}
```
