Werify Paywall

Payments that explain themselves

Accept payments. Approve payouts. When someone asks "why was this approved?" - you'll have the answer.

Stripe-powered · PCI compliant · Audit-ready

Transaction detail Approved
{
  "id": "txn_8k2m4x9p",
  "status": "approved",
  "amount": "$150.00",
  "customer": "j***@example.com",
  "method": "card_visa_4242",
  "reason": "All checks passed",
  "timestamp": "2025-01-22T14:32:00Z"
}

Everything you need for payments

Familiar Stripe features. Full visibility into every transaction.

Checkout

Hosted checkout pages, payment links, and embedded forms.

Payouts

Approve payouts to sellers, creators, and freelancers.

Refunds

Process refunds with a clear trail of what was refunded and when.

Subscriptions

Recurring billing. Cancel and upgrade with full history.

Disputes

When chargebacks happen, you'll have the evidence ready.

Webhooks

Real-time notifications for payments, payouts, and refunds.

How it works

1
Customer pays

Checkout, payment link, or API. Same Stripe experience.

2
Transaction logged

Amount, customer, timestamp, and why it was approved.

3
Searchable forever

"Why was this approved?" Search. Find. Answer.

Built for

Marketplaces

Buyer payments and seller payouts with full visibility.

Creator platforms

Creator payouts with audit trails. Less disputes.

SaaS

Subscription payments with clear billing history.

Freelance platforms

Project payments, milestone releases, escrow.

Pricing

Same as Stripe. No markup.

2.9% + 30¢

per successful transaction

  • Checkout & payment links
  • Payout approvals
  • Refund processing
  • Searchable transaction history
  • Webhook notifications
  • Dashboard access
Get started

Volume discounts available for high-volume merchants.

Quickstart

Get your first payment in minutes.

1 Install the SDK
npm install @werify/paywall
2 Create a checkout session
import { Paywall } from '@werify/paywall';

const paywall = new Paywall('your_api_key');

const session = await paywall.checkout.create({
  amount: 15000, // $150.00
  currency: 'usd',
  success_url: 'https://yoursite.com/success',
  cancel_url: 'https://yoursite.com/cancel'
});

// Redirect to session.url
3 Handle the webhook
app.post('/webhooks/paywall', (req, res) => {
  const event = paywall.webhooks.verify(req.body, req.headers);

  if (event.type === 'payment.completed') {
    const { transaction_id, amount, customer } = event.data;
    console.log('Payment approved:', transaction_id);
  }

  res.sendStatus(200);
});
4 Query transactions anytime
// Find all payments for a customer
const transactions = await paywall.transactions.list({
  customer: 'cus_abc123'
});

// Get a specific transaction
const txn = await paywall.transactions.get('txn_8k2m4x9p');

Ready to accept payments?

Same Stripe pricing. Full transaction visibility. Start in minutes.