Skip to main content
POST
cURL
Create a new plan with optional consumption model, visibility, and plan group assignment.

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.

Body

application/json
name
string
required
Minimum string length: 1
code
string
required
Minimum string length: 1
Pattern: ^[a-z0-9_]+$
description
string
consumptionModel
enum<string>
Available options:
metered,
credits,
balance
isPublic
boolean
isFree
boolean
blockOnExhaustion
boolean

Credits and balance plans. Omitted, credits plans and free plans stop usage when the plan and purchased amounts run out, and paid balance plans bill the missing balance as overage. A new credits plan always stops usage: it allows overage only with a price per credit, which is set after creation, and then PATCH /v1/plans/{id} turns overage on.

unusedPlanCredits
object

Credits plans only. What happens to unused plan credits at each reset; omitted means they expire.

planCreditLimit
object | null

Credits plans only. The most plan credits a subscription spends per day or per week; omitted or null means no limit.

unusedPlanBalance
object

Balance plans only. What happens to unused plan balance at each reset; omitted means it expires.

planBalanceLimit
object | null

Balance plans only. The most plan balance a subscription spends per day or per week, in USD cents; omitted or null means no limit.

planGroupId
string
isDefault
boolean

Make this plan the default plan of its plan group: customers created with that planGroupId start on it, and a paid plan of the group that ends from the customer portal, a revoked payment authorization or exhausted dunning moves to it instead of canceling. Requires a free plan with a planGroupId; replaces the group's previous default plan.

metadata
object

Response

Success

id
string
required
name
string
required
code
string
required
description
string | null
required
consumptionModel
enum<string> | null
required
Available options:
metered,
credits,
balance
isPublic
boolean
required
isDefault
boolean
required
isFree
boolean
required
blockOnExhaustion
boolean | null
required

Credits and balance plans: true stops usage when the plan and purchased amounts run out; false lets usage continue and bills the missing amount as overage at the next renewal (credits at the price per credit). Trials and free plans always stop.

unusedPlanCredits
object
required

Credits plans only; null for other consumption models. What happens to unused plan credits at each reset. Purchased credits never expire and never count toward maxPlanCredits.

planCreditLimit
object | null
required

Credits plans only. The most plan credits a subscription spends per day or per week; null means no limit.

unusedPlanBalance
object
required

Balance plans only; null for other consumption models. What happens to unused plan balance at each reset. Purchased balance never expires and never counts toward maxPlanBalance.

planBalanceLimit
object | null
required

Balance plans only. The most plan balance a subscription spends per day or per week, in USD cents; null means no limit.

sortOrder
integer
required
Required range: -9007199254740991 <= x <= 9007199254740991
planGroupId
string | null
required
metadata
object | null
required
createdAt
string<date-time>
required
updatedAt
string<date-time>
required
features
object[]
required
prices
object[]
required
exchangeRates
object[]
required
countries
object[]
required

Countries with their own currency or prices in the current version. Buyers from any other country pay the USD prices.

object
string
required
Allowed value: "plan"
livemode
boolean
required