seat_quantity attribute interacts with organizations, subscriptions, and webhooks.
The Core Concept
In a seat-based model, you charge your customer a fixed price per seat (e.g., $15/seat/month). In Blink, this is handled dynamically at checkout and throughout the subscription lifecycle using theseat_quantity field.
1. Creating the Product
To support seat-based pricing, create a standard subscription product (e.g., a “Team Plan” for $15/month). You do not need to configure anything special on the product itself; the magic happens when the checkout is generated.2. Initiating Checkout
When a team owner signs up, you generate a checkout session via the API (POST /v1/checkouts) and explicitly pass the starting seat_quantity:
seat_quantity. In this example, the customer will be billed $75/month.
Managing Seats (Proration)
When a customer adds or removes team members in your app, you need to sync the new seat count with their active subscription so Stripe can handle the billing and proration. CallPATCH /v1/subscriptions/{id} with the new seat_quantity:
action: swap is used, Stripe will automatically calculate the prorated amount for the new seat for the remainder of the billing cycle and invoice the customer immediately or on the next cycle, depending on your Stripe settings.
Organizations & Fulfillment
Blink has an internalOrganizations feature that you can use to group customers together.
While Blink handles the billing math (via seat_quantity on the subscription), your app backend is responsible for the access control (e.g., inviting users to the organization and enforcing the seat limit).
- Listen for Webhooks: Listen for the
subscription.updatedwebhook. When theseat_quantitychanges, update the maximum allowed users for that team in your database. - Add Members: Use the
POST /v1/organizations/{id}/membersendpoint to programmatically invite users to the team. - Seat Events: If you are using Blink’s built-in organization invites, Blink will fire
customer.seat_addedandcustomer.seat_removedwebhooks when members accept invites or are removed. You can use these events to trigger provisioning logic in your app.