diff --git a/.changeset/cute-ideas-appear.md b/.changeset/cute-ideas-appear.md
new file mode 100644
index 00000000000..9b1d6379498
--- /dev/null
+++ b/.changeset/cute-ideas-appear.md
@@ -0,0 +1,6 @@
+---
+'@clerk/clerk-js': minor
+'@clerk/shared': minor
+---
+
+Add support for parsing seat-based billing fields from FAPI.
diff --git a/packages/clerk-js/sandbox/scenarios/index.ts b/packages/clerk-js/sandbox/scenarios/index.ts
index 73ddfca0ce6..b232d324123 100644
--- a/packages/clerk-js/sandbox/scenarios/index.ts
+++ b/packages/clerk-js/sandbox/scenarios/index.ts
@@ -1,2 +1,4 @@
export { UserButtonSignedIn } from './user-button-signed-in';
export { CheckoutAccountCredit } from './checkout-account-credit';
+export { OrgProfileSeatLimit } from './org-profile-seat-limit';
+export { PricingTableSBB } from './pricing-table-sbb';
diff --git a/packages/clerk-js/sandbox/scenarios/org-profile-seat-limit.ts b/packages/clerk-js/sandbox/scenarios/org-profile-seat-limit.ts
new file mode 100644
index 00000000000..355fcb19db5
--- /dev/null
+++ b/packages/clerk-js/sandbox/scenarios/org-profile-seat-limit.ts
@@ -0,0 +1,74 @@
+import {
+ BillingService,
+ clerkHandlers,
+ EnvironmentService,
+ SessionService,
+ setClerkState,
+ type MockScenario,
+ UserService,
+ OrganizationService,
+} from '@clerk/msw';
+
+export function OrgProfileSeatLimit(): MockScenario {
+ const organization = OrganizationService.create({ maxAllowedMemberships: 10 });
+ const user = UserService.create();
+ user.organizationMemberships = [
+ {
+ object: 'organization_membership',
+ id: 'orgmem_3004mVaZrB4yD63C9KuwTMWNKbj',
+ public_metadata: {},
+ role: 'org:owner',
+ role_name: 'Owner',
+ permissions: [
+ 'org:applications:create',
+ 'org:applications:manage',
+ 'org:applications:delete',
+ 'org:billing:read',
+ 'org:billing:manage',
+ 'org:config:read',
+ 'org:config:manage',
+ 'org:global:read',
+ 'org:global:manage',
+ 'org:instances:create',
+ 'org:instances:manage',
+ 'org:instances:delete',
+ 'org:restrictions:read',
+ 'org:restrictions:manage',
+ 'org:secrets:manage',
+ 'org:users:imp',
+ 'org:sys_profile:manage',
+ 'org:sys_profile:delete',
+ 'org:sys_billing:read',
+ 'org:sys_billing:manage',
+ 'org:sys_domains:read',
+ 'org:sys_domains:manage',
+ 'org:sys_memberships:read',
+ 'org:sys_memberships:manage',
+ ],
+ created_at: 1752751315275,
+ updated_at: 1752751315275,
+ organization,
+ },
+ ];
+ const session = SessionService.create(user);
+ const plans = BillingService.createDefaultPlans();
+ const subscription = BillingService.createSubscription(plans[1]);
+
+ setClerkState({
+ environment: EnvironmentService.MULTI_SESSION,
+ session,
+ user,
+ organization,
+ billing: {
+ plans,
+ subscription,
+ },
+ });
+
+ return {
+ description: 'OrganizationProfile with a seat limit',
+ handlers: clerkHandlers,
+ initialState: { session, user, organization },
+ name: 'org-profile-seat-limit',
+ };
+}
diff --git a/packages/clerk-js/sandbox/scenarios/pricing-table-sbb.ts b/packages/clerk-js/sandbox/scenarios/pricing-table-sbb.ts
new file mode 100644
index 00000000000..295b1b3a983
--- /dev/null
+++ b/packages/clerk-js/sandbox/scenarios/pricing-table-sbb.ts
@@ -0,0 +1,371 @@
+import {
+ clerkHandlers,
+ http,
+ HttpResponse,
+ EnvironmentService,
+ SessionService,
+ setClerkState,
+ type MockScenario,
+ UserService,
+} from '@clerk/msw';
+import type { BillingPlanJSON } from '@clerk/shared/types';
+
+export function PricingTableSBB(): MockScenario {
+ const user = UserService.create();
+ const session = SessionService.create(user);
+ const money = (amount: number) => ({
+ amount,
+ amount_formatted: (amount / 100).toFixed(2),
+ currency: 'USD',
+ currency_symbol: '$',
+ });
+ const mockFeatures = [
+ {
+ object: 'feature' as const,
+ id: 'feature_custom_domains',
+ name: 'Custom domains',
+ description: 'Connect and manage branded domains.',
+ slug: 'custom-domains',
+ avatar_url: null,
+ },
+ {
+ object: 'feature' as const,
+ id: 'feature_saml_sso',
+ name: 'SAML SSO',
+ description: 'Single sign-on with enterprise identity providers.',
+ slug: 'saml-sso',
+ avatar_url: null,
+ },
+ {
+ object: 'feature' as const,
+ id: 'feature_audit_logs',
+ name: 'Audit logs',
+ description: 'Track account activity and security events.',
+ slug: 'audit-logs',
+ avatar_url: null,
+ },
+ {
+ object: 'feature' as const,
+ id: 'feature_priority_support',
+ name: 'Priority support',
+ description: 'Faster response times from the support team.',
+ slug: 'priority-support',
+ avatar_url: null,
+ },
+ {
+ object: 'feature' as const,
+ id: 'feature_rate_limit_boost',
+ name: 'Rate limit boost',
+ description: 'Higher API request thresholds for production traffic.',
+ slug: 'rate-limit-boost',
+ avatar_url: null,
+ },
+ ];
+
+ setClerkState({
+ environment: EnvironmentService.MULTI_SESSION,
+ session,
+ user,
+ });
+
+ const subscriptionHandler = http.get('https://*.clerk.accounts.dev/v1/me/billing/subscription', () => {
+ return HttpResponse.json({
+ response: {
+ data: {},
+ },
+ });
+ });
+
+ const paymentMethodsHandler = http.get('https://*.clerk.accounts.dev/v1/me/billing/payment_methods', () => {
+ return HttpResponse.json({
+ response: {
+ data: {},
+ },
+ });
+ });
+
+ const plansHandler = http.get('https://*.clerk.accounts.dev/v1/billing/plans', () => {
+ return HttpResponse.json({
+ data: [
+ {
+ object: 'commerce_plan',
+ id: 'plan_a_sbb',
+ name: 'Plan A',
+ fee: money(12989),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: true,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-a-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_a_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: 5,
+ fee_per_block: money(0),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_b_sbb',
+ name: 'Plan B',
+ fee: money(12989),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: true,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-b-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_b_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: null,
+ fee_per_block: money(1200),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_c_sbb',
+ name: 'Plan C',
+ fee: money(0),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: false,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-c-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_c_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: null,
+ fee_per_block: money(1200),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_d_sbb',
+ name: 'Plan D',
+ fee: money(12989),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: true,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-d-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_d_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: 5,
+ fee_per_block: money(0),
+ },
+ {
+ id: 'tier_plan_d_seats_2',
+ object: 'commerce_unit_price',
+ starts_at_block: 6,
+ ends_after_block: null,
+ fee_per_block: money(1200),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_e_sbb',
+ name: 'Plan E',
+ fee: money(12989),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: true,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-e-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_f_sbb',
+ name: 'Plan F',
+ fee: money(0),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: true,
+ is_recurring: true,
+ has_base_fee: false,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-f-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_f_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: 5,
+ fee_per_block: money(0),
+ },
+ {
+ id: 'tier_plan_f_seats_2',
+ object: 'commerce_unit_price',
+ starts_at_block: 6,
+ ends_after_block: null,
+ fee_per_block: money(1200),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_g_sbb',
+ name: 'Plan G',
+ fee: money(0),
+ annual_fee: null,
+ annual_monthly_fee: null,
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: false,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-g-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_g_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: null,
+ fee_per_block: money(0),
+ },
+ ],
+ },
+ ],
+ },
+ {
+ object: 'commerce_plan',
+ id: 'plan_h_sbb',
+ name: 'Plan H',
+ fee: money(12989),
+ annual_fee: money(10000),
+ annual_monthly_fee: money(833),
+ description: null,
+ is_default: false,
+ is_recurring: true,
+ has_base_fee: true,
+ for_payer_type: 'org',
+ publicly_visible: true,
+ slug: 'plan-h-sbb',
+ avatar_url: null,
+ features: mockFeatures,
+ free_trial_enabled: false,
+ free_trial_days: null,
+ unit_prices: [
+ {
+ name: 'seat',
+ block_size: 1,
+ tiers: [
+ {
+ id: 'tier_plan_h_seats_1',
+ object: 'commerce_unit_price',
+ starts_at_block: 1,
+ ends_after_block: null,
+ fee_per_block: money(0),
+ },
+ ],
+ },
+ ],
+ },
+ ] as BillingPlanJSON[],
+ });
+ });
+
+ return {
+ description: 'PricingTable with seat-based billing plans',
+ handlers: [plansHandler, subscriptionHandler, paymentMethodsHandler, ...clerkHandlers],
+ initialState: { session, user },
+ name: 'pricing-table-sbb',
+ };
+}
diff --git a/packages/clerk-js/sandbox/template.html b/packages/clerk-js/sandbox/template.html
index d8ff8041392..85c47b3503f 100644
--- a/packages/clerk-js/sandbox/template.html
+++ b/packages/clerk-js/sandbox/template.html
@@ -372,7 +372,7 @@