From pricing-models
Use when choosing a pricing model for a SaaS product — metered (pay per use), credits (block when exhausted), balance (prepaid spend), seats (per-user), or boolean (feature flags). Covers decision frameworks, implementation patterns, and when to use each model.
npx claudepluginhub commet-labs/pricing-models --plugin pricing-modelsThis skill uses the workspace's default tool permissions.
| Question | Metered | Credits | Balance | Seats |
Guides SaaS pricing strategies including per-seat, usage-based, tiered, freemium models; Stripe billing with Products, Prices, Subscriptions, metered usage, proration, trials, dunning, and LTV:CAC targets.
Structures pricing strategies, packaging options, tiers, and pricing pages for SaaS/digital products. Use for reviews, freemium evaluation, tier design, or pricing changes.
Guides SaaS pricing: select value metrics, design tiers (free/pro/business), set prices, build pages, test changes. Covers psychology, anchoring, self-selection, monetization.
Share bugs, ideas, or general feedback.
| Question | Metered | Credits | Balance | Seats |
|---|---|---|---|---|
| Is usage predictable? | No | Somewhat | Somewhat | Yes |
| Need hard limits? | No | Yes | Optional | N/A |
| Per-user value? | No | No | No | Yes |
| Multi-feature spend? | No | No | Yes | No |
| Sub-cent pricing? | Yes | No | Yes | No |
| Customer wants cost control? | Low | High | Medium | High |
| Model | Charges When | Blocks on Limit | Best For |
|---|---|---|---|
| Metered | Period end (true-up) | Never | API calls, bandwidth, storage |
| Credits | Upfront (blocks) | Yes, hard stop | Image generation, exports, compute jobs |
| Balance | Real-time deduction | Configurable | AI token usage, multi-feature platforms |
| Seats | Period start (advance) + true-up | N/A | Team tools, per-user licenses |
| Boolean | Included in plan base | N/A | Feature flags, plan differentiation |
import { Commet } from "@commet/node";
const commet = new Commet({ apiKey: process.env.COMMET_API_KEY! });
await commet.usage.track({
customerId: "user_123",
feature: "api_calls",
value: 1,
idempotencyKey: "req_abc123",
});
const { data } = await commet.features.canUse({
code: "image_generations",
customerId: "user_123",
});
if (!data.allowed) {
// Customer exhausted credits -- prompt to buy a credit pack
const { data: portalData } = await commet.portal.getUrl({ customerId: "user_123" });
return redirect(portalData.portalUrl);
}
await commet.usage.track({
customerId: "user_123",
feature: "image_generations",
value: 1,
});
import { tracked } from "@commet/ai-sdk";
import { anthropic } from "@ai-sdk/anthropic";
import { generateText } from "ai";
const result = await generateText({
model: tracked(anthropic("claude-sonnet-4-20250514"), {
commet,
feature: "ai_generation",
customerId: "user_123",
}),
prompt: "Explain quantum computing",
});
// Tokens tracked, cost calculated, balance deducted automatically.
await commet.seats.add({
customerId: "org_456",
seatType: "editor",
count: 3,
});
const { data } = await commet.seats.getBalance({
customerId: "org_456",
seatType: "editor",
});
// data.current = 3
const { data } = await commet.features.check({
code: "custom_branding",
customerId: "user_123",
});
if (!data.allowed) {
// Feature not included in their plan
}
| Need | Reference |
|---|---|
| Choosing between models | choosing-a-model.md -- Decision framework, real-world examples |
| Metered pricing | metered.md -- Pay-per-use, overage, included amounts |
| Credit-based pricing | credits.md -- Block purchases, hard limits, credit packs |
| Balance / prepaid | balance.md -- Prepaid spend, AI billing, top-ups |
| Seat-based pricing | seats.md -- Per-user, advance + true-up, seat types |
| Combining models | hybrid-models.md -- Base + usage, seats + metered, addons |