• Pricing
  • Blog
Log inBook a demo

Plans and features structure

We simplified how plans are created and added feature-availability checks for every customer

G
Guido Irigoyen·@guidooirigoyen·December 11, 2025
Changelog

When we started Commet, we made a few decisions optimized purely for time-to-market.

One of them was our original model: Events → Products → Subscriptions.

It's the default model for classic PSPs (Stripe, Lemon Squeezy, Nuvei, etc.). It makes sense for their era and for the type of customers they were built for.

But it didn't make sense for our users.

Commet powers subscriptions for AI and SaaS tools with usage-based pricing. So we rebuilt the model from the ground up.

(Decker, our CTO, wrote a deep-dive on this change if you want the full reasoning.)

New Entities#

This redesign introduced two entities we didn't have before:

  • Features

  • Plans

Features#

Features are the atomic building blocks of a pricing model. They represent capabilities a user can access:

  • Boolean features: Custom Branding, SSO, API Access

  • Metered features: API Calls, Emails Sent, Storage Used

  • Seat features: Team Members, Admin Users, Editor Seats

Plans#

Plans are reusable bundles of features with a price per billing period. You can assign the same plan to N customers without redefining anything.

A subscription now exists only as the result of assigning a Plan to a Customer.

The new model is: Features → Plans → Subscriptions

Plans and features demonstration

SDK Changes#

Features#

The Feature model lets us:

Check whether a specific user has access to a feature

typescript
const { data } = await commet.features.canUse('team_members', 'user_123')

if (!data.allowed) {
  return { error: 'Upgrade to add more members' }
}

if (data.willBeCharged) {
  // Show overage confirmation
}

Check usage and remaining availability for any metered feature

typescript
const feature = await commet.features.get('team_members', 'user_123')

Subscriptions#

To create a subscription, you now pass the plan code directly into the subscription method.

typescript
const subscription = await commet.subscriptions.create({
  customerId: 'user_123',
  planCode: 'pro',
})

redirect(subscription.data.checkoutUrl)

Next steps#

We can now support our users' pricing models much more effectively.

Plans are easier to create, easier to manage, and scale cleanly as your product grows.

Visit the Create Plans docs to get started, or learn how to configure features.

Subscription billing built for developers and agents

Get startedBook a demo

Accept global payments, handle usage-based pricing, subscriptions, and seats — without building your own infrastructure.

Frameworks

  • Next.js
  • Remix
  • Nuxt
  • SvelteKit
  • Astro
  • Express
  • Hono
  • Django
  • FastAPI

Resources

  • Documentation
  • Guides
  • Blog
  • Templates
  • Changelog
  • Glossary
  • Billing for AI models

Company

  • Solutions
  • About
  • Open Source

Compare

  • Stripe Billing
  • Orb
  • Chargebee
  • Lago
  • Autumn
  • Yuno

AI

  • Commet Agents
  • MCP Server
  • Skills
  • Skills on GitHub
  • Claude Code
  • Codex
  • Cursor
Follow us
© 2026 Commet Co.TermsPrivacy PolicyCookie Policy