Skip to main content
In this example we’ll create the pricing for a premium AI chatbot. We’re going to have:
  • A Free plan that gives users 5 chat messages per month for free
  • A Pro plan that gives users 100 chat messages per month for $20 per month.
1

Create your pricing plans

Create a plan for each tier that your app offers. In our example we’ll create a “Free” and “Pro” plan.
Browse our Examples for guides on setting up credit systems, top ups and other common pricing models.
Create your Autumn account, and the Free and Pro plans in the Plans tab.
  • On the Plans page, click Create Plan.
  • Name the plan (eg, “Free”) and select plan type Free
  • Toggle the auto-enable flag, so that the plan is assigned whenever customers are created
  • In the plan editor, click Add Feature to Plan, and create a Metered, Consumable feature for “messages”
  • Configure the plan to grant 5 messages, and set the interval to per month
  • Click Save

Your Free plan should look like this

  • On the Plans page, click Create Plan.
  • Name the plan (eg, “Pro”) and select plan type Paid, Recurring, and set the price to $20 per month
  • In the plan editor, click Add Feature to Plan, and add the messages feature that you created in the Free plan
  • Configure the plan to grant 100 messages, and set the interval to per month
  • Click Save

Your Pro plan should look like this

2

Installation

Create an Autumn Secret key, and paste it in your .env variables. Then, install the Autumn SDK.
.env
AUTUMN_SECRET_KEY=am_sk_test_42424242...
bun add autumn-js
3

Create an Autumn customer

When the customer signs up, create an Autumn customer for them. Autumn will automatically enable the Free plan, since you marked it with the auto-enable flag.
import { Autumn } from "autumn-js";

const autumn = new Autumn({
	secretKey: 'am_sk_42424242',
});

const customer = await autumn.customers.getOrCreate({
	customerId: "user_or_org_id_from_auth",
	name: "John Doe",
	email: "john@example.com",
});
Autumn’s customer ID is the same as your internal user or org ID generated from your auth provider, so you can use the same ID for everything.
In the Autumn dashboard, you will see your user under the customers page.
4

Stripe Payment Flow

Call billing.attach to attach the Pro plan to the customer. Redirect the customer to the returned paymentUrl to complete payment or confirm the plan change.
import { Autumn } from "autumn-js";

const autumn = new Autumn({ 
  secretKey: 'am_sk_42424242' 
});

const response = await autumn.billing.attach({
  customerId: "user_or_org_id_from_auth",
  planId: "pro",
});

// Redirect customer to complete payment or confirm plan change
redirect(response.paymentUrl);
Use Stripe’s test card 4242 4242 4242 4242 to make a purchase in sandbox. You can enter any Expiry and CVV.
This can be used for any plan changes scenario (upgrades, downgrades, one-time topups, renewals, etc).Upgrades will happen immediately, and downgrades will be scheduled for the next billing cycle.
Default behavior: For new subscriptions, paymentUrl points to Stripe Checkout. For plan changes (upgrades/downgrades), it points to Autumn Checkout where customers can review prorations before confirming.Build your own UI: If you want to handle the checkout for plan changes yourself:
  1. Call previewAttach to get line items and pricing details
  2. Call attach with redirectMode: "if_required" — this charges the customer automatically if they have a payment method on file
Next: Track and limit usage Now that the plan is enabled and you’ve handled payments, you can now make sure that customers have the correct access and limits based on their plan.

Track and limit usage

Enforce usage limits and feature permissions using Autumn’s check and track functions