Skip to main content
PATCH
/
plans
/
{id}
Update Plan
curl --request PATCH \
  --url https://{defaultHost}/plans/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "offer_cancel_discount": true,
  "strike_through_initial_price": 123,
  "strike_through_renewal_price": 123,
  "adaptive_pricing_enabled": true,
  "billing_period": 123,
  "checkout_styling": {},
  "currency": "<string>",
  "custom_fields": [
    {
      "id": "<string>",
      "field_type": "text",
      "name": "<string>",
      "order": 123,
      "placeholder": "<string>",
      "required": true
    }
  ],
  "description": "<string>",
  "expiration_days": 123,
  "image": {
    "id": "<string>",
    "direct_upload_id": "<string>"
  },
  "initial_price": 123,
  "internal_notes": "<string>",
  "legacy_payment_method_controls": true,
  "metadata": {},
  "override_tax_type": "<string>",
  "payment_method_configuration": {
    "enabled": [
      "<string>"
    ],
    "disabled": [
      "<string>"
    ],
    "include_platform_defaults": true
  },
  "renewal_price": 123,
  "stock": 123,
  "title": "<string>",
  "trial_period_days": 123,
  "unlimited_stock": true,
  "visibility": "<string>"
}
'
{
  "id": "<string>",
  "created_at": "<string>",
  "updated_at": "<string>",
  "visibility": "visible",
  "plan_type": "renewal",
  "release_method": "buy_now",
  "currency": "usd",
  "account": {},
  "product": {},
  "invoice": {},
  "billing_period": 123,
  "title": "<string>",
  "description": "<string>",
  "purchase_url": "<string>",
  "expiration_days": 123,
  "initial_price": 123,
  "renewal_price": 123,
  "trial_period_days": 123,
  "three_ds_level": "mandate_challenge",
  "member_count": 123,
  "internal_notes": "<string>",
  "metadata": {},
  "stock": 123,
  "unlimited_stock": true,
  "split_pay_required_payments": 123,
  "adaptive_pricing_enabled": true,
  "payment_method_configuration": {},
  "tax_type": "inclusive",
  "collect_tax": true,
  "custom_fields": [
    {
      "id": "<string>",
      "field_type": "text",
      "name": "<string>",
      "order": 123,
      "placeholder": "<string>",
      "required": true
    }
  ]
}

Authorizations

Authorization
string
header
required

An account API key, account scoped JWT, app API key, or user OAuth token.

Headers

Api-Version-Date
string<date>

Pins the request to a dated API version. When omitted, the request uses the original (2025-01-01) request/response shapes, so existing unversioned callers are never broken. Generated SDKs always send the latest version they were built against. An unrecognized value is rejected with a 400. The schemas documented here always describe the latest version.

Example:

"2026-06-20"

Path Parameters

id
string
required

Plan ID, prefixed plan_.

Body

application/json
offer_cancel_discount
boolean | null

Whether to offer a retention discount when a customer attempts to cancel.

strike_through_initial_price
number | null

A comparison price displayed with a strikethrough for the initial price.

strike_through_renewal_price
number | null

A comparison price displayed with a strikethrough for the renewal price.

adaptive_pricing_enabled
boolean | null

Whether this plan accepts local currency payments via adaptive pricing.

billing_period
integer | null

Recurring billing interval in days, such as 30 for monthly or 365 for annual.

checkout_styling
object

Checkout styling overrides for this plan.

currency
string

The three-letter ISO currency code for the plan's pricing. Defaults to USD.

custom_fields
object[] | null

An array of custom field definitions to collect from customers at checkout. Omitting this field clears existing custom fields.

description
string | null

A text description of the plan displayed to customers on the product page.

expiration_days
integer | null

Access duration in days before the membership expires.

image
object

An image displayed on the product page to represent this plan.

initial_price
number | null

Initial amount charged in the plan's currency, e.g. 10.43 for $10.43.

internal_notes
string | null

Private notes visible only to the account owner. Not shown to customers.

legacy_payment_method_controls
boolean | null

Whether this plan uses legacy payment method controls.

metadata
object

Custom key-value pairs to store on the plan. Included in webhook payloads for payment and membership events. Max 50 keys, 100 chars per key, 500 chars per string value.

override_tax_type
string

Override the default tax classification for this specific plan.

payment_method_configuration
object

Explicit payment method configuration for the plan. When not provided, the account's defaults apply.

renewal_price
number | null

The amount charged each billing period for recurring plans, in the plan's currency.

stock
integer | null

The maximum number of units available for purchase. Ignored when unlimited_stock is true.

three_ds_level
enum<string>

3D Secure behavior for this plan. Send null to inherit the account default.

Available options:
mandate_challenge,
frictionless
title
string | null

The display name of the plan shown to customers on the product page.

trial_period_days
integer | null

Free trial duration before the first recurring charge.

unlimited_stock
boolean | null

Whether the plan has unlimited stock. When true, the stock field is ignored.

visibility
string

Whether the plan is visible to customers or hidden from public view.

Response

plan updated

id
string
required

Plan ID, prefixed plan_.

created_at
string
required

When the plan was created, as an ISO 8601 timestamp.

updated_at
string
required

When the plan was last updated, as an ISO 8601 timestamp.

visibility
enum<string>
required

Whether the plan is visible to customers or hidden from public view.

Available options:
visible,
hidden,
archived,
quick_link
Example:

"visible"

plan_type
enum<string>
required

Billing model for this plan: renewal (recurring) or one_time (single payment).

Available options:
renewal,
one_time
Example:

"renewal"

release_method
enum<string>
required

Sales method for this plan, such as buy_now or waitlist.

Available options:
buy_now,
waitlist
Example:

"buy_now"

currency
enum<string>
required

Three-letter ISO currency code for this plan's prices.

Available options:
usd,
sgd,
inr,
aud,
brl,
cad,
dkk,
eur,
nok,
gbp,
sek,
chf,
hkd,
huf,
jpy,
mxn,
myr,
pln,
czk,
nzd,
aed,
eth,
ape,
cop,
ron,
thb,
bgn,
idr,
dop,
php,
try,
krw,
twd,
vnd,
pkr,
clp,
uyu,
ars,
zar,
dzd,
tnd,
mad,
kes,
kwd,
jod,
all,
xcd,
amd,
bsd,
bhd,
bob,
bam,
khr,
crc,
xof,
egp,
etb,
gmd,
ghs,
gtq,
gyd,
ils,
jmd,
mop,
mga,
mur,
mdl,
mnt,
nad,
ngn,
mkd,
omr,
pyg,
pen,
qar,
rwf,
sar,
rsd,
lkr,
tzs,
ttd,
uzs,
rub,
btc,
cny,
usdt,
kzt,
awg,
whop_usd,
xau
Example:

"usd"

account
object
required

Account that sells this plan; null for standalone invoice plans.

product
object
required

Product this plan belongs to; null for standalone plans.

invoice
object
required

Invoice this plan was generated for; null unless created for an invoice.

billing_period
number | null
required

Recurring billing interval in days, such as 30 for monthly or 365 for annual. null for one-time plans.

title
string | null
required

Plan display name shown to customers.

description
string | null
required

Customer-visible plan description.

purchase_url
string
required

URL where customers can purchase this plan directly.

expiration_days
number | null
required

Access duration in days for expiration-based plans.

initial_price
number
required

Initial purchase price in plan currency.

renewal_price
number
required

Recurring price charged every billing period.

trial_period_days
number | null
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.

three_ds_level
enum<string> | null
required

3D Secure behavior for this plan; null inherits account default.

Available options:
mandate_challenge,
frictionless,
null
Example:

"mandate_challenge"

member_count
number | null
required

Active memberships through this plan, when visible to the requester.

internal_notes
string | null
required

Private notes visible only to authorized team members.

metadata
object
required

Custom key-value pairs stored on the plan.

stock
number | null
required

Units available for purchase, when visible to the requester.

unlimited_stock
boolean
required

Whether the plan has unlimited stock.

split_pay_required_payments
number | null
required

Installment payments required before the subscription pauses.

adaptive_pricing_enabled
boolean
required

Whether this plan accepts local currency payments via adaptive pricing.

payment_method_configuration
object
required

Payment method configuration (enabled, disabled, include_platform_defaults); null when plan uses default settings.

tax_type
enum<string>
required

How tax is handled for this plan.

Available options:
inclusive,
exclusive,
unspecified
Example:

"inclusive"

collect_tax
boolean
required

Whether tax is collected on purchases of this plan.

custom_fields
object[]
required