Dev & Creator Endpoints
Score Solana token creators (devs) before you trust their launches. Get a creator’s dev score from 0 to 100 with its tripped risk flags, launch-bundle and rug metrics, funding origin and every token launched, bulk-export all creators, or list every wallet a funder paid into to tell an ordinary wallet from a fleet.
Paths are relative to https://terminal.raiden.wtf/api and every request carries your key in the X-API-Key header (see Authentication). Each call costs the credits shown next to it.
Creator profile
Everything about a creator in one call: dev score, risk flags, funding origin, and every token launched.
| Parameter | In | Description |
|---|---|---|
addr | path | Creator address. |
The response groups it into stats (dev score, risk flags and creator metrics), funding (funding origin) and tokens (every token launched). For the score card alone, use /creators/{addr}/stats.
curl -s "https://terminal.raiden.wtf/api/creators/5Q5q…Funr" \
-H "X-API-Key: $RAIDEN_KEY"{
"creator": "5Q5q…Funr",
"stats": {
"creator": "5Q5q…Funr",
"dev_score": 38,
"flags": [
{
"id": "dev_dump",
"name": "Dev dumped after launch",
"category": "dev-rug"
},
{
"id": "fresh_wallet",
"name": "Throwaway creator wallet",
"category": "sybil"
}
],
"label": "creator_blocked",
"token_count": 27,
"tokens_30d": 14,
"tokens_per_day_30d": 0.47,
"max_burst_10m": 3,
"median_gap_s": 5400,
"distinct_symbols": 19,
"distinct_names": 22,
"graduated_count": 1,
"grad_rate": 0.037,
"dead_count": 18,
"doa_count": 9,
"abandoned_count": 6,
"survival_rate": 0.11,
"median_lifespan_s": 21600,
"dev_dump_count": 4,
"full_exit_count": 2,
"held_clean_count": 3,
"rug_events": 4,
"bundled_launch_count": 5,
"dev_in_bundle_count": 2,
"wallet_age_days": 1.8,
"funder": "Gm4w…9xZ2",
"funder_kind": "exchange",
"funder_label": "Coinbase",
"shared_funder_degree": 31,
"sibling_creators": 12,
"rotation_count_30d": 3,
"fanout_degree_30d": 7,
"first_created_at": "2026-05-02T14:08:31Z",
"last_active_at": "2026-06-26T22:13:05Z",
"updated_at": "2026-06-27T03:11:47Z"
},
"funding": {
"funder": "Gm4w…9xZ2",
"funder_label": "Coinbase",
"funder_kind": "exchange",
"funded_at": "2026-05-02T13:55:12Z",
"funded_lamports": 488888889,
"funder_is_hub": true
},
"tokens": [
{
"mint": "9xQm…pump",
"symbol": "WAGMI",
"name": "We All Gonna Make It",
"status": "bonding",
"created_at": "2026-06-26T18:42:09Z",
"last_price": "0.00000042",
"dev_hold_pct": 2.35,
"dev_realized_pnl": "1284500000",
"dumped": true,
"ath": "0.00000311"
}
]
}Creator dev score card
The dev score card of a creator: score 0–100 (−1 unknown), tripped risk flags and all creator metrics.
| Parameter | In | Description |
|---|---|---|
addr | path | Creator address. |
Launch bundle. The launch bundle of a token is the bundle in its creation slot: two or more landed transactions on the token at adjacent block positions (block_index ±1, the same rule as the bundled flag on swaps). The legs of one transaction count once; reverted attempts and other tokens’ swaps never count.
Bundle fields.
dev_in_bundle_count— tokens where the creator’s own buy is inside that bundle; it trips thebundle_devflag. The dev buy always lands in the creation slot; it counts only when another landed transaction on the token sits right next to it.bundled_launch_count— tokens whose launch bundle bought at least 30% of the supply (1 billion tokens, or 2 billion for mayhem tokens).
Both are counted per token once its creation slot is in, so a fresh launch shows up within a few minutes.
dev_score runs from 0 to 100. A value of -1 means unknown: the creator is not yet scored.
curl -s "https://terminal.raiden.wtf/api/creators/5Q5q…Funr/stats" \
-H "X-API-Key: $RAIDEN_KEY"{
"creator": "5Q5q…Funr",
"dev_score": 34,
"flags": [
{
"id": "dev_dump",
"name": "Dev dumped after launch",
"category": "dev-rug"
},
{
"id": "fresh_wallet",
"name": "Throwaway creator wallet",
"category": "sybil"
}
],
"label": "creator_blocked",
"token_count": 87,
"tokens_30d": 41,
"tokens_per_day_30d": 1.3666666666666667,
"max_burst_10m": 6,
"median_gap_s": 1840,
"distinct_symbols": 52,
"distinct_names": 61,
"graduated_count": 3,
"grad_rate": 0.034482758620689655,
"dead_count": 70,
"doa_count": 44,
"abandoned_count": 12,
"survival_rate": 0.08045977011494253,
"median_lifespan_s": 5400,
"dev_dump_count": 23,
"full_exit_count": 9,
"held_clean_count": 4,
"rug_events": 11,
"bundled_launch_count": 5,
"dev_in_bundle_count": 3,
"wallet_age_days": 6.4,
"funder": "5Q5q…Funr",
"funder_kind": "exchange",
"funder_label": "Binance",
"shared_funder_degree": 18,
"sibling_creators": 7,
"rotation_count_30d": 2,
"fanout_degree_30d": 14,
"first_created_at": "2026-04-02T11:08:33Z",
"last_active_at": "2026-06-26T19:54:07Z",
"updated_at": "2026-06-27T03:15:42Z"
}List token creators
All token creators with their full creator_stats card, paginated. Use it to bulk-export the ~3.4M creators or to pull everyone active in a window.
| Parameter | In | Description |
|---|---|---|
sort | query | recent (default), paginated with a cursor. Ranked sorts: score, tokens or grads. |
dir | query | For ranked sorts: asc or desc. |
offset | query | For ranked sorts. Max 100000. |
min_tokens | query | Minimum token count; use it to cut 1-token spam. |
min_score | query | Minimum dev_score (-1 = not yet scored). |
max_score | query | Maximum dev_score. |
limit | query | Maximum rows per page. |
Pagination. The default sort=recent is a composite keyset on (last_created_at, creator): pass next_cursor back verbatim. It is opaque (timestamp|creator); the creator tiebreak makes bulk export lossless even when many creators share the same second. Ranked sorts page with offset (max 100000), so use sort=recent with the cursor for full exports.
Row schema. Rows have the same schema as /creators/{addr}/stats minus the manual label fields; fetch the single-creator card for those. The launch-bundle fields (dev_in_bundle_count, bundled_launch_count, the bundle_dev flag) are defined there.
curl -s "https://terminal.raiden.wtf/api/creators?sort=recent&limit=2&min_tokens=3" \
-H "X-API-Key: $RAIDEN_KEY"{
"data": [
{
"creator": "5Q5q…Funr",
"dev_score": 62,
"flags": [
{
"id": "bundle_dev",
"name": "Dev in launch bundle",
"category": "launch"
}
],
"token_count": 14,
"tokens_30d": 6,
"tokens_per_day_30d": 0.2,
"max_burst_10m": 2,
"median_gap_s": 86400,
"distinct_symbols": 14,
"distinct_names": 14,
"graduated_count": 2,
"grad_rate": 0.14,
"dead_count": 8,
"doa_count": 3,
"abandoned_count": 1,
"survival_rate": 0.29,
"median_lifespan_s": 5400,
"dev_dump_count": 0,
"full_exit_count": 1,
"held_clean_count": 9,
"rug_events": 0,
"bundled_launch_count": 1,
"dev_in_bundle_count": 1,
"wallet_age_days": 212.4,
"funder": "Cb3f…g9rE",
"funder_kind": "cex",
"shared_funder_degree": 3,
"sibling_creators": 2,
"rotation_count_30d": 0,
"fanout_degree_30d": 1,
"first_created_at": "2025-12-02T10:11:02Z",
"last_created_at": "2026-07-01T18:40:11Z",
"last_active_at": "2026-07-02T09:13:44Z",
"updated_at": "2026-07-02T09:14:02Z"
},
{
"creator": "9aQx…R2vD",
"dev_score": -1,
"flags": [],
"token_count": 3,
"graduated_count": 0,
"last_created_at": "2026-07-01T18:39:58Z",
"updated_at": "2026-07-02T09:14:02Z"
}
],
"next_cursor": "2026-07-01T18:39:58Z|9aQx…R2vD"
}Wallets by funder
All wallets seen from the side of who funded them: every address whose first SOL came from the funder you pass. It answers “which addresses did this hub pay into”.
| Parameter | In | Description |
|---|---|---|
funder | query | Required. Funder address. |
creator | query | no drops every address that has ever created a token. |
traded | query | 1 keeps only addresses with real trading activity. |
sort | query | funded (default): newest funding first, the indexed order. addr: a stable order to reconcile two exports against. |
limit | query | Maximum rows per page. |
Where the rows come from. The perimeter is wallet_funding (the origin of the first SOL an address ever received), not the trader table, because the question starts at the funder.
Why funder is required. The index is (funder, first_time DESC), so without a funder there is no indexed path at all and you would walk 210M rows: measured 676 ms for twenty rows, against 63 ms for a funder read. It is also the difference between answering a question and offering a tap that enumerates every address ever seen on chain.
Filters.
creator=no— a creator funded by an exchange is ordinary; a hundred non-creator wallets born from the same funder is a fleet. The check runs againsttokens, the source of truth, not against the computedcreator_statstable, so a creator minted a minute ago is never mislabelled.traded=1— without it, a hub’s list is mostly addresses that received SOL and never bought anything (69 ms measured).
Pagination. Keyset: pass next_cursor back verbatim. It is opaque (RFC3339-with-nanoseconds|wallet); the nanoseconds and the wallet tiebreak both matter, because several wallets are funded by the same transaction.
An empty page does not mean you are done. Each request examines at most 5,000 wallet_funding rows and then stops, even empty-handed. A page with fewer rows than the limit, or with no rows at all, only means that window held no matches.
next_cursor points at the last candidate examined, not at the last row returned. Keep paging until next_cursor is absent: that is the only signal that the data is finished.
Why paging is bounded work. It is deliberate. Measured on a real hub, zero of its 20,000 most recently funded wallets had ever traded, so an unbounded traded=1 walked 699,000 rows and died at the 25s deadline, while the same query on Binance answered in 69 ms. Measured after the fix, the same hub answers in 215 ms with 0 rows and a cursor that keeps moving back in time.
Response fields. Each row carries:
- the funder, its known label and kind:
funder,funder_label,funder_kind(exchange,hub,tip,botfeeorrouter); - when and how much it was funded:
funded_at,funded_lamports; - the trading stats:
trades,realized_pnl,sol_invested,first_trade_at,last_trade_at.
The trading stats are absent, not zero, when the wallet never traded. “Never entered the market” and “traded to a wash” are different facts; flattening them would hide exactly what separates a dormant fleet from an active one.
curl -s "https://terminal.raiden.wtf/api/wallets?funder=5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9&creator=no&traded=1&limit=2" \
-H "X-API-Key: $RAIDEN_KEY"{
"data": [
{
"wallet": "Cvv7YuJV6REYwJN6p2Hi3Ttc8w52fw5yX3ABby1QReqY",
"funder": "5tzFkiKscXHK5ZXCGbXZxdw7gTjjD1mBwuoFbhUvuAi9",
"funder_label": "Binance",
"funder_kind": "exchange",
"funded_at": "2026-09-03T15:15:34.274244Z",
"funded_lamports": "7271490600",
"source": "sol",
"trades": 1,
"realized_pnl": "0",
"sol_invested": "250000000",
"first_trade_at": "2026-09-03T15:16:02Z",
"last_trade_at": "2026-09-03T15:16:02Z"
}
],
"next_cursor": "2026-09-03T15:15:34.274244Z|Cvv7YuJV6REYwJN6p2Hi3Ttc8w52fw5yX3ABby1QReqY"
}