Step-by-step guides for running a paid Telegram channel or group on AccessBot — create your own membership bot, connect payments (Stripe, PayPal, crypto, M-Pesa & Telegram Stars), build subscription plans, and manage members automatically.
New here? Setting up a Telegram membership bot takes three steps: 1. create your bot with Telegram's BotFather, 2. connect a payment method and create your plans, 3. add the bot to your channel or group — it handles invites, renewals, and removals automatically. Start free and follow the guides below.
Your AccessBot storefront runs on your own Telegram bot — created for free, in Telegram, in about a minute. It stays under your name and username, so members only ever see your brand.
💬Open BotFather
→
🤖/newbot
→
✏️Name + username
→
🔑Get token
STEP BY STEP
Open Telegram and start a chat with @BotFather — the official bot that makes bots.
Send /newbot.
Type a display name (e.g. "Acme VIP") — this shows at the top of the chat.
Type a username. It must be unique and end in bot (e.g. acme_vip_bot).
BotFather replies with your API token — copy it, you paste it into AccessBot next.
/newbot
Done! Use this token to access the HTTP API:
7712345678:AAE_xxxxxxxxxxxxxxxxxxx
Keep your token secure.
BotFather hands you the token
OPTIONAL POLISH
/setuserpic — give your bot a profile photo.
/setdescription and /setabouttext — the text people see before pressing Start.
Warning: Keep your token secret — anyone who has it controls your bot. If it ever leaks, send /revoke to BotFather for a fresh token, then re-paste it in AccessBot.
Getting started
Connect your bot to AccessBot
Got your BotFather token? Connecting it is one paste. AccessBot verifies it with Telegram, stores it securely, and registers your bot live in the same webhook process — no server restart, no waiting, and no downtime for anyone already chatting with it.
Dashboard › Bots
Connect a bot
7712345678:AAE_••••••••
ConnectLive
Bots → paste your token
STEP BY STEP
In your dashboard, open the setup checklist on the home page — or go to the Bots section.
Choose Connect bot and paste your token.
AccessBot calls Telegram to verify, then flips the bot to Live instantly.
CONFIRM IT WORKS
Open your bot in Telegram and press Start (or send /start). It should greet you right away:
/start
Welcome to Acme VIP! 🎉
📋 View Plans
Tip: If you ever regenerate the token in BotFather, come straight back here and paste the new one — your bot keeps running under the same username, with zero downtime for members.
Getting started
Add your bot to your channel or group
To add paying members and remove expired ones, your bot must be an administrator of every channel or group a plan unlocks. Without admin rights it simply can't manage anyone.
📢Open chat
→
👤Add bot as admin
→
🔗Link to a plan
GIVE THE BOT ADMIN RIGHTS
Open the channel/group in Telegram → Manage → Administrators → Add Admin.
Search your bot's username and add it.
Enable these two permissions:
Permission
Why it's needed
Invite Users via Link
Generates one-time join links for paying members
Ban Users
Removes members the moment their subscription expires
LINK THE CHAT TO A PLAN
In AccessBot open Channels and add the chat (the bot must already be an admin so it can read it).
When you create or edit a plan, tick the channels it should unlock.
Acme VIP — private channelBot is admin
Warning: A private channel where the bot isn't an admin — or with "Invite via link" turned off — will silently fail to add members. Check both before you sell.
Getting started
Create your first plan
A plan is a membership you sell: a price, a length of access, and the channels it unlocks. Members buy it and get added automatically.
Dashboard › Plans › New plan
New plan
Monthly VIP
$10
30
Save plan
Plans → New plan
FILL IN THE FIELDS
Name — what members see, e.g. "Monthly VIP".
Price — in your workspace's default currency (set that first under Settings if you haven't).
Duration — days each payment grants, e.g. 30. Leave it blank or 0 for lifetime, never-expiring access.
Category — group related plans, and if you run several bots, route this plan to a specific one.
Channels — tick the chats this plan unlocks (the bot must be an admin of each).
Offer a few durations of the same tier so members can pick:
Monthly VIP$10 / 30d
Annual VIP$96 / 365d
Lifetime VIP$249 / forever
Tip: Once saved, members can buy from your bot with /plans or from your Mini App storefront — no extra setup.
Getting started
Go-live checklist
Four things must be true before your bot can take real money: a connected bot, the bot as admin in your chats, at least one plan, and one payment rail (or access codes). Run this checklist before you share your link.
🤖Bot live
→
📢Admin in chats
→
💳Plan + rail
→
🚀Launch
BEFORE YOU SHARE THE LINK
Bot connected & replies to /startReady
Bot is admin of every plan's channel/groupReady
Default currency + at least one plan setReady
One payment rail enabled + webhook set on its sideCheck
Your Telegram ID linked in My Account (for sale alerts)Check
One real test purchase or access code — added to channel?Check
When a test sale lands and the buyer is auto-added, you'll get a ping in Telegram:
💰 New sale! Monthly VIP — $10
👤 @newmember added to Acme VIP ✅
Tip: Press Start on your own bot and link your Telegram ID in My Account first — otherwise those sale alerts have nowhere to go.
Plans & access
Recurring vs one-time plans (and how renewals stack)
Two kinds of plans
Every plan has a duration in days (30 days, 365 days, or blank for lifetime). Whether that plan renews on its own depends entirely on how the subscriber pays.
Card rails — Stripe, Paystack, Flutterwave, Razorpay, PayPal and Mercado Pago — auto-renew. The plan's duration becomes the billing interval: a 30-day plan bills monthly, a 365-day plan bills yearly, forever until the subscriber cancels. Telegram Stars monthly plans are native auto-renewing Star subscriptions.
M-Pesa and crypto are one-time. There's no card on file to charge again, so access simply runs out when the duration ends. The subscriber just buys again to continue.
Type
Renews?
Rails
Recurring
Yes — auto
Cards, Stars monthly
One-time
No — expires
M-Pesa, crypto
Buying again stacks time
If a subscriber buys the same plan again before it expires, the new duration is added on top of the remaining time — no days are ever lost. Renew a monthly plan with 5 days left and they now have 35.
⏰ Your membership expires in 2 days. Tap to renew.
🔄 Renew
Renewal reminders go to one-time members only. The bot DMs a reminder ~3 days before expiry (configurable in Settings) to members who must renew manually — one-time rails (M-Pesa, crypto) and anyone who cancelled an auto-renewing sub. Members on an active card/PayPal/Stars subscription aren't nudged, because they renew automatically (a failed auto-charge is handled by Payment Recovery instead).
Tip: Offer at least one card-rail option if you want hands-off recurring revenue — one-time rails need the subscriber to come back and pay each cycle.
Plans & access
Set prices, durations & lifetime access
The three fields that define a plan
A plan is mostly a name, a price, and a duration in days. Fill those in and the plan is ready to sell.
Name your plan (what buyers see at checkout).
Set the price in your default currency.
Set the duration in days — or leave it blank for lifetime.
Pick the channels/groups it unlocks.
Duration = access length
30 = one month of access. 365 = a year. Leave the field blank or 0 and the plan is lifetime — it never expires and the member is never auto-removed.
Dashboard › Plans
VIP Lifetime
Access to 3 channels
$199 / lifetimeOne-time
Plans → a lifetime plan (duration left blank)
One price, every currency
You store the price once in your default currency. At checkout the platform converts it to whatever the chosen provider needs using live FX rates — so a subscriber paying in a different currency, or via a rail that only supports certain currencies, always pays the right amount.
Warning: A lifetime plan means no renewal revenue and no auto-removal — reserve it for one-off purchases you truly want to be permanent.
Plans & access
Free trials & coupons
What "free trial" means here
There are two very different things people call trials, so let's be precise.
1. Your own AccessBot trial. The platform gives you — the creator — a 3-day Starter trial to try AccessBot's billing before you pay us. This is about your subscription to AccessBot, not something your subscribers get.
🎁Start trial
→
🛠️3 days free
→
💳Starter billing
Coupons — discount codes for your subscribers
2. Coupon codes. Create discount codes in Sales → Coupons: choose a percent or fixed-amount discount, optionally scope it to a single plan, and set a usage limit and expiry. Flip a code on or off any time. Subscribers enter the code in your Mini App storefront — a coupon box on the price card shows the discounted total live before they pay, and it works across every payment rail. Coupons are a Starter+ feature, and are redeemed in the Mini App (there's no bot command for them).
🏷️Create code (Sales → Coupons)
→
🛍️Member enters it in the Mini App
→
💸Discount applied at checkout
3. Loyalty discounts (automatic). Separately, your loyalty / rewards tiers give a standing checkout discount to subscribers who earn enough points — no code needed. Use coupons for promos you hand out, and loyalty for rewarding regulars.
Goal
Use
Try AccessBot free
3-day Starter trial (yours)
Run a promo / discount code
Coupons (Sales → Coupons)
Reward loyal subscribers automatically
Loyalty tiers → points discount
Give someone free access
Access codes (see that article)
Want to comp a specific person?
For one-off free access — a partner, a refund, a giveaway winner — don't build a coupon. Generate an access code instead and they redeem it in the bot with /redeem. It's instant and needs no payment.
Tip: Think in terms of the rewards program for recurring discounts and access codes for individual comps — together they cover almost every promo you'd want.
Plans & access
Organize plans with categories (and route to bots)
Categories keep your storefront tidy
Every plan belongs to a category. Categories group related plans together — Fitness, Trading Signals, Newsletter — so subscribers see a clean, organized menu instead of one long list.
Dashboard › Plans
📈 Trading Signals
Gold Monthly · Gold Yearly · Gold Lifetime
Bot: @SignalsBot
🏋️ Fitness
Coaching Monthly · Meal Plans
Bot: @FitBot
Two categories, each routed to a different bot
Categories route to bots
If you run more than one bot, each category maps to exactly one bot. That mapping decides who sees what: a subscriber chatting with Bot A only sees and pays for Bot A's categories. Bot B's plans never show up there.
🗂️Category
→
🤖One bot
→
👥That bot's subscribers
This is how one AccessBot account cleanly powers several separate products — each with its own bot, its own audience, and its own set of plans — without them bleeding into each other.
Tip: Running a single bot? You still use categories, but they're purely for grouping — put related plans together so the buy menu is easy to scan.
Plans & access
Access codes & magic links
Give access without a payment
Access codes are one-time codes you generate in the dashboard. A subscriber redeems one in your bot with /redeem <code> and the linked plan activates instantly — no payment required. Perfect for comps, partners, giveaways, and refunds.
/redeem GOLD-7X2P
✅ Redeemed! Your Gold Monthly membership is now active. Welcome aboard 🎉
🎟️Generate code
→
📤Send it
→
⌨️/redeem
→
📢Access granted
Each code is single-use and tied to a specific plan, so the redeemer gets exactly that plan's duration and channels — the same automation as a paid buyer.
Note: Access codes are a Starter+ feature. If you're on the free trial or a lower tier, upgrade to generate them.
Magic join links
Separately, AccessBot gives you shareable deep-links to your bot (t.me/yourbot). Drop one in a post, bio, or email and anyone who taps it lands straight in your bot, ready to browse plans and buy. Unlike access codes, a join link doesn't grant free access — it just opens the storefront.
Tool
Grants free access?
Reusable?
Access code
Yes
No — single use
Magic join link
No — opens storefront
Yes — share anywhere
Plans & access
How members are added and removed automatically
The whole lifecycle runs itself
Once a plan is set up, you never touch Telegram's member list by hand. The bot handles the entire join-to-removal cycle for you.
💳Pays
→
🔗Invite link
→
📢Joins
→
⏳Expires → removed
Step by step
Payment succeeds. The bot instantly creates a single-use invite link to every channel/group the plan unlocks.
Member joins. They tap the link and are in. The link can't be reshared — it's one-use.
Reminder before expiry. Shortly before access ends, the bot messages them to renew — but only for memberships that need a manual renewal (one-time M-Pesa/crypto, or a cancelled subscription). Auto-renewing subscribers (card, PayPal, Stars) aren't nudged since they're billed automatically.
At expiry, auto-removal. The bot removes them from every chat the plan covered.
✅ Payment received! Here's your private access:
🔗 Join VIP Channel
⏰ Heads up — your access ends tomorrow. Renew to stay in.
Renewing re-grants access
If a member renews (or stacks another purchase), the bot re-grants access and cancels the removal — they never notice a gap. Lifetime plans skip expiry entirely: no reminder, no removal, ever.
Tip: Because removal is automatic, an expired subscriber can't linger in your channel — your paid content stays paid without any manual cleanup.
Payments
Payments overview — how it works
How payments work on AccessBot
AccessBot never touches your money. You bring your own payment provider keys, and subscribers pay you directly. We take no cut — you keep 100% of every sale (minus whatever your provider charges in its own fees).
Every payment follows the same four-step path, no matter which rail you use:
💳Pays
→
🔔Webhook
→
✅Confirmed
→
📢Joins
Subscriber taps a plan → picks a rail → pays → provider confirms via webhook → bot grants access
A subscriber taps a plan in your bot or Mini App storefront, chooses a payment rail, and pays. The provider confirms the charge by calling your per-tenant webhook URL. Once confirmed, the bot mints a single-use invite link so exactly that person joins your channel or group.
Easiest way to start: turn on ⭐ Telegram Stars — no account, no keys, nothing to paste. Members pay right inside Telegram and you're live in seconds. Add a card rail like Stripe later when you want auto-renewing subscriptions.
The rails, and which renew automatically
Rail
Type
Setup
Best for
⭐ Telegram Stars
One-time
Instant — no keys
Anyone, worldwide
Stripe
Recurring cards
Paste keys
Global
PayPal
Recurring
Paste keys
Global
Paystack
Recurring
Paste keys
Africa
Flutterwave
Recurring
Paste keys
Pan-African
Razorpay
Recurring
Paste keys
India
Mercado Pago
Recurring
Paste keys
Latin America
M-Pesa
One-time
Paste keys
Kenya (no card)
Crypto (NOWPayments)
One-time
Paste keys
Global crypto
Card rails auto-renew subscriptions; Stars, M-Pesa and crypto are one-time charges the subscriber repeats to renew. After you paste a rail's keys, use the Test connection button on its setup page to confirm they work before going live.
Tip: You can enable as many rails as you like at once. Subscribers see every connected provider and pick whichever suits them.
Payments
Where to paste keys and find your webhook URL
One place for every provider: Dashboard → Payments
All payment setup lives in Dashboard → Payments. Each provider is its own card. Open a card, paste the keys that provider gave you, and hit Save.
Open Dashboard → Payments and pick the provider's card.
Paste the key(s) from that provider's own dashboard.
Click Save. The card now shows a green Connected badge.
Hit Test connection to confirm your keys work — you'll see a ✓ if they're valid, or a plain-language fix if not.
Copy the webhook URL shown on the card and paste it into the provider's dashboard.
Not technical? Skip the keys entirely — turn on ⭐ Telegram Stars (nothing to paste) to start taking payments right away, and add a card rail later. The Payments page leads with the easiest options and a "which should I use?" guide.
Your keys are safe
Every key is encrypted at rest. After you save, the card shows only a partially masked value (like sk_live_••••••••) — never the full secret again. A card that isn't set up yet shows a Not set up badge.
Finding your webhook URL
Webhook-based rails (Stripe, PayPal, Paystack, Flutterwave, Razorpay, Mercado Pago) each show a unique per-tenant URL right on the card:
Webhook URL…/webhooks/stripe/123
It looks like https://yourworkspace.accessbot.app/webhooks/stripe/123. Copy it and paste it into that provider's webhook settings so the provider can tell AccessBot when a payment succeeds.
Warning: If you skip pasting the webhook URL into the provider, payments will go through but the bot won't hear about them — subscribers won't be let in. Always complete both halves: save the key and register the webhook.
Payments
Set up Stripe
Stripe — recurring card subscriptions, worldwide
Stripe is the best all-rounder: recurring card subscriptions in many currencies, available in most countries. You'll need two values from your Stripe dashboard — your Secret key and a Webhook signing secret.
Dashboard › Payments › Stripe
Stripe
Card subscriptions
sk_live_••••••••••••
whsec_••••••••
SaveConnected
Payments → Stripe
In Stripe, go to Developers → API keys and copy your Secret key (sk_live_…).
Paste it into Payments → Stripe → Secret key and click Save.
Copy the webhook URL shown on the card:
Webhook URL…/webhooks/stripe/123
In Stripe → Developers → Webhooks → Add endpoint, paste that URL and subscribe to payment/subscription events.
Stripe shows a Signing secret (whsec_…). Paste it into the Stripe card and Save again.
Warning: Use live keys (sk_live_), not test keys (sk_test_), or real charges won't be recognized.
Tip: Once both fields are saved and the endpoint is live, the card turns Connected and Stripe handles auto-renewals for you.
Payments
Set up PayPal
PayPal — recurring subscriptions, worldwide
PayPal offers recurring subscriptions and works globally. You'll need two values from a LIVE PayPal REST app: your Client ID and Secret.
Create (or open) an app and copy its Client ID and Secret.
Paste both into Payments → PayPal and click Save.
Copy the webhook URL from the card and add it in PayPal under your app's Webhooks:
Webhook URL…/webhooks/paypal/123
Warning:Sandbox credentials only work in sandbox mode. Copy your Live Client ID and Secret, or real subscribers can't check out.
Tip: PayPal recurring subscriptions suit finite-duration plans best — set a clear billing cycle so renewals map cleanly to your plan length.
Payments
Set up Paystack
Paystack — cards & bank for African markets
Paystack is a strong choice across Africa (Nigeria, Ghana, and more), supporting cards and bank payments with recurring billing via plans. You need one value: your Secret key.
Dashboard › Payments › Paystack
Paystack
Card & bank · Africa
sk_••••••••••••
SaveConnected
Payments → Paystack
In your Paystack dashboard, open Settings → API Keys & Webhooks and copy your Secret key (sk_…).
Paste it into Payments → Paystack and click Save.
Copy the webhook URL from the card and paste it into Paystack's Webhook URL field on that same settings page:
Webhook URL…/webhooks/paystack/123
Tip: Use your live secret key for real subscribers. Paystack drives recurring charges through plans, so renewals happen automatically once the first payment succeeds.
Warning: Without the webhook URL registered in Paystack, AccessBot won't be notified of payments and won't grant channel access.
Payments
Set up Flutterwave
Flutterwave — cards, bank & mobile money, pan-African
Flutterwave covers a wide swath of Africa with cards, bank transfers, and mobile money, plus recurring payment plans. You'll enter two values: your Secret key and a Secret hash (used to verify incoming webhooks).
On the same page, set a Secret hash (any strong string you choose) under webhook settings.
Paste both the Secret key and the matching Secret hash into Payments → Flutterwave and click Save.
Copy the webhook URL from the card into Flutterwave's Webhook URL field:
Webhook URL…/webhooks/flutterwave/123
Warning: The Secret hash in AccessBot must match the one you set in Flutterwave exactly — otherwise webhooks fail verification and access isn't granted.
Payments
Set up Razorpay
Razorpay — cards, UPI & netbanking for India
Razorpay is the go-to for India, supporting cards, UPI, and netbanking with recurring subscriptions. You'll need two values: your Key ID and Key secret.
Dashboard › Payments › Razorpay
Razorpay
Card · UPI · netbanking · India
rzp_live_••••••••
••••••••••••
SaveConnected
Payments → Razorpay
In your Razorpay dashboard, go to Settings → API Keys and generate/copy your Key ID and Key secret.
Paste both into Payments → Razorpay and click Save.
Copy the webhook URL from the card and add it under Razorpay Settings → Webhooks:
Webhook URL…/webhooks/razorpay/123
Tip: Use live keys (rzp_live_…) for real subscribers. The Key secret is shown only once when generated — save it immediately.
Warning: UPI recurring mandates require the subscriber to approve auto-debit; make sure your plan cycle is set so renewals line up with the mandate.
Payments
Set up Mercado Pago
Mercado Pago — cards & wallet for Latin America
Mercado Pago is the leading option across Latin America (Brazil, Argentina, Mexico, and more), supporting cards and wallet payments with recurring preapproval. You need a single value: your Access token.
Paste it into Payments → Mercado Pago and click Save.
Copy the webhook URL from the card and register it under your app's Notifications / Webhooks:
Webhook URL…/webhooks/mercadopago/123
Warning: Use the Production access token, not the test one — test credentials won't process real subscriber payments.
Tip: Mercado Pago handles renewals through preapproval (recurring authorization), so once a subscriber approves, future cycles bill automatically.
Payments
Set up M-Pesa (Safaricom Daraja)
Take mobile-money payments in Kenya
M-Pesa lets your Kenyan subscribers pay straight from their phone — no card, no app switch. AccessBot connects to Safaricom's Daraja API and triggers an STK push: the subscriber types their number, a prompt pops up on their handset, and they approve it with their M-Pesa PIN. Payment usually confirms in 1–2 minutes.
Heads up: M-Pesa is Kenya only, and charges are one-time — there is no auto-renew. When the paid period ends, access simply expires and the subscriber pays again.
What you'll paste in
Grab these five values from your Safaricom Daraja developer account, then open Dashboard › Payments › M-Pesa:
Field
Where it comes from
Consumer key
Your Daraja app credentials
Consumer secret
Your Daraja app credentials
Shortcode / Till
Your Paybill or Till number
Passkey
The Lipa na M-Pesa Online Passkey — issued by Safaricom for your shortcode
Environment
Choose sandbox to test, production to go live
Missing your Passkey? It's the one value Safaricom doesn't always surface in the Daraja portal — and STK Push cannot initiate a payment without it. Email Safaricom's API team at apisupport@safaricom.co.ke and request the Lipa na M-Pesa Online Passkey for your Paybill/Till, then paste it into Payments › M-Pesa.
Open Payments → M-Pesa in your dashboard.
Paste the consumer key, secret, shortcode/till and passkey.
Pick sandbox first, run a test payment, then flip to production and Save.
What the subscriber sees
Enter your M-Pesa number to pay KES 1,000.
0712 345 678
📲 Check your phone and enter your M-Pesa PIN to confirm.
💬Enter number
📲STK push
🔑Approve with PIN
✅Access granted
Payments
Accept Telegram Stars
The zero-setup payment method
Telegram Stars (⭐) is the fastest rail to switch on — no keys, no provider account, nothing to paste. Just toggle the Stars provider ON and your subscribers can pay natively inside Telegram, with no card and no leaving the chat.
Toggle Stars ON in Payments — that's the whole setup.
Set your Stars-per-USD rate if you want (default is 50 ⭐ = $1).
Done — plans show a Star price and subscribers pay in one tap.
What the subscriber sees
Premium — 500 ⭐ / month
⭐ Pay 500 Stars
One-time vs. auto-renewing
Telegram is smart about duration:
Plan length
Behaviour
Monthly (30 days)
Becomes an auto-renewing Star subscription — renews itself every 30 days
Any other duration
One-time charge — access expires at the end of the period
Tip: Revenue from Stars is automatically converted to your default currency in reports, so it lines up with your other rails.
Cancelling
Subscribers cancel a Star subscription inside Telegram (Settings → Stars → subscriptions) or by tapping on their Status card. Access continues until the paid period ends.
🔘Toggle ON
⭐Tap to pay
🔁Auto-renews (monthly)
Payments
Accept crypto (NOWPayments)
Take BTC, USDT, ETH and 100+ coins
AccessBot accepts crypto through NOWPayments, which gives your subscribers a hosted checkout invoice covering Bitcoin, USDT, Ethereum and 100+ other coins. Payment confirms once the network settles — usually a few minutes. Charges are one-time (access expires and the subscriber pays again to renew).
Generate an API key and an IPN Secret from your NOWPayments settings.
Paste both into Payments → Crypto and Save.
Where it goes
Dashboard › Payments › Crypto
Crypto (NOWPayments)
••••••••
••••••••
SaveConnected
Payments → Crypto
Note: Crypto works on your main bot only. The IPN Secret is what lets AccessBot trust the "payment settled" callback — don't skip it.
🧾Hosted invoice
🪙Send coins
⛓️Network settles
✅Access granted
Payments
Currencies & exchange rates
One default currency, many rails
You price everything in a single default currency and AccessBot handles the rest. Every plan price is stored in your default currency, then converted to whatever a payment provider needs at charge time using live daily exchange rates.
So a plan priced at $10 can be charged in KES over M-Pesa, in Stars over Telegram, or in USDT over crypto — all from the one number you set.
Open Settings and find the currency picker.
Choose your default currency — this is the unit your plan prices are stored in.
Change it anytime — you can switch defaults whenever you like.
How a price travels
🏷️Price in default ($10)
💱Live daily FX
💳Charged in rail's currency
Rail
Charged as
M-Pesa
Converted to KES
Telegram Stars
Converted to ⭐ (via your Stars-per-USD rate)
Crypto
Converted to the coin the subscriber picks
Tip: Because conversion happens at charge time, you never re-price plans when FX moves — the daily rate does it for you. Revenue reports roll everything back up into your default currency.
Your timezone
Next to the currency picker in Settings is your workspace timezone. Dates your members see — renewal reminders, "valid until", expiry notices — are shown in this timezone, so pick the one your audience lives in. It defaults to UTC.
Payments
Recover failed & abandoned payments
Turn "almost paid" into paid
Plenty of subscribers start checkout and get distracted before finishing. Payment RecoveryGrowth+ automatically nudges anyone who began a payment but didn't complete it — so you win back revenue that would otherwise vanish.
Subscriber starts a payment but never confirms.
Payment Recovery sends an automatic reminder to nudge them back.
If they still don't pay, the stale pending record auto-fails after a few hours.
What a nudge looks like
👋 You were one step from unlocking Premium. Tap below to finish — it only takes a moment.
Complete payment
Clean records, automatically
Payments that sit in pending without confirming don't linger forever. After a few hours they auto-fail, so your dashboard shows an accurate picture instead of a pile of half-finished attempts.
🛒Payment started
⏳Not finished
🔔Auto nudge
🧹Stale → auto-fail
Tip: Payment Recovery is a Growth+ feature. Upgrade to switch on automated abandoned-payment nudges.
Payments
Refunds & disputes
You hold the money — and the controls
AccessBot never holds your subscribers' money. Because you bring your own payment keys, funds flow straight into your provider account. That means refunds and disputes are handled where the money actually lives: your provider's own dashboard (Stripe, PayPal, and so on).
Task
Where you do it
Issue a refund
Your provider's dashboard (Stripe / PayPal / etc.)
Fight a chargeback / dispute
Your provider's dashboard
Stop a subscriber's auto-renewal
The subscriber taps Cancel auto-renewal on their Status card
Stopping auto-renewal
To end an auto-renewing subscription, the subscriber taps "Cancel auto-renewal" on their Status card. For Telegram Stars subscriptions, they cancel inside Telegram instead. Either way, access continues until the paid period ends — cancelling never cuts someone off mid-period.
✅ Premium — active until 6 Aug. Auto-renews with ⭐ Stars.
Cancel auto-renewal
Remember: Since AccessBot takes no cut and never touches the funds, we can't issue refunds on your behalf — do it in your provider dashboard, where you have the full transaction and dispute tools.
💳Your provider holds funds
↩️Refund there
🛑Subscriber cancels renewal
📆Access runs to period end
Discord
Sell membership on Discord — how it works
AccessBot runs paid membership on your own Discord server too — right alongside Telegram. A single plan can unlock a Telegram channel, a Discord role, or both at once, and members pay one price to get everything.
🛒Member subscribes
→
🔗Links Discord
→
🎟️Gets the role
→
⏳Removed on expiry
ACCESS IS A ROLE
On Discord, access = a role. You map each plan to a role; when a subscriber links their Discord account, AccessBot assigns that role and keeps it while they're paid. When the membership lapses, the role comes off automatically — the same lifecycle as Telegram's invite & kick.
One plan, both platforms. Add a Telegram channel and a Discord role to the same plan, and members unlock both with a single subscription — no double-charging.
WHAT YOU NEED (one-time, ~5 min)
A Discord server you administer.
A free Discord app + bot — created in the Developer Portal (next article).
A role that paying members receive.
Members pay through your Telegram Mini App storefront, then tap Link Discord on their subscription to receive the role. Set it all up in the two articles below.
Discord
Set up your Discord app, bot & server
This is the one-time setup on Discord's side. Do it once and you never touch the Developer Portal again. It takes about five minutes.
Open the Bot tab → Reset Token → Copy the token. (You'll paste it into AccessBot.) Toggling Server Members Intent on is recommended.
Keep the bot token secret — anyone who has it controls your bot. If it leaks, Reset Token and paste the new one into AccessBot.
2 · OAUTH2 (so members can link their account)
Open the OAuth2 tab → copy the Client ID and Client Secret.
Under Redirects, add this exact URL:
https://accessbot.app/discord/callback
Add this redirect in the Developer Portal → OAuth2
3 · INVITE THE BOT TO YOUR SERVER
Still in OAuth2 → URL Generator.
Under Scopes tick bot. A Bot Permissions panel appears — tick Manage Roles.
Copy the generated URL, paste it in a browser, pick your server → Authorize.
The bot shows as offline — that's fine. AccessBot uses Discord's REST API, so it doesn't keep a live connection; it can still assign roles while appearing offline.
4 · CREATE THE ROLE & FIX THE HIERARCHY
In Server Settings → Roles, create a role for paying members (e.g. "Members"). Then drag your bot's own role above it — Discord won't let a bot assign a role that sits higher than its own.
🤖 Your bot's role keep this higher ↑
🎟️ Members — the paid role
@everyone
5 · COPY YOUR IDs
Enable Developer Mode: User Settings → Advanced → Developer Mode on.
Right-click your server icon → Copy Server ID.
Server Settings → Roles → the ⋯ next to your role → Copy Role ID. (The name won't work — AccessBot needs the numeric ID.)
You now have four things: bot token, server (guild) ID, OAuth client ID, client secret — plus a role ID. Next article: paste them into AccessBot.
Discord
Connect Discord & add a role to a plan
With your Discord app ready, connecting it in AccessBot is a few pastes — applied live, no restart.
1 · CONNECT YOUR SERVER
In the dashboard, open the Discord section and fill in the four values from the setup article, then switch Enable Discord on.
Dashboard › Discord
••••••••••••
1524156477596631311
client id · ••••••
Save● Live
Discord → paste, enable, save
2 · ATTACH THE ROLE TO A PLAN
Open Plans, edit (or create) a plan, and paste the Role ID into Discord role ID. A plan can have a Telegram channel and a Discord role, or just one — your call.
1524157986573123646
3 · HOW MEMBERS GET THE ROLE
A member subscribes as usual, then opens the Mini App and taps Link Discord on their subscription. They authorize once — AccessBot adds them to your server and grants the role. It's removed automatically when the subscription ends.
🎟️ Test — active until 6 Aug
🎮 Link Discord for access
The member's subscription in the Mini App
Not working? Check: the role ID is the number (not the name), Enable Discord is on, the bot's role sits above the members role, and the redirect URL https://accessbot.app/discord/callback is added in the Developer Portal.
Members & migration
Manage your members
Your Customers list, at a glance
The Customers (Members) section is the roster of everyone who has ever paid you. Each person shows their real name and username — not a faceless "User 12345" — alongside the plan they bought, when it expires, and the total they have paid you over their lifetime. Use the search box to jump to anyone by name, @username, or plan.
Dashboard › Customers
@jane · Card Test MonthlyActive · 21 days
@marcus · VIP AnnualActive · 314 days
@lena · Card Test MonthlyExpired
Every member with plan, expiry, and status
Open a member to take action
Click any row to open that person. From there you can:
Extend their expiry manually — grant extra days if you comped them, refunded a hiccup, or want to reward a loyal subscriber. The bot keeps their channel access in sync automatically.
Revoke access — remove them from your private channels right now, before their date is up.
Add private notes — jot context only you can see (VIP, refunded once, referred by Sam). Notes stay attached to the member.
Tip: Extending expiry is the friendly fix for almost anything — a support hiccup, a goodwill gesture, or a manual renewal. The subscriber never loses access while you sort it out.
Members & migration
Block a user & spam protection
Keep bad actors out
Occasionally someone abuses your bot, your channel chat, or tries to game payments. From a member's profile you can block or mute them. A blocked user cannot pay you and cannot join your private channels — the door is simply shut.
Abusive userBlock / muteCan't payCan't join
Automatic spam defenses
You do not have to police everything by hand. AccessBot ships with built-in guards:
Defense
What it does
Flood protection
Detects users hammering the bot with rapid messages or taps.
Auto-mute
Temporarily silences accounts that trip the spam threshold.
Auto-ban
Removes persistent spammers so they can't reach your subscribers.
@spam_bot_99 · flood detectedMuted
Warning: Blocking is a hard stop — the user loses the ability to pay and their channel access is revoked. Use mute for a cool-down and block for genuine abuse. You can reverse either from the member's profile if it was a mistake.
Tip: If a legitimate subscriber gets caught by flood protection, open their profile and un-mute them — their remaining subscription time is untouched.
Members & migration
Migrating from another tool
Bring your paying members with you
Switching from another membership tool (like InviteMember) does not mean starting over — your existing subscribers can carry across so their remaining time follows them, and nobody re-pays for days they already own.
Two ways to move members in
Access codes (self-serve) — generate redeemable codes in the dashboard and share them with your current members. Each code grants a plan and the right number of days, so their remaining time carries over. Great for small moves, or when you'd rather members opt in themselves.
Assisted migration (recommended for a full switch) — send us your export and our team handles it for you. We normalize and review the data first — matching plans, cleaning up expiry dates, and flagging anything odd — before loading your members, so nothing lands wrong.
How an assisted migration works
📤You send your export
→
🧹We normalize + review
→
✅You approve
→
👥Members loaded
@jane · migrated · 21 days leftActive · 21 days
Tip: Export from your current tool with each member's ID, plan, and expiry/renewal date — that's all we need to carry their remaining time across.
Moving your members?Contact support with your export and we'll normalize, review, and load it for you — so your data lands clean.
Storefront & Mini App
Set up your Mini App storefront
Your in-Telegram store
The Mini App is your storefront inside Telegram — subscribers browse your plans and pay in one tap without ever leaving the chat. To switch it on, you register your workspace's Web App URL with Telegram once.
Find your Web App URL
Dashboard › Mini App
Web App URL
https://acme.accessbot.app/app
Copy
Mini App → your Web App URL
Register it in @BotFather
Open @BotFather → /mybots → pick your bot.
Bot Settings → Configure Mini App (or Menu Button) → paste your Web App URL.
Optional: send /newapp and set the short name join to get a shareable t.me/yourbot/join link.
Welcome to Acme VIP 🛍️
🛍️ Open Store
Tip: Always copy the URL straight from the dashboard Mini App section — it's tied to your own subdomain, so pasting it exactly is what makes the store open correctly.
Storefront & Mini App
Customize your storefront
Make the store yours
Open the Storefront editor (Settings → Mini App) to brand the Mini App so it looks like your business, not a template. Every change is reflected in a live preview link that runs on your own subdomain. Yes, you can upload images — they're hosted for you, no external link needed.
Setting
What it controls
Logo
The mark at the top of your store.
Cover image
The hero banner subscribers see first.
Featured images
Upload one or more photos for the Featured content cards members see in the Mini App.
Plan & category images
Give each plan or category its own picture, shown on its card and pay screen.
Accent color
Buttons and highlights — match your brand.
Description
Your pitch: what members get and why to join.
Dashboard › Storefront
Accent color
#7C3AED
SavePreview
Storefront editor with live preview on your subdomain
Acme VIP — trading calls, daily 📈
🛍️ Open Store
Tip: Use a wide, high-contrast cover image and a one-line description that states the value plainly. The accent color carries through the pay buttons, so pick something that reads clearly against both light and dark Telegram themes.
Storefront & Mini App
Share your join link
One link, everywhere
Once your Mini App is live, you have a single link that opens your store: t.me/yourbot or the Mini App deep link t.me/yourbot/join. Put it anywhere your audience already is, and every tap lands them one step from paying.
Share linkOpen storePay in one tapAuto-added
Where to share it
Social posts — drop the link in your announcements and pinned posts.
Bio / link-in-bio — Instagram, X, TikTok, YouTube.
QR code — turn the join link into a QR for slides, flyers, or a live stream overlay.
Dashboard › Mini App
Join link
t.me/acmevip/join
CopyQR
Copy your join link or grab a QR
Tip: The /join deep link opens the store directly, skipping the bot's welcome screen — it's the smoothest link for cold traffic from social.
Growth & automation
Sell one-off services & products
Beyond subscriptions
Alongside recurring memberships you can sell one-off services — a one-time payment for something that isn't a channel subscription: a 1:1 session, a shoutout, a digital file, a setup fee, a paid DM, whatever you offer. Manage them in Sales → Services (a Starter+ feature).
How it works
Open Sales → Services and add a service: name, price (in your workspace currency), and a short description.
It appears in your Mini App storefront for members to buy with any payment rail you've enabled.
Each purchase is recorded as a service order so you can track and fulfil it — one-time, no expiry or auto-removal (services don't grant channel access on their own).
Tip: Use services for the extras your members ask for, then deliver them yourself. Need it bundled with access instead? Put it in a plan.
Growth & automation
Send a broadcast
A broadcast is a single message pushed to every one of your members at once — the fastest way to announce new content, a price change, or a limited-time offer. Starter+
📣 New content just dropped! Check the channel.
How a broadcast lands in each member's chat
Send one in three steps
Open Broadcast. In the dashboard sidebar, go to the Broadcast section.
Compose your message. Type your text — keep it short, lead with the value, and add one clear call to action.
Send & track. Hit send and the platform fans the message out to all members. Delivery is tracked so you can see it went out.
Tip: Broadcasts are best used sparingly — a well-timed drop announcement or renewal reminder gets far more engagement than frequent blasts, which train members to mute the bot.
Good moments to broadcast
New content, episode, or drop is live
A time-limited promo or discount code
Scheduled maintenance or an access change
A milestone worth celebrating with your community
Every member who has started your bot receives the message directly in their Telegram chat — no channel post required.
Growth & automation
Loyalty rewards
Loyalty rewards turn spending into a game your subscribers want to play. Members earn points from what they spend — roughly 1 point per $1 — and climb tiers that unlock a checkout discount. Growth+
Mini App › Rewards
💎 Diamond · 500 pts15% off
🥇 Gold · 200 pts10% off
🥈 Silver · 50 pts5% off
Mini App → Rewards & loyalty tiers
Default tiers
Tier
Discount
🥉 Bronze
0%
🥈 Silver
5%
🥇 Gold
10%
💎 Diamond
15%
Customize everything
Open the Mini App section and find "Rewards & loyalty tiers". There you can change each tier's name, icon, points needed, and discount percentage to fit your pricing and brand.
Tip: Space your tiers so the first reward feels reachable fast — an early Silver win hooks new subscribers, while Diamond keeps your biggest spenders coming back.
The discount applies automatically at checkout in the Mini App once a subscriber reaches a tier, so there is nothing for them to redeem manually.
Growth & automation
AI support assistant
The AI support assistant answers your subscribers' questions right inside the bot — about payments, access, and common Telegram issues — so you are not fielding the same messages all day. Growth+
🤖 Your payment went through and your access is active until Aug 6. Anything else I can help with?
The assistant replying to a subscriber in-chat
What it knows
Answers are grounded on two sources:
Built-in FAQ+Your knowledge base→Accurate reply
A built-in FAQ covering payments, access, and Telegram basics
Your own knowledge base — add the specifics of your community, plans, and policies
Turn it on
Open Settings. Go to the Settings section of your dashboard.
Add your OpenAI key. Paste your own OpenAI API key to enable the assistant.
Enrich the knowledge base. Add your own answers so replies match your rules exactly.
Tip: The more you put in your knowledge base, the fewer edge-case questions reach you — treat it like training a new support hire.
Because it runs on your OpenAI key, you stay in control of usage and cost.
Growth & automation
AI re-engagement
AI re-engagement automatically reaches out to lapsed and churned members with a friendly, personal-feeling nudge to win them back — no manual list-building required. Growth+
👋 We miss you! Your favorite perks are still here — come back and pick up where you left off.
A win-back nudge sent to a churned member
How it works
Member lapses→AI drafts a nudge→Sent in-bot→Win-back
The system watches for members whose access has ended or is slipping, then sends a warm message encouraging them to resubscribe. It works automatically in the background once your bot is running.
Why it matters
Recovering an existing member is far cheaper than acquiring a new one
A timely nudge catches people who simply forgot to renew
It runs on autopilot, so no churned member slips through unnoticed
Tip: Pair re-engagement with loyalty rewards — a returning member who sees their points and tier waiting for them has a concrete reason to come back.
Combined with the AI support assistant, re-engagement rounds out a bot that both keeps current members happy and quietly reclaims the ones who drifted away.
Growth & automation
Analytics: revenue, growth & churn
The dashboard turns your bot's activity into numbers you can act on — revenue, new subscribers, growth, churn, active-member count, and per-category breakdowns — all with time-range filters.
$1,240
Revenue (30d)
86
Active members
KPI cards on the dashboard home
What you can see
Metric
Tells you
Revenue
Money earned in the selected range
New subscribers
Fresh sign-ups over time
Growth
Net direction of your member base
Churn
Members who lapsed or cancelled
Active members
Who currently has access
Category breakdown
Which plans/categories drive results
Where to find it
Headline KPIs sit on the dashboard home. For deeper detail, open the dedicated analytics view and adjust the time-range filter to compare this week, this month, or a custom window.
Tip: Watch churn and growth together — rising revenue with rising churn means you are refilling a leaky bucket. That is the cue to lean on AI re-engagement and loyalty rewards.
Use the per-category breakdown to spot your best-performing plans and double down on what your audience actually pays for.
Bots & team
Run multiple bots
You are not limited to a single bot. Add more bots and route specific plan categories to each one, so every bot shows only its own plans — perfect for separate brands, languages, or product lines.
Create it in @BotFather. Open Telegram, message @BotFather, and grab the bot token.
Add it in the Bots section. Paste the token — the bot is registered live, no restart needed.
Route your categories. Tick which bot(s) serve each plan category — one bot, or several sharing the same plans and Mini App. Untick all to fall back to your main bot.
Bot limits by plan
Plan
Bots
Entry / Starter
1
Growth
5
Scale
10
Pro
15
Enterprise
Unlimited
Tip: Use one bot per audience — for example a free-trial bot and a premium bot — and route each its own categories so members never see plans that do not apply to them.
All bots run inside the same account and dashboard, so revenue and analytics stay consolidated in one place.
Bots & team
Add team members (seats)
Bring your team into the dashboard by inviting them as dashboard users. Each teammate gets a role that controls exactly what they can do.
Team
👤 Alex — full accessadmin
👤 Sam — read-onlyviewer
Teammates with their assigned roles
Two roles
Role
Can do
Admin
Full access — manage plans, bots, settings, and members
Viewer
Read-only — see analytics and data, change nothing
Invite a teammate
Open the team area. Invite teammates as dashboard users from your settings.
Pick a role. Choose admin for full access or viewer for read-only.
Seats by plan
Plan
Seats
Entry / Starter
1
Growth
5
Higher tiers
More / unlimited
Tip: Give support staff the viewer role so they can look up a member's status without any risk of changing plans or settings.
Bots & team
Get admin alerts on Telegram
Get your business alerts as Telegram DMs from your own bot — new payments, code redemptions, milestones, and a daily expiry digest — so you stay on top of things without opening the dashboard.
💳 New payment: Gold plan — $25. Member active until Aug 6.
A live payment alert DM'd to you by your bot
Set it up
Link your Telegram ID. In My Account, add your Telegram ID so the platform knows who to DM.
Start your own bot. Open your bot in Telegram and send /start — this lets it DM you.
Receive alerts. Business notifications now arrive directly in your chat.
What you'll be alerted about
New payments — as subscribers pay
Code redemptions — when a member redeems an access code
Milestones — notable growth moments
Daily expiry digest — who is about to lapse, summarized once a day
Tip: A bot can only message you after you have sent it /start. If alerts never arrive, that missing /start is almost always why.
The expiry digest is a quiet daily heads-up — a perfect prompt to fire off a broadcast or lean on AI re-engagement before members drift.
Your account & billing
Your AccessBot plan & member limits
Your AccessBot subscription is a platform plan you pay us for — completely separate from the money your subscribers pay you. What you pay is metered by one number: your count of active members across all of your bots.
The tiers & their caps
Plan
Active members
Bots
Starter
100
1
Creator
2,000
3
Scale
12,000
10
Studio
50,000
25
Enterprise
Unlimited
Unlimited
Higher tiers also unlock more team seats and advanced features (see "What's included on each plan"). Your current plan and live usage are shown under Dashboard › Billing.
Members
Toward your plan cap
842 / 1,000Starter
Your usage meter, shown on Billing
Tip: This is a soft cap — nobody is removed for going over. You get a short grace window, and if you stay over you'll be nudged to upgrade before new joins pause.
Your account & billing
What's included on each plan
Every plan includes your own white-label bot, all commerce payment rails, multi-currency, the Mini App storefront, member management, analytics, and support. Higher tiers unlock more automation and capacity.
Team seats: Entry 1 · Starter 1 · Growth 5 · Scale, Pro & Enterprise unlimited.
How the gating works
When you change plans, gated features unlock or lock automatically to match your new tier — nothing to reconfigure. Growth+ features simply reappear the moment you're on Growth or above, and any data you'd already set up (loyalty rules, AI prompts, recovery settings) is kept and reactivated. If you're weighing tiers, the shorthand is: Starter unlocks the manual growth tools (codes, broadcasts, services), while Growth and up add the automated ones (AI and loyalty) plus room for a bigger team and more bots. Analytics and human support never sit behind a paywall — they're on Entry too.
Your account & billing
Upgrade, downgrade, or change plan
Changing plans takes about ten seconds and happens entirely in the dashboard.
Dashboard › Billing
Growth — $99/mo
10,000 members · 5 bots · unlimited automation
Change planActive
Billing → your current plan and the Change plan button
Open Dashboard › Billing and press Change plan.
Pick the tier you want — up or down. Checkout is handled securely by PayPal, M-Pesa or crypto.
Confirm. The change applies immediately and your invoice is prorated.
What happens to features
On an upgrade, higher-tier features (AI, loyalty, recovery, extra bots and seats) unlock right away. On a downgrade, features above your new tier lock, and any bots or seats beyond the new limit stay in place but can't be added to.
Tip: If you're near your member cap, upgrade before you hit the grace window so new joins never pause.
Your account & billing
Monthly vs annual & the free trial
You choose how often you're billed, and every new workspace starts free.
💳Choose a plan (pay to activate)
→
📅Pick monthly or annual
→
🚀Keep running your bot
The free trial
AccessBot doesn't run a free trial — you choose a plan and your workspace activates as soon as the payment clears. You can cancel at any time from the Billing page and keep access to the end of the period you've already paid for.
Monthly vs annual
Monthly — pay as you go, cancel or change any time.
Annual — one payment for the year, roughly two months free versus paying monthly.
Switch your billing cycle whenever you like from the Billing page; the new cycle is prorated at checkout via PayPal, M-Pesa or crypto, so you're only ever charged for the difference. Annual is the best value if you're committed to running your membership long-term, while monthly keeps things flexible if you're still finding your footing.
Billing cycle
MonthlyAnnual — save ~2 months
Choosing your cycle on the Billing page
Your account & billing
What counts as an active member?
Only one thing decides where you sit against your plan cap: how many active members you have right now.
The rule
Counts: any subscriber with live, unexpired access to one of your bots.
Doesn't count: members whose access has expired, or who have been removed.
Because expired members drop off automatically, your count naturally rises and falls with your live subscriber base — you're never billed for people who have already churned.
Members — Starter
Active = live access only
842 live156 expired · not counted
Live members count; expired ones don't
The soft cap
The cap is soft. If you cross it, existing members keep their access — nothing is ever cut off abruptly. There's a short grace window; only if you stay over it will new joins pause until you upgrade. You'll be nudged in the dashboard well before that point.
Your account & billing
Update your profile & password
Manage your own login and admin details under My Account. This is where you keep your workspace secure and make sure your bot can reach you with the alerts that matter — new payments, code redemptions, and payment failures all arrive as a direct message from your own bot.
Dashboard › My Account
acme_admin
7290145533
••••••••••
Save changes
My Account → profile & security
What you can change
Username — update your display/login name any time.
Password — set a new one; use something long and unique.
Telegram ID — link it so your bot can DM you admin alerts (new payments, code redemptions, failures).
Tip: If you're not getting admin DMs, the most common cause is a missing or wrong Telegram ID here — and you must have pressed /start on your own bot at least once.
Troubleshooting
My bot isn't responding
If your bot has gone quiet — no reply to /start, no menu, nothing — it is almost always a token problem. Telegram talks to your bot through a secret token, and if that token changed or was revoked, AccessBot can no longer receive updates for it.
Quick checklist
Check the token in the Bots page is the current one. If you regenerated it in BotFather, paste the new token and reconnect — this re-registers the bot live.
Confirm the bot is alive in BotFather — it must not be stopped or deleted.
Send /start yourself to test a reply. A working bot answers instantly.
Tip: Reconnecting the token in the Bots page is the single fix that resolves most "silent bot" cases — it forces AccessBot to re-register the webhook with Telegram.
Why revoking breaks it
When you tap "Revoke current token" in BotFather, the old token stops working immediately. Any bot still configured with the old token will look connected but receive nothing. Paste the fresh token, save, and test again.
Warning: Don't run the same bot token in two places (for example, another hosting tool). Telegram delivers each update once, so the two will fight over messages and your bot will seem to reply at random.
Troubleshooting
Members aren't being added or removed
Auto-add and auto-remove depend entirely on your bot's admin rights in the channel or group. If a paying subscriber isn't let in, or an expired one is still lurking, the cause is nearly always missing permissions or an unlinked chat.
The two must-haves
Channel admins
🤖 Your botAdmin · can add + ban
Bot must be admin with both add-members and ban/remove rights
Make the bot an admin of the channel/group with "Add members" turned on — without it, new subscribers can't be invited.
Enable "Ban users" for the same bot — without ban rights, expired members can't be removed.
Link the chat to the plan in your dashboard. An unlinked channel is never touched by the bot.
Warning: If you recently changed the bot's admin permissions, Telegram may have reset them. Remove the bot and re-add it as admin with both rights to be safe.
Still stuck?
Confirm the subscriber's payment actually shows as Confirmed — a pending payment won't trigger an add. And check the plan is linked to the correct channel, not an old test one.
Troubleshooting
I'm not getting admin notifications
Admin alerts — new payments, joins, expiries, redemptions — are sent as a direct message from your bot to you. If they're not arriving, the bot either doesn't know who you are, or isn't allowed to DM you yet.
Fix in two steps
Link your Telegram ID in My Account. Notifications go to the linked admin(s) — not to a group chat.
Open a chat with your own bot and press /start. Telegram blocks bots from messaging anyone who hasn't started them first.
✅ New payment: Jane subscribed to Gold — KES 1,500. Confirmed.
What a working admin alert looks like
Tip: Adding a second admin? Each person must link their own Telegram ID in their account and /start the bot individually — there's no shared inbox.
Common mix-ups
Expecting alerts in a group — they only go to linked admins by DM.
Linked the wrong ID (a personal account vs. the one you use with the bot).
Blocked the bot at some point — unblock it, then /start again.
Troubleshooting
A payment didn't go through or is stuck pending
A payment moves from Pending to Confirmed only when the provider tells AccessBot it succeeded. For cards and PayPal, that confirmation arrives via a webhook — so a missing or wrong webhook URL is the number-one reason payments hang.
Fix checklist
Copy the webhook URL from the Payments page and paste it into your provider's dashboard (Stripe, PayPal, etc.).
Confirm the provider is enabled and connected in AccessBot.
Ask the subscriber for their receipt if you're unsure whether money actually moved.
Method
How it confirms
Typical wait
Card / PayPal
Provider webhook
Seconds — if webhook is set
M-Pesa / crypto
Automatic callback
A few minutes
Tip: Payments left pending too long auto-fail after a few hours. Nothing is charged — the subscriber simply retries from /plans.
Warning: Test/sandbox webhook URLs won't confirm real payments. Use the live URL shown on the Payments page.
Troubleshooting
M-Pesa STK push isn't arriving
The STK push is the pop-up on the subscriber's phone asking for their M-Pesa PIN. If it never shows, the issue is almost always the phone number, an expired prompt, or your Daraja setup.
📲 Check your phone and enter your M-Pesa PIN.
The prompt the subscriber should see within seconds
Checklist
Verify the number is correct and on an active Safaricom SIM.
Act fast — the STK prompt expires after about 5 minutes.
Have them retry from /plans to trigger a fresh push.
Check your Daraja credentials and confirm you're in production mode, not sandbox.
Warning: Sandbox credentials never reach real phones. If your bot is live, your Daraja consumer key, secret, shortcode, and passkey must all be the production set.
Tip: If the prompt arrives but the payment stays Pending, that's a callback issue — confirm your M-Pesa callback URL from the Payments page is saved correctly.