Basic pricing page
ThePricingTable component fetches your products and renders a complete pricing page. No configuration needed.
- All your active products displayed as pricing cards
- Feature comparison across plans
- Monthly/yearly interval toggle
- “Current Plan” badge for subscribed users
- Upgrade/downgrade buttons
- Built-in checkout modal when a plan is selected
Customization
Show specific plans only
Filter which products appear usingplanIds:
Set the default billing interval
Add a title and description
Compact mode
For embedding in sidebars or smaller spaces:Custom footer text
null to remove the default footer entirely:
Prefill customer info
Skip the email step in checkout by passing customer data:Handle plan selection
Built-in checkout (default)
When a customer selects a plan, the checkout modal opens automatically. Handle success withonPlanChanged:
Custom selection handler
If you want full control over what happens when a plan is clicked:When
onSelectPlan is set, the built-in checkout modal won’t open. You handle the flow yourself.Props reference
| Prop | Type | Default | Description |
|---|---|---|---|
planIds | string[] | All products | Filter which products to show |
showIntervalToggle | boolean | true | Show monthly/yearly toggle |
defaultInterval | "month" | "year" | "month" | Default billing interval |
onSelectPlan | (priceId: string) => void | — | Custom handler for plan selection |
onPlanChanged | (subscription: any) => void | — | Called after successful checkout |
title | string | — | Heading above the pricing table |
description | string | — | Subheading below the title |
customer | { email?, name? } | — | Prefill customer info in checkout |
footerText | string | null | — | Custom footer text (null to remove) |
compact | boolean | false | Compact layout for smaller spaces |