Run your own Telegram safety bot with the free CoinsWavez API

Step by step: a free Telegram bot that checks any token address posted in your group, and posts your own token's daily report with its score, streak, holders and share card.

What your bot will do

For your community: anyone posts a token address in your group and the bot replies within seconds with the CoinsWavez verdict, the score and a link to the full report. Your members stay safer, and your group becomes the place to check tokens.

For your own token: every day the bot posts a daily report with the share card. It shows the safety score and how it moved, how many days in a row the token has kept its rating, liquidity, holders, new buyers, 24h price and volume, how many people checked it, and the next fix that would raise the score. Good numbers become daily content for your group, and the next fix tells you what to work on.

It is free, and it only reads public on-chain data. It never needs anyone's wallet, private key or seed phrase.

No code: let our bot post your daily report

If you only want your token's daily report in your group, you do not need to build anything. Every token gets a free 14-day trial; after that it is included with any paid plan (Starter and up), and free with the Verified tick for your token.

  1. Link your Telegram to your CoinsWavez account (Alerts page on coinswavez.com), unless your token has the Verified tick.
  2. Add @coinswavezbot to your token's Telegram group.
  3. As a group admin, send /daily@coinswavezbot YOUR_TOKEN_ADDRESS in the group (for 0x tokens add the chain if needed: /daily@coinswavezbot base 0x…).
  4. The bot posts today's report straight away, then every day at 12:00 UTC. Send /daily@coinswavezbot off to stop.

Or build your own bot: what you need

About 15 minutes. Your own bot also answers token checks for anyone in your group, and you can change its messages.

  1. A Telegram account.
  2. A free DexGrade account and API key (see "How to get a free DexGrade API key").
  3. Node.js 18 or newer (free from nodejs.org).
  4. A computer or small server that stays on, so the bot keeps answering.

Step 1: Create the bot in Telegram

Telegram's own @BotFather creates bots for free.

  1. Open @BotFather in Telegram and send /newbot.
  2. Pick a name and a username ending in "bot", for example MyTokenSafetyBot.
  3. Copy the bot token BotFather sends you. Keep it private, like a password.
  4. Send /setprivacy to @BotFather, choose your bot and pick Disable, so the bot can see addresses posted in the group.
  5. Add the bot to your group.

Step 2: Get your free API key

Log in on dexgrade.com, open your profile, go to "API keys" and create one named after your bot. Copy it straight away: it is shown only once.

Step 3: The bot

Save this as bot.js. It needs no extra packages. Posting /chatid in a chat shows that chat's id, which you need for the daily report.

// CoinsWavez safety bot for Telegram. Needs Node.js 18 or newer.
const TG = 'https://api.telegram.org/bot' + process.env.BOT_TOKEN + '/';
const API = 'https://dexgrade.com/api/data/v1/';
const HEADERS = { 'X-API-Key': process.env.CW_KEY };
const EVM_CHAIN = process.env.CHAIN || 'ethereum'; // chain for 0x addresses: ethereum, base, bsc, arbitrum, polygon, avalanche, optimism, robinhood

const EVM = /\b0x[a-fA-F0-9]{40}\b/;
const SOL = /\b[1-9A-HJ-NP-Za-km-z]{32,44}\b/;

async function tg(method, body) {
  const r = await fetch(TG + method, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
  return r.json();
}

async function check(chain, address) {
  const r = await fetch(API + 'token/' + chain + '/' + address, { headers: HEADERS });
  const t = await r.json();
  if (!r.ok) return 'Could not check this token: ' + (t.error || r.status);
  return t.summary + '\n\nFull report: ' + t.report;
}

async function main() {
  let offset = 0;
  for (;;) {
    const u = await tg('getUpdates', { offset: offset, timeout: 50 }).catch(() => ({ result: [] }));
    for (const update of u.result || []) {
      offset = update.update_id + 1;
      const m = update.message;
      if (!m || !m.text) continue;
      if (m.text.startsWith('/chatid')) { await tg('sendMessage', { chat_id: m.chat.id, text: 'This chat id: ' + m.chat.id }); continue; }
      const evm = (m.text.match(EVM) || [])[0];
      const sol = evm ? null : (m.text.match(SOL) || [])[0];
      if (!evm && !sol) continue;
      const text = await check(evm ? EVM_CHAIN : 'solana', evm || sol).catch(() => 'CoinsWavez is busy. Try again in a minute.');
      await tg('sendMessage', { chat_id: m.chat.id, text: text, reply_to_message_id: m.message_id });
    }
  }
}
main();

Step 4: Start it

Open a terminal in the folder with bot.js and start it with your bot token and API key. Then post a token address in your group: the bot replies with the check.

# Mac or Linux
BOT_TOKEN=your_bot_token CW_KEY=your_api_key CHAIN=base node bot.js

# Windows (PowerShell)
$env:BOT_TOKEN="your_bot_token"; $env:CW_KEY="your_api_key"; $env:CHAIN="base"; node bot.js

Step 5: Post your token's daily report

Add this to the end of bot.js, with your token's chain and address and your group's chat id (post /chatid in the group to get it; group ids start with -100). It posts the daily report with your token's card once when it starts, then every 24 hours.

const MY_TOKEN = { chain: 'solana', address: 'YOUR_TOKEN_ADDRESS', chat: 'YOUR_CHAT_ID' };

async function daily() {
  const r = await fetch(API + 'daily/' + MY_TOKEN.chain + '/' + MY_TOKEN.address, { headers: HEADERS });
  const d = await r.json();
  if (!r.ok) return;
  const sent = await tg('sendPhoto', { chat_id: MY_TOKEN.chat, photo: d.card, caption: d.message });
  if (!sent.ok) await tg('sendMessage', { chat_id: MY_TOKEN.chat, text: d.message });
}
daily();
setInterval(daily, 24 * 60 * 60 * 1000);

What the daily report looks like

Every line comes from the blockchain. Lines without data are left out, so a new token gets a shorter report.

📊 Daily report: WAVE (Solana)
📅 Day 42 since launch · Looks safe for 12 days in a row · score ▲15 in 7 days
🛡 Safety: 88/100, Looks safe (▲6 since yesterday)
💧 Liquidity: $182.4K (+8.1% in 24h)
👥 Holders: 5,120 (+312 in 7 days)
🆕 New buyers 24h: 143 (day before: 120)
📈 24h: price +5.4% · volume $96.2K · 417 buys / 365 sells
🔎 Checked 23 times on DexGrade today
🔧 Next fix for a higher score: Top 10 wallets hold 41% of the supply
Full report: https://dexgrade.com/solana/...

Use your progress

The "in a row" streak grows every day your token keeps its rating, and the score history shows how far it has come. Pin the daily report so newcomers see it first.

The "Next fix" line is your to-do list. Fix it, then open your token on dexgrade.com and tap "Re-check now": the score updates in minutes, and tomorrow's report shows the jump. The guide "How to improve your token's safety score" explains every fix.

Once your score is good, add the live badge to your website and share the card or GIF from your token page on X.

What you can call

token/{chain}/{address}: the full check, plus "summary" (one ready-to-post line), "report" (link to the full page), "card" (PNG image link) and "ageSeconds" (how old the check is).

daily/{chain}/{address}: the daily report as "message" (ready to post), with each number on its own: score and change, streak, liquidity and change, holders, new buyers, 24h stats, checks today, open issues and the score history.

card/{chain}/{address}: the share card image (1200×630 PNG). Telegram can send it straight from the link.

Limits and fair use

With a free key: 300 calls a minute and 5,000 a day per key (the day resets at 00:00 UTC; paid CoinsWavez plans allow up to 200,000 a day). Answers can be up to 2 minutes old, which is plenty for a chat bot. A bot that answers each address once and posts one daily report stays far below the limits.

Keep "Full report" links in your bot's messages, or credit "Data: DexGrade" with a link to dexgrade.com.

Never put your bot token or API key in a public place such as a GitHub repository or a website. If one leaks, create a new one.

A verdict is not financial advice. "Looks safe" means our on-chain checks found no major red flags, not that a token cannot fall or fail.