List Plans
Returns a paginated list of plans. Omit account_id and pass product_ids to list a product's public buyable plans.
Query parameters
The unique identifier of the account to list plans for. Required unless product_ids is provided for a public product-plan read.
The sort direction for results. Defaults to descending.
The field to sort results by. Defaults to created_at.
Filter to only plans matching these release methods.
[ "buy_now" ]
Filter to only plans matching these visibility states.
[ "visible" ]
Filter to only plans matching these billing types.
[ "renewal" ]
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" ]
Only return plans created before this timestamp.
Only return plans created after this timestamp.
Number of results to return from the start of the range.
Return results after this cursor. Use page_info.end_cursor from the previous response to fetch the next page.
Number of results to return from the end of the range.
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 statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-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 statusresponse-required-property-added
- ○
- ▲
for the
queryrequest parameterfirst, default value20was addedrequest-parameter-default-value-added
- ●
for the
queryrequest parameterfirst, the max was set to100.00request-parameter-max-set
- ●
for the
queryrequest parameterlast, the max was set to100.00request-parameter-max-set
- ●
added the new
frictionless_if_requiredenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
mandate_if_requiredenum value to the//response property for the response statusresponse-property-enum-value-added
- ○
removed the
frictionlessenum value from the//response property for the response statusresponse-property-enum-value-removed
- ▲
- ○
the
queryrequest parameteraccount_idbecame optionalrequest-parameter-became-optional
- ○
- ▲
added
subschema #2to the//response propertyoneOflist for the response statusresponse-property-one-of-added
- ▲
the
//response's property type changed fromobjectnullto no type for statusresponse-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 statusresponse-optional-property-added
- ○
added the optional property
/to the response with the statusresponse-optional-property-added
This revision also has 9 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog
- ○
- ●
added the new
archivedenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
buy_nowenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
frictionlessenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
hiddenenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
mandate_challengeenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
one_timeenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
quick_linkenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
renewalenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
undefinedenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
visibleenum value to the//response property for the response statusresponse-property-enum-value-added
- ●
added the new
waitlistenum value to the//response property for the response statusresponse-property-enum-value-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-required-property-added
- ○
added the required property
//to the response with the statusresponse-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.