Pump and Dump Detection API
Pump & Dump exposes a composite 0-10 score per coin built from derivatives positioning, holder concentration, liquidity quality, DEX flow, and price behavior. The pattern often signals artificial markup, distribution, or dump risk.
The signal is gated: a coin only qualifies when sufficient market coverage and multiple manipulation-risk signals align. Exact weights and thresholds are proprietary to reduce gaming.
The score updates every 30 minutes.
Get pump and dump data
Returns coins ranked by their composite pump-and-dump divergence score, descending.
Query parameters
- Name
limit- Type
- integer
- Description
Maximum number of coins to return.
1to500. Default100.
- Name
min_score- Type
- number
- Description
Filter to coins scoring at or above this threshold.
0to10. Default0.
- Name
phase- Type
- string
- Description
Filter to one phase:
setup,markup,distribution,dump, ordumping.
- Name
coin- Type
- string
- Description
One coin by its CoinGecko id (e.g.
pepe): its row exactly as the scorer wrote it, whatever its score. A coin that stopped qualifying answersscore: nullwith its sub-scores and phase cleared; an id with no row answers an empty list.limit,min_scoreandphasedo not apply.
Response fields
- Name
coins- Type
- array
- Description
Array of scored coins, sorted by
scoredescending.
- Name
coins[].coin_id- Type
- string
- Description
Canonical coin slug.
- Name
coins[].symbol- Type
- string
- Description
Ticker symbol.
- Name
coins[].name- Type
- string
- Description
Display name.
- Name
coins[].score- Type
- number | null
- Description
Composite manipulation risk score from
0to10. Higher means stronger alignment across derivatives, market structure, holder, liquidity, and flow signals. If funding, price or derivatives inputs are missing, the score is a conservative lower bound rather than a measured neutral reading; missing on-chain inputs are left out and the remaining weights re-normalize, so that gap can move the score either way.nullonly on acoinrequest for a coin that stopped qualifying.
- Name
coins[].signal_coverage_pct- Type
- integer
- Description
Weighted input completeness from
0to100across funding, price, derivatives, and on-chain groups.
- Name
coins[].signal_coverage_status- Type
- string
- Description
fullwhen every signal group is observed,partialat 50% coverage or more, otherwiselimited. Compare scores only with their coverage in view.
- Name
coins[].incomplete_signal_groups- Type
- string[]
- Description
Signal families with one or more unavailable inputs.
- Name
coins[].score_interpretation- Type
- string
- Description
lower-bound-partial-inputswhen a funding, price or derivatives input is missing (it scores as zero), otherwisefully-observed. A row missing only on-chain inputs readsfully-observed: those are left out and the weights re-normalize, and the gap shows inincomplete_signal_groups.
- Name
coins[].avg_funding_72h- Type
- number
- Description
Average funding rate across exchanges over the trailing 72 hours, expressed as a decimal.
- Name
coins[].funding_magnitude- Type
- number
- Description
Sub-score
[0, 1]reflecting the absolute size of negative funding (1.0 = -0.05%/8h or stronger).
- Name
coins[].pump_magnitude- Type
- number
- Description
Sub-score
[0, 1]reflecting the size of the 7-day price move on a log scale (100% pump ≈ 0.67, saturates at large pumps).
- Name
coins[].divergence_persistence- Type
- number
- Description
Sub-score
[0, 1]reflecting consecutive days funding has stayed negative.
- Name
coins[].derivatives_pressure- Type
- number
- Description
Sub-score
[0, 1]summarizing funding, OI, basis, CVD, liquidation, and cross-venue positioning pressure. Basis and CVD exist only for the futures-covered majors; on other coins they are null and add nothing, so the sub-score is a lower bound.
- Name
coins[].holder_concentration- Type
- number | null
- Description
Sub-score
[0, 1]summarizing top-10 holder share and holder-count scarcity.nullwhen no on-chain holder data is available.
- Name
coins[].market_structure_risk- Type
- number | null
- Description
Sub-score
[0, 1]summarizing holder concentration, liquidity fragility, flow imbalance, and contract/security context.nullwhen none of those inputs is observed.
- Name
coins[].dump_pressure- Type
- number
- Description
Sub-score
[0, 1]summarizing active downside pressure from market and derivatives signals.
- Name
coins[].manipulation_phase- Type
- string
- Description
Current phase label: one of
setup,markup,distribution,dump-risk, orwatch.
- Name
coins[].price_funding_divergence- Type
- number
- Description
Deprecated. Alias of
pump_magnitude. Will be removed after a deprecation window. New consumers should usepump_magnitudedirectly.
- Name
coins[].consecutive_negative_days- Type
- integer
- Description
Number of consecutive trading days with negative average funding.
- Name
coins[].price_change_24h- Type
- number
- Description
Trailing 24h price change as a percentage.
- Name
coins[].price_change_7d- Type
- number
- Description
Trailing 7d price change as a percentage. Used as market context alongside holder, liquidity, flow, and derivatives signals.
- Name
coins[].top10_holders_pct- Type
- number | null
- Description
Share of supply held by the top 10 holders, percent.
nullwhen unknown, including when contracts (treasury Safes, vesting, bridges, pools) hold over half of the top-10 share. Exchange hot wallets still count as holders.
- Name
coins[].oi_change_24h- Type
- number | null
- Description
24h open-interest change as a decimal, when futures data is available.
- Name
coins[].cvd_trend_24h- Type
- number | null
- Description
Net taker flow over each venue's newest 24 hourly candles with exchange-reported taker-buy volume (at least 15, the newest at most 3 hours old), averaged over venues, as a decimal in [-1, 1]; null when no venue qualifies. Price prediction scores the same figure as CVD.
- Name
coins[].basis_rate_avg- Type
- number | null
- Description
Average perp basis as a decimal, when spot/index and futures price context is available.
- Name
coins[].volume_to_liquidity_24h- Type
- number | null
- Description
24h DEX volume divided by available liquidity. High values can indicate fragile churn.
- Name
coins[].holders_change_pct- Type
- number | null
- Description
Holder-count change since the previous successful scoring run, expressed as a decimal.
- Name
coins[].top10_holders_pct_change- Type
- number | null
- Description
Change in top-10 holder share since the previous successful scoring run, expressed in percentage points.
- Name
coins[].signal_start_date- Type
- string
- Description
ISO 8601 timestamp of when the divergence began.
- Name
coins[].updated_at- Type
- string
- Description
ISO 8601 timestamp of the most recent score recomputation.
- Name
count- Type
- integer
- Description
Number of rows in
coins.
- Name
data_as_of- Type
- string | null
- Description
Latest
updated_attimestamp represented by the returned rows, in ISO 8601 format.nullwhen no valid score timestamp is available.
- Name
stale- Type
- boolean
- Description
truewhendata_as_ofis missing, invalid, or more than 1 hour old.
- Name
freshness_sla_seconds- Type
- integer
- Description
Maximum supported score age in seconds. Currently
3600(1 hour).
- Name
description- Type
- string
- Description
Plain-language summary of the signal for client display.
- Name
signal- Type
- object
- Description
Methodology metadata:
methodology,gate,update_frequency, and the list ofexchangesmonitored.
Request
curl -G https://www.sharpe.ai/api/v1/pump-dump/data \
-H "Authorization: Bearer sk_live_your_key_here" \
-d limit=20 \
-d min_score=4
Response
{
"data": {
"coins": [
{
"coin_id": "example-token",
"symbol": "EXMP",
"name": "Example Token",
"score": 7.6,
"signal_coverage_pct": 72,
"signal_coverage_status": "partial",
"incomplete_signal_groups": ["derivatives"],
"score_interpretation": "lower-bound-partial-inputs",
"avg_funding_72h": -0.00021,
"funding_magnitude": 0.74,
"pump_magnitude": 0.78,
"divergence_persistence": 0.71,
"derivatives_pressure": 0.66,
"holder_concentration": 0.92,
"market_structure_risk": 0.84,
"dump_pressure": 0.52,
"manipulation_phase": "distribution",
"price_funding_divergence": 0.78,
"consecutive_negative_days": 5,
"price_change_24h": 4.81,
"price_change_7d": 18.2,
"signal_start_date": "2026-04-21T00:00:00Z",
"updated_at": "2026-04-26T07:00:00Z"
}
],
"count": 1,
"data_as_of": "2026-04-26T07:00:00Z",
"stale": false,
"freshness_sla_seconds": 3600,
"description": "Pump and dump risk scores based on derivatives positioning, holder concentration, liquidity quality, and DEX flow.",
"signal": {
"methodology": "Composite 0-10 risk score built from derivatives positioning, market structure, holder concentration, liquidity fragility, and flow imbalance. Exact weighting is proprietary to reduce gaming.",
"gate": "Requires sufficient cross-exchange futures coverage plus at least one strong manipulation-risk setup, markup, distribution, or dump-risk condition.",
"update_frequency": "every 30 minutes",
"exchanges": [
"Binance", "Bybit", "OKX", "Gate.io", "Bitget", "Hyperliquid",
"Deribit", "HTX", "BingX", "KuCoin", "MEXC"
]
}
},
"meta": {
"request_id": "req_pumpdump_xyz789",
"timestamp": "2026-04-26T07:00:05Z",
"elapsed_ms": 12
}
}
The response header X-Sharpe-Data-State is ok or stale using the same 1-hour SLA. Stale rows remain available with HTTP 200, but clients should treat them as historical context rather than a current trading signal. A database or query failure answers 503 (service_unavailable, Retry-After: 30) in the normal API error envelope.
How the score is built
The score is a composite risk model capped at 10. It uses multiple signal families:
- Derivatives pressure: funding, open interest, basis, true taker-flow/CVD, and liquidation context.
- Holder concentration: top-10 holder share and holder-count context.
- Liquidity and flow quality: liquidity depth, volume-to-liquidity churn, and buy/sell imbalance.
- Phase detection: setup, markup, distribution, and dump-risk behavior.
We publish the signal families and validation process, but not the exact formula, weights, or thresholds. That keeps the leaderboard harder to game while still making the approach understandable to users.
Unavailable derivatives, price and funding inputs contribute no risk. This intentionally keeps a partial-input score conservative, but it also means the number is a lower bound rather than directly comparable with a fully observed row. Unavailable on-chain inputs are left out instead and the remaining weights re-normalize, so an on-chain gap can move the score either way. Always inspect signal_coverage_pct, signal_coverage_status, and incomplete_signal_groups alongside score.