Seat-based pricing is ideal for:
- Team subscriptions where one billing manager pays for multiple users
- Perpetual team licenses with one-time payment
- Organizational licenses with per-seat pricing
- Products with volume-based tiering (e.g., $10/seat for 1-4 seats, $9/seat for 5+)
Feature Flag
Seat-based pricing is controlled by a feature flag at the organization level. You can enable this feature on the organization settings page.How it works
With seat-based pricing, a billing manager purchases a product (subscription or one-time) with a specific number of seats. They can then:- Assign seats to team members via email or external customer ID
- Manage seats by resending invitations or revoking access
- Scale up by purchasing additional seats (or a new order for one-time products)
- Track usage by viewing which seats are claimed, pending, or available
Subscriptions vs One-Time Purchases
Seat-based pricing works for both recurring subscriptions and one-time purchases:| Feature | Subscriptions | One-Time Purchases |
|---|---|---|
| Payment | Recurring (monthly/yearly) | Single payment |
| Seat Duration | Active while subscribed | Perpetual (never expire) |
| Adding Seats | Modify subscription | Purchase new order |
| Billing | Renews automatically | No renewals |
| Benefits | While subscription active | Forever after claim |
Use subscriptions for ongoing team access. Use one-time purchases for perpetual team licenses.
Creating a seat-based product
1
Create a new product
From your dashboard, navigate to Products and click Create Product.
2
Configure basic settings
Set your product name, description, and media as usual.
3
Select seat-based pricing
Under Pricing, select:
- Product type: Subscription or One-time
- Billing cycle (subscriptions only): Monthly or Yearly
- Pricing type: Seat-based
4
Configure seat tiers
Define your pricing tiers based on seat quantity:
- Min seats: Minimum number of seats required to purchase
- Tiers: For each tier, set:
- Max seats: Upper limit for this tier (leave empty for unlimited)
- Price per seat: Amount charged per seat in this tier (in cents)
- 1-4 seats: $10/seat per month
- 5-9 seats: $9/seat per month
- 10+ seats: $8/seat per month
5
Add benefits
Configure the benefits that seat holders will receive. These are only granted when a seat is claimed, not when purchased.
Unlike standard subscriptions, seat-based products do not grant benefits to the billing manager. Benefits are only granted to team members who claim their assigned seats.
Purchasing seats
When a customer purchases a seat-based product, they specify how many seats they want during checkout. The total amount is calculated based on your tiered pricing. The checkout experience clearly shows:- Number of seats being purchased
- Price per seat based on volume
- Total amount
- For subscriptions: recurring billing cycle
- For one-time: perpetual access indication
For one-time purchases, each order is independent. If customers want more seats later, they purchase a new order with its own seat pool. All purchased seats remain perpetual.
Managing seats
Assigning seats
Billing managers can assign seats through:- Customer Portal: Accessible via the customer portal with billing manager permissions
- API: Programmatically assign seats using the Customer Seats API
- Subscription ID (for subscriptions) or Order ID (for one-time purchases)
- Email address (creates a new customer if needed)
- External customer ID (optional, for syncing with your system)
- Customer ID (if customer already exists in Polar)
- Metadata (optional, up to 10 keys for custom data like role, department)
Seat statuses
Each seat can have one of three statuses:- Pending: Seat assigned, invitation sent, awaiting claim
- Claimed: Seat claimed by team member, benefits granted
- Revoked: Seat revoked, benefits removed, can be reassigned
Resending invitations
For pending seats, billing managers can resend the invitation email if it was lost or expired.Revoking seats
Billing managers can revoke a claimed seat at any time:- Benefits are immediately removed from the seat holder
- The seat becomes available for reassignment
- The seat holder loses access to all product benefits
- The revoked seat can be assigned to a different team member
Revoking a seat does not issue a refund. The billing manager continues to pay for the total number of seats in their subscription.
Claiming seats
When a team member receives a seat invitation:- They click the claim link in the email
- A claim page displays the product details and organization info
- They click Claim Seat to accept
- Benefits are automatically granted
- They receive a customer session token for immediate portal access
- They can access their benefits through the customer portal
Claim links are single-use and expire after 24 hours for security. If expired, the billing manager can resend the invitation.
Scaling seats
Adding seats
For subscriptions: Billing managers can upgrade their subscription to add more seats:- The new seat count is applied immediately
- Prorated charges are calculated for the current billing period
- Future renewals bill at the new seat count
- New seats can be assigned right away
- Create a new checkout for the same product with desired seat quantity
- Once paid, a new independent order is created
- Each order has its own seat pool
- All seats remain perpetual across all orders
Reducing seats
For subscriptions: To reduce seats, the billing manager should:- Revoke seats until the desired count is reached
- Update the subscription to reflect the lower seat count
- The change takes effect at the next renewal
You cannot reduce subscription seats below the number of currently claimed seats. Revoke seats first before reducing the subscription seat count.
- Revoke unwanted seats to make them unassigned
- The seats remain available for future assignment
- No refund is issued for revoked seats
API Integration
Seat-based pricing provides full API support for:- Creating seat-based products with tiered pricing
- Checking out with seat quantities
- Assigning seats programmatically
- Listing seats and their statuses
- Revoking seats
SDK Version RequirementTo use seat-based pricing features, ensure you have the latest version of the Polar SDK installed:
- TypeScript/JavaScript:
npm install @polar-sh/sdk@latest - Python:
pip install --upgrade polar-sdk
Example: Assign a seat (subscription)
Example: Assign a seat (one-time purchase)
Example: List seats for subscription
Example: List seats for order
Webhooks
Seat-based pricing triggers webhooks for both subscriptions and orders: Subscription events:subscription.created- When seat-based subscription is purchasedsubscription.updated- When seat count changessubscription.canceled- When subscription is cancelled
order.created- When seat-based one-time purchase is completedorder.updated- When order is updated
benefit_grant.created- When a seat is claimed and benefits grantedbenefit_grant.revoked- When a seat is revoked and benefits removed
For both subscriptions and one-time purchases,
benefit_grant.created events are triggered per seat claim, not at purchase time.Best Practices
Use tiered pricing strategically
Structure your tiers to incentivize volume:- Lower per-seat prices as quantity increases
- Create tiers at natural team sizes (5, 10, 25, etc.)
- Consider flat pricing for very large teams
Leverage metadata
Use seat metadata to store:- Team member roles
- Departments or cost centers
Monitor seat utilization
Track how many purchased seats are actually claimed to identify:- Organizations that may need more seats
- Unused capacity that could be reduced
- Patterns in team adoption
Communicate clearly
Ensure product pages clearly explain:- The billing manager will not get direct access
- Seats must be assigned to team members
- Pricing structure and volume discounts
- Seat assignment and claiming process
Limitations
- Seats must be assigned individually (no bulk import via dashboard, use API instead)
- Claim links expire after 24 hours
- Billing manager does not receive product benefits
- Maximum of 1,000 seats per subscription
- Metadata limited to 10 keys and 1KB total size per seat
- Usage-based pricing with shared emails: If you sell to multiple businesses and different businesses assign seats to the same email address (e.g., “john@gmail.com”), and usage-based pricing is enabled, separate meters should be created for each business to properly segregate usage. This is a rare scenario since employees from different businesses typically don’t share the same email address.

