What you’ll build
By the end of this guide, you’ll have:- A seat-based product with tiered pricing (subscription or one-time)
- Checkout flow for purchasing seats
- Seat assignment and management interface
- Claim flow for team members
This guide covers both subscription-based and one-time purchase seat-based products. The implementation is similar for both, with key differences in scaling and billing.
Prerequisites
- Polar organization with
seat_based_pricing_enabledfeature flag - Polar SDK installed (
npm install @polar-sh/sdkorpip install polar-sdk)- Important: Seat-based pricing requires the latest version of the SDK. Make sure to update to the latest version to access all seat-based pricing features.
- Basic understanding of Polar products and subscriptions
Step 1: Create a seat-based product
1
Navigate to Products
In the Polar dashboard, go to Products and click Create Product.
2
Configure basic settings
Set your product name, description, and media. For example:
- Subscription: Team Pro Plan - Professional features for your entire team
- One-time: Enterprise License Pack - Perpetual team licenses
3
Select seat-based pricing
Under Pricing:
- Product type: Choose Subscription for recurring billing or One-time for perpetual licenses
- Billing cycle (subscriptions only): Monthly or Yearly
- Pricing type: Seat-based
- Min seats: 1 (or your minimum team size)
4
Configure pricing tiers
Define your volume-based pricing:
Example: A team purchasing 6 seats pays 6 × 54/month.
5
Add benefits
Configure benefits that seat holders will receive:
- License Keys
- File Downloads
- Discord roles
- Custom benefits
Benefits are granted when seats are claimed, not at purchase time.
Step 2: Implement checkout flow
Create a checkout session that allows customers to select seat quantity:- Price per seat based on quantity
- Total amount
- Clear indication this is for team access
The checkout automatically calculates pricing based on your tiers. A customer selecting 5 seats will see the 45.
Step 3: Handle post-purchase webhook
Listen for purchase webhooks to know when a customer buys seats:Step 4: Build seat management interface
Create an interface for billing managers to assign seats:Step 5: Implement seat claim flow
When a team member receives an invitation email, they’ll click a link with the invitation token. Build a claim page:Step 6: Handle benefit granting
After a seat is claimed, benefits are granted automatically via background jobs. Listen for webhooks to track this:Step 7: Implement seat revocation
Allow billing managers to revoke seats:Step 8: Handle scaling
For subscriptions, allow billing managers to add or reduce seats:For one-time purchases, each order has its own independent seat pool. Customers can purchase additional seats anytime by creating a new order. All seats remain perpetual.
Best Practices
1. Validate seat availability
Always check available seats before showing the assignment form:2. Use metadata effectively
Store useful context in seat metadata:3. Handle expired tokens gracefully
4. Track utilization
Monitor seat usage to identify upsell opportunities:5. Clear communication
Make it clear to billing managers that:- They won’t receive direct access to benefits
- Seats must be assigned to team members
- Revocation doesn’t refund costs
- For subscriptions: Reducing seats requires revoking claims first
- For one-time purchases: Seats are perpetual and non-refundable
Common Patterns
Bulk seat assignment
Syncing with your user system
Custom portal integration
Troubleshooting
Seats not appearing
Ensure the feature flag is enabled:Benefits not granted after claim
Check webhook logs forbenefit_grant.created events. Benefits are granted asynchronously via background jobs.
Cannot reduce seats
Make sure to revoke seats before reducing the subscription seat count. You cannot reduce below the currently claimed count.Claim link expired
Invitation tokens expire after 24 hours. Have the billing manager resend the invitation:Next Steps
- Review the Seat-Based Pricing Feature Documentation
- Explore the Customer Seats API Reference
- Set up webhook handlers for real-time updates
- Learn about Customer Portal customization

