Subscriptions for developers and small businesses
Get paid every period, from a link.
Abuna runs your checkout, renewals, and reminders. Each period, customers get a pay link by email and Telegram. When they pay, your server gets a signed webhook. You don't build billing.
Start in Test mode. Nothing charges a real customer.
Kribi Fitness
Telegram · just now
Hi Amina, your Monthly plan renews on 1 October.
Amount due FCFA 15,000
invoice.paid · signature verified
How it works
From sign-up to first renewal
- 01
Create an app
Sign up and create an app. You get a publishable key, a secret key, and a webhook signing secret.
- 02
Add products and prices
Set an amount and how often it renews: every few days, weeks, months, or years.
- 03
Share the checkout link
Each price has a hosted checkout link. Send customers there from your site, a chat, or a QR code.
- 04
Let Abuna handle renewals
Each period, your customer gets a pay link. When they pay, your server gets a signed webhook.
Features
Everything a subscription needs after checkout
Abuna keeps track of every subscription, so you don't have to chase payments or build billing screens.
Hosted checkout
A checkout page for every price. No payment forms to build or host.
Pay links by email and Telegram
Every renewal pay link goes out by email. Customers who connect Telegram get it there too. It takes one tap.
Customer portal
Each customer gets a private link to see their plan and invoices, pay what's due, or cancel. No account needed.
Signed webhooks
Every event is signed with your secret, retried on failure, and logged. Resend any delivery from the dashboard.
Test and Live modes
Try the whole flow in Test mode, with its own data and keys. Switch to Live when you're ready.
Teams
Invite teammates by link so they can manage your apps with you.
Your money
Abuna only collects payments
Customers pay straight into your own provider account. Abuna never sends money from it. We ask for collection-only credentials and store them encrypted. If your provider can't restrict a key, check with them before connecting.
Choose the right provider credentialsDevelopers
Your server hears about every payment
Abuna sends a POST to your webhook URL for each event. Check the signature, then update your product.
Headers on every delivery
- X-Abuna-Event
- The event type
- X-Abuna-Delivery
- The delivery ID
- X-Abuna-Signature
- sha256=HMAC of the raw body, keyed by your signing secret
- X-Abuna-Signature-Previous
- For 24 hours after a rotation, the same HMAC keyed by your old secret
Events
- subscription.created
- subscription.paid
- invoice.paid
- subscription.renewed
- subscription.updated
- subscription.canceled
Failed deliveries are retried. You can resend any event from the dashboard; it keeps the same event ID, so you can skip duplicates.
import crypto from "node:crypto";
// Use the raw request body: the signature covers its exact bytes.
export function verify(rawBody, header, secret) {
const expected = "sha256=" +
crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const a = Buffer.from(header), b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
app.post("/webhooks/abuna", (req, res) => {
// For a day after you rotate the secret, the old one signs Signature-Previous.
const secret = process.env.ABUNA_WEBHOOK_SECRET;
const ok = ["X-Abuna-Signature", "X-Abuna-Signature-Previous"]
.some((h) => verify(req.rawBody, req.get(h) ?? "", secret));
if (!ok) return res.sendStatus(400);
const event = JSON.parse(req.rawBody);
if (event.type === "invoice.paid") {
// Give the customer access for the new period.
}
res.sendStatus(200);
});FAQ
Common questions
Do my customers need an account?
No. Customers subscribe through your checkout link. Their renewal messages include a pay link and a link to their portal, where they can see their plan, pay, or cancel.
How do customers get Telegram messages?
Connect your Telegram bot in your app's settings. Each customer then connects Telegram once, with one tap. Email still goes to everyone.
What happens when a customer doesn't pay?
Each renewal has a short grace period to pay. If it is still unpaid after that, Abuna cancels the subscription and sends your server a subscription.canceled webhook.
Can I try it before charging anyone?
Yes. Test mode has its own keys and data, and nothing there charges a real customer. Walk through checkout, renewals, and webhooks, then switch to Live.
Who is Abuna for?
Developers and small businesses selling memberships, courses, software, or services. It's built for places like Cameroon, where people pay for each period from a link instead of saving a card.
Start with Test mode today.
Create an app, share a checkout link, and watch the first webhook arrive.