# Robinhood Chain API for Telegram and Discord bots

> Build a Robinhood Chain token scanner, buy bot or launch-alert channel for Telegram or Discord with the Crius API, with real replies and credit costs.

Source: https://docs.crius.sh/use-cases/telegram-and-discord-bots/ · Updated 2026-10-28

Community bots are often the first place a Robinhood Chain token gets looked at: someone pastes a contract address into a Telegram group or Discord channel, and the bot replies with price, market cap, holders, the launchpad, the security score and links. Others post every buy of a community’s token, or alert a channel the moment a token launches or graduates. The Crius API answers a scanner reply in two anonymous calls and pushes buys and launches over one WebSocket, so the bot needs no indexer and no RPC node.

## Endpoints a chat bot uses

-   [GET`/search`](https://docs.crius.sh/reference/discovery/search/) turns a name or symbol into token addresses, and checks whether a pasted address is a token, pool or wallet.
-   [GET`/token/{address}`](https://docs.crius.sh/reference/tokens/token-profile/) the scanner card: name, price and changes, market cap, liquidity, holders and top-10 share, launchpad status, LP lock and links.
-   [GET`/token/{address}/security`](https://docs.crius.sh/reference/security/security-checks/) the safety line: `score`, `risk`, taxes and honeypot verdict.
-   [GET`/token/{address}/price`](https://docs.crius.sh/reference/tokens/token-price/) for a `/price` command.
-   [GET`/token/{address}/candles`](https://docs.crius.sh/reference/trades/ohlcv-candles/) to draw a chart image for a `/chart` command.
-   [GET`/token/{address}/launch`](https://docs.crius.sh/reference/launchpads/launch-lifecycle/) bonding progress for tokens still on a curve.
-   The [WebSocket stream](https://docs.crius.sh/reference/stream/): `trades:<token>` for a buy bot, `launches:all` and `graduations:all` (or `launches:pons`, …) for alert channels.

## Suggested architecture

1.  **Detect an address in the message.** Match `0x` followed by 40 hex characters. Anything else that looks like a ticker goes to `/search`.
    
2.  **Build the card from two calls.** `/token/{address}` and `/token/{address}/security` cost 1 credit each and work without a key. Send them in parallel.
    
3.  **Cache per token for a short time.** In a busy group ten people paste the same token within a minute. A 30-second cache keyed by address answers them all for one pair of calls.
    
4.  **Push, don’t poll, for alerts.** One stream connection (Free key, 1 credit) carries a buy bot’s `trades:<token>` and an alert channel’s `launches:all` and `graduations:all`. Free allows 10 subscriptions per connection, Starter 100.
    
5.  **Rate-limit users, not the API.** Per-user cooldowns keep one member from spending the bot’s credits.
    

A scanner answering 5,000 pastes a day with profile + security uses 10,000 credits a day, about 300,000 a month, within the Free plan. With the 30-second cache, repeated pastes cost nothing.

## Resolve a name to an address

Example [Anonymous · no key · 1 credit](https://docs.crius.sh/reference/discovery/search/)

### Three different tokens called CHARGE

A user types /scan charge. Which token do they mean?

GET/v1/robinhood/search?q=charge&limit=3

  

**cURL**

```bash
curl "https://api.crius.sh/v1/robinhood/search?q=charge&limit=3"
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/search?q=charge&limit=3");
const { data, meta } = await res.json();
```

**Python**

```python
import requests

r = requests.get(
    "https://api.crius.sh/v1/robinhood/search?q=charge&limit=3",
)
body = r.json()
print(body["data"])
```

**Real response 200 Captured Oct 28, 2026 · 73 lines (arrays trimmed)**

```json
{
  "data": [
    {
      "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8",
      "label": null,
      "launchpad": "pons",
      "launchpad_name": "Pons",
      "links": {
        "discord": null,
        "farcaster": null,
        "github": null,
        "telegram": null,
        "twitter": "https://x.com/chargeairh",
        "website": "https://chargeai.bid/"
      },
      "liquidity_usd": 5611.81,
      "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128",
      "name": "Charge AI",
      "price_usd": 0.00000388948,
      "symbol": "CHARGE",
      "type": "token"
    },
    {
      "address": "0x202e72dcbc815ca222f1a0674dd08755545b1329",
      "label": null,
      "launchpad": "pons",
      "launchpad_name": "Pons",
      "links": {
        "discord": null,
        "farcaster": null,
        "github": null,
        "telegram": null,
        "twitter": "https://x.com/chargeitdotfun",
        "website": "https://chargeit.fun/"
      },
      "liquidity_usd": 4869.43,
      "logo": "https://api.crius.sh/v1/robinhood/logo/0x202e72dcbc815ca222f1a0674dd08755545b1329.png?size=128",
      "name": "CHARGE",
      "price_usd": 0.00000293605,
      "symbol": "CHARGE",
      "type": "token"
    },
    {
      "address": "0xc15f9324d2742387f98e2dba6b3745e5390113ec",
      "label": null,
      "launchpad": "pons",
      "launchpad_name": "Pons",
      "links": {
        "discord": null,
        "farcaster": null,
        "github": null,
        "telegram": null,
        "twitter": "https://x.com/chargeitdotfun",
        "website": "https://chargeit.fun/"
      },
      "liquidity_usd": 2490.27,
      "logo": "https://api.crius.sh/v1/robinhood/logo/0xc15f9324d2742387f98e2dba6b3745e5390113ec.png?size=128",
      "name": "CHARGE",
      "price_usd": 0.00000683926,
      "symbol": "CHARGE",
      "type": "token"
    }
  ],
  "meta": {
    "block": 100406952,
    "block_age_ms": 1260,
    "block_ts": 1793225093000,
    "chain": "robinhood",
    "finalized_block": 100397649,
    "lag_ms": 11,
    "safe_block": 100401329
  }
}
```

What this tells you

-   Three tokens match, all launched on Pons (`launchpad: "pons"`): Charge AI `0x7b8892cea949bc60d494681d1bc3ea96071ab0b8` and two tokens named CHARGE, `0x202e72dcbc815ca222f1a0674dd08755545b1329` and `0xc15f9324d2742387f98e2dba6b3745e5390113ec`.
-   All three have the symbol `CHARGE`. Their `liquidity_usd` (5611.81, 4869.43 and 2490.27) and `links` differ, which is what the user needs to tell them apart.
-   The two CHARGE tokens share the same `twitter` and `website` links (`https://x.com/chargeitdotfun`), so a bot must not assume one link means one token.
-   Reply with a short list (symbol, name, liquidity and the full address) and scan the one the user picks.

[Search reference](https://docs.crius.sh/reference/discovery/search/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20Three%20different%20tokens%20called%20CHARGE&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fuse-cases%2Ftelegram-and-discord-bots%2F%23search-name%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Fsearch%3Fq%3Dcharge%26limit%3D3%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

## The scanner card

Example [Anonymous · no key · 1 credit](https://docs.crius.sh/reference/tokens/token-profile/)

### Everything for a Telegram scan reply

What should the bot reply when someone pastes 0x7b8892cea949bc60d494681d1bc3ea96071ab0b8?

GET/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8

  

**cURL**

```bash
curl "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8"
```

**JavaScript**

```js
const res = await fetch("https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8");
const { data, meta } = await res.json();
```

**Python**

```python
import requests

r = requests.get(
    "https://api.crius.sh/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8",
)
body = r.json()
print(body["data"])
```

**Real response 200 Captured Oct 28, 2026 · 320 lines (arrays trimmed)**

```json
{
  "data": {
    "address": "0x7b8892cea949bc60d494681d1bc3ea96071ab0b8",
    "admin_flags": null,
    "bundles": {
      "see": "/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/bundles"
    },
    "burned": 29840058.774195638068253872,
    "chain_id": 4663,
    "circulating_supply": 970159941.225804361931746128,
    "creation": {
      "attribution": "known_launchpad",
      "block": 88385886,
      "deployed_via": "pons_v2",
      "deployer": "0x3ac82d45ff9e4963cefbc3f74dbe293f34c927ca",
      "factory": "0x7ed598bcef8bd9edd8c97a195c6d13f40801ec7e",
      "launchpad_name": "Pons",
      "tx": "0x4d9536e81ce418070e93b72f46f1d91afdd6a9ed34141b8e3773926b0d863747"
    },
    "decimals": 18,
    "dexscreener": {
      "boosts": {
        "active_amount": null,
        "active_seen_ts": null,
        "count": 0,
        "last_ts": null,
        "total_amount": 0
      },
      "checked_ts": 1793040659244,
      "community_takeover": false,
      "community_takeover_ts": null,
      "confirmed": true,
      "dex_paid": true,
      "dex_paid_ts": 1791988981764,
      "orders": [
        {
          "payment_ts": 1791988981764,
          "status": "approved",
          "type": "tokenProfile"
        }
      ],
      "profile": {
        "description": null,
        "header": "https://cdn.dexscreener.com/cms/images/JcxosvISKHoUITBu?width=1500&height=500&quality=95&format=auto",
        "icon": "https://cdn.dexscreener.com/cms/images/DjTh8_NirbFrIzjW?width=800&height=800&quality=95&format=auto",
        "links": [
          {
            "label": "Website",
            "type": "website",
            "url": "https://chargeai.bid/"
          },
          {
            "type": "twitter",
            "url": "https://x.com/chargeairh"
          }
        ]
      },
      "url": "https://dexscreener.com/robinhood/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8"
    },
    "first_seen_block": 88385886,
    "history": "complete",
    "holders": {
      "burned_pct": 2.98401,
      "count": 179,
      "dev_holding": false,
      "dev_pct": 0,
      "locked_pct": 8.16327,
      "top10_pct": 13.436
    },
    "launch": {
      "creator": "0x3ac82d45ff9e4963cefbc3f74dbe293f34c927ca",
      "creator_label": null,
      "curve": "0x2b0943bf947b54df526047b6fec8183a4fdeb3c3",
      "curve_state": null,
      "graduated_block": 88461321,
      "graduation_threshold": 4.2,
      "launched_block": 88385886,
      "launchpad": "pons",
      "launchpad_name": "Pons",
      "pair_token": "0x0000000000000000000000000000000000000000",
      "progress_pct": 100,
      "raised": null,
      "status": "graduated"
    },
    "liquidity": {
      "locked_pct": 100,
      "lockers": [
        "pons_v2_launch_locker"
      ],
      "next_unlock_ts": null,
      "permanent": true,
      "status": "locked"
    },
    "locked": 81632653.061224486519511236,
    "market": {
      "fdv_usd": 3889.48,
      "liquidity_usd": 5611.8,
      "market_cap_usd": 3773.42,
      "pools_count": 10,
      "quote_liquidity_usd": 2805.9
    },
    "metadata": {
      "banner": "https://cdn.dexscreener.com/cms/images/JcxosvISKHoUITBu?width=1500&height=500&quality=95&format=auto",
      "description": "hf:charge-ai/charge-30b@9ff2ef1e98ea4d9745a70b33ea02b80dba26c582",
      "links": {
        "discord": null,
        "farcaster": null,
        "github": null,
        "telegram": null,
        "twitter": "https://x.com/chargeairh",
        "website": "https://chargeai.bid/"
      },
      "logo": "https://api.crius.sh/v1/robinhood/logo/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8.png?size=128",
      "logo_original": "https://api.surplusllm.com/api/launchpad/logos/bb4315cb9506ef872830b1dab25ffdb6694df1b8b8e32cc2c8d083208f26baab.png",
      "socials": {
        "discord": null,
        "farcaster": null,
        "github": null,
        "telegram": null,
        "twitter": {
          "source": "pons_launch",
          "url": "https://x.com/chargeairh"
        },
        "website": {
          "source": "pons_launch",
          "url": "https://chargeai.bid/"
        }
      },
      "source": "pons_launch",
      "sources": {
        "links": "pons_launch",
        "logo": "pons_launch"
      }
    },
    "name": "Charge AI",
    "price": {
      "ath_market_cap_usd": 68675.8,
      "ath_scope": "all_time",
      "ath_ts": 1792055400000,
      "ath_usd": 0.0000707881,
      "change_pct": {
        "1h": 0.896103,
        "1m": 0.896103,
        "1s": 0.896103,
        "24h": -0.171971,
        "30s": 0.896103,
        "4h": 0.896103,
        "5m": 0.896103,
        "6h": 0.896103
      },
      "confidence": "medium",
      "dex": "uniswap_v4",
      "eth": 0.00000000165124,
      "liquidity_usd": 5604.57,
      "quote": "0x0000000000000000000000000000000000000000",
      "quote_liquidity_usd": 2802.29,
      "source_pool": "0x871b166182fd708d5d16a4daa9a42f05a653fa51ee2b195097f425e0d9ca4913",
      "thin_liquidity": false,
      "usd": 0.00000388948
    },
    "security": {
      "see": "/v1/robinhood/token/0x7b8892cea949bc60d494681d1bc3ea96071ab0b8/security"
    },
    "standard": "erc20",
    "stats": {
      "all_time": {
        "buy_volume_usd": 143046,
        "buys": 2893,
        "first_trade_ts": 1791982835000,
        "sell_volume_usd": 137621,
        "sells": 2250,
        "since": "chain_start",
        "trades": 5143,
        "volume_usd": 280667
      },
      "avg_trade_usd": {
        "1h": null,
        "1m": null,
        "1s": null,
        "24h": 2.96366,
        "30s": null,
        "4h": null,
        "5m": null,
        "6h": null
      },
      "buy_volume_usd": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 0,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "buyers": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 0,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "buys": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 0,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "last_trade_ts": 1793196204000,
      "sell_volume_usd": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 5.92732,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "sellers": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 2,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "sells": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 2,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "traders": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 2,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "trades": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 2,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "txns": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 2,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "volume_eth": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 0.00252958,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      },
      "volume_usd": {
        "1h": 0,
        "1m": 0,
        "1s": 0,
        "24h": 5.92732,
        "30s": 0,
        "4h": 0,
        "5m": 0,
        "6h": 0
      }
    },
    "symbol": "CHARGE",
    "total_supply": 1000000000,
    "type": "launchpad",
    "ui_multiplier": null,
    "verification": {
      "compiler": null,
      "contract_name": null,
      "implementation": null,
      "is_proxy": null,
      "sourcify": null
    }
  },
  "meta": {
    "block": 100406769,
    "block_age_ms": 400,
    "block_ts": 1793225075000,
    "chain": "robinhood",
    "finalized_block": 100397649,
    "lag_ms": 38,
    "pending": [],
    "safe_block": 100401329
  }
}
```

What this tells you

-   Header: `name: "Charge AI"`, `symbol: "CHARGE"`, `launch.launchpad_name: "Pons"` and `launch.status: "graduated"`.
-   Price line: `price.usd: 0.00000388948`, `price.change_pct["24h"]: -0.171971` and `price.confidence: "medium"`.
-   Market line: `market.market_cap_usd: 3773.42`, `market.liquidity_usd: 5611.8`. Against `price.ath_market_cap_usd: 68675.8` the token is about 95% below its peak.
-   Holders line: `holders.count: 179`, `holders.top10_pct: 13.436`, `holders.dev_pct: 0`.
-   Liquidity line: `liquidity.status: "locked"`, `permanent: true`, locker `pons_v2_launch_locker`.
-   Links: `metadata.links.website` and `metadata.links.twitter`; `metadata.logo` is an image URL the bot can attach.

[Token profile reference](https://docs.crius.sh/reference/tokens/token-profile/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20Everything%20for%20a%20Telegram%20scan%20reply&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fuse-cases%2Ftelegram-and-discord-bots%2F%23scan-card%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Ftoken%2F0x7b8892cea949bc60d494681d1bc3ea96071ab0b8%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

```js
// Scanner reply for Telegram (Markdown) from two anonymous calls.
const API = "https://api.crius.sh/v1/robinhood";
const cache = new Map();

async function scan(address) {
  const hit = cache.get(address);
  if (hit && Date.now() - hit.at < 30_000) return hit.text;
  const [t, s] = await Promise.all([
    fetch(`${API}/token/${address}`).then((r) => r.json()),
    fetch(`${API}/token/${address}/security`).then((r) => r.json()),
  ]);
  if (!t.data) return "Not a token on Robinhood Chain.";
  const d = t.data, sec = s.data;
  const text = [
    `*${d.name}* (${d.symbol})${d.launch ? ` · ${d.launch.launchpad_name} · ${d.launch.status}` : ""}`,
    `Price $${d.price?.usd ?? "?"} · 24h ${d.price?.change_pct?.["24h"] ?? "?"}%`,
    `MC $${d.market.market_cap_usd ?? "?"} · Liq $${d.market.liquidity_usd}`,
    `Holders ${d.holders.count ?? "?"} · Top 10 ${d.holders.top10_pct}%`,
    sec ? `Score ${sec.score}/100 (${sec.risk}) · Tax ${sec.tax.buy_pct ?? "?"}% / ${sec.tax.sell_pct ?? "?"}%` : "",
    `\`${d.address}\``,
  ].filter(Boolean).join("\n");
  cache.set(address, { at: Date.now(), text });
  return text;
}
```

The full bot, with commands and the buy feed, is in [Build a Telegram token scanner](https://docs.crius.sh/guides/build-a-telegram-token-scanner/). Alert channels are covered in [Get new tokens and graduations in real time](https://docs.crius.sh/guides/stream-new-tokens/) and price commands in [Build price alerts](https://docs.crius.sh/guides/build-price-alerts/).

## Frequently asked questions

**Can a Telegram bot use the Crius API without a key?**

Yes, for the scanner itself: search, token profile, price, security and candles are on the anonymous plan at 2 requests per second. A bot in busy groups should use a Free key (10 requests per second, 1,000,000 credits a month), which also unlocks the WebSocket stream for buy and launch alerts.

**How does a buy bot post every buy of a token?**

Subscribe to `trades:<token>` on the WebSocket stream and post messages whose `type` is `buy`, above a minimum `value_usd`. Each message has the attributed `trader`, the amounts and the USD value. A Free key allows one connection with 10 subscriptions.

**What should the bot do when several tokens share a symbol?**

Show them all. `/search?q=charge` returns three different tokens named CHARGE or Charge AI, with their addresses and liquidity. Let the user pick by address, and treat the contract address as the only identifier.

**Is a Discord bot any different?**

No. The endpoints and the flow are the same; only the message formatting differs (embeds instead of Markdown). Everything on this page applies to both.

## Related

[Guide **Telegram scanner bot** Build a Telegram bot that scans Robinhood Chain tokens: price, liquidity, holders, taxes and a security score from two Crius API calls, with real examples. Read](https://docs.crius.sh/guides/build-a-telegram-token-scanner/) [Guide **Search tokens** Find a Robinhood Chain token's address by name or symbol, or look up any address or Uniswap v4 pool id, with one search call. Real responses included. Read](https://docs.crius.sh/guides/search-tokens/) [Guide **Token security score** Score any Robinhood Chain token from 0 to 100 with one API call. Honeypot, buy and sell taxes, owner powers, LP locks, v4 hook risk and insider launches, with real examples. Read](https://docs.crius.sh/guides/token-security-score/) [Guide **Stream new tokens** Get new Robinhood Chain launchpad tokens, graduations and pools the moment they happen, with the Crius WebSocket and a Node.js client that checks each token. Read](https://docs.crius.sh/guides/stream-new-tokens/) [Guide **Price alerts** Build Robinhood Chain price alerts on the Crius WebSocket price channel, with a runnable Node.js alert bot that checks liquidity and token security first. Read](https://docs.crius.sh/guides/build-price-alerts/) [API reference **WebSocket stream** Real-time Robinhood Chain data over one WebSocket - trades, prices, live candles, new launches, graduations, new pools, LP and tax changes, wallet activity, with replay and reorg handling. Read](https://docs.crius.sh/reference/stream/)
