pub struct PageResponseTokenHolder {
pub data: Vec<PageResponseTokenHolderDataItem>,
pub end_cursor: Option<String>,
pub has_next: Option<bool>,
pub has_prev: Option<bool>,
pub start_cursor: Option<String>,
}Expand description
Generic pagination response
JSON schema
{
"description": "Generic pagination response",
"type": "object",
"required": [
"data"
],
"properties": {
"data": {
"description": "Page data",
"type": "array",
"items": {
"description": "Token holder",
"type": "object",
"required": [
"amount",
"amountInUsd",
"percentage",
"walletAddress"
],
"properties": {
"accountAddress": {
"description": "Solana token account address (ATA) for this holder position.\nDistinct from walletAddress (the owner). Matches GMGN `accountAddress`.",
"type": "string"
},
"accuAmount": {
"description": "Traceable cumulative DEX buy quantity — buy-side only (GMGN: accu_amount)",
"type": "string"
},
"accuCost": {
"description": "Traceable position accumulated cost, USD (GMGN: accu_cost)",
"type": "string"
},
"addrType": {
"description": "Address type from dexes_dwd.address_labels (1=CEX, 2=MM, 3=VC, 4=KOL …). Matches GMGN `addr_type`.",
"type": "integer",
"format": "int64"
},
"addressLabel": {
"description": "Specific address label (e.g. \"Binance Hot Wallet 1\"). Matches GMGN `name`.",
"type": "string"
},
"amount": {
"description": "Token holding amount",
"examples": [
"1000000000000000000"
],
"type": "string"
},
"amountInUsd": {
"description": "Token holding value in USD",
"examples": [
"1000000000000000000"
],
"type": "string"
},
"avgBuyPriceUsd": {
"description": "Average buy price in USD per token (all-time)",
"type": "string"
},
"avgCostUsd": {
"description": "Average cost per token in USD (current position cost basis)",
"type": "string"
},
"avgSellPriceUsd": {
"description": "Average sell price in USD per token (all-time)",
"type": "string"
},
"buyAmountCur": {
"description": "Cumulative token quantity bought, all-time (GMGN: buy_amount_cur / history_bought_amount)",
"type": "string"
},
"buyVolumeNative": {
"description": "All-time total buy volume in native token",
"type": "string"
},
"buyVolumeUsd": {
"description": "All-time total buy volume in USD",
"type": "string"
},
"createdAt": {
"description": "Unix timestamp (seconds) when this wallet first appeared on-chain (GMGN: created_at).",
"type": "integer",
"format": "int64"
},
"endHoldingAt": {
"description": "Timestamp when holder fully closed position (ms since epoch)",
"type": "integer",
"format": "int64"
},
"exchange": {
"description": "Entity/exchange name (e.g. \"Binance\"). Matches GMGN `exchange`.",
"type": "string"
},
"firstBuyTime": {
"description": "Timestamp of first token purchase (ms since epoch)",
"type": "integer",
"format": "int64"
},
"historyBoughtCost": {
"description": "Total DEX buy cost including fees, USD (GMGN: history_bought_cost)",
"type": "string"
},
"historyBoughtFee": {
"description": "Total DEX buy fees, USD (GMGN: history_bought_fee)",
"type": "string"
},
"historySoldFee": {
"description": "Total DEX sell fees, USD (GMGN: history_sold_fee)",
"type": "string"
},
"historySoldIncome": {
"description": "Total DEX sell income, USD (GMGN: history_sold_income)",
"type": "string"
},
"historyTransferInAmount": {
"description": "Cumulative transfer-in token qty (GMGN: history_transfer_in_amount)",
"type": "string"
},
"historyTransferInCost": {
"description": "Transfer-in USD cost basis (GMGN: history_transfer_in_cost)",
"type": "string"
},
"historyTransferOutAmount": {
"description": "Cumulative transfer-out token qty (GMGN: history_transfer_out_amount)",
"type": "string"
},
"historyTransferOutFee": {
"description": "Total transfer-out fee in USD all-time (GMGN: historyTransferOutFee).",
"type": "string"
},
"historyTransferOutIncome": {
"description": "Transfer-out USD income (GMGN: history_transfer_out_income)",
"type": "string"
},
"isClosed": {
"description": "Whether the token position is fully closed (balance = 0)",
"type": "boolean"
},
"isNew": {
"description": "Whether the wallet is newly created (GMGN: is_new).",
"type": "boolean"
},
"isTransferIn": {
"description": "Position acquired purely via transfers, no DEX buy (GMGN: transfer_in)",
"type": "boolean"
},
"lastActiveAt": {
"description": "Last active timestamp (ms since epoch)",
"type": "integer",
"format": "int64"
},
"lastBlock": {
"description": "Last processed block height for this holder position (GMGN: last_block).",
"type": "integer",
"format": "int64"
},
"lossCount": {
"description": "Number of losing trades (PnL < 0)",
"type": "integer",
"format": "int64"
},
"makerTokenTags": {
"description": "Per-token position/behaviour tags derived at query time.\nPossible values: \"top_holder\" (rank ≤ 10, first page only),\n\"whale\" (holding > $10,000 USD), \"diamond_hands\" (held > 30 days).",
"type": "array",
"items": {
"type": "string"
}
},
"nativeBalance": {
"description": "Native chain token balance in lamports (SOL) or wei (EVM), as decimal string.\nFetched from RPC with a 10-second Redis cache.",
"type": "string"
},
"netflowAmount": {
"description": "Net token quantity flow: buys − sells (GMGN: netflow_amount)",
"type": "string"
},
"netflowAmountUsd": {
"description": "Net USD flow: buy_usd − sell_usd (from OS netflow_usd)",
"type": "string"
},
"netflowUsd": {
"description": "Net USD inflow (buy_volume_usd − sell_volume_usd); positive = net buyer",
"type": "string"
},
"percentage": {
"description": "Percentage of total supply held",
"examples": [
"100"
],
"type": "string"
},
"positionCostUsd": {
"description": "Current open position cost in USD",
"type": "string"
},
"realizedPnlRatio": {
"description": "Realized PnL / total_cost ratio (GMGN: realized_pnl)",
"type": "string"
},
"realizedProfit": {
"description": "Realized PnL in USD (all-time)",
"type": "string"
},
"roi": {
"description": "Return on investment = total_pnl / total_cost_all (e.g. 0.25 = 25%)",
"type": "string"
},
"sellAmountCur": {
"description": "Cumulative token quantity sold, all-time (GMGN: sell_amount_cur / history_sold_amount)",
"type": "string"
},
"sellAmountPercentage": {
"description": "Sell quantity / buy quantity, capped 0–1 (GMGN: sell_amount_percentage)",
"type": "string"
},
"sellVolumeNative": {
"description": "All-time total sell volume in native token",
"type": "string"
},
"sellVolumeUsd": {
"description": "All-time total sell volume in USD",
"type": "string"
},
"startHoldingAt": {
"description": "Timestamp when holder first acquired the token (ms since epoch)",
"type": "integer",
"format": "int64"
},
"tags": {
"description": "Trader classification tags (e.g. \"kol\", \"smart\", \"sniper\")",
"type": "array",
"items": {
"type": "string"
}
},
"tokenTransferIn": {
"description": "Most recent token transfer-in for this holder on this token (GMGN: token_transfer_in).\nContains: amount, amountInUsd, txSignature, from, ts."
},
"tokenTransferOut": {
"description": "Most recent token transfer-out for this holder on this token (GMGN: token_transfer_out).\nContains: amount, amountInUsd, txSignature, to, ts."
},
"totalBuyCount": {
"description": "All-time total buy trade count",
"type": "integer",
"format": "int64"
},
"totalCostUsd": {
"description": "All-time accumulated cost basis in USD (total_cost_all from pnl-sync)",
"type": "string"
},
"totalProfit": {
"description": "Total PnL in USD (realized + unrealized)",
"type": "string"
},
"totalSellCount": {
"description": "All-time total sell trade count",
"type": "integer",
"format": "int64"
},
"transferInAmount7d": {
"description": "Inbound transfer volume in native token over last 7 days",
"type": "string"
},
"transferInCount": {
"description": "Number of token transfer-in events (GMGN: transfer_in_count)",
"type": "integer",
"format": "int64"
},
"transferOutAmount7d": {
"description": "Outbound transfer volume in native token over last 7 days",
"type": "string"
},
"transferOutCount": {
"description": "Number of token transfer-out events (GMGN: transfer_out_count)",
"type": "integer",
"format": "int64"
},
"unrealizedPnlRatio": {
"description": "Unrealized PnL / total_cost ratio (GMGN: unrealized_pnl)",
"type": "string"
},
"unrealizedProfit": {
"description": "Unrealized PnL in USD (current position)",
"type": "string"
},
"walletAddress": {
"description": "Holder wallet address",
"examples": [
"0x1234567890abcdef"
],
"type": "string"
},
"walletTagV2": {
"description": "Global rank tag on this token when sorted by balance (e.g. \"TOP1\", \"TOP2\").\nOnly present on the first page of a balance-sorted query (no cursor).",
"type": "string"
},
"winCount": {
"description": "Number of winning trades (PnL > 0)",
"type": "integer",
"format": "int64"
}
}
}
},
"endCursor": {
"description": "Cursor for the end of current page",
"examples": [
"eyJpZCI6ImVuZCJ9"
],
"type": "string"
},
"hasNext": {
"description": "Whether there is a next page",
"examples": [
false
],
"type": "boolean"
},
"hasPrev": {
"description": "Whether there is a previous page",
"examples": [
false
],
"type": "boolean"
},
"startCursor": {
"description": "Cursor for the start of current page",
"examples": [
"eyJpZCI6InN0YXJ0In0="
],
"type": "string"
}
}
}Fields§
§data: Vec<PageResponseTokenHolderDataItem>Page data
end_cursor: Option<String>Cursor for the end of current page
has_next: Option<bool>Whether there is a next page
has_prev: Option<bool>Whether there is a previous page
start_cursor: Option<String>Cursor for the start of current page
Implementations§
Source§impl PageResponseTokenHolder
impl PageResponseTokenHolder
pub fn builder() -> PageResponseTokenHolder
Trait Implementations§
Source§impl Clone for PageResponseTokenHolder
impl Clone for PageResponseTokenHolder
Source§fn clone(&self) -> PageResponseTokenHolder
fn clone(&self) -> PageResponseTokenHolder
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for PageResponseTokenHolder
impl Debug for PageResponseTokenHolder
Source§impl<'de> Deserialize<'de> for PageResponseTokenHolder
impl<'de> Deserialize<'de> for PageResponseTokenHolder
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl From<&PageResponseTokenHolder> for PageResponseTokenHolder
impl From<&PageResponseTokenHolder> for PageResponseTokenHolder
Source§fn from(value: &PageResponseTokenHolder) -> Self
fn from(value: &PageResponseTokenHolder) -> Self
Converts to this type from the input type.
Source§impl From<PageResponseTokenHolder> for PageResponseTokenHolder
impl From<PageResponseTokenHolder> for PageResponseTokenHolder
Source§fn from(value: PageResponseTokenHolder) -> Self
fn from(value: PageResponseTokenHolder) -> Self
Converts to this type from the input type.
Source§impl Serialize for PageResponseTokenHolder
impl Serialize for PageResponseTokenHolder
Source§impl TryFrom<PageResponseTokenHolder> for PageResponseTokenHolder
impl TryFrom<PageResponseTokenHolder> for PageResponseTokenHolder
Source§type Error = ConversionError
type Error = ConversionError
The type returned in the event of a conversion error.
Source§fn try_from(value: PageResponseTokenHolder) -> Result<Self, ConversionError>
fn try_from(value: PageResponseTokenHolder) -> Result<Self, ConversionError>
Performs the conversion.
Auto Trait Implementations§
impl Freeze for PageResponseTokenHolder
impl RefUnwindSafe for PageResponseTokenHolder
impl Send for PageResponseTokenHolder
impl Sync for PageResponseTokenHolder
impl Unpin for PageResponseTokenHolder
impl UnsafeUnpin for PageResponseTokenHolder
impl UnwindSafe for PageResponseTokenHolder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more