{"name":"token_safety","oldName":"token_verdict","title":"Is this token safe?","category":"tokens","useWhen":"Run before buying, accepting or recommending a token. Answers SAFE, CAUTION or AVOID with exact reasons from chain and market data, plus rug_chance (high, with reasons, or null).","benefit":{"kind":"money","text":"Flags tokens you can't sell, liquidity the creator can pull, creators who have rugged before, hidden insider wallets, new tokens worth far more than their pools hold, and issuers who can freeze or take your tokens, before you buy. A separate rug_chance says when the signs of a rug by the token's own people are there, and why. Regulated stablecoins' powers count as expected."},"description":"Simulates a real holder selling, then checks if liquidity can be pulled, the creator's record, insider wallet networks, issuer powers (mint, freeze, Token-2022 traps), verification, liquidity, holders and age, for one verdict.","price":"$0.02","priceText":"25 free calls a day, then $0.02 USDC per call (x402)","http":{"method":"POST","path":"/api/tools/token_safety","body":"JSON object with the inputs below"},"mcp":{"method":"tools/call","name":"token_safety"},"inputs":[{"name":"token","type":"string (token address)","required":true,"lookingFor":"The token's address.","whereToGet":"From find_token (for a ticker) or tokens (for a wallet's tokens)."},{"name":"network","type":"\"mainnet-beta\" | \"devnet\"","required":false,"lookingFor":"Default \"mainnet-beta\" (real money).","whereToGet":"\"devnet\" only for test wallets."}],"outputs":[{"field":"verdict","type":"\"SAFE\" | \"CAUTION\" | \"AVOID\"","is":"The answer. AVOID: at least one check failed. CAUTION: at least one warning. SAFE: no warnings.","howWorkedOut":"The worst check wins: any fail is AVOID, any warn is CAUTION, otherwise SAFE."},{"field":"summary","type":"string","is":"One sentence explaining the verdict.","howWorkedOut":"Built from the failed and warning checks."},{"field":"rug_chance","type":"{ level: \"high\", reasons: string[] } | null","is":"Whether the token shows the signs of a rug by its own people, and why. null means none of those signs were found, not that it can't happen.","howWorkedOut":"high when any of these came out: liquidity the creator can pull (liquidity_pull fail), a creator who rugged before (creator_history fail), linked insider wallets holding over 30% (insiders fail), a new token worth over 100x its DEX liquidity (value_vs_liquidity warn), a creator who sent the exact same amount to 10+ wallets within a minute in the first 30 minutes after launch (creator_split fail), or a new token whose top 10 holders own under 1% (holder_spread warn). reasons are those checks' details."},{"field":"about.symbol / name","type":"string | null","is":"Ticker and name.","howWorkedOut":"Jupiter token data."},{"field":"about.decimals","type":"number","is":"Decimal places.","howWorkedOut":"The on-chain token account."},{"field":"about.supply","type":"string","is":"Total supply in whole tokens.","howWorkedOut":"On-chain supply / 10^decimals, exact."},{"field":"about.token_program","type":"\"spl-token\" | \"token-2022\"","is":"Which token program it uses.","howWorkedOut":"The owner of the token's account."},{"field":"about.who_can_mint","type":"string | null","is":"Who can create more tokens. null means nobody (fixed supply).","howWorkedOut":"The on-chain mint authority."},{"field":"about.who_can_freeze","type":"string | null","is":"Who can freeze holders' tokens. null means nobody.","howWorkedOut":"The on-chain freeze authority."},{"field":"about.extensions","type":"string[]","is":"Token-2022 extensions turned on.","howWorkedOut":"Read from the token's account."},{"field":"about.usd_price / liquidity_usd / holders / top10_share_pct / first_traded","type":"number | string | null","is":"Market facts the checks use.","howWorkedOut":"Jupiter token data. top10_share_pct is the share the 10 biggest holders own. first_traded is when its first pool was made."},{"field":"about.creator / creator_tokens_launched","type":"string | number | null","is":"The wallet that created the token, and how many tokens it has launched.","howWorkedOut":"Jupiter token data."},{"field":"about.total_value_usd / value_to_liquidity","type":"number | null","is":"The token's total value (price x whole supply) and how many times its DEX liquidity that is. A high ratio on a new token means one big holder selling can empty the pools.","howWorkedOut":"Jupiter price and liquidity, on-chain supply. null when Jupiter has no price or liquidity."},{"field":"about.metadata_can_change","type":"boolean | null","is":"Whether the name and logo can still be changed.","howWorkedOut":"RugCheck's report of the token's metadata."},{"field":"checks[].name","type":"string","is":"Which check: sell_test, liquidity_pull, creator_history, insiders, metadata, verified, mint_authority, freeze_authority, extension:<name>, liquidity, value_vs_liquidity, same_ticker, holder_concentration, holder_spread, creator_split, age, known_stablecoin, market_data or rugcheck_data.","howWorkedOut":"A fixed list. market_data or rugcheck_data (warn) shows up only when Jupiter or RugCheck can't be reached. The checks that need them are then skipped, not guessed."},{"field":"checks[].result","type":"\"pass\" | \"info\" | \"warn\" | \"fail\"","is":"How the check came out. info means notable but expected, like a regulated stablecoin's freeze power.","howWorkedOut":"Sell test: fail if the token blocked a real holder's simulated sale, warn if there's no route to sell or it failed for another reason. Liquidity pull: fail when over 20% of the liquidity is unlocked and comes from 1 or 2 providers (warn for verified tokens), warn for 3 to 9 providers, info for established tokens (Jupiter-verified and trading 90+ days). Creator: fail if they have rugged before, warn if an unverified token's creator launched 20+ tokens or still holds over 20%. Insiders: warn over 10% of supply, fail over 30%; for established tokens only networks of up to 500 wallets count (bigger ones are usually exchanges or airdrops), for new tokens every network counts; unknown (info) when RugCheck's numbers add up to more than the whole supply. Value vs liquidity: warn when a token that isn't established is worth over 100x its DEX liquidity; info for established tokens. Creator split (new tokens only, read from the creator's token account): fail when 10+ wallets got the exact same amount from the creator within 60 seconds in the first 30 minutes after launch, warn when 10+ wallets got different amounts in that window, info (unknown) when the history can't be read back to launch. Holder spread: warn when a token that isn't established has its top 10 holders owning under 1% (supply likely split to hide who holds it). Same ticker (info, unverified tokens only): how many other tokens use the same ticker and how many first traded in the last 2 days. Metadata: warn if an unverified token's name and logo can change. Liquidity: fail under $10k, warn under $100k. Top 10 holders: warn over 50%, fail over 80% (established tokens: info up to 80%, warn over; info for known stablecoins and Jupiter-verified liquid staking tokens). Age: warn under 24 hours. Permanent delegate fails, except a known issuer's delegate (xStocks, Backpack Securities, Paxos), which warns and names the issuer. Frozen-by-default and non-transferable fail. Mint and freeze powers warn unless it's a known stablecoin or an established token (Jupiter-verified and trading 90+ days), where they are info and name who holds them."},{"field":"checks[].detail","type":"string","is":"The fact behind the result, in plain words.","howWorkedOut":"Built from the data."},{"field":"checks[].source","type":"\"on-chain\" | \"jupiter\" | \"rugcheck\" | \"simulation\"","is":"Where the fact came from.","howWorkedOut":"on-chain for token data and the creator's first sends (creator_split), jupiter for market and creator data, rugcheck for liquidity locks, insiders and creator history, simulation for the sell test."},{"field":"history","type":"object | null","is":"What changed since Pulse first checked this token, when Pulse has been watching it. null when it hasn't.","howWorkedOut":"Pulse watches young tokens (under 3 days old) for 7 days after it first checks them, whether it found them on Jupiter's activity lists or someone ran token_safety on them, and re-reads them every 2 hours. Checking a young token starts the watch, so a later check shows what changed."},{"field":"history.watched_since / watching_until / verdict_then / found_in","type":"string","is":"When the watch started and ends, the verdict Pulse gave then, and how the token was found.","howWorkedOut":"Stored when the watch started."},{"field":"history.then / latest","type":"object","is":"The first and the newest reading: listed, liquidity_usd, usd_price, holders, top10_share_pct, who_can_mint, who_can_freeze (latest also has at).","howWorkedOut":"then is what this tool reported when the watch started. latest comes from Jupiter (market numbers) and the chain (authorities). A value no source answered is null."},{"field":"history.changes[]","type":"{ at, what, result, detail, source }[]","is":"Each change once, at the first reading that showed it: liquidity_pulled (fail), price_crashed (fail), liquidity_halved, holders_halved, top10_up, mint_authority_moved, freeze_authority_moved (warn), or mint_authority_revoked / freeze_authority_revoked (info).","howWorkedOut":"Liquidity pulled: down 90%+ or no longer listed by Jupiter while Jupiter answers. Price crashed: down 90%+. Halved: down 50%+. Top 10 up: their share rose 15+ points. Authorities: a different wallet now holds the power, or it was revoked. Empty means no change crossed those lines."}],"notes":["The check doesn't make a token safe, and it can't. It looks for the known ways people get robbed with a token. \"SAFE\" really means \"none of the traps we know about are present.\" Every rule exists because it matches a real scam.","It can't catch everything, such as a team abandoning a project or insiders it has no data on, and SAFE says nothing about whether the price will rise or fall.","history is not part of the verdict: the verdict is about the token now; history shows how it got here. Liquidity pulled since Pulse first saw it is the classic rug.","The sell test sells about $20 from a real holder's wallet in a simulation only: nothing is sent, and no funds move.","Top-holder share counts accounts, which can include exchanges and liquidity pools.","Established tokens (Jupiter-verified and trading for 90+ days) are judged on traps, not on how they're run: a mint or freeze authority, unlocked liquidity and a big treasury show up as info naming who holds them, because bridges, issuers and market makers run real tokens that way. New tokens get the strict checks, since that's when liquidity gets pulled."],"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","description":"The token's address. From find_token (for a ticker) or tokens (for a wallet's tokens)."},"network":{"default":"mainnet-beta","description":"Default \"mainnet-beta\" (real money). \"devnet\" only for test wallets.","type":"string","enum":["mainnet-beta","devnet"]}},"required":["token"]}}