Create a plan

You can now model subscriptions more flexibly using the Prices API. It replaces the Plans API and is backwards compatible to simplify your migration.

Parameters

  • currencyenumRequired

    Three-letter ISO currency code, in lowercase. Must be a supported currency.

  • intervalenumRequired

    Specifies billing frequency. Either day, week, month or year.

    Possible enum values
    day
    month
    week
    year
  • producthashRequired

    The product whose pricing the created plan will represent. This can either be the ID of an existing product, or a dictionary containing fields used to create a service product.

  • activeboolean

    Whether the plan is currently available for new subscriptions. Defaults to true.

  • amountintegerRequired unless billing_scheme=tiered

    A positive integer in cents (or 0 for a free plan) representing how much to charge on a recurring basis.

  • metadatahash

    Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to metadata.

  • nicknamestring

    A brief description of the plan, hidden from customers.

More parameters

  • aggregate_usageenum

  • amount_decimalstring

  • billing_schemeenum

  • idstring

  • interval_countinteger

  • meterstringPreview feature

  • tiersarray of hashesRequired if billing_scheme=tiered

  • tiers_modeenumRequired if billing_scheme=tiered

  • transform_usagehash

  • trial_period_daysinteger

  • usage_typeenum

Returns

Returns the plan object.

POST /v1/plans
Stripe.api_key = 'sk_test_4eC39Hq...arjtT1zdp7dcsk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Plan.create({
amount: 1200,
currency: 'usd',
interval: 'month',
product: 'prod_NjpI7DbZx6AlWQ',
})
Response
{
"id": "plan_NjpIbv3g3ZibnD",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 1200,
"amount_decimal": "1200",
"billing_scheme": "per_unit",
"created": 1681851647,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {},
"nickname": null,
"product": "prod_NjpI7DbZx6AlWQ",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
}

Update a plan

Updates the specified plan by setting the values of the parameters passed. Any parameters not provided are left unchanged. By design, you cannot change a plan’s ID, amount, currency, or billing cycle.

Parameters

  • activeboolean

    Whether the plan is currently available for new subscriptions.

  • metadatahash

    Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to metadata.

  • nicknamestring

    A brief description of the plan, hidden from customers.

More parameters

  • productstring

  • trial_period_daysinteger

Returns

The updated plan object is returned upon success. Otherwise, this call raises an error.

POST /v1/plans/:id
Stripe.api_key = 'sk_test_4eC39Hq...arjtT1zdp7dcsk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Plan.update('plan_NjpIbv3g3ZibnD', {metadata: {order_id: '6735'}})
Response
{
"id": "plan_NjpIbv3g3ZibnD",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 1200,
"amount_decimal": "1200",
"billing_scheme": "per_unit",
"created": 1681851647,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {
"order_id": "6735"
},
"nickname": null,
"product": "prod_NjpI7DbZx6AlWQ",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
}

Retrieve a plan

Retrieves the plan with the given ID.

Parameters

No parameters.

Returns

Returns a plan if a valid plan ID was provided. Raises an error otherwise.

GET /v1/plans/:id
Stripe.api_key = 'sk_test_4eC39Hq...arjtT1zdp7dcsk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Plan.retrieve('plan_NjpIbv3g3ZibnD')
Response
{
"id": "plan_NjpIbv3g3ZibnD",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 1200,
"amount_decimal": "1200",
"billing_scheme": "per_unit",
"created": 1681851647,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {},
"nickname": null,
"product": "prod_NjpI7DbZx6AlWQ",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
}

List all plans

Returns a list of your plans.

Parameters

  • activeboolean

    Only return plans that are active or inactive (e.g., pass false to list all inactive plans).

  • productstring

    Only return plans for the given product.

More parameters

  • createdhash

  • ending_beforestring

  • limitinteger

  • starting_afterstring

Returns

A hash with a data property that contains an array of up to limit plans, starting after plan starting_after. Each entry in the array is a separate plan object. If no more plans are available, the resulting array will be empty.

GET /v1/plans
Stripe.api_key = 'sk_test_4eC39Hq...arjtT1zdp7dcsk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Plan.list({limit: 3})
Response
{
"object": "list",
"url": "/v1/plans",
"has_more": false,
"data": [
{
"id": "plan_NjpIbv3g3ZibnD",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 1200,
"amount_decimal": "1200",
"billing_scheme": "per_unit",
"created": 1681851647,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": false,
"metadata": {},
"nickname": null,
"product": "prod_NjpI7DbZx6AlWQ",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
}
{...}
{...}
],
}

Delete a plan

Deleting plans means new subscribers can’t be added. Existing subscribers aren’t affected.

Parameters

No parameters.

Returns

An object with the deleted plan’s ID and a deleted flag upon success. Otherwise, this call raises an error, such as if the plan has already been deleted.

DELETE /v1/plans/:id
Stripe.api_key = 'sk_test_4eC39Hq...arjtT1zdp7dcsk_test_4eC39HqLyjWDarjtT1zdp7dc'
Stripe::Plan.delete('plan_NjpIbv3g3ZibnD')
Response
{
"id": "plan_NjpIbv3g3ZibnD",
"object": "plan",
"deleted": true
}
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g., )
The Stripe Shell is best experienced on desktop.
$