Skip to main content
This guide walks you through implementing seat-based pricing for team products, from creating the product to handling seat assignments and claims.

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_enabled feature flag
  • Polar SDK installed (npm install @polar-sh/sdk or pip 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
Seat-based pricing is currently in private beta. To enable the seat_based_pricing_enabled feature flag for your organization, please contact our support team.

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 × 9=9 = 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.
You can also create seat-based products via API: Subscription example:
One-time purchase example:

Step 2: Implement checkout flow

Create a checkout session that allows customers to select seat quantity:
The checkout displays:
  • 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 9/seatprice,totaling9/seat price, totaling 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:
Example UI component (React):

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:
Example claim page (React):

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:
Revoking a seat immediately removes access but does not issue a refund. The billing manager continues to pay for all purchased seats.

Step 8: Handle scaling

For subscriptions, allow billing managers to add or reduce seats:
For one-time purchases, customers buy additional seats via new orders:
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 for benefit_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. Invitation tokens expire after 24 hours. Have the billing manager resend the invitation:

Next Steps

Need Help?

Join our Discord community or contact support for assistance with seat-based pricing implementation.