- 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 products
Create a product for each plan that your app offers. In our example we’ll create a “Free” and “Pro” product.- CLI
- Dashboard
Run the following command in your root directory:This will prompt you to login or create an account, and create an Then, push your changes to Autumn’s sandbox environment.
autumn.config.ts file. Paste in the code below, or view our config schema to build your own.autumn.config.ts
If you already have products created in the dashboard, run
npx atmn pull to
pull them into your local config.2. Setup Autumn
Installautumn-js
If you’re using a separate backend and frontend, make sure to install the
library in both.
.env file. If you’re using the CLI this should already be done for you.
.env
Add Endpoints Server-side
Server-side, mount the Autumn handler. This will create endpoints in the/api/autumn/* path, which will be called by Autumn’s frontend React library. These endpoints in turn call Autumn’s API.
The handler takes in an identify function where you should pass in the user ID or organization ID from your auth provider.
Autumn will automatically create a customer if the customer ID is new.
Add Provider Client-side
Client side, wrap your application with the<AutumnProvider> component.
If your backend is hosted on a separate URL (eg, when using Vite), pass it into the backendUrl prop.
The Provider component can also take in a
getBearerToken function, which should be used
for auth frameworks with separate backend and frontend, eg using Clerk with
Express.This will pass the auth token in the Authorization header from the request to the
backend, which can be used in the autumnHandler identify function.CORS issues? Please reach out and we’ll help
you ASAP. Or try a backend-only setup.
3. Stripe Payments
Callcheckout to redirect the customer to a Stripe checkout page when they want to purchase the Pro plan. Once they’ve paid, Autumn will grant them access to the features we defined.
If their payment details are already on file, CheckoutDialog will open instead to let the customer confirm their upgrade, downgrade or new purchase, then handle the payment.
You can alternatively use our PricingTable
component, or roll your own flows using our API.
React
Make sure you’ve pasted in your Stripe test secret
key
sk_test_... in the Autumn
dashboard.4. Build Pricing Logic
There are 3 key functions you need to handle the billing logic once the customer has purchased the Pro plan:checkfor feature access to see if the customer is allowed to send a message.tracka usage event in Autumncustomerto display usage data in the UI.
Server-side
The server-sidecheck function makes an API call to Autumn’s DB to fetch the latest information.
You should always handle access checks server-side for security.
send-message.ts
Client-side
Thecustomer object is a single state that contains all the billing data for your user (subscription states, feature permissions, usage balances, etc).
Use the client-side check function to gate features and show paywalls. This is determined by reading the local customer state, so no API call is made.
send-message.tsx
- Add Stripe’s billing portal
- Handle failed payments
- Use our UI components to show a pricing table, and handle upgrades, downgrades and paywalls.

