How Kinde Billing Actually Works
If you’ve ever had to set up billing for a SaaS app, you already know the feeling: you’re knee-deep in Stripe’s dashboard, juggling webhooks, syncing subscription data, and somehow duct-taping everything together with your auth and RBAC system. It’s doable. But elegant? Not really.
Kinde assumes something different: you’re building a product — and billing should just work.
Imagine if your billing worked like an identity, with pricing, access, and authentication all living in one place?
That’s exactly what Kinde Billing is trying to solve. It’s a new layer on top of Kinde’s already well-regarded auth platform — and while still early, it’s built with one clear goal: making billing feel native to the product you’re building.
I am using it to power Learnflow AI (an AI voice tutor tool I’m working on), and in this post, I’ll walk you through how Kinde Billing works — what’s possible today, what makes it different from Stripe, where it’s still catching up, and what I really think about it.
So What Is Kinde Billing?
Kinde is known for developer-first authentication, authorization, team roles, RBAC — the works.
But last month, they shipped something new: a billing engine that lives inside the same platform.
That means you can now define pricing plans, subscribe users, gate features, and even let customers manage their billing — all without ever touching Stripe’s UI directly.
And yes — it still uses Stripe under the hood. But you don’t have to wrestle with Stripe’s entire schema (and yours). Kinde handles the hard parts, and gives you a clean dev-first layer to work with instead.
Auth and Payments become a part of your product’s identity stack, giving you:
- Plan management (flat-rate or usage-based)
- Customer subscriptions
- Trial handling
- A hosted customer portal
- Integrated feature entitlements
- Webhooks for billing lifecycle events
- Tight RBAC + billing sync (native to Kinde)
TLDR: You can build login, team access, feature gating, and payment plans — all using Kinde.
Why Does This Matter?
Most developers treat billing like an additional build. You wire it in when you’re ready to charge users, and you hope it doesn’t break anything.
Kinde flips that idea on its head. It sees billing as a core part of your product’s identity layer — not something separate from auth, but something that should live beside it.
That leads to three very real advantages:
- Fewer moving parts – No more stitching Stripe, custom auth, and your own feature flag system.
- Cleaner logic – Billing status and feature access live in the same user object.
- Faster builds – Less configuration, fewer edge cases, and fewer opportunities to mess up.
Core Building Blocks (The Kinde Billing Model)
Let’s break down the main elements of Kinde Billing:
1. Users = Customers
When someone logs in to your app with Kinde Auth, they’re instantly tied to a billing identity. There’s no syncing between systems. Your user is your customer right from the moment they access your app.
2. Payment Plans
Creating plans on Kinde takes a few clicks. Login to your dashboard and click on “Billing” on the sidebar and then follow the details in this guide: https://docs.kinde.com/billing/manage-plans/create-plans
You can create plans like “Free,” “Pro,” or “Team.”
Each plan can include:
- A fixed monthly price (charged through Stripe)
- Usage-based charges (metered, by units)
- Entitlements (features)
Note: As of now, Kinde supports monthly billing only. Annual plans and trials are on the roadmap, but not yet available.
3. Customer Portal (Hosted)
Want your users to manage their billing themselves? You have got it.
You can generate a portal URL using the Kinde React SDK:
import { PortalLink } from "@kinde-oss/kinde-auth-react";
<PortalLink>Manage Billing</PortalLink>
Your users would be able to change their plan, update account and payment details.
At this time, there is no way for users to cancel their subscription using the self-serve portal, to read more about how you can implement this feature in your application, read this: https://docs.kinde.com/billing/manage-plans/cancel-plans.
4. Entitlements
This is one of Kinde’s superpowers: entitlements/feature access is automatically tied to a user’s billing plan and can be automatically fetched with a user’s session, enabling you to write logic like this:
import { useEffect, useState } from "react";
import { useKindeAuth } from "@kinde-oss/kinde-auth-react";
import PageLoader from "@/components/page-loader";
interface Plan {
key: string;
}
interface EntitlementsData {
data: {
plans: Plan[];
org_code: string;
};
}
const { isAuthenticated, getAccessTokenRaw } = useKindeAuth();
const [entitlements, setEntitlements] = useState<EntitlementsData | null>(null);
if (!isAuthenticated) {
return <PageLoader />;
}
useEffect(() => {
const fetchEntitlements = async () => {
const accessToken = await getAccessTokenRaw();
try {
const res = await fetch(`${process.env.NEXT_PUBLIC_KINDE_ISSUER_URL}/account_api/v1/entitlements`, {
headers: {
Authorization: `Bearer ${accessToken}`,
},
cache: "no-store",
});
const data = await res.json();
setEntitlements(data as EntitlementsData);
} catch (error) {
console.error("Error fetching entitlements:", error);
}
};
fetchEntitlements();
}, [getAccessTokenRaw]);
const hasEntitlement = (entitlementKey: string): boolean => {
if (!entitlements?.data?.plans) return false;
return entitlements.data.plans.some((plan: Plan) =>
plan.key === entitlementKey
);
};
if (hasEntitlement("ai_voice_mode")) {
// User has the ai_voice_mode entitlement
}
No manual syncing or flag logic needed. If the user has access via their plan, the entitlement is already there.
5. Webhooks for Billing Events
Need custom logic for billing events? Kinde emits billing-related events (subscription created, payment failed, etc.).
You can register webhooks via your Kinde dashboard. Visit Settings > Webhooks:
All events are signed JWTs. The free tier includes 1 webhook; paid tiers include unlimited.
Real-World Use: Learnflow AI
I am currently using Kinde Billing in a SaaS app that I’m working on; Learnflow AI — a conversational AI that helps developers learn complex topics using voice.
For it, I needed:
- Email/password auth
- Free trials for new users
- A way to upgrade to “Pro”
- Feature gating (so Pro users get more access)
With Kinde, I built all of this in under an hour. No Stripe dashboard setup. No backend feature logic. Just a few API calls and it was live.
It was honestly the first time billing felt like part of the product, instead of just another integration.
When Should You Use Kinde Billing?
To be honest, Kinde Billing isn’t for every use case. If you need advanced tax logic, international pricing, or trial-based marketing flows, you may want to wait a bit.
However, here are a few places where Kinde Billing makes the most sense:
- You’re building a SaaS or AI tool and want auth + billing handled in one place
- You’re launching an MVP and don’t want to manage 3–4 third-party services
- You care about developer experience and speed
- You want feature access tied to payment tiers
Then Kinde is a no-brainer.
It’s perfect for:
- Indie hackers
- Solopreneurs
- Hackathon teams
- MVP launches
- Internal B2B tools
Stripe vs Kinde: A Quick Comparison
Feature | Stripe | Kinde |
---|---|---|
Auth & Billing | ❌ Separate | ✅ Unified |
Entitlements | ❌ Manual | ✅ Built-in |
Monthly Billing | ✅ | ✅ |
Annual Billing | ✅ | ❌ Not yet |
Trial Support | ✅ | ❌ Not yet |
Self-Serve Portal | ✅ | ✅ |
RBAC Integration | ❌ External | ✅ Native |
Setup Time (realistically) | 🛠️ 1-2 days | ⚡ ~1 hour |
Final Thoughts
Billing is no longer a post-launch task. It’s a critical part of how users experience your product.
With Kinde, billing becomes an extension of your identity layer — not an afterthought. It feels like something that was always meant to be there — right beside auth, roles, and access control.
You write less code. You move faster. You get fewer edge case bugs.
It’s not perfect yet. But if you’re building something new, and speed matters, it might be the simplest way to go live with real billing logic in a single afternoon.
What Do You Think?
If you’re building with Kinde — or thinking about trying their new billing feature — I’d love to hear from you:
- Have you integrated Kinde Billing into your own app?
- What worked well? What could be better?
- What features do you wish it had?
- How does it compare to Stripe or LemonSqueezy or Paddle for your use case?
Drop a comment below — I read and reply to everything!
And if you’re curious to try it out yourself, head over to Kinde Billing and explore what’s possible. You might be surprised how much it simplifies your stack.