SubscriptionPlans
SubscriptionPlans define the recurring pricing you offer to your customers. Each plan specifies an amount, a currency, and a billing frequency. A plan is then attached to one or more Subscriptions to trigger automatic charges.
Typical use cases: monthly SaaS subscription, annual plan with a discount, quarterly offer with a free trial period.
A plan’s amount (amount) cannot be modified after creation.
To change the price, create a new plan and migrate your subscribers via PATCH /subscriptions/{id}/.
Only name and description can be modified via PATCH.
Endpoints
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /subscription-plans/ | Create a plan |
| GET | /subscription-plans/ | List plans |
| GET | /subscription-plans/{id}/ | Retrieve a plan |
| PATCH | /subscription-plans/{id}/ | Update (name and description only) |
| DELETE | /subscription-plans/{id}/ | Deactivate (not possible with active subscribers) |
Object schema
Create a SubscriptionPlan
Creates a new pricing plan. The plan is immediately available to be attached to a Subscription.
nameRequisName of the plan. Visible to the customer on payment pages, invoices, and renewal emails.
Choose a clear name that reflects the value offered — it appears directly in communications sent to your subscribers.
amountRequisAmount charged at each billing period, in cents. This field is immutable after creation.
Always express in cents. 15,000 XAF = 15000. For decimal
currencies (EUR, USD), 15 EUR = 1500. To change a price,
create a new plan and migrate your subscribers.
currencyRequisISO 4217 currency code for the plan. Must match a currency enabled on your App. Immutable after creation.
intervalRequisUnit of the billing period. Values: day,
week, month, year.
Combined with interval_count, this field defines the exact billing
frequency. Examples: interval: “month” +
interval_count: 3 = quarterly billing;
interval: “year” + interval_count: 1 = annual
billing.
interval_countOptionnelMultiplier for the interval. Determines the actual billing frequency in
combination with interval.
En savoir plus
Examples: interval: “month”, interval_count: 1 → monthly;
interval: “month”, interval_count: 3 → quarterly;
interval: “month”, interval_count: 6 → semi-annual.
trial_period_daysOptionnelLength of the free trial period, in days. During this period, no
charge is made. The Subscription moves to
trialing status until the trial ends.
En savoir plus
This field sets the plan’s default trial period. It can be overridden
per subscriber by passing trial_period_days directly when
creating the Subscription.
descriptionOptionnelDescription of the plan. Displayed on the plan selection page and in welcome emails.
metadataOptionnelFree-form data — internal identifier, pricing tier, CRM reference, etc.
En savoir plus
The plan’s metadata is included in the
subscription.created and subscription.canceled webhooks. Useful
for identifying the tier during automatic access provisioning.
Create a monthly plan with a trial
List SubscriptionPlans
Returns all of your App’s plans, sorted by descending creation date.
activeOptionnelFilter by status. true returns only active plans,
false returns deactivated plans.
currencyOptionnelFilter by currency. Useful if you offer plans in multiple currencies.
intervalOptionnelFilter by billing interval: day, week,
month, or year.
pageOptionnelpage_sizeOptionnelUpdate a SubscriptionPlan
Only name and description can be modified after
creation. amount, currency, interval
and interval_count are immutable.
nameOptionnelNew name for the plan. Reflected in future renewal emails.
descriptionOptionnelNew description. Pass null to remove it.
metadataOptionnelDeactivate a SubscriptionPlan
Deactivates the plan by setting active to false. A
deactivated plan can no longer be attached to new Subscriptions, but
existing subscriptions continue to work normally.
Deactivation fails with a 409 Conflict error if the plan
still has Subscriptions
in active or trialing status. Migrate your subscribers
to a new plan first before deactivating the old one.