# Get a Robinhood Chain 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.

Source: https://docs.crius.sh/guides/token-security-score/ · Updated 2026-10-28

Short answer

Call `GET /v1/robinhood/token/{address}/security`. It returns a `score` from 0 to 100, a `risk` level (`low`, `medium`, `high`, `critical`) and the `flags` that cost points: honeypot (−100), taxes over 10% (−30), insider launch (−50), unlocked liquidity (−20), risky Uniswap v4 hook (−10 to −60) and more. No API key needed.

[GET `/token/{address}/security`](https://docs.crius.sh/reference/security/security-checks/) [GET `/token/{address}/liquidity`](https://docs.crius.sh/reference/security/liquidity-locks/) [GET `/token/{address}/bundles`](https://docs.crius.sh/reference/wallet-graph/snipers-bundles-clusters/)

The security score is a single number, 0 to 100, that sums up everything Crius checks about a Robinhood Chain token: whether you can sell it, what it really costs to buy and sell, what the owner can still change, whether the liquidity can be pulled, how risky its Uniswap v4 hook is and whether insiders bought the launch. You start at 100 and each problem found subtracts points.

What the score can't promise

A score of 95 means the checks found no trap, not that the token is safe. The honeypot simulation only runs for tokens with a Uniswap v2 WETH pair, traps that switch on later or target specific wallets can pass, and most losses on new tokens come from insiders selling. Read [Security score: confidence and limitations](https://docs.crius.sh/concepts/security-score-limits/) before you gate trades on it.

## Get the score in one call

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

### A clean graduated Pons token: score 95

sockets (0xddccd4690cc99cf19d2e0bdbcb390d17e913958a) launched on Pons and graduated to Uniswap v4. Is it safe to trade?

GET/v1/robinhood/token/0xddccd4690cc99cf19d2e0bdbcb390d17e913958a/security

  

**cURL**

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

**JavaScript**

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

**Python**

```python
import requests

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

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

```json
{
  "data": {
    "contract": {
      "blacklist": false,
      "can_change_limits": false,
      "can_change_tax": false,
      "cooldown": false,
      "implementation": null,
      "is_proxy": false,
      "mintable": false,
      "owner": null,
      "ownership": "none",
      "pausable": false,
      "proxy_kind": null,
      "self_destruct": false,
      "trading_switch": false,
      "upgradeable": false,
      "verified": null
    },
    "flags": [
      "unverified"
    ],
    "honeypot": {
      "is_honeypot": false,
      "reason": null,
      "selective": false
    },
    "hook": {
      "address": "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044",
      "capabilities": {
        "can_block_swaps": false,
        "can_gate_liquidity": false,
        "can_modify_liquidity_amounts": false,
        "can_modify_swap_amounts": true
      },
      "code": {
        "admin_functions": [],
        "checked_ts": 1793207140434,
        "code_hash": "0xc21b1e6c1b45403e81a581f22ed6d9c747997af1cfdac1b1dc9f4b1d346a10db",
        "family": "0xabda3266e50c",
        "kind": "contract",
        "logic": null,
        "owner": "0x263ed295dafae1d9aadd6e56c4b6f9f38ee019dd",
        "ownership": "active",
        "size": 15167
      },
      "family": {
        "honeypot_pct": 0,
        "hooks": 22,
        "id": "0xabda3266e50c",
        "liquidity_pulled_pct": 0.684086,
        "pools_traded": 10525,
        "taxed_pct": 51.9715,
        "verified_hooks": 1
      },
      "flags": [],
      "name": "PonsV2MemeHook",
      "observed": {
        "dynamic_tax_pools": 13,
        "first_trade_ts": 1785866942000,
        "honeypot_pools": 0,
        "last_trade_ts": 1793223683000,
        "liquidity_pulled_pct": 0.66813,
        "liquidity_pulled_pools": 70,
        "max_buy_tax_pct": 10.99,
        "max_sell_tax_pct": 0.7,
        "median_pool_life_min": 53423.5,
        "pools": 10478,
        "pools_traded": 10477,
        "tax_measured_pools": 10392,
        "taxed_10pct_pools": 35,
        "taxed_pools": 5463,
        "volume_usd": 5384607135
      },
      "pattern": {
        "description": "hooks that change swap amounts only",
        "honeypot_pct": 0.0696347,
        "id": "swap_delta_only",
        "liquidity_pulled_pct": 7.93603,
        "pools_traded": 43082,
        "taxed_pct": 15.7537
      },
      "permissions": [
        "beforeInitialize",
        "afterSwap",
        "afterSwapReturnDelta"
      ],
      "risk": [
        "can_modify_swap_amounts"
      ],
      "risk_level": "low"
    },
    "known_asset": false,
    "launch": {
      "flags": [],
      "lp_top_wallet": {
        "address": "0x34062c5519d27d399b1deb897b6c769683ec7fa3",
        "liquidity_usd": 106.386,
        "pct": 0.549474
      },
      "sniper_supply_pct": 30.1177,
      "sniper_top_wallet_pct": 24.0035,
      "sniper_wallets": 6,
      "sniper_window_blocks": 10,
      "uniform_holders": null,
      "wallet_farm": null
    },
    "limits": {},
    "liquidity": {
      "status": "partially_locked",
      "summary": {
        "burned_pct": 0,
        "locked_pct": 98.9946,
        "next_unlock_ts": null,
        "protocol_fee_pct": 0,
        "unlocked_in_wallets_pct": 1.00542,
        "weighting": "by pool liquidity_usd"
      }
    },
    "primary_dex": "uniswap_v4",
    "risk": "low",
    "score": 95,
    "tax": {
      "buy_pct": 2.69,
      "confidence": "high",
      "realized": {
        "buy_pct": 2.69,
        "by_wallet_class": {
          "dev_sell_pct": null,
          "others_sell_pct": 0
        },
        "last_sample_ts": 1793225076000,
        "max_sell_pct_seen": 65.93,
        "samples": {
          "buys": 4144,
          "sells": 3423
        },
        "sell_pct": 0,
        "window": "30d"
      },
      "sell_pct": 0,
      "simulated": null,
      "source": "realized",
      "transfer_pct": null
    },
    "tax_history": [
      {
        "from_block": 100193859,
        "pct": 0,
        "side": "buy"
      },
      {
        "from_block": 100193869,
        "pct": 0,
        "side": "sell"
      },
      {
        "from_block": 100213206,
        "pct": 3,
        "side": "buy"
      },
      {
        "from_block": 100342818,
        "pct": 0,
        "side": "buy"
      },
      {
        "from_block": 100344806,
        "pct": 3,
        "side": "buy"
      }
    ],
    "tax_history_total": 7,
    "tax_mode": "dynamic",
    "token": "0xddccd4690cc99cf19d2e0bdbcb390d17e913958a"
  },
  "meta": {
    "block": 100406831,
    "block_age_ms": 624,
    "block_ts": 1793225081000,
    "chain": "robinhood",
    "finalized_block": 100397649,
    "lag_ms": 32,
    "safe_block": 100401329,
    "simulation": "no V2 WETH pair: realized tax only"
  }
}
```

What this tells you

-   `score: 95`, `risk: "low"`: the only flag is `unverified` (−5), because the contract source isn’t published on an explorer.
-   `honeypot.is_honeypot: false`: thousands of wallets have sold.
-   `tax.buy_pct` is about 2.7% and `tax.sell_pct` is 0, measured from real trades (`tax.source: "realized"`, `confidence: "high"`). The buy side is Pons’s standard fee.
-   `contract.ownership: "none"`: nobody can mint, blacklist, pause or change taxes.
-   `liquidity.summary.locked_pct` is about 97%: the LP sits in Pons’s permanent launch locker.
-   `hook.risk_level: "low"`: the PonsV2MemeHook has thousands of traded pools with no honeypots.

[Security checks reference](https://docs.crius.sh/reference/security/security-checks/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20A%20clean%20graduated%20Pons%20token%3A%20score%2095&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Ftoken-security-score%2F%23clean-token%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Ftoken%2F0xddccd4690cc99cf19d2e0bdbcb390d17e913958a%2Fsecurity%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

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

### An insider launch: score 45

Rebot (0x192b126efea71ca5e7767bc6fc53038d869fbbba) has a clean contract and locked liquidity, but its price fell 97% within hours. What does the score see?

GET/v1/robinhood/token/0x192b126efea71ca5e7767bc6fc53038d869fbbba/security

  

**cURL**

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

**JavaScript**

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

**Python**

```python
import requests

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

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

```json
{
  "data": {
    "contract": {
      "blacklist": false,
      "can_change_limits": false,
      "can_change_tax": false,
      "cooldown": false,
      "implementation": null,
      "is_proxy": false,
      "mintable": false,
      "owner": null,
      "ownership": "none",
      "pausable": false,
      "proxy_kind": null,
      "self_destruct": false,
      "trading_switch": false,
      "upgradeable": false,
      "verified": null
    },
    "flags": [
      "unverified",
      "insider_launch"
    ],
    "honeypot": {
      "is_honeypot": false,
      "reason": null,
      "selective": false
    },
    "hook": {
      "address": "0xe5e702641ea86f4ae6cc3cdaed2b886f976be044",
      "capabilities": {
        "can_block_swaps": false,
        "can_gate_liquidity": false,
        "can_modify_liquidity_amounts": false,
        "can_modify_swap_amounts": true
      },
      "code": {
        "admin_functions": [],
        "checked_ts": 1793207140434,
        "code_hash": "0xc21b1e6c1b45403e81a581f22ed6d9c747997af1cfdac1b1dc9f4b1d346a10db",
        "family": "0xabda3266e50c",
        "kind": "contract",
        "logic": null,
        "owner": "0x263ed295dafae1d9aadd6e56c4b6f9f38ee019dd",
        "ownership": "active",
        "size": 15167
      },
      "family": {
        "honeypot_pct": 0,
        "hooks": 22,
        "id": "0xabda3266e50c",
        "liquidity_pulled_pct": 0.684086,
        "pools_traded": 10525,
        "taxed_pct": 51.9715,
        "verified_hooks": 1
      },
      "flags": [],
      "name": "PonsV2MemeHook",
      "observed": {
        "dynamic_tax_pools": 13,
        "first_trade_ts": 1785866942000,
        "honeypot_pools": 0,
        "last_trade_ts": 1793223683000,
        "liquidity_pulled_pct": 0.66813,
        "liquidity_pulled_pools": 70,
        "max_buy_tax_pct": 10.99,
        "max_sell_tax_pct": 0.7,
        "median_pool_life_min": 53423.5,
        "pools": 10478,
        "pools_traded": 10477,
        "tax_measured_pools": 10392,
        "taxed_10pct_pools": 35,
        "taxed_pools": 5463,
        "volume_usd": 5384607135
      },
      "pattern": {
        "description": "hooks that change swap amounts only",
        "honeypot_pct": 0.0696347,
        "id": "swap_delta_only",
        "liquidity_pulled_pct": 7.93603,
        "pools_traded": 43082,
        "taxed_pct": 15.7537
      },
      "permissions": [
        "beforeInitialize",
        "afterSwap",
        "afterSwapReturnDelta"
      ],
      "risk": [
        "can_modify_swap_amounts"
      ],
      "risk_level": "low"
    },
    "known_asset": false,
    "launch": {
      "flags": [
        "insider_launch"
      ],
      "lp_top_wallet": {
        "address": "0x6e8244ba97cbb7d136aafc667e8da302140dbc5b",
        "liquidity_usd": 5.70259,
        "pct": 0.0996139
      },
      "sniper_supply_pct": 60.9726,
      "sniper_top_wallet_pct": 53.1794,
      "sniper_wallets": 4,
      "sniper_window_blocks": 10,
      "uniform_holders": null,
      "wallet_farm": null
    },
    "limits": {},
    "liquidity": {
      "status": "partially_locked",
      "summary": {
        "burned_pct": 0,
        "locked_pct": 99.7392,
        "next_unlock_ts": null,
        "protocol_fee_pct": 0,
        "unlocked_in_wallets_pct": 0.260807,
        "weighting": "by pool liquidity_usd"
      }
    },
    "primary_dex": "uniswap_v4",
    "risk": "high",
    "score": 45,
    "tax": {
      "buy_pct": 2.64,
      "confidence": "high",
      "realized": {
        "buy_pct": 2.64,
        "by_wallet_class": {
          "dev_sell_pct": 0,
          "others_sell_pct": 0
        },
        "last_sample_ts": 1793224833000,
        "max_sell_pct_seen": 0.69,
        "samples": {
          "buys": 1417,
          "sells": 1990
        },
        "sell_pct": 0,
        "window": "30d"
      },
      "sell_pct": 0,
      "simulated": null,
      "source": "realized",
      "transfer_pct": null
    },
    "tax_history": [
      {
        "from_block": 100238946,
        "pct": 0,
        "side": "buy"
      },
      {
        "from_block": 100238968,
        "pct": 0,
        "side": "sell"
      },
      {
        "from_block": 100239845,
        "pct": 3,
        "side": "buy"
      }
    ],
    "tax_history_total": 3,
    "tax_mode": "dynamic",
    "token": "0x192b126efea71ca5e7767bc6fc53038d869fbbba"
  },
  "meta": {
    "block": 100406835,
    "block_age_ms": 974,
    "block_ts": 1793225081000,
    "chain": "robinhood",
    "finalized_block": 100397649,
    "lag_ms": 46,
    "safe_block": 100401329,
    "simulation": "no V2 WETH pair: realized tax only"
  }
}
```

What this tells you

-   `score: 45`, `risk: "high"`: `insider_launch` (−50) and `unverified` (−5).
-   `launch.sniper_supply_pct` is about 61%: four wallets, including the developer’s, bought most of the supply in the first 10 blocks. `launch.sniper_top_wallet_pct` shows one wallet took 53%.
-   The contract itself is clean and the liquidity is locked, so nothing in the code is a trap. The risk was who held the supply: insiders sold into the buyers who came after.

[Security checks reference](https://docs.crius.sh/reference/security/security-checks/) Runs from your browser on the anonymous plan [Data looks wrong? Report it](mailto:support@crius.sh?subject=Wrong%20data%20in%20docs%20example%3A%20An%20insider%20launch%3A%20score%2045&body=Page%3A%20https%3A%2F%2Fdocs.crius.sh%2Fguides%2Ftoken-security-score%2F%23insider-token%0ARequest%3A%20GET%20%2Fv1%2Frobinhood%2Ftoken%2F0x192b126efea71ca5e7767bc6fc53038d869fbbba%2Fsecurity%0A%0AWhat's%20wrong%20or%20missing%3F%0A%0A)

## What costs points

Every deduction appears in `flags`, so you can show users exactly why a token scored what it did.

| Flag | Points | What it means |
| --- | --- | --- |
| `honeypot` | −100 | The sell simulation failed, or 20+ buys and no non-dev sells. Always `critical`. |
| `admin_scam_flag` | −100 | Reviewed and marked as a scam by Crius. |
| `selective_honeypot` | −60 | Only the developer has managed to sell. |
| `transfer_events_dont_match_balances` | −60 | Transfer events don't add up to balances (spoofed events). |
| `hook_critical_risk` | −60 | The pool's v4 hook has no code, is a delegated wallet, or its code family is behind many honeypots. |
| `insider_launch` | −50 | Most of the supply was sniped at launch by a few wallets, including insiders. Always `high`. |
| `wallet_farm` | −50 | Holders are a farm of wallets created and funded together. |
| `high_tax` | −30 | Buy or sell tax above 10%. |
| `hook_high_risk` | −30 | The hook can block swaps, or its code family has a record of rugs. |
| `uniform_holders` | −30 | Holder balances are suspiciously equal (an airdrop to controlled wallets). |
| `lp_single_wallet` | −25 | One wallet holds most of the unlocked liquidity. |
| `lp_unlocked` | −20 | The liquidity can be withdrawn at any time. |
| `tax_over_5pct` | −15 | Buy or sell tax between 5% and 10%. |
| `mintable`, `blacklist`, `upgradeable_proxy` | −15 each | The owner can mint, blacklist wallets, or swap the contract's code. |
| `ownership_active`, `pausable`, `tax_changeable`, `tax_mismatch`, `hook_medium_risk` | −10 each | Owner powers that are still live, or a simulated tax that disagrees with what buyers really paid. |
| `unverified` | −5 | The source isn't verified on an explorer. |

Owner powers (`mintable`, `blacklist`, `pausable`, `tax_changeable`) only count while someone owns the contract: once ownership is renounced they can’t be used.

## How the verdict is decided

`risk` is not just the score cut into bands:

-   **`critical`**: a honeypot, whatever else the token has.
-   **`high`**: a score under 50, or any `insider_launch`, `wallet_farm` or `hook_critical_risk`, even if the score is higher.
-   **`low`**: a score of 80 or more.
-   **`medium`**: everything in between.

Known assets (`known_asset: true`: WETH, USDG, tokenized stocks) are always `low`.

## Use it in your app

1.  **Call `/security` before you list or trade a token.** It’s on the anonymous plan, so a backend can call it for every new token without a key; with a key it costs 1 credit.
    
2.  **Gate on `risk`, explain with `flags`.** Block `critical`, warn on `high`, and show the flags as plain-language reasons. The table above has wording you can reuse.
    
3.  **Show the evidence.** `tax.realized.samples` tells users how many trades the tax is based on, `liquidity.summary` how much is locked or burned, and `launch` who bought the first blocks.
    
4.  **Watch for changes.** Taxes and LP status can change after launch. Subscribe to the [WebSocket stream](https://docs.crius.sh/reference/stream/) for tax and LP events, or re-check on a schedule.
    

```js
// Minimal risk gate for a trading bot or token list.
const res = await fetch(`https://api.crius.sh/v1/robinhood/token/${token}/security`);
const { data } = await res.json();

if (data.risk === "critical") throw new Error("honeypot: can't sell");
if (data.risk === "high") console.warn(`high risk (${data.score}/100): ${data.flags.join(", ")}`);
console.log(`buy tax ${data.tax.buy_pct ?? "?"}%, sell tax ${data.tax.sell_pct ?? "?"}%`);
```

Go deeper on one signal

The score combines several endpoints. When you need the detail behind a flag, call it directly: [Liquidity & locks](https://docs.crius.sh/reference/security/liquidity-locks/) for every LP position and unlock date, [Snipers, bundles & clusters](https://docs.crius.sh/reference/wallet-graph/snipers-bundles-clusters/) for who bought the launch, and [Hook detail](https://docs.crius.sh/reference/pools/hook-detail/) for a hook’s code and history.

## Frequently asked questions

**What is a good security score?**

80 or more is `low` risk: no honeypot, taxes at or under 5%, no owner powers that matter, liquidity locked or burned, a clean hook and a fair launch. 50–79 is `medium`. Under 50, or any insider launch, wallet farm or critical hook, is `high`; a honeypot is always `critical`. Treat the score as a summary and read the `flags`: they say exactly what cost points.

**Does the score need an API key?**

No. `/security` is on the anonymous plan (1 credit per call with a key). Without a key you get a low per-IP rate; a free key raises it and adds `fresh=1` re-simulation on paid plans.

**How fresh is the score?**

Results are cached for 15 seconds per token and trade size; on paid plans `fresh=1` simulates again at the current block. Realized taxes come from the last 30 days of trades (the median of the latest 50 per side), so a tax change appears as new trades arrive. `meta.block` tells you the block the answer was read at.

**Can a token with a high score still go to zero?**

Yes. The score measures what can be checked on-chain: the contract, the taxes buyers actually paid, the liquidity and who bought the launch. It can't see a team walking away or a market losing interest. A score of 95 means no trap was found, not that the price will hold.

**Why is a well-known token marked low risk with flags?**

Known assets (WETH, USDG, tokenized stocks) have `known_asset: true` and are always `low` risk; their flags (an upgradeable proxy, for example) are shown for information but don't change the verdict.

## Related

[Concept **Score confidence & limits** What the Crius security score can and can't see on Robinhood Chain, how to read its confidence fields, and why a low-risk result is not a guarantee a token is safe. Read](https://docs.crius.sh/concepts/security-score-limits/) [Guide **Check token taxes** Get the real buy and sell tax of any Robinhood Chain token in one call, measured from recent trades and checked by simulation. Real examples with a 5% sell tax and a 7% buy tax. Read](https://docs.crius.sh/guides/check-token-taxes/) [Guide **Detect a honeypot** Check whether a Robinhood Chain token can be sold before you buy it. One API call simulates a buy and a sell and checks real trades; a real honeypot example shows the evidence. Read](https://docs.crius.sh/guides/detect-honeypot/) [Guide **Check liquidity locks** Find out whether a Robinhood Chain token's liquidity is locked, burned or held by wallets that can pull it, pool by pool, with the locker and unlock date. Real examples from Pons tokens. Read](https://docs.crius.sh/guides/check-liquidity-locked/) [Guide **Check v4 hook risk** Find out what a Robinhood Chain token's Uniswap v4 hook can do and what happened in its pools (taxes, honeypots, rugs). Real examples, including critical hooks. Read](https://docs.crius.sh/guides/check-uniswap-v4-hook-risk/) [Guide **Detect bundles & snipers** Find out who bought a Robinhood Chain token's launch, how much of the supply snipers and bundles took and whether they still hold it, with a real insider launch that fell 97%. Read](https://docs.crius.sh/guides/detect-bundles-and-snipers/) [API reference **Security checks API** Contract checks (ownership, mint, pause, blacklist, proxy, limits), realized and simulated buy/sell tax, honeypot verdict and, for v4 tokens, the pool hook's permissions and risk. Read](https://docs.crius.sh/reference/security/security-checks/)
