Plans

List Plans

Returns a paginated list of plans. Omit account_id and pass product_ids to list a product's public buyable plans.

get/plans

Query parameters

account_idstring

The unique identifier of the account to list plans for. Required unless product_ids is provided for a public product-plan read.

direction'asc' | 'desc'

The sort direction for results. Defaults to descending.

order'id' | 'active_members_count' | 'created_at' | 'internal_notes' | 'expiration_days'

The field to sort results by. Defaults to created_at.

release_methodsstring[]

Filter to only plans matching these release methods.

[
  "buy_now"
]
visibilitiesstring[]

Filter to only plans matching these visibility states.

[
  "visible"
]
plan_typesstring[]

Filter to only plans matching these billing types.

[
  "renewal"
]
product_idsstring[]

Filter to only plans belonging to these product identifiers. When account_id is omitted, this is required and the response is publicly readable: only visible, non-invoice plans are returned.

[
  "prod_xxxxxxxxxxxxxx"
]
created_beforestring

Only return plans created before this timestamp.

created_afterstring

Only return plans created after this timestamp.

firstinteger

Number of results to return from the start of the range.

afterstring

Return results after this cursor. Use page_info.end_cursor from the previous response to fetch the next page.

lastinteger

Number of results to return from the end of the range.

beforestring

Return results before this cursor. Use page_info.start_cursor from the previous response to fetch the previous page.

Response

visible plans listed by product without authentication

Example response

{
  "data": [
    {
      "account": {
        "id": "biz_xxxxxxxxxxxxxx",
        "title": "Shine Time Auto Detailing"
      },
      "adaptive_pricing_enabled": true,
      "attributes": {
        "color": "Blue",
        "size": "S"
      },
      "billing_period": 30,
      "cancel_discount_intervals": 3,
      "cancel_discount_percentage": 20,
      "checkout_styling": {
        "background_color": "#0f172a",
        "border_style": "rounded",
        "button_color": "#f59e0b",
        "font_family": "roboto"
      },
      "created_at": "2026-01-01T12:00:00.000Z",
      "currency": "usd",
      "custom_fields": [
        {
          "field_type": "text",
          "id": "field_xxxxxxxxxxxxxx",
          "name": "Vehicle make and model",
          "placeholder": "2021 Audi S5",
          "required": true
        }
      ],
      "description": "Two hand washes a month, interior vacuum, and a quarterly sealant top-up.",
      "expiration_days": 365,
      "formatted_price": "$59.00 / month",
      "id": "plan_xxxxxxxxxxxxxx",
      "image": {
        "blurhash": "LA6bDXT$E3b:R6i+RibEIWbp%ej1",
        "url": "https://whop-assets-example.s3.amazonaws.com/uploads/image/2026-01-01/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      },
      "initial_price_due": {
        "amount": "-2.50",
        "currency": "usd",
        "decimals": 2,
        "display_decimals": 2
      },
      "internal_notes": "Maintenance tier. Upsell the interior shampoo add-on at renewal.",
      "invoice": {
        "id": "inv_xxxxxxxxxxxxxx"
      },
      "metadata": {
        "custom_cta": "subscribe",
        "custom_cta_url": "https://shinetime.example/wash-club"
      },
      "offer_cancel_discount": true,
      "payment_method_configuration": {
        "disabled": [
          "crypto"
        ],
        "enabled": [
          "card"
        ],
        "include_platform_defaults": true
      },
      "plan_type": "renewal",
      "product": {
        "id": "prod_xxxxxxxxxxxxxx",
        "title": "Ceramic Coating Package"
      },
      "purchase_url": "https://whop.com/checkout/plan_xxxxxxxxxxxxxx",
      "release_method": "buy_now",
      "renewal_price": 59,
      "sku": "CERAMIC-COATING-S-BLUE",
      "split_pay_required_payments": 4,
      "strike_through_initial_price": 99,
      "strike_through_renewal_price": 79,
      "three_ds_level": "frictionless_if_required",
      "title": "Unlimited Wash Club",
      "trial_period_days": 7,
      "updated_at": "2026-01-01T12:00:00.000Z",
      "visibility": "visible"
    }
  ],
  "page_info": {
    "start_cursor": "WyJjdXJzb3IiLDFd"
  }
}

Changes

Changed in 7 of the 74 revisions of this API.31516

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • ○

      added the required property // to the response with the status

      response-required-property-added

  • ff3a76573563141See the full diff
    • ▲

      for the query request parameter first, default value 20 was added

      request-parameter-default-value-added

    • ●

      for the query request parameter first, the max was set to 100.00

      request-parameter-max-set

    • ●

      for the query request parameter last, the max was set to 100.00

      request-parameter-max-set

    • ●

      added the new frictionless_if_required enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new mandate_if_required enum value to the // response property for the response status

      response-property-enum-value-added

    • ○

      removed the frictionless enum value from the // response property for the response status

      response-property-enum-value-removed

    • ○

      the query request parameter account_id became optional

      request-parameter-became-optional

    • ▲

      added subschema #2 to the // response property oneOf list for the response status

      response-property-one-of-added

    • ▲

      the // response's property type changed from object null to no type for status

      response-property-type-changed

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • ○

      added the optional property / to the response with the status

      response-optional-property-added

    • ○

      added the optional property / to the response with the status

      response-optional-property-added

    This revision also has 9 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

  • 60bbb4a6ffbc119See the full diff
    • ●

      added the new archived enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new buy_now enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new frictionless enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new hidden enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new mandate_challenge enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new one_time enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new quick_link enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new renewal enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new undefined enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new visible enum value to the // response property for the response status

      response-property-enum-value-added

    • ●

      added the new waitlist enum value to the // response property for the response status

      response-property-enum-value-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    • ○

      added the required property // to the response with the status

      response-required-property-added

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

Of the 74 revisions, 1 has no diff computed.