Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.usepaykit.dev/llms.txt

Use this file to discover all available pages before exploring further.

1. Install

npm install @paykit-sdk/core @paykit-sdk/stripe

2. Create a PayKit instance

import { PayKit, createEndpointHandlers } from '@paykit-sdk/core';
import { stripe } from '@paykit-sdk/stripe';

export const paykit = new PayKit(stripe());
export const endpoints = createEndpointHandlers(paykit);

3. Mount the catch-all route

createEndpointHandlers generates handlers for every PayKit resource. Mount them behind a single catch-all API route:
import { endpoints } from '@/lib/paykit';
import type { EndpointArgs, EndpointHandler, EndpointPath } from '@paykit-sdk/core';
import { NextRequest, NextResponse } from 'next/server';

export async function POST(
  request: NextRequest,
  { params }: { params: Promise<{ endpoint: string[] }> },
) {
  const { endpoint: endpointArray } = await params;
  const endpoint = ('/' + endpointArray.join('/')) as EndpointPath;
  const handler = endpoints[endpoint] as EndpointHandler<typeof endpoint>;

  if (!handler) {
    return NextResponse.json({ message: 'Endpoint not found' }, { status: 404 });
  }

  const body = await request.json();
  const { args } = body as { args: EndpointArgs<typeof endpoint> };

  try {
    const result = await handler(...args);
    return NextResponse.json({ result });
  } catch (error) {
    return NextResponse.json(
      { message: error instanceof Error ? error.message : 'Internal server error' },
      { status: 500 },
    );
  }
}

4. Handle webhooks

const webhook = paykit.webhooks
  .setup({ webhookSecret: process.env.STRIPE_WEBHOOK_SECRET! })
  .on('payment.created', async event => {
    console.log(event.data);
  });

await webhook.handle({
  body: rawBody,
  headersAsObject: Object.fromEntries(request.headers),
  fullUrl: request.url,
});

Swap providers

Change one import and everything else stays the same:
import { paystack } from '@paykit-sdk/paystack';

export const paykit = new PayKit(paystack());
See Providers for the full list.