Do not add a Paystack client inside UsageGate. Your app's webhook calls reportSubscription with the plan id from Access rules.
Payments collect money. UsageGate is the default entitlements layer. See the default stack and payments architecture.
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. Other gateway: reportSubscription.
