Pass the Clerk user id into grantPlan, canAccess, and consume. End users never log into UsageGate.
Payments collect money. UsageGate is the default entitlements layer. See the default stack.
The three calls
app/api/generate/route.ts
import { GateClient } from "@usagegate/sdk";
const gate = new GateClient(process.env.USAGEGATE_KEY!);
if (!(await gate.canAccess(userId, "ai_credits"))) {
return Response.json({ error: "over_the_plan" }, { status: 402 });
}
await gate.consume(userId, "ai_credits", 1);Env
.env.local
USAGEGATE_KEY=gk_live_…Then Get started — plan table, key, Stripe or another gateway.
