paykit
CodeFramework Setups

Express

Mount PayKit in an Express app and hand off provider webhooks to the server SDK.

Express works well when PayKit lives inside an existing Node API server.

Example setup

import express from "express";
import { createPayKit } from "paykitjs";
import { stripe } from "paykitjs/providers/stripe";
import { postgresStorage } from "paykitjs/storage/postgres";

const app = express();

const paykit = createPayKit({
  storage: postgresStorage({
    connectionString: process.env.DATABASE_URL!,
  }),
  providers: [
    stripe({
      secretKey: process.env.STRIPE_SECRET_KEY!,
      webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
    }),
  ],
});

app.post("/api/paykit/webhooks/:providerId", express.raw({ type: "*/*" }), async (req, res) => {
  await paykit.handleWebhook({
    providerId: req.params.providerId,
    body: req.body,
    headers: req.headers as Record<string, string>,
  });

  res.status(200).end();
});

Use a raw body for signed webhook verification. JSON parsing too early will break many providers.