Skip to main content

Quick Comparison

Here’s how Stripe Entitlements and kelviq compare across common use cases:
CapabilityStripekelviqNotes
Boolean feature flagβœ…βœ…Simple on/off access to features.
Entitlement API (fetch by customer)βœ…βœ…Return current entitlements based on customer ID.
Plan-based entitlementsβœ…βœ…Attach features to a subscription plan.
Config limits (e.g., max team size = 5)βŒβœ…Store and read numeric or text values.
Metered quotas (API calls, minutes, GB)βŒβœ…Track used, limit, and remaining.
Front-end SDK with hooks/componentsβŒβœ…Integrate access control directly in your UI.
Usage reset by billing cycleβŒβœ…Automatically resets metered usage every cycle.
Per-user overridesβŒβœ…Customize entitlements for individual users.
Edit limits without redeployβŒβœ…Update limits instantly from the dashboard.

Real-World Entitlement Examples

Below is a list of common features, their typical data types, and which platform supports them. This helps clarify where Stripe ends and where kelviq begins.
Feature NameTypeDescriptionExample ValuekelviqStripe
AI AssistantBooleanToggle access to AI toolstrue / falseβœ…βœ…
Max Team SizeConfigRestrict number of team members5, 50, etc.βœ…βŒ
API Call QuotaMeteredTrack and limit API usageused: 10,000βœ…βŒ
Transcription MinutesMeteredMonthly limit on transcription usageremaining: 90 minsβœ…βŒ
Projects LimitConfigRestrict how many projects a user can create3, unlimitedβœ…βŒ
Priority SupportBooleanEnable premium support for select userstrueβœ…βœ…
Max Upload SizeConfigLimit upload size per file25MB, 1GB, etc.βœ…βŒ
AI Token BucketMeteredControl token usage for AI featuresused: 3,000βœ…βŒ
Access to Beta FeaturesBooleanEnable early access to new featurestrueβœ…βŒ
Enable Custom BrandingBooleanWhite-label the product experiencetrueβœ…βœ…

Feature Implementation: Stripe vs kelviq

Explore how the same feature would be implemented using Stripe Entitlements vs kelviq, so you can feel the difference in developer experience.

1. AI Assistant (Boolean Feature)

Stripe (Manual Check)
import Stripe from 'stripe';

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

const entitlements = await stripe.entitlements.activeEntitlements.list({
  customer: 'cus_123',
});

const hasAiAccess = entitlements.data.some(
  (e) => e.entitlement_feature.lookup_key === 'ai-assistant'
);

if (hasAiAccess) {
  enableAiAssistant();
}
kelviq
import { ShowWhenBooleanEntitled } from '@kelviq/react-sdk';

<ShowWhenBooleanEntitled featureKey="ai-assistant">
  <AIButton />
</ShowWhenBooleanEntitled>

2. API Call Quota (Metered Limit)

Stripe
// ❌ Not supported β€” you'd need to build custom metering logic.
const used = await getApiUsage(user.id);
const limit = 100000;

if (used < limit) {
  makeApiCall();
} else {
  showUpgradeBanner();
}
kelviq
const { data } = useMeteredEntitlement('api-call-quota');

if (data?.remaining === null || data.remaining > 0) {
  makeApiCall();
}

3. Project Limit (Config Feature)

Stripe
// ❌ Not supported β€” you'd need to hardcode limits manually.
const plan = user.stripePlanId;
const maxProjects = plan === 'pro' ? 50 : 3;

if (user.projects.length >= maxProjects) {
  blockProjectCreation();
}
kelviq
const { data } = useConfigEntitlement('project-limit');

if (data?.hasAccess && user.projects.length >= data.configuration) {
  showProjectLimitWarning();
}

πŸš€ Why kelviq?

Stripe’s entitlement system works well for simple use cases like turning a feature on/off based on a plan. But once you need configuration, metered usage, overrides, or frontend control β€” you hit limits fast. kelviq fills these gaps with:
  • Deeper data types like metered and configurable entitlements.
  • Modern SDKs for both frontend and backend.
  • No-code plan editor to change limits instantly.
  • Better visibility into who can access what.
You still use Stripe for payments β€” and kelviq to power everything else around what users get after they pay.