---
title: "Get Account Usage"
method: GET
path: "/account_usage"
tags: ["Account"]
---

# Get Account Usage

`GET /account_usage`

## Request

- Base URL: `https://api.wistia.com/modern`
- URL: `https://api.wistia.com/modern/account_usage`
- Auth: HTTP bearer

Retrieves plan, usage, and limit information for the current account.

The response includes plan tier, upload eligibility, and links to billing pages.
Usage and limit details (media counts, storage, seats, bandwidth) are only visible
to account owners and managers — other contacts receive `null` for the `limits` field.

## Requires api token with one of the following permissions
```
(any scope allowed)
```

Tokens with the "Act with a team member's permissions" permission
(`all:delegate_to_contact_permissions` scope) can also be used. Requests
made with such a token are authorized using the permissions of the
contact assigned to the token.

[Expiring access tokens](https://docs.wistia.com/reference/post_expiring-token)
created with authorizations cannot be used: this endpoint responds with a
403, whatever the authorizations grant.

## Headers

- `X-Wistia-API-Version` string, required

## Response `200`

Successful response

- object: Account usage and plan information, including storage, media, seat, and bandwidth limits. Fields under `limits` are only visible to account owners and managers.
  - `plan` object, required: The account's current plan information
    - `tier` string, required: The plan tier identifier. Common values include `free`, `starter`, `plus`, `pro`, `advanced`, `business`, `enterprise`. Legacy plans may use other tier names. Empty string if the account has no plan.
    - `name` string, required: Human-readable plan name
    - `is_standard` boolean, required: Whether this is a 2026 storage-based plan (true) or a legacy media-count plan (false)
    - `is_trial` boolean, required: Whether the account is currently on a trial
    - `trial_expires_at` string, nullable, required: ISO 8601 timestamp when the trial expires, or null if not trialing
  - `can_upload` boolean, required: Whether the next upload will succeed. False when an inflexible media or storage limit has been reached.
  - `upload_blocked_reason` string, nullable, required: The reason uploads are blocked, or null if uploads are allowed. Known values: `reached_media_limit`, `reached_storage_limit`.
  - `limits` object, nullable, required: Usage and limit data. Null when the authenticated contact does not have billing visibility (i.e. is not an account owner or manager).
    - `primary_resource` 'storage' | 'media', required: The primary resource type for this plan's limits — "storage" for standard plans, "media" for legacy plans
    - `media` object, required: Media count and limits
      - `count` integer, required: Current number of media in the account
      - `flexible_limit` integer, nullable, required: Soft media limit (overage billed). Null if no soft limit.
      - `inflexible_limit` integer, nullable, required: Hard media limit (uploads blocked). Null if no hard limit.
    - `storage` object, required: Storage usage and limits in bytes (1 GB = 1,000,000,000 bytes)
      - `used_bytes` integer, required: Current storage usage in bytes
      - `flexible_limit_bytes` integer, nullable, required: Included storage limit in bytes. Null if unlimited.
      - `inflexible_limit_bytes` integer, nullable, required: Hard storage cap in bytes. Null if no hard cap.
    - `users` object, required: Seat (user) usage and limits. Viewers are non-billable and excluded from the billable counts.
      - `billable_count` integer, required: Current number of billable users (seats). For agency accounts this aggregates distinct users across the parent and team accounts — the count billing compares against `flexible_limit`. Excludes viewers.
      - `account_billable_count` integer, required: Billable users in this account only, the count compared against `inflexible_limit` when enforcing the hard seat limit. Matches `billable_count` for non-agency accounts. Excludes viewers.
      - `viewers_count` integer, required: Current number of viewer contacts, which are non-billable and don't count toward seat limits.
      - `flexible_limit` integer, nullable, required: Included seats on flexible plans (additional seats billed as overage). Null if no soft limit.
      - `inflexible_limit` integer, nullable, required: Hard seat limit (adding users blocked at the limit). Null if no hard limit.
    - `bandwidth` object, required: Bandwidth usage and limits for the current billing period, in bytes (1 GB = 1,000,000,000 bytes)
      - `used_bytes` integer, required: Bandwidth used in the current billing period, in bytes
      - `limit_bytes` integer, nullable, required: Bandwidth limit for the billing period in bytes. Null if unlimited.
      - `period` 'monthly' | 'annual', required: Whether the bandwidth allowance is tracked monthly or annually
      - `resets_at` string, nullable, required: ISO 8601 timestamp when the bandwidth period resets, or null if unknown
  - `links` object, required: URLs for plan, usage, and billing pages
    - `plans_url` string, required: URL to the account's plans page. Always present.
    - `usage_url` string, nullable, required: URL to the account's usage page. Null for non-owner/manager contacts.
    - `billing_url` string, nullable, required: URL to the account's billing page. Null for non-owner/manager contacts.
  - `role` string, nullable, required: The authenticated contact's role on the account. One of `owner`, `manager`, `standard_user`, `limited_user`, `viewer`. Null when the token isn't associated with a specific contact.
  - `verified_domain` boolean, required: Whether the account has at least one verified business domain (i.e. an owner whose email domain is verified and business-classified). Independent of plan tier.
  - `can_invite_teammates` boolean, required: Whether the authenticated contact can invite additional teammates via the modern contacts endpoint. True when the contact is an owner or manager and the account has a verified business domain.

## Other responses

- `401`: Unauthorized, invalid or missing token
- `403`: Forbidden, token is valid but account does not have access to feature
- `500`: Internal server error

## Changes

- **2026-11-03** `b86cb2a7b420`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/wistia/apis/data-api/changes/account_usage/get.md)

---

[API](https://skmtc.dev/wistia/apis/data-api.md) - [All operations](https://skmtc.dev/wistia/apis/data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/wistia/apis/data-api/revisions/b86cb2a7b420?raw)
