How it works

Ten structural signals. One score that starts at 100 and descends.

Apiro doesn’t predict price. It identifies the specific, measurable conditions under which a token can’t be exited — thin pools, manufactured volume, activity that has silently stopped — using public DEX pool state. No privileged access, no latency advantage, no co-located node.

From pool state to verdict

What happens before your bot commits capital.

Public DEX pool state

Liquidity, volume, prices, trades and pool age across every pool for the token.

Ten signals computed

The ratios and patterns raw fields don’t surface on their own.

Severity bands

Each triggered signal is graded on a severity band — for example moderate, high or severe.

Weighted penalty

Penalties accumulate against a score that starts at 100.

Score, verdict, reasons

Itemized flags with triggering values, plain-language detail and in-band caveats.

Slow by design. Structural conditions don’t change in milliseconds, so Apiro recomputes on a cadence of minutes rather than competing on latency — and responses are safely cacheable for a minute or more on your side.

Scoring

Start at 100. Subtract what’s structurally wrong.

Each signal is scored on a severity band and contributes a weighted penalty. The score clamps at zero — but the uncapped raw_penalty is returned alongside it, so tokens past the clamp can still be ranked.

# conceptuallyscore = max(0, 100 − Σ weighted penalties)
raw_penalty = Σ weighted penalties # never clamped

Verdicts

critical< 25
high_risk25–44
caution45–69
acceptable≥ 70

Two tokens can both score 0 while one is substantially worse. ROBINTWINE scored 0.0 with a raw_penalty of 158.0 — bots that want granular ranking below the critical threshold should sort on it.

A bad score isn’t a short signal. It’s a reason to skip or size down. Tokens scored critical sometimes recover — the claim is about exit risk, not price path.

The signal set

Each signal, what it measures, and the evidence behind it.

Observed values below come from live Robinhood Chain data.

01 / 10

Liquidity depth

thin_liquidity
Measures
Pooled USD, all pools
Meaningful exits hurt
< $50,000
Exit effectively theoretical
< $10,000

Absolute pooled liquidity in USD, aggregated across every pool for the token. It is the single most common precondition for an unexitable position.

Below roughly $50,000, any position of meaningful size moves the price materially against you on the way out — regardless of what the token does. Below $10,000, exit is effectively theoretical.

Pooled liquidity log scale · same day

CASHCAT$9.6M
threshold$50k
threshold$10k
ROBINTWINE$5,622
02 / 10

Turnover ratio

extreme_turnover
Measures
24h volume ÷ liquidity
Healthy, actively traded
< 3× a day
Not achievable organically
> 20×

24-hour volume divided by pooled liquidity. A healthy, actively traded token recycles its pool depth somewhere under three times a day.

Values above 20× are not achievable by organic trading — a pool cannot honestly recycle its entire depth twenty times in a day. This is the highest-signal single metric in the system, and it’s invisible unless you deliberately compute the ratio.

Observed turnover linear scale

established0.3×
established0.7×
later failed45.7×
later failed94.8×
later failed117.8×

Established tokens barely register on the same axis as the tokens that failed.

03 / 10

Volume vs. market cap

volume_exceeds_mcap
Measures
24h volume ÷ market cap
Implausible above
10×

Where turnover catches manufactured volume relative to the pool, this catches it relative to the asset itself.

A ratio above 10× means every token in existence would need to trade ten times over in a single day.

Observed on failed tokens linear scale

threshold10×
failed token160.2×
ROBINTWINE235.2×
04 / 10

Pool age

newly_launched
Measures
Hours since earliest pool

Hours since the earliest pool was created. A token only hours old has no track record, and the deployer retains every option — including withdrawing liquidity entirely.

This isn’t a claim that new tokens are scams. It’s a statement that new tokens carry an irreducible unknown that older ones have partially resolved.

Same day, two tokens

16.8 hROBINTWINE pool age when scored
MonthsCASHCAT trading history
05 / 10

Price collapse

price_collapse
Measures
24h price change
Drawdown of concern
beyond −50%
Context
token days old

A drawdown beyond 50% on a token that is only days old is usually not a dip — it is the event itself, in progress.

Price alone isn’t enough. ROBINTWINE was up 7.30% on the day it was observed — and its price never crashed after trading stopped. That’s why price collapse is one signal of ten, not the verdict.

06 / 10

Sell pressure

sell_pressure
Measures
Sells ÷ all transactions
Distribution, not accumulation
> 70% sustained

Sells as a proportion of total transactions. A sustained imbalance beyond 70% indicates distribution rather than accumulation — holders leaving faster than buyers arrive.

07 / 10

Micro-trade signature

micro_trade_signature
Measures
Avg trade size × txn count
Machine fingerprint
thousands of txns, avg < $20

Automated volume generation produces a characteristic fingerprint: very high transaction counts at near-uniform, very small sizes. Human demand doesn’t distribute this way.

A token showing thousands of transactions at an average size under $20 is describing a machine, not a market.

08 / 10

Cross-pool price dispersion

price_dispersion
Measures
High vs. low price across pools
Concern
persistent spread

The spread between the highest and lowest price across the token’s pools. In a liquid market, arbitrage closes this gap within blocks.

A persistent spread means the pools are too thin or too fragmented for arbitrage to be worth executing — which tells you your own trade will be priced just as badly.

09 / 10

Activity cessation

activity_cessation
Measures
Txns last 1h vs. last 24h

Severity bands

severeZero trades in the last hour on a token with meaningful daily flow
highHourly activity collapses below 0.5% of daily flow
moderateAll of a day’s volume landed inside a single six-hour window, with nothing since

This signal exists because live testing exposed a state the other nine couldn’t see.

A token can display six figures of 24-hour volume and thousands of transactions while having had zero trades in the last hour. Read through 24-hour aggregates alone, it looks liquid. In reality the manufactured volume has switched off and there is no bid at all.

It’s the difference between a bot that reports a healthy market and a bot that tells you the market has quietly ended.

ROBINTWINE, seventeen hours later

4,819trades in the preceding day
0trades in the last hour

Its six-hour and 24-hour figures had become byte-identical: every trade it ever had arrived in a single burst.

10 / 10

Liquidity concentration

liquidity_concentration
Measures
Largest pool’s share of liquidity

Share of total liquidity held in a single pool. Concentration is a single point of failure: one withdrawal removes the entire market.

Worked example

Reading a real response: ROBINTWINE.

A live request, abbreviated. Three severe flags, a score clamped at zero, and the limits of the output stated in-band.

GET /v1/tokens/0xC711…470F/risk
{
  "address": "0xC7110dd6343fb126865DB673284D5B67F247470F",
  "symbol": "ROBINTWINE",
  "score": 0.0,
  "verdict": "critical",
  "flags": [
    {
      "name": "extreme_turnover",
      "severity": "severe",
      "value": 117.84,
      "detail": "24h volume is 117.8x pooled liquidity. A pool cannot organically recycle its entire depth this many times in a day; this pattern is consistent with wash trading or a small set of wallets cycling the same inventory."
    },
    {
      "name": "volume_exceeds_mcap",
      "severity": "severe",
      "value": 235.19,
      "detail": "24h volume is 235.2x the token's entire market cap ($662.5k traded against a $2.8k cap). Every coin in existence would have to change hands several times over to produce this honestly."
    },
    {
      "name": "activity_cessation",
      "severity": "severe",
      "value": 0,
      "detail": "Zero trades in the last hour against 4,819 over 24h. Activity has stopped dead. Volume that switches off this abruptly was being generated, not demanded -- and with it off there is no bid to exit into at any size."
    }
  ],
  "metrics": {
    "raw_penalty": 158.0,
    "total_liquidity_usd": 5622.15,
    "volume_h24_usd": 662519.47,
    "market_cap_usd": 2817.0,
    "turnover_ratio": 117.84,
    "volume_to_mcap_ratio": 235.19,
    "pool_age_hours": 16.8,
    "txns_h24": 4821,
    "txns_h1": 0,
    "avg_trade_size_usd": 137.42
  },
  "caveats": [
    "Wash-trading signals are statistical proxies, not proof of intent.",
    "Structural risk only: this score does not predict price direction.",
    "Derived from public DEX pool state; it cannot see contract-level traps."
  ]
}

Verdict and score

critical means a score under 25. This one sits at 0.0 — the floor.

Every flag explains itself

Each carries a severity, the value that triggered it, and a detail string written as readable prose. Rule-based bots threshold on value; agents reason over detail.

raw_penalty keeps counting

The score clamps at zero, but the uncapped penalty — 158.0 here — preserves ordering past the clamp.

Metrics you can check yourself

662,519.47 ÷ 5,622.15 = 117.84 turnover. 662,519.47 ÷ 2,817 = 235.19 volume-to-cap. Nothing hidden — just arithmetic done consistently, at decision time.

Caveats, in-band

Every response states its own limits, so an agent reasoning over the result weighs it correctly rather than over-trusting it.

Limits

What the score does — and doesn’t — tell you.

Not a price prediction

Structural risk only. A token can score well and still fall. The score describes whether you can get out, not where the price goes.

Proxies, not proof

Manufactured-volume signals are statistical patterns. Apiro describes findings as “consistent with” wash trading rather than asserting intent.

No contract-level view — yet

Pool state can’t see mint authority, transfer blacklists, honeypot logic or proxy upgradeability. Pair Apiro with a contract scanner until that lands.

Roadmap

Where the signal set goes next.

Planned capability — none of these are part of the current API.

Planned

Contract-level risk analysis

Mint authority, transfer blacklists, honeypot logic and proxy upgradeability — the traps that catch traders who correctly avoided the thin-liquidity ones. Closes the largest remaining blind spot.

Planned

Deployer reputation graph

Every token a deployer address has launched, and what happened to each — turning a one-off assessment into a historical judgement.

Planned

Wallet clustering

Funding-source analysis and circular-trade detection, moving manufactured-volume detection from ratio-based proxies to direct graph evidence.

Planned

Listing-catalyst intelligence

Tracking when a Robinhood Chain token is added to Robinhood’s retail app, the price signatures of those events, and the characteristics that precede them.

Planned

Historical scoring API

Point-in-time scores for backtesting — what Apiro would have said at the moment of each historical trade.

Planned

Webhooks

Push notifications on score threshold crossings and status changes, for portfolio monitoring rather than pre-trade checks.

See the signals on a real token.

The live report replays ROBINTWINE’s response — flags, metrics, caveats and the tradeable gate.