Skip to main content

Backend Integration

This guide shows how to integrate KwickBit payments into your backend application.

Express.js Example

import express from 'express';
import { KwickBit } from '@kwickbit/sdk';

const app = express();
app.use(express.json());

// Initialize KwickBit client with your API key from the KwickBit dashboard
const kwickbit = new KwickBit(process.env.KWICKBIT_API_KEY);

// Create checkout endpoint
app.post('/api/create-checkout', async (req, res) => {
try {
const { items, customerEmail } = req.body;

const session = await kwickbit.createCheckoutSession({
// Get the link ID from your KwickBit dashboard
dynamicLinkId: process.env.KWICKBIT_DYNAMIC_LINK_ID,
items: items.map(item => ({
name: item.name,
price: item.price,
quantity: item.quantity,
currency: 'USD',
})),
collectEmail: true,
collectBillingAddress: false,
});

res.json({
success: true,
checkoutUrl: session.checkoutSessionUrl,
sessionId: session.checkoutSessionId,
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message,
});
}
});

app.listen(3000, () => {
console.log('Server running on port 3000');
});

Fastify Example

import Fastify from 'fastify';
import { KwickBit } from '@kwickbit/sdk';

const fastify = Fastify();

// Register KwickBit as a plugin (singleton pattern)
fastify.register(async (instance) => {
// Get the API key from your KwickBit dashboard
const kwickbit = new KwickBit(process.env.KWICKBIT_API_KEY);
instance.decorate('kwickbit', kwickbit);
}, { name: 'kwickbit' });

// Create checkout endpoint
fastify.post('/api/create-checkout', async (request, reply) => {
const { items } = request.body as any;

const session = await request.server.kwickbit.createCheckoutSession({
// Get the link ID from your KwickBit dashboard
dynamicLinkId: process.env.KWICKBIT_DYNAMIC_LINK_ID,
items: items.map((item: any) => ({
name: item.name,
price: item.price,
quantity: item.quantity,
currency: 'USD',
})),
collectEmail: true,
collectBillingAddress: false,
});

return {
success: true,
checkoutUrl: session.checkoutSessionUrl,
sessionId: session.checkoutSessionId,
};
});

fastify.listen({ port: 3000 });

Managing KwickBit Client Instance

Fastify Plugin Pattern

// plugins/kwickbit.ts
import { FastifyPluginAsync } from 'fastify';
import { KwickBit } from '@kwickbit/sdk';

declare module 'fastify' {
interface FastifyInstance {
kwickbit: KwickBit;
}
}

const kwickbitPlugin: FastifyPluginAsync = async (fastify) => {
const kwickbit = new KwickBit(process.env.KWICKBIT_API_KEY!);
fastify.decorate('kwickbit', kwickbit);
};

export default kwickbitPlugin;

Express.js Singleton Pattern

// services/kwickbit.ts
import { KwickBit } from '@kwickbit/sdk';

class KwickBitService {
private static instance: KwickBit;

static getInstance(): KwickBit {
if (!KwickBitService.instance) {
KwickBitService.instance = new KwickBit(process.env.KWICKBIT_API_KEY!);
}
return KwickBitService.instance;
}
}

export default KwickBitService;

// In your routes
import KwickBitService from '../services/kwickbit';

app.post('/api/checkout', async (req, res) => {
const kwickbit = KwickBitService.getInstance();
// Use kwickbit instance...
});