rule: 'per_unit', and provides two mechanisms to keep the seat count accurate: an automatic quantity resolver and a manual update action.
Define a per-seat plan
Add the plan toconfig/subscribd.php. Set rule to 'per_unit' and price to the per-seat amount in minor currency units. Leave the seats feature as null — the quantity field on the subscription drives the bill, not a hard limit.
config/subscribd.php
Auto-sync seat count via a quantity resolver
Register a quantity resolver inAppServiceProvider::boot(). Whenever Subscribd needs the current seat count for the team_monthly plan, it calls this closure and syncs the value to the gateway automatically.
app/Providers/AppServiceProvider.php
Manually push a quantity change
When a member joins or leaves and you need to update the seat count immediately — for example, from an event listener or a controller action — use theUpdateQuantity action:
UpdateQuantity pushes the new quantity to the gateway and updates the local Subscription record. The change takes effect on the next invoice unless your gateway applies proration for mid-cycle quantity increases.When to use per-seat vs flat-rate
| Scenario | Recommended model |
|---|---|
| Every user gets identical access, team size rarely changes | Flat-rate |
| Cost should grow linearly with active members | Per-seat |
| You want to enforce a seat limit and upsell beyond it | Per-seat with entitlement checks |
| Pricing by features consumed, not headcount | Tiered or metered |
You can combine per-seat billing with entitlement checks. Set a numeric
seats value in features to enforce a hard cap, then use Subscribd::entitlements()->for($team)->limitOf('seats') to gate new member invitations.