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
{
"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
Customer pays
Checkout, payment link, or API. Same Stripe experience.
Transaction logged
Amount, customer, timestamp, and why it was approved.
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
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.