Skip to content
  • Billing
  • Billing user experience

Pricing table display defaults

The pricing table that is displayed in a particular flow depends on the default plan groups and pricing table order.

B2C (User-based)

Link to this section

A pricing table is shown when:

  • A new user registers
  • An existing user, marked as a billing customer, signs in but isn’t on a plan yet

B2B (Org-based)

Link to this section

A pricing table is shown when:

  • A new organization registers (is_create_org=true parameter) and the user creating the organization is automatically assigned a role with the org:write:billing system permission (via the role’s Assign to the creator setting)
  • An existing org member with the org:write:billing system permission signs in and the organization is already a billing customer, but is not on a plan yet

B2B2C (Platforms - uses both)

Link to this section
  • Organization plan selection = B2B logic
  • User plan selection = B2C logic

Here’s a video showing the user experience for billing

Link to this section

Trial period badges

Link to this section

Plans that have a trial period enabled display a “Free trial for N day(s)” badge on the plan card in the pricing table. This badge is shown automatically — no additional configuration is needed. It helps customers identify which plans offer a risk-free trial before committing to a paid subscription.

Override the default plan display

Link to this section

You can override which plan or pricing table is shown using URL parameters. See: Update code and URLs for billing.

Summary of display for plan groups

Link to this section
ModelPlan groupPricing table is shown whenRequired role / permission
B2CUser plan groupNew user registers, or an existing billing customer signs in without an active planGranted automatically to the signing-up user
B2BOrg plan groupNew org registers (is_create_org=true), or an org member signs in when the org is a billing customer without an active planUser must have a role with org:write:billing (for is_create_org=true, enable Assign to the creator on that role)
B2B2CBothDepends on flow context (is_create_org=true uses Org plan group; standard sign-up uses User plan group)B2B flows require org:write:billing on the creator role

Troubleshooting: Pricing table not shown during sign-up

Link to this section

If a user completes sign-up (for example, after setting their password) and is redirected straight to your callback URL without seeing the pricing table, check the following:

  1. Missing B2B creator role or org:write:billing permission (most common for is_create_org=true): When is_create_org=true is passed in the auth URL, the user creating the organization must have the org:write:billing system permission in that new organization. Go to Settings > Roles, ensure you have a role (for example, Owner or Billing Admin) with Assign to the creator enabled, and enable both org:write:billing and org:read:billing under System permissions. See Add billing role (B2B).
  2. Allow organizations to be created during registration is disabled: For is_create_org=true flows, ensure organization creation on sign-up is enabled in your environment settings.
  3. “Show the pricing table when customers sign up” is turned off: Go to Settings > Environment > Billing and verify that Show the pricing table when customers sign up is enabled.
  4. Pricing table is not Live or has no published plans: Go to Billing > Pricing tables and confirm the pricing table is set to Live, belongs to a plan group that matches your flow (Organizations group for is_create_org=true, or Users group for B2C), and contains at least one Published plan whose prices are synced with Stripe.
  5. pricing_table_key does not match or plan_interest was passed:
    • If you pass pricing_table_key in the auth URL, verify it exactly matches the key of a Live pricing table in that environment.
    • If you pass plan_interest in the auth URL, Kinde pre-selects that plan and intentionally skips the plan selection screen.