---
title: "List Plans"
method: GET
path: "/plans"
tags: ["Plans"]
---

# List Plans

`GET /plans`

Returns a paginated list of plans belonging to an account, with optional filtering by visibility, type, release method, and product.

## Query parameters

- `account_id` string, required
- `direction` 'asc' | 'desc'
- `order` 'id' | 'active_members_count' | 'created_at' | 'internal_notes' | 'expiration_days'
- `release_methods` string[]
- `visibilities` string[]
- `plan_types` string[]
- `product_ids` string[]
- `created_before` string
- `created_after` string
- `first` integer
- `after` string
- `last` integer
- `before` string

## Response `200`

plans listed

- object
  - `data` PlanListItem[], required
    - `account` object, nullable, required — Account that sells this plan; `null` for standalone invoice plans.
    - `adaptive_pricing_enabled` boolean, required — Whether adaptive pricing is enabled for this plan. Raw setting — does not check processor compatibility or feature flags.
    - `billing_period` number, nullable, required — Number of days between recurring charges, such as 30 for monthly or 365 for annual. `null` for one-time plans.
    - `cancel_discount_intervals` number, nullable, required — Billing intervals the cancellation discount applies to (`0` forever, `1` first payment, or a month count). `null` when none is offered or the actor lacks the `plan:basic:read` scope.
    - `cancel_discount_percentage` number, nullable, required — Cancellation discount as a whole-number percentage. `null` when none is offered or the actor lacks the `plan:basic:read` scope.
    - `checkout_styling` object, nullable, required — Plan-level checkout styling (`background_color`, `button_color`, `font_family`, `border_style`); `null` inherits the account default.
    - `created_at` string, required — When the plan was created, as an ISO 8601 timestamp.
    - `currency` string, required — Three-letter ISO currency code for this plan's prices.
    - `custom_fields` PlanCustomField[], required
      - `field_type` 'text', required — Custom field input type.
      - `id` string, required — Custom field ID, prefixed `field_`.
      - `name` string, required — Field label shown to customer at checkout.
      - `order` number, required — Field position on checkout form.
      - `placeholder` string, nullable, required — Placeholder text shown in the empty field. `null` if none is set.
      - `required` boolean, required — Whether the customer must complete this field to check out.
    - `description` string, nullable, required — Customer-visible plan description. Maximum 1000 characters. `null` if no description is set.
    - `expiration_days` number, nullable, required — Access duration in days for expiration-based plans, such as 365 for a one-year pass. `null` for plans without an expiration.
    - `formatted_price` string, required — Human-readable price for display (currency + interval), e.g. "$10 / month".
    - `id` string, required — Plan ID, prefixed `plan_`.
    - `image` object, nullable, required — Pricing-tier image (`url`, `blurhash`) shown on the product page; `null` when no image is set.
    - `initial_price` number, required — Initial purchase price in plan currency.
    - `internal_notes` string, nullable, required — Private notes not shown to customers. `null` unless the actor has the `plan:basic:read` scope on the plan's account.
    - `invoice` object, nullable, required — Invoice this plan was generated for; `null` unless created for an invoice.
    - `member_count` number, nullable, required — Active memberships through this plan. `null` unless the actor has the `plan:basic:read` scope on the plan's account.
    - `metadata` object, nullable, required — Custom key-value pairs stored on the plan. Included in webhook payloads for payment and membership events. Maximum 50 keys, 100 characters per key, 500 characters per value.
    - `offer_cancel_discount` boolean, nullable, required — Whether a cancellation discount is offered. `null` unless the actor has the `plan:basic:read` scope on the plan's account.
    - `payment_method_configuration` object, nullable, required — Payment method configuration (`enabled`, `disabled`, `include_platform_defaults`); `null` when plan uses default settings.
    - `plan_type` 'renewal' | 'one_time', required — Billing model for this plan.
    - `product` object, nullable, required — Product this plan belongs to; `null` for standalone plans.
    - `purchase_url` string, required — URL where customers can purchase this plan directly.
    - `release_method` 'buy_now' | 'waitlist', required — Sales method for this plan.
    - `renewal_price` number, required — Recurring price charged every billing period.
    - `split_pay_required_payments` number, nullable, required — Installment payments required before the subscription pauses. Must be greater than 1. `null` if split pay is not configured.
    - `stock` number, nullable, required — Units available for purchase. `null` unless the actor has the `plan:basic:read` scope on the plan's account.
    - `strike_through_initial_price` number, nullable, required — Original initial price shown with a strikethrough, in the plan's currency. `null` when no strikethrough is set.
    - `strike_through_renewal_price` number, nullable, required — Original renewal price shown with a strikethrough, in the plan's currency. `null` when no strikethrough is set.
    - `three_ds_level` 'mandate_challenge' | 'frictionless' | 'null', nullable, required — 3D Secure behavior for this plan; `null` inherits the account default.
    - `title` string, nullable, required — Plan display name shown to customers. Maximum 30 characters. `null` if no title has been set.
    - `trial_period_days` number, nullable, required — Free trial days before the first renewal charge. `null` if no trial is configured or the user has already used a trial for this plan.
    - `unlimited_stock` boolean, required — Whether the plan has unlimited stock. When `true`, the `stock` field is ignored; waitlist plans always report `true`.
    - `updated_at` string, required — When the plan was last updated, as an ISO 8601 timestamp.
    - `visibility` 'visible' | 'hidden' | 'archived' | 'quick_link', required — Controls where this plan can be seen. When `hidden`, the plan is reachable only by its direct link.
  - `page_info` object, required
    - `end_cursor` string, nullable, required
    - `has_next_page` boolean, required
    - `has_previous_page` boolean, required
    - `start_cursor` string, nullable, required

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
