Build a pricing table
Billing
There are three ways you can allow customers to sign up to a plan.
Display a plan selection screen in your own app or website. Once the user selects a plan, redirect them to Kinde to complete the payment flow.
To pre-select a plan, pass the plan_interest query parameter in the Kinde authentication URL.
Let Kinde handle plan selection as part of the authentication flow. To enable this:
is_create_org=true), ensure you have configured a role with Assign to the creator enabled and the org:write:billing system permission selected (see Add billing role (B2B))Once this is done, pass the relevant pricing_table_key in the authentication URL (or set the pricing table to Show by default) and Kinde will display the plan selection screen during sign-up.
Use the Kinde Management API to assign a customer to a specific plan. The next time the customer signs in, Kinde will automatically prompt them for payment details.
This is ideal for:
Depending on how you choose to onboard customers, users will see up to three different billing screens during the authentication flow. These screens can be customized:
Plan selection - Displayed when a user signs up (or when an eligible billing customer without a plan signs in) and a live pricing table with at least one published plan is available, unless a plan was pre-selected via plan_interest. Even if your pricing table has only a single plan (such as a single free tier), this screen is still displayed so the customer can confirm their plan selection. Plans with a trial enabled show a “Free trial for N day(s)” badge.
Payment details - Shown after a user selects a plan—or if a plan was pre-selected via plan_interest before redirecting to Kinde. This screen only appears if the plan requires credit card details. Plans with no charges ($0) skip this screen when Ask for credit card is disabled in the plan settings. For trial plans, this screen may appear later — when prompted for payment details before the trial ends — and includes a message explaining the trial window. This skip behavior does not apply to trial-enabled paid plans.
Success - Shown when sign-up and payment are successfully completed (or when a free plan subscription is confirmed).
If you are using is_create_org=true (B2B) and neither the Plan selection screen nor the Payment details screen appears during sign-up, check that the user creating the organization is assigned a creator role with the org:write:billing system permission. Without org:write:billing, Kinde skips billing setup entirely. See Troubleshooting: Pricing table not shown during sign-up.
By default, all screens will inherit branding and styling from the global Kinde Design settings.
If you want more control, you can fully customize these screens using your own HTML, CSS, and JavaScript.