Insider Selling API
Insider Selling exposes a composite 0-10 hedge-pressure score per coin built from cross-venue negative funding, funding persistence, open interest, basis, CVD, sell-side flow, and supporting wallet/supply context. Basis and CVD exist only for the futures-covered majors, so most altcoin scores carry them null and are lower bounds (read signal_coverage_pct). High scores indicate hedge-like short pressure that deserves closer due diligence.
The signal updates every 30 minutes and is gated to coins where the score is strictly greater than zero, so an empty list means no qualifying pressure right now.
Get insider selling data
Returns coins ranked by their composite insider selling pressure 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
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.limitandmin_scoredo 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 pressure score from
0to10. Higher means stronger alignment across shortability, funding, market confirmation, flow, and supporting wallet/supply 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 (e.g.
-0.00012is -0.012%).
- Name
coins[].funding_magnitude- Type
- number
- Description
Sub-score reflecting the absolute size of negative funding.
- Name
coins[].funding_persistence- Type
- number
- Description
Sub-score reflecting how consistently the funding stays negative.
- Name
coins[].wallet_concentration- Type
- number | null
- Description
Supporting sub-score
[0, 1]from the top-10 holder share of supply.nullwhen no on-chain holder data is available.
- Name
coins[].holder_quality_deterioration- Type
- number | null
- Description
Sub-score
[0, 1]summarizing fragile holder base, top-heavy supply, liquidity weakness, and contract/security context.nullwhen none of those inputs is observed.
- Name
coins[].distribution_pressure- Type
- number
- Description
Sub-score
[0, 1]summarizing direct wallet/flow pressure and derivatives-confirmed selling pressure.
- Name
coins[].market_confirmation- Type
- number
- Description
Sub-score
[0, 1]summarizing funding, OI, basis, CVD, price path, and persistence confirmation.
- Name
coins[].manipulation_phase- Type
- string
- Description
Current phase label such as
active-hedge-pressure,persistent-shorting, orsupply-risk-supported.
- 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.
- Name
coins[].top10_holders_pct- Type
- number | null
- Description
Share of supply held by the top 10 holders, percent;
nullwhen unknown. Contract-held supply (team treasuries, vesting) and exchange hot wallets count as holders.
- 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 negative funding streak 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,update_frequency, and the list ofexchangesmonitored.
Request
curl -G https://www.sharpe.ai/api/v1/insider-selling/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": 8.4,
"signal_coverage_pct": 91,
"signal_coverage_status": "partial",
"incomplete_signal_groups": ["derivatives"],
"score_interpretation": "lower-bound-partial-inputs",
"avg_funding_72h": -0.00018,
"funding_magnitude": 0.79,
"funding_persistence": 0.88,
"wallet_concentration": 0.91,
"holder_quality_deterioration": 0.62,
"distribution_pressure": 0.73,
"market_confirmation": 0.68,
"manipulation_phase": "active-hedge-pressure",
"consecutive_negative_days": 12,
"price_change_24h": -3.21,
"price_change_7d": -11.4,
"signal_start_date": "2026-04-14T00: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": "Insider hedge-pressure scores based on cross-venue negative funding, open interest, basis, CVD, sell-side flow, and wallet/supply context.",
"signal": {
"methodology": "Composite 0-10 pressure score built around observable short-hedge behavior. Negative cross-venue funding is required; OI, basis, CVD, sell-side flow, and wallet/supply context raise conviction. Exact weighting is proprietary to reduce gaming.",
"update_frequency": "every 30 minutes",
"exchanges": [
"Binance", "Bybit", "OKX", "Gate.io", "Bitget", "Hyperliquid",
"Deribit", "HTX", "BingX", "KuCoin", "MEXC"
]
}
},
"meta": {
"request_id": "req_insider_abc123",
"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 does not depend on stated unlock calendars, because unlock timing and size can be incomplete or adversarial. Instead, it requires observable short-hedge pressure and then uses multiple signal families:
- Hedge pressure: negative cross-venue funding, funding persistence, and exchange breadth.
- Market confirmation: open interest, basis, true taker-flow/CVD, short crowding, and price path.
- Sell-side flow: DEX flow imbalance and weakening liquidity context.
- Supply context: top-10 holder share, holder count, liquidity depth, and mint/freeze authority flags.
Wallet and supply signals raise conviction, but they do not independently create an insider-selling signal. 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. Coins with score == 0 are filtered out of the response, so the coins array is always meaningfully populated when returned.
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.
Borrow and OTC deal details are treated as optional context, not required inputs. Public borrow data is inconsistent across venues and private OTC hedges are intentionally opaque, so the production score prioritizes continuously observable perp behavior.