Skip to main content
POST
Change subscription version
Move a subscription to a newer published version of its plan, now or at the end of the period, without proration; an older version is rejected with version_not_newer, and a subscription on a running experiment moves only to a later version of that experiment. The subscription keeps its currency and its price: a destination that does not sell its currency is rejected with missing_regional_price, and one that does not sell the price it pays with price_not_found. A free version moves only to a free version and a paid one only to a paid version; any other destination is rejected with validation_error. A subscription whose usage does not fit the destination, or with an active add-on the destination does not sell, is not moved either, and the error says why. Each change is recorded as a move of this one subscription in the plan’s moves. Repeating the same request changes nothing; a new one replaces the pending move. With effective: "now", features, limits and the included credits or balance change at once and the new price is charged from the next renewal. With effective: "period_end", nothing changes before the next renewal, everything changes at it, and the subscription shows the pending move in scheduledVersionChange. A trialing subscription moves when its trial ends, and a past-due one at the end of the period it is paying for once it pays. A subscription that ends or changes to another plan first never moves. A one-time subscription never renews, so period_end returns 409 invalid_subscription_status; move it with now. subscription.version_changed fires when the move takes effect.

Authorizations

x-api-key
string
header
required

Headers

Idempotency-Key
string

Unique key used to safely retry this write for 24 hours without applying it twice.

Required string length: 1 - 200
Commet-Version
string
default:2026-08-27

API version used by this reference. Send this header to select this contract explicitly.

Path Parameters

id
string
required

Body

application/json
planVersionId
string
required

A published version of the subscription's plan.

effective
enum<string>
required

now changes features, limits and the included credits or balance at once (the included difference is added to or subtracted from the plan credits or plan balance: an increase first pays any plan-part debt, a decrease never creates new debt, and purchased credits and purchased balance are untouched) and charges the new price from the next renewal. period_end changes everything at the next renewal. There is never a proration charge or refund.

Available options:
now,
period_end

Response

Success

id
string
required
customerId
string
required
plan
object
required
name
string
required
description
string | null
required
status
enum<string>
required
Available options:
draft,
pending_payment,
trialing,
active,
past_due,
paused,
canceled
billingInterval
enum<string> | null
required
Available options:
weekly,
monthly,
quarterly,
semiannual,
yearly,
one_time
trialEndsAt
string<date-time> | null
required
currentPeriod
object | null
required
cancellation
object | null
required
cancelAtPeriodEnd
boolean
required
scheduledPlanChange
object | null
required
startDate
string<date-time>
required
endDate
string<date-time> | null
required
billingDayOfMonth
integer | null
required
Required range: -9007199254740991 <= x <= 9007199254740991
nextBillingDate
string<date-time> | null
required
checkoutUrl
string | null
required
hasPaymentMethod
boolean
required

Whether Commet can charge this subscription on its own at its next charge (the trial end or the renewal). A trial that started without a payment method reports false until the customer adds one for this subscription; a payment method saved for another subscription does not count. A subscription on a free plan reports false.

createdAt
string<date-time>
required
updatedAt
string<date-time>
required
planVersion
object | null
required

The plan version whose terms the subscription has now. It keeps paying and receiving everything from this version until it is moved.

offerApplications
object[]
required
pause
object
required
scheduledVersionChange
object | null
required

A move to another version of the plan pending for the next renewal.

consumptionModel
enum<string> | null
required
Available options:
metered,
credits,
balance
features
object[]
required
credits
object | null
required
balance
object | null
required
priceId
string | null
required
object
string
required
Allowed value: "subscription"
livemode
boolean
required
planGrant
object