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.From its SKILL.md
npx -y skills add commet-labs/pricing-models --skill pricing-modelsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.9 KB, as published. Nobody here has run it
Pricing Models
Decision Matrix
| 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 |
Quick Comparison
| 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 |
Code Examples
Metered -- Track API usage
import { Commet } from "@commet/node";
const commet = new Commet({ apiKey: process.env.COMMET_API_KEY! });
await commet.usage.track({
customerId: "user_123",
featureCode: "api_calls",
value: 1,
eventId: "usage_abc123",
}, { idempotencyKey: "req_abc123" });
Credits -- Check before consuming
const availability = await commet.usage.check({
featureCode: "image_generations",
customerId: "user_123",
});
if (!availability.allowed) {
// Customer exhausted credits -- prompt to buy a credit pack
const portal = await commet.portal.getUrl({ customerId: "user_123" });
return redirect(portal.portalUrl);
}
await commet.usage.track({
customerId: "user_123",
featureCode: "image_generations",
value: 1,
});
Balance -- AI token billing
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.
Seats -- Manage team members
await commet.seats.add({
customerId: "org_456",
featureCode: "editor",
count: 3,
});
const balance = await commet.seats.getBalance({
customerId: "org_456",
featureCode: "editor",
});
// balance.current = 3
Boolean -- Check feature access
const access = await commet.featureAccess.get({
code: "custom_branding",
customerId: "user_123",
});
if (!access.allowed) {
// Feature not included in their plan
}
Detailed References
| 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 features |
| Combining models | hybrid-models.md -- Base + usage, seats + metered, addons |