Skip to content

Vanilla JavaScript / Any Platform

Works in any Node.js backend, Deno, Bun, Cloudflare Workers, or browser (session creation must be server-side).

Terminal window
npm install @swft-checkout/js
import express from 'express'
import { createSession, verifySwftWebhookNode } from '@swft-checkout/js'
const app = express()
// Checkout endpoint — redirects to Swft
app.post('/checkout', async (req, res) => {
const session = await createSession({
merchantApiKey: process.env.SWFT_MERCHANT_API_KEY,
currency: 'GBP',
lineItems: req.body.items,
shippingMethods: [{ id: 'standard', label: 'Standard', cost: 499 }],
subtotal: req.body.subtotal,
})
res.redirect(session.sessionUrl)
})
// Webhook
app.post('/webhooks/swft', express.raw({ type: 'application/json' }), (req, res) => {
const payload = verifySwftWebhookNode(
req.body,
req.headers['x-swft-signature'] as string,
process.env.SWFT_WEBHOOK_SECRET
)
// handle payload.event === 'payment_succeeded'
res.json({ received: true })
})

Use verifySwftWebhook (async, Web Crypto API) instead of verifySwftWebhookNode.