Wallets API
Everything about the tracked wallets: who they are, how they perform, and what they
hold right now. Wallets are identified by an alias such as W12.
All endpoints require your API key (Authorization: Bearer <API_KEY>) and cost light
credits.
List tracked wallets
GET /wallets
List the tracked wallets with their full metrics, 25 per page, ordered W1 to Wn.
curl "https://api.prysmatic-sol.xyz/wallets?page=1" -H "Authorization: Bearer <API_KEY>"
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | int | 1 | Page number (>= 1). |
Response
{
"page": 1,
"page_size": 25,
"total": 247,
"has_more": true,
"items": [
{
"identity": { "wallet": "W1", "tracked": true, "score": 82.4, "status": "scored" },
"pnl": {
"sol_balance": 12.5, "pnl_sol": 40.2, "sol_bought": 120.0,
"sol_sold": 160.2, "sol_invested_open": 8.1, "unrealized_token_count": 3
},
"activity": {
"total_trades": 318, "buys": 170, "sells": 148, "transfers_in": 5,
"transfers_out": 2, "sol_received": 0.0, "sol_sent": 0.0,
"unique_tokens_traded": 96
},
"behavior": {
"winrate": 61.0, "loserate": 39.0, "avg_holding_time": 5400,
"avg_time_to_almost_full_exit": 7200, "avg_buy_amount": 0.7,
"avg_sell_amount": 1.1, "quick_sells": 12, "sold_more_than_bought": 8,
"active_times": [{ "hour_utc": 14, "tx_count": 40 }]
},
"computed_at": 1781450000
}
]
}
Wallet metrics
GET /wallets/{alias}/metrics
The same per-wallet object as above, for a single alias. Returns 404 if the alias
does not resolve.
curl "https://api.prysmatic-sol.xyz/wallets/W12/metrics" -H "Authorization: Bearer <API_KEY>"
How the metrics are computed
Metrics are derived from the wallet's own swaps and transfers. PnL and holding times use FIFO accounting (oldest buy is matched first). All SOL figures are in SOL; trades quoted in USDC/USDT are converted to a SOL-equivalent using the SOL/USD price.
identity
| Field | Meaning |
|---|---|
wallet | Wallet alias. |
score | 0 to 100 quality score (see below). null when the wallet is in review. |
status | scored, review, or disqualified. |
The score is a three-level model:
-
Disqualified to
0if the wallet holds less than10SOL, or its winrate is below35%while PnL is negative. -
Review to
nullif the trade count is outside50to1000(sample too small or too noisy to judge). -
Scored
0to100, summed from:- PnL ratio:
pnl_sol / sol_bought, scaled so a+20%ratio earns the full40points (clamped to+/- 40). +20if winrate> 40%.+10if average holding time> 300s.+10if average buy size>= 1SOL.+10if trade count>= 100.- up to
+10ramped on balance between20and40SOL.
The total is clamped to
0to100. - PnL ratio:
pnl
| Field | Formula |
|---|---|
pnl_sol | Sum of realized FIFO profit across all tokens. A sell realizes (sell_price - lot_price) * qty. |
sol_bought | Total SOL spent on buys. |
sol_sold | Total SOL received on sells. |
sol_invested_open | Cost basis still sitting in open positions (sum of lot_price * qty over un-sold FIFO lots). |
unrealized_token_count | Number of tokens with a non-zero remaining balance. |
sol_balance | Wallet SOL balance (null if not fetched). |
Note on transfers: a token received by transfer enters FIFO as a zero-cost lot; a token sent out drains FIFO without realizing PnL.
activity
| Field | Formula |
|---|---|
total_trades | buys + sells. |
buys / sells | Count of buy / sell swaps. |
transfers_in / out | Count of token transfers received / sent. |
sol_received / sent | SOL moved in / out via plain SOL transfers. |
unique_tokens_traded | Distinct tokens the wallet has traded. |
behavior
| Field | Formula |
|---|---|
winrate / loserate | Of tokens that were sold, the % that closed in profit / loss. Tokens never sold are not counted. |
avg_holding_time | Average seconds between a FIFO-matched buy and its sell. |
avg_time_to_almost_full_exit | Average seconds from first buy until cumulative sells reach 90% of the amount bought. |
avg_buy_amount | sol_bought / buys. |
avg_sell_amount | sol_sold / sells. |
quick_sells | Count of buys where >= 50% of the bought amount was sold within 15s (flip behavior). |
sold_more_than_bought | Count of tokens where tokens sold exceeded tokens bought. |
active_times | Top 3 UTC hours by transaction count: [{ "hour_utc", "tx_count" }]. |
computed_at is the unix time these metrics were last recomputed.
Wallet holdings
GET /wallets/holdings
Find tokens currently held by a wallet, or by all tracked wallets, filtered by how
long the position has been open. Use alias to restrict the result to one public
wallet alias. Omit alias to scan all tracked wallets.
curl "https://api.prysmatic-sol.xyz/wallets/holdings?min_holding_seconds=86400&max_holding_seconds=604800" -H "Authorization: Bearer <API_KEY>"
For one wallet:
curl "https://api.prysmatic-sol.xyz/wallets/holdings?alias=W12&min_holding_seconds=86400&max_holding_seconds=604800" -H "Authorization: Bearer <API_KEY>"
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
alias | string | omitted | Optional public wallet alias such as W12. Omit for all wallets. |
min_holding_seconds | int | 0 | Only return positions held for at least this many seconds. |
max_holding_seconds | int | omitted | Only return positions held for at most this many seconds. |
page | int | 1 | Page number (>= 1). The page size is fixed at 100. |
Response
{
"alias": null,
"min_holding_seconds": 86400,
"max_holding_seconds": 604800,
"page": 1,
"page_size": 100,
"total": 42,
"has_more": false,
"items": [
{
"wallet": "W12",
"token": { "address": "FSA7iqBeeENna2LUmZyqCYce7op2jBc9ztXLKdM6bonk", "decimals": 6 },
"position": {
"sol_bought": 21.7,
"sol_sold": 4.2,
"tokens_acquired": 41200000.0,
"tokens_sold": 22747689.58,
"tokens_held": 18452310.42,
"pct_held": 0.4479
},
"timing": {
"first_activity_at": 1781380000,
"last_activity_at": 1781450000,
"holding_time": 90000
}
}
]
}
| Field | Meaning |
|---|---|
wallet | Public wallet alias. The real wallet address is never returned. |
sol_bought | Total SOL spent by this wallet buying this token. |
sol_sold | Total SOL received by this wallet selling this token. |
tokens_acquired | Total token amount bought by this wallet. |
tokens_sold | Total token amount sold by this wallet. |
tokens_held | Current net token amount held (buys - sells). |
pct_held | tokens_held / tokens_acquired. |
holding_time | Seconds since the wallet's first trade on that token. |
Transfers are not netted into the held amount.
GET /wallets/{alias}/holdings
What the wallet currently holds, derived from its swaps (net of buys and sells). Only
positions with a positive balance are returned. Returns 404 for an unknown alias.
curl "https://api.prysmatic-sol.xyz/wallets/W12/holdings" -H "Authorization: Bearer <API_KEY>"
Response
{
"wallet": "W37",
"tokens": [
{
"token": { "address": "FSA7iqBeeENna2LUmZyqCYce7op2jBc9ztXLKdM6bonk", "decimals": 6 },
"position": {
"balance": 18452310.42,
"tokens_acquired": 41200000.0,
"tokens_held": 18452310.42,
"sol_invested": 21.7
},
"timing": {
"first_activity_at": 1781380000,
"last_activity_at": 1781450000,
"holding_time": 70000
}
}
]
}
| Field | Meaning |
|---|---|
balance | Tokens still held (decimal-adjusted). Same as tokens_held. |
tokens_acquired | Total tokens bought. |
sol_invested | SOL spent buying this token. |
first_activity_at | Unix time of the first trade on this token. |
last_activity_at | Unix time of the most recent trade. |
holding_time | Seconds since first_activity_at. |
Transfers are not netted into the held amount.