Every link format recognised
Four bare-address shapes, 23 specific site link layouts, and a generic fallback for any other `http(s)://` link.
Every link format recognised
Four bare-address shapes, 23 specific site link layouts, and a generic fallback for any other http(s):// link.
Bare addresses
An address with no link around it is matched against four shapes. These need no http(s):// at all — they match anywhere in a message's plain text.
Bare-address shapes
| Shape | Exact pattern | Chain hint |
|---|---|---|
| Sui coin type | 0x[0-9a-fA-F]{1,64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]* | sui, fixed |
| EVM address | (?<![0-9A-Za-z])0x[0-9a-fA-F]{40}(?![0-9A-Za-z]) | none — DexScreener names the chain |
| TON jetton | (?<![A-Za-z0-9_\-])[EU]Q[A-Za-z0-9_\-]{46}(?![A-Za-z0-9_\-]) | ton, fixed |
| Solana base58 mint | (?<![1-9A-HJ-NP-Za-km-z])[1-9A-HJ-NP-Za-km-z]{32,44}(?![1-9A-HJ-NP-Za-km-z]), and the string must decode as base58 to exactly 32 bytes | solana, fixed |
Sui coin types are matched and stripped out of the text first, so a Sui type is never also read as a bare EVM address.
The Solana shape by itself isn't enough — a 32–44 character base58 string is common text. It only becomes a candidate once it decodes to exactly 32 bytes; a string that starts with 0x, or decodes to any other length, is discarded.
Known-site links
23 rules match a link by its host, then read the chain and the token or pair id out of its path. A host matches a rule when it equals the listed suffix or ends with it, so www. and other subdomains work the same as the bare domain. The first rule whose host matches wins, and the generic fallback below never runs for that link.
Known-site rules
| Site | URL shape | What's extracted |
|---|---|---|
| dexscreener.com | /<chain>/<id> | Chain from the path; id as either a token or a pair |
| dextools.io | /app/[lang/]<chain>/pair-explorer/<id> | Chain from the path; id as a pair |
| geckoterminal.com | /<chain>/pools/<id> | Chain from the path; id as a pair |
| geckoterminal.com | /<chain>/tokens/<id> | Chain from the path; id as a token |
| pump.fun | /[coin/]<id> | Solana; id as a token |
| birdeye.so | /token/<id> | ?chain=, else Solana; id as a token |
| solscan.io | /token/<id> | Solana; id as a token |
| etherscan.io | /token/<0x…> or /address/<0x…> | Ethereum; id as a token |
| bscscan.com | /token/<0x…> or /address/<0x…> | BNB Chain; id as a token |
| basescan.org | /token/<0x…> or /address/<0x…> | Base; id as a token |
| pulsechain.com | /token/<0x…> or /address/<0x…> | PulseChain; id as a token |
| hyperevmscan.io | /token/<0x…> or /address/<0x…> | HyperEVM; id as a token |
| purrsec.com | /token/<0x…> or /address/<0x…> | HyperEVM; id as a token |
| robinhoodchain.blockscout.com | /token/<0x…> or /address/<0x…> | Robinhood Chain; id as a token |
| tonviewer.com | /<id> | TON; id as a token |
| tonscan.org | /jetton/<id> or /address/<id> | TON; id as a token |
| suiscan.xyz | /mainnet/coin/<id> | Sui; id as a token |
| suivision.xyz | /coin/<id> | Sui; id as a token |
| gmgn.ai | /<chain>/token/<id> | Chain from the path; id as a token |
| axiom.trade | /t/<id> | Solana; id as a token |
| photon-sol.tinyastro.io | /<xx>/lp/<id> | Solana; id as a pair |
| jup.ag | /tokens/<id> | Solana; id as a token — a - in the id keeps only the text after the last one |
| ave.ai | /token/<id>-<chain> | Chain is the letters after the first -; id is everything before it |
For birdeye.so specifically, the chain always comes from ?chain=; when that query parameter is absent it defaults to Solana.
Generic fallback
Any other http(s):// link — one that didn't match a known-site rule above — is parsed generically.
Chain hint, first hit wins: a fixed table of single-chain hosts, else the first of — the subdomain label, then each path segment, then a ?chain=, ?chainid= or ?network= query value — that is a recognised chain name or slug.
Single-chain hosts
| Host | Chain |
|---|---|
| raydium.io | solana |
| jup.ag | solana |
| pump.fun | solana |
| orca.so | solana |
| meteora.ag | solana |
| photon-sol.tinyastro.io | solana |
| pancakeswap.finance | bsc |
| four.meme | bsc |
| pulsex.com | pulsechain |
| hyperswap.exchange | hyperevm |
| aerodrome.finance | base |
| ston.fi | ton |
| dedust.io | ton |
| cetus.zone | sui |
| turbos.finance | sui |
| bluefin.io | sui |
Address: any of nine query keys — address, outputcurrency, outputmint, inputcurrency, token, tokenaddress, ca, mint, contract (case-insensitive) — read as an address if present; otherwise every path segment is tried as an address.
The candidate is typed a pair when the path contains /pair, /pool or /lp/; otherwise it's typed a token.
Hint vs. address family
This applies everywhere a chain hint is produced, known-site rules included: a chain hint that doesn't fit the candidate address's own shape is discarded rather than kept. A
0x…address (EVM-shaped) next to?chain=solanain the same URL is read with no chain hint, not a wrong one.
What counts as a link
Only http:// and https:// URLs are harvested as links. A bare dexscreener.com/… with no scheme in front of it is not read as a link — though any address-shaped text inside it is still caught by the bare-address rules.
Pasting a contract address
Pasting a contract address or a recognised link is the trigger — there is no scanner command. The bot replies with the coin's card, or not at all if…
The coin card
The card the scanner sends is assembled from up to 15 rows in a fixed order; several are dropped entirely when the bot has nothing for them.