ChainPass Documentation
Everything you need to know to sell — and buy — access to Telegram channels with on-chain crypto payments. If anything is unclear, open @ChainPassBot and tap 📩 Support.
Introduction
ChainPass is a non-custodial crypto payment gateway for private Telegram channels. It lets a channel owner sell subscriptions (weekly, monthly, lifetime — any duration) that are paid on-chain and delivered automatically.
Three principles drive the design:
- Non-custodial. Buyers pay directly to the owner's wallet. ChainPass watches the blockchain to confirm the payment; it never holds, forwards or freezes anyone's funds.
- Fully automatic. Invoicing, payment matching, invites, renewal reminders, expiry removal, referrals and support tickets all run inside the bot with no manual work.
- Transparent. Service fees are simple (see Fees), collected on-chain to public treasury addresses anyone can audit, and never billed as an invoice to the owner.
The whole product lives in one Telegram bot: @ChainPassBot. There is no web dashboard to sign up for and no API keys to manage.
Quick start — sellers
You need: a private Telegram channel you administer, and a wallet address to receive payouts. Setup takes about two minutes.
1. Start the wizard
Open @ChainPassBot and send /sell.
2. Connect your channel
Add the bot as an administrator of your private channel with at least these permissions:
- Invite users via link — so paid members receive their one-time invite
- Ban users — so expired members can be removed
The wizard verifies the admin rights automatically and moves on.
3. Set your payout wallet
Paste the address where you want to be paid — an EVM address (0x…) to sell on Ethereum, Base, BNB Smart Chain and Robinhood Chain, or a Solana address to sell in SOL. Every sale is sent by the buyer directly to this address — double-check it. You can change it later from your dashboard.
4. Choose networks
Pick which networks you accept (see Supported networks). You can enable one or several — the list shows the networks compatible with your payout address.
5. Define your plans
Enter plans as <days> <usd> pairs, one per line, using life for lifetime:
7 15
30 40
life 75
That creates a $15 weekly, a $40 monthly and a $75 lifetime plan. Prices are set in USD; buyers pay the equivalent in crypto at the live market rate when the invoice is created.
6. Share your sale link
The wizard gives you a personal link in the form:
https://telegram.me/ChainPassBot?start=c_<your-slug>
Anyone who opens it lands on your channel's sales page with your plans and can pay immediately. Put it in your channel bio, pinned messages, ads and cross-promos.
Quick start — buyers
Buying access takes under a minute:
- Open the channel's sale link (or send
/buyin the bot if you've visited it before). - Pick a plan. You'll see the price in USD and the exact crypto amount at the current rate.
- Pick a currency & network — the chain's native coin (ETH, BNB, SOL) at the live rate, or a USDT / USDC stablecoin for a fixed dollar amount with zero volatility.
- Choose a payment method — ✅ Wallet payment if you're sending from your own wallet, or 🏦 CEX payment if you're withdrawing from an exchange like Binance or Bybit. Details in Payment methods.
- Send the shown amount to the shown address on the shown network. Sending on a different network means the funds are lost — always check.
- Get your invite. As soon as the transaction is confirmed on-chain, the bot sends you a one-time invite link to the channel. This is usually a matter of seconds after confirmation.
After buying, use /status to see your plan, expiry date and a one-tap 🔄 Renew button, and /ref to get your referral link (see Referral program).
Plans & limits
| Limit | Value |
|---|---|
| Plans per channel | 6 — any mix of durations, e.g. 7d / 30d / 90d / lifetime |
| Channels per owner | 5 (unlimited with No-Fee Lifetime) |
| Plan pricing | Any USD amount; converted to crypto at live market rate per invoice |
| Plan duration | Any number of days, or life for lifetime |
- Renewals extend. Buying again before expiry adds the new period on top of the remaining days — subscribers never lose time by renewing early.
- Lifetime is forever. A lifetime subscription never expires and is never downgraded, even if the member later buys a shorter plan.
- Editable any time. Change plan names, durations and prices from your dashboard; changes apply to new purchases only.
Owner dashboard
Send /mychannels and pick a channel to open its dashboard. From there you can:
- 📈 Analytics — revenue over 7d / 30d / all-time, active & lifetime subscribers, upcoming expirations, churn, renewals vs new sales, and the sales mix per plan.
- 📥 Export CSV — download your full subscriber list (plan, expiry, total paid) as a spreadsheet-ready CSV, from Analytics or Subscribers.
- 💎 Edit plans — add, change or remove plans (same
days usdformat as the wizard). - 👛 Edit wallet — update your payout address. Applies to all new invoices immediately.
- 🎁 Grant — give a user free access for N days (or lifetime) without a payment — useful for mods, promos and giveaways.
- 👥 Subscribers — list of active subscribers with plan and expiry.
- 📣 Broadcast — message all your subscribers (see Broadcasts).
- 🛒 Stop / start new sales — hide your sales page so nobody new can subscribe. People who already paid are not affected: they keep their access and their days keep counting down.
- 🏖 Freeze / unfreeze subscribers — the opposite side: your sales page stays open, but the clock stops for everyone who already paid (see Holiday mode).
- 📩 Support contact — choose who receives your buyers' support tickets (see Support system).
- 💸 Fees — your current fee rate, accrued balance, and the No-Fee Lifetime upgrade.
Your sales page
When someone opens your channel's link they land on a page with your text on top and your plans below. You write that text from the dashboard: 📝 VIP page text. Prices, network and the plan buttons are added underneath automatically — you only write the part that convinces people.
Formatting and links
Format the message the way you normally would in Telegram: select a few words and make them bold, italic or a link. It carries over to the page as-is — you never type any code.
Links are the tidy way around the length limit: instead of explaining every payment method on the page, write “Complete payment guide” and point it at a post in your own channel.
For safety only text formatting and normal links (https:// and tg://) are kept; anything else is shown as plain text.
Right after you save, the bot shows you the finished page exactly as buyers will see it. Not happy? Send it again, or reset it to go back to the standard layout.
Broadcasts
From your dashboard you can send a message to every subscriber of your channel — announcements, renewal promos, migration notices. You'll see a preview and a confirmation step before anything is sent, and a delivery report when the broadcast finishes.
Support system
ChainPass includes a per-channel ticket system so buyers never have to hunt for the right person to DM.
For buyers
Tap 📩 Support in the menu (or send /support), pick which channel your question is about — or "ChainPass bot" for platform questions — and type your message. You'll get the reply right in the bot, marked "Reply from … support".
For owners
By default, tickets about your channel come to you as a DM from the bot, with a one-tap ✍️ Reply button. You can delegate this: in the dashboard, set 📩 Support contact to any teammate (by @username or ID — they must have started the bot once). Platform-level questions are handled by the ChainPass team.
Payment methods
Every invoice offers two ways to pay. Both end the same way — an on-chain transfer to the owner's wallet — but they're matched differently, so pick the one that matches how you're actually sending:
✅ Wallet payment
For payments sent from a wallet you control (MetaMask, Rabby, Trust, hardware wallets, …).
- Send the shown amount from your own address.
- A small tolerance (±0.3%) absorbs rounding, so minor precision differences are fine.
- Matched by amount and timing against the invoice; the closest matching transfer wins.
🏦 CEX payment
For withdrawals sent directly from an exchange (Binance, Bybit, OKX, …), where you can't control the sending address.
- The invoice shows a unique exact amount (the last decimals are specific to your invoice).
- Withdraw exactly that amount — the unique amount is how the payment is attributed to you, since exchange withdrawals come from shared addresses.
- If your exchange charges the withdrawal fee on top (most do), you're fine. If it deducts the fee from the amount, add the fee so the received amount is exact.
Matching & timing
- The bot scans new blocks continuously while any invoice is pending; confirmation-to-invite is typically seconds.
- Invoices expire after 6 hours. Payment method is locked once chosen — if you picked CEX but want to pay from a wallet (or vice versa), start a fresh purchase instead of reusing the old invoice.
- Creating a new invoice for the same channel cancels your previous pending one, so you can safely restart.
Supported networks
| Network | Currencies | Status | Explorer |
|---|---|---|---|
| Ethereum | ETH · USDC · USDT | ✅ Live | etherscan.io |
| Base | ETH · USDC | ✅ Live | basescan.org |
| BNB Smart Chain | BNB · USDT · USDC | ✅ Live | bscscan.com |
| Robinhood Chain | ETH · USDC · USDT | ✅ Live | explorer.mainnet.chain.robinhood.com |
| Solana | SOL · USDC · USDT | ✅ Live | solscan.io |
Owners choose which networks each channel accepts; a network's stablecoins are available automatically — tokens arrive at the same payout wallet, nothing extra to configure. The network family follows your payout address: an EVM wallet (0x…) sells on the EVM networks, a Solana wallet sells on Solana. Prices are always set in USD: native-coin amounts are computed at the live market rate when the invoice is generated, stablecoin amounts are simply the USD price 1:1 — either way, neither side carries exchange-rate risk during the payment window.
Stablecoin invoices only match the exact canonical USDT/USDC contract of that chain (the token contract is shown on the payment page). Look-alike tokens with the same ticker from other contracts are ignored.
Subscription lifecycle
- Purchase confirmed → the buyer receives a one-time invite link and joins the channel. The owner gets a sale notification.
- Active → the buyer can check plan and expiry with
/status, renew any time (renewals extend the current expiry), and open support tickets. - 3 days before expiry → automatic reminder with a renew button.
- 1 day before expiry → final reminder.
- Expiry → if not renewed, the member is automatically removed from the channel. They can come back any time by buying again.
- If the channel goes on a break → the clock stops for everyone and the missed days are given back (see Holiday mode).
Lifetime subscriptions skip steps 3–5: they never expire and are never removed.
Holiday mode
Channels go quiet sometimes — holidays, illness, a week off. Without protection, subscribers keep burning days they paid for while nothing is being posted. Holiday mode stops that.
For owners
In your dashboard, tap 🏖 Holiday mode. From that moment, for every non-lifetime subscriber of that channel:
- nobody expires and nobody is removed from the channel;
- no renewal reminders are sent;
- everyone is told the channel is on a break and their time is safe.
When you come back, tap ▶️ End holiday. Every frozen subscription has its expiry pushed forward by exactly the number of days the channel was on hold, and each subscriber gets a message telling them how many days they got back.
Details worth knowing
- Lifetime subscriptions are untouched — they never expire anyway.
- Someone who subscribes during the break is credited only from the day they joined, not for the whole break.
- It is not automatic. Only the channel owner decides when a break starts and ends: many channels post rarely by design, so "no posts" is not a reliable signal for a machine to act on.
The two switches, side by side
Your dashboard has two switches that sound similar and do opposite things. They sit next to each other, and each one names who it affects:
| 🛒 Stop new sales | 🏖 Freeze subscribers | |
|---|---|---|
| Who it affects | People who have not paid yet | People who already paid |
| Sales page | Hidden — nobody can buy | Still open — buyers can subscribe |
| Existing subscribers | Untouched — their days keep counting down | Clock stopped — days are given back |
| Use it when | You are full, retiring the channel, or reworking your plans | You are away and not posting |
Buyers can see this at any time in 📊 My Access: a frozen subscription is marked “Frozen — channel on a break” with the number of days that will be returned.
Custom notifications
ChainPass sends your subscribers a handful of automatic messages. By default they are in English; you can rewrite any of them in your own language, per channel. Dashboard → 🌐 Notifications.
What you can customise
- Payment confirmed — sent the moment a purchase clears.
- Access granted — when you hand someone access yourself.
- Reminder, 3 days and Reminder, under 24h — renewal nudges before expiry.
- Access expired — when a subscription lapses.
- Channel paused and Channel back — the holiday-mode freeze and resume.
These are the only messages that carry your voice to your buyers. The bot's own menus, buttons and error messages stay in the shared interface language and are not part of this — a channel is not a place to redefine the whole app.
Placeholders
Some messages include values the bot fills in at send time, written in curly braces:
| Placeholder | Becomes |
|---|---|
{channel} | your channel's name |
{expiry} | the access-until date |
{plan} | the plan name |
{days} | days credited back after a holiday |
Not every message gets every placeholder. {plan} only exists on Payment confirmed; {expiry} on Payment confirmed and Access granted; {days} only on Channel back. Used where it doesn’t belong, a placeholder would reach your subscribers as literal text — so the editor refuses it and tells you which ones are available in that message.
Right after you save, the bot shows you a preview of the message filled in with example values, so you see exactly what your subscribers will get.
Referral program
Every user has a personal referral link, available via /ref. When someone joins through it and buys:
- the referrer earns +7 days on their own subscription;
- the new user gets +3 bonus days on the plan they buy.
How often the +7 days are paid
Every purchase, with no cap. The 7 days are paid per purchase — not once per person and not once per month. If someone you referred is on a weekly plan and renews every week, you receive +7 days every week, for as long as they keep renewing. It stacks across people too: two referrals buying in the same week is +14 days.
The +3 days for the new user work differently: that one is a welcome bonus, paid only on their first purchase.
Where the days go
- If you have an active subscription to the channel they bought, the 7 days are added to it straight away and you get a message.
- If you don't have one there — or your access to that channel is lifetime — the days are banked and applied automatically to your next purchase. Nothing is lost either way.
Bonus days only apply to time-based plans: a lifetime plan never expires, so there is nothing to extend — which is why those days are banked instead.
For owners this is free, built-in growth: your existing subscribers are rewarded for bringing in new paying members, and the bonus days cost you nothing in fees.
Fees & No-Fee Lifetime
The price list
| Plan | Cost | Notes |
|---|---|---|
| Standard | 3% per sale | +1% for each additional active channel under the same owner (e.g. 2 channels = 4% on each sale) |
| No-Fee Lifetime | $250 one-time | 0% forever, unlimited channels, wipes any outstanding fee balance |
There are no monthly costs, setup costs or minimums. Buyers never pay extra — the fee is on the seller's side only.
How fees are collected — you're never billed
Because ChainPass is non-custodial, we can't (and don't want to) skim each payment. Instead:
- Each sale accrues its fee (e.g. 3% of $40 = $1.20) to your fee balance. Nothing is charged; the full sale went to your wallet.
- When your accrued balance grows to cover the price of a plan a buyer is purchasing, that single sale is routed to the ChainPass treasury instead of your wallet.
- The buyer's experience is identical — they pay, they get access. You receive the usual sale notification, marked "collected by ChainPass", and your balance is settled (any overshoot is credited back against future fees).
Net effect: over time you keep 97% of revenue (at the 3% rate) without ever receiving an invoice, sending a payment, or having funds pass through a third party.
You can see your current rate, accrued balance and full history any time with /fees or from My channels → 💸 Fees.
No-Fee Lifetime
A one-time $250 payment (in crypto, to the treasury) that permanently sets your fee rate to 0%, removes the 5-channel limit, and clears any accrued fee balance. If you're doing steady volume, it typically pays for itself within weeks. Upgrade from the /fees page.
Treasury transparency
All ChainPass service revenue — fee settlements and No-Fee Lifetime purchases — lands on fixed, public treasury addresses. Nothing else ever touches them: owner payouts go directly from buyer to owner and never pass through the treasury. That means anyone can audit exactly what ChainPass earns, on-chain, at any time.
EVM Treasury
Ethereum Base BNB Smart Chain Robinhood Chain0x757B188cfA96E2Ea40Bf61c21884aae602ECAea6
Command reference
| Command | Who | What it does |
|---|---|---|
/start | Everyone | Open the main menu (or a channel's sales page via a c_… link) |
/menu | Everyone | Back to the main menu from anywhere |
/buy | Buyers | Reopen the last sales page, or pick among your subscribed channels |
/status | Buyers | Your subscriptions: plan, expiry, renew buttons |
/ref | Everyone | Your referral link and bonus stats |
/sell | Owners | Connect a new channel (guided wizard) |
/mychannels | Owners | Dashboards for your connected channels |
/fees | Owners | Fee rate, accrued balance, No-Fee Lifetime upgrade |
/support | Everyone | Open a support ticket |
/help | Everyone | Short built-in guide |
/cancel | Everyone | Abort the current wizard/input |
Troubleshooting
"I paid but didn't get the invite"
- Check you sent on the network shown in the invoice — right coin, wrong network is the #1 cause and is unrecoverable.
- CEX method: the received amount must be exact. If your exchange deducted its withdrawal fee from the amount, the payment can't match — contact support with your transaction hash.
- Wallet method: amounts far outside the ±0.3% tolerance won't match automatically — contact support with the tx hash.
- If the invoice expired (6 h) before you paid, contact support with the tx hash; payments are kept on record for matching review.
"The invite link doesn't work"
Invite links are one-time. If it was consumed or expired before you joined, open /status and contact support — access can be re-issued since your subscription is already active.
"My buyers pay but don't get invited" (owners)
Almost always: the bot lost (or never had) admin rights in your channel. Re-add it as admin with invite users + ban users permissions.
Anything else
Tap 📩 Support in the bot — tickets about a channel go to that channel's team, platform questions go to ChainPass staff.
What's new
Everything we ship to the bot — newest first. Dates are the day the change went live. Everything listed here is already running; this is not a roadmap.
August 2026
Links in your sales page
Your VIP page text can now carry links — and you don't write any code for it: format the message the normal Telegram way, select a few words, add the link. So “Complete payment guide” can point straight at a post in your own channel instead of cramming every payment method onto the page. Bold, italic and code work the same way. Link addresses don't count towards the 1200-character limit, only what buyers actually read — a long URL never eats your space. Your sales page.
The notification editor no longer lets you break a message
A placeholder only works in the messages that actually carry that value — {plan}, for instance, exists on Payment confirmed but not on Access granted. Used in the wrong message it reached subscribers as literal text, and the preview didn't reveal it: it filled in every placeholder regardless of the message. Now the editor refuses a placeholder the message never receives and tells you which ones are available there, and the preview fills in only what will really arrive — what you see is what your subscribers get. Custom notifications.
Notifications in your own language
The automatic messages your subscribers receive — payment confirmed, renewal reminders, expiry, the holiday freeze and resume — can now be rewritten by you, in any language. In the dashboard tap 🌐 Notifications, pick a message, and type your own version; leave one untouched to keep the English default. Placeholders in curly braces like {channel}, {expiry} and {days} are filled in automatically, and the editor won't let you save a message that drops a required one. How it works.
Holiday mode — your subscribers stop losing days when you go quiet
Channels take breaks: holidays, illness, a week off. Until today the clock kept running, and people burned days they had paid for while nothing was posted. Now an owner can tap 🏖 Freeze subscribers in the dashboard: nobody expires, nobody is removed, no renewal reminders go out, and every subscriber is told their time is safe. When you come back, each subscription is pushed forward by exactly the days you were away — and each person gets a message saying how many days they got back. It lifts on its own after 30 days if you forget, so nobody stays frozen forever. The two dashboard switches now sit side by side and each says who it affects — 🛒 Stop new sales is about people who haven't paid yet, 🏖 Freeze subscribers about the ones who have. Lifetime subscriptions are untouched, and anyone who joins mid-break is credited only from the day they joined. How it works.
USDG accepted on Robinhood Chain
Buyers on Robinhood Chain can now pay in USDG (Global Dollar) as well as USDC and USDT. It's the stablecoin most people actually hold on that chain, so it should have been there from the start — it is now, and payments sent in it confirm like any other.
Payments confirm the moment they land
Until now we asked each network every few seconds whether anything had arrived. Now the networks tell us: incoming transfers are pushed to ChainPass as they happen, so an invoice can clear in the same breath the transaction confirms. The old checks still run underneath as a safety net — if a notification is ever missed, the payment is still found, exactly as before.
Shorter, clearer payment window
Invoices now give 10 minutes when the buyer pays from their own wallet and 1 hour when they pay from an exchange, and the countdown starts when the payment method is chosen — not before. Transfers that land after the window are still matched behind the scenes, so a slow exchange withdrawal doesn't cost anyone the sale.
Stablecoin payments on every EVM network
Our node provider started rejecting the log queries we used to spot token transfers, which made USDT/USDC payments invisible on the EVM chains. Detection moved to a different provider and stablecoin invoices confirm normally again.
July 2026 — the first month
Automatic removal at expiry
When a subscription ends, the member is now removed from the channel automatically — and can rejoin the moment they renew. Owners can leave it off if they'd rather handle expirations by hand.
Invite links repaired
Telegram's short link domain stopped resolving, which broke the one-time invites the bot hands out after a payment. Every link the bot generates was migrated to the long domain.
Native payments on Robinhood Chain
Payments in the chain's native coin could be missed while the node lagged behind the explorer, leaving a paid invoice pending. The scanner now reads those transfers from the explorer directly — same-block detection, no more waiting.
Stablecoins matched by contract, not by name
Explorers are full of memecoins that call themselves "USDC". ChainPass only accepts the verified contract addresses of the stablecoins it supports, so a lookalike token can never be mistaken for a real payment.
ChainPass goes live
The first channels went on sale on 11 July 2026, the first payment landed two days later. From day one the design hasn't changed: non-custodial (buyers pay the owner's wallet directly), fully automatic (invoice → on-chain match → invite → reminders → expiry), and self-service — set up a channel in about two minutes with /sell, no approval, no API keys.