> For the complete documentation index, see [llms.txt](https://docs.nansen.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nansen.ai/api/backtesting-data/historical-token-pnl-leaderboard.md).

# Historical Token PnL Leaderboard

## Get historical "Token God Mode" (TGM) PnL leaderboard (Beta)

> \*\*Beta — subject to breaking changes.\*\*\
> \
> Per-trader PnL statistics for a specific token over a historical date range with\
> temporally-correct labels resolved at \`date\_to\`. Uses label history tables to\
> avoid forward-looking bias.\
> \
> \*\*Key differences from \`/tgm/pnl-leaderboard\`:\*\*\
> \- Accepts an explicit \`date\_range\` with Date-only granularity\
> \- Labels resolved at \`date\_to\`, not the current state\
> \- Supports page-based pagination via \`per\_page\` and \`page\`\
> \- Filter parameters are applied server-side before pagination

```json
{"openapi":"3.1.0","info":{"title":"Nansen API","version":"1.0.0"},"servers":[{"url":"https://api.nansen.ai"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"apiKey","description":"API key for authentication"}},"schemas":{"TGMHistoricalPnlLeaderboardRequest":{"properties":{"chain":{"$ref":"#/components/schemas/TGMChain","description":"Blockchain chain"},"token_address":{"type":"string","title":"Token Address","description":"Token contract address"},"date_range":{"$ref":"#/components/schemas/DateRange","description":"Historical date range. Dates are truncated to YYYY-MM-DD server-side."},"pagination":{"$ref":"#/components/schemas/PaginationRequest","description":"Pagination parameters."},"filters":{"anyOf":[{"$ref":"#/components/schemas/TGMHistoricalPnlLeaderboardFilters"}],"description":"Optional filters applied server-side"},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/SortOrder_TGMHistoricalPnlLeaderboardSortField_"},"type":"array"}],"title":"Order By","description":"Sort order. Defaults to pnl_usd_total DESC. Only the first element is used."},"apply_blacklist_filter":{"type":"boolean","title":"Apply Blacklist Filter","description":"When True, exclude blacklisted addresses from the results. Defaults to True.","default":true}},"additionalProperties":false,"type":"object","required":["chain","token_address","date_range"],"title":"TGMHistoricalPnlLeaderboardRequest","description":"Request model for the historical PnL leaderboard endpoint.\n\nReturns per-trader PnL statistics for a token over a date range with\ntemporally-correct labels resolved at date_to. Uses label history tables\nto avoid forward-looking bias.\n\nSupports page-based pagination via per_page and page."},"TGMChain":{"type":"string","enum":["arbitrum","avalanche","base","bnb","ethereum","hyperevm","hyperliquid","injective","iotaevm","linea","mantle","mantra","monad","near","optimism","plasma","polygon","ronin","scroll","sei","solana","sonic","starknet","sui","ton","tron"],"title":"TGMChain","description":"Chains supported in TGM (Token God Mode) endpoints."},"DateRange":{"properties":{"from":{"anyOf":[{"type":"string"}],"title":"From","description":"Start date in ISO 8601 format (e.g., 2025-01-01T00:00:00Z or 2025-01-01)"},"to":{"anyOf":[{"type":"string"}],"title":"To","description":"End date in ISO 8601 format (e.g., 2025-01-31T23:59:59Z or 2025-01-31)"}},"type":"object","title":"DateRange","description":"Date range model matching the API schema."},"PaginationRequest":{"properties":{"page":{"type":"integer","minimum":1,"title":"Page","description":"Page number (1-based)","default":1},"per_page":{"type":"integer","maximum":1000,"minimum":1,"title":"Per Page","description":"Number of records per page (max 1000)","default":10}},"type":"object","title":"PaginationRequest","description":"Pagination parameters for API requests."},"TGMHistoricalPnlLeaderboardFilters":{"properties":{"trader_address":{"anyOf":[{"items":{"type":"string"},"type":"array"}],"title":"Trader Address","description":"Filter to specific trader addresses (empty = all traders)"},"pnl_usd_total":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total PnL range filter in USD"},"roi_percent_total":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total ROI percentage range filter"},"pnl_usd_realised":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Realised PnL range filter in USD"},"roi_percent_realised":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Realised ROI percentage range filter"},"pnl_usd_unrealised":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Unrealised PnL range filter in USD"},"roi_percent_unrealised":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Unrealised ROI percentage range filter"},"netflow_amount_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Netflow range filter in USD"},"holding_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Holding value range filter in USD"},"nof_trades":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Number of trades range filter"},"still_holding_balance_ratio":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Ratio of current holdings to max balance held"},"holding_amount":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Current token holding amount range filter"},"nof_buys":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Number of buy trades range filter"},"nof_sells":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Number of sell trades range filter"},"bought_amount":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total bought token amount range filter"},"sold_amount":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total sold token amount range filter"},"bought_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total bought volume range filter in USD"},"sold_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Total sold volume range filter in USD"},"max_balance_held":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Peak token balance ever held range filter"},"max_balance_held_usd":{"anyOf":[{"$ref":"#/components/schemas/NumericRangeFilter"}],"description":"Peak token balance in USD ever held range filter"}},"additionalProperties":false,"type":"object","title":"TGMHistoricalPnlLeaderboardFilters","description":"Filters for the historical PnL leaderboard endpoint."},"NumericRangeFilter":{"properties":{"min":{"anyOf":[{"type":"number"}],"title":"Min","description":"Minimum value (inclusive)"},"max":{"anyOf":[{"type":"number"}],"title":"Max","description":"Maximum value (inclusive)"}},"type":"object","title":"NumericRangeFilter","description":"Filter for numeric values (floats) with optional min/max bounds.\nUse for prices, volumes, ratios, and other decimal values. - Values between -10.5 and 100.75"},"SortOrder_TGMHistoricalPnlLeaderboardSortField_":{"properties":{"field":{"$ref":"#/components/schemas/TGMHistoricalPnlLeaderboardSortField","description":"Field to sort by"},"direction":{"$ref":"#/components/schemas/SortDirection","description":"Sort direction (ASC or DESC)"}},"type":"object","required":["field","direction"],"title":"SortOrder[TGMHistoricalPnlLeaderboardSortField]"},"TGMHistoricalPnlLeaderboardSortField":{"type":"string","enum":["pnl_usd_total","roi_percent_total","pnl_usd_realised","roi_percent_realised","pnl_usd_unrealised","roi_percent_unrealised","holding_usd","holding_amount","nof_trades","still_holding_balance_ratio","netflow_amount_usd","max_balance_held","max_balance_held_usd","nof_buys","nof_sells","bought_amount","sold_amount","bought_usd","sold_usd"],"title":"TGMHistoricalPnlLeaderboardSortField","description":"Sortable fields for the historical PnL leaderboard endpoint."},"SortDirection":{"type":"string","enum":["ASC","DESC"],"title":"SortDirection","description":"Enum for sort directions."},"TGMHistoricalPnlLeaderboardResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TGMPnlLeaderboard"},"type":"array","title":"Data","description":"List of historical PnL leaderboard records"},"pagination":{"$ref":"#/components/schemas/PaginationInfo","description":"Pagination information"}},"type":"object","required":["data","pagination"],"title":"TGMHistoricalPnlLeaderboardResponse","description":"Response model for the historical PnL leaderboard endpoint."},"TGMPnlLeaderboard":{"properties":{"trader_address":{"type":"string","title":"Trader Address","description":"Hexadecimal representation of the trader's address."},"trader_address_label":{"anyOf":[{"type":"string"}],"title":"Trader Address Label","description":"Nansen name of the trader"},"price_usd":{"anyOf":[{"type":"number"}],"title":"Price Usd","description":"Token price in USD at date_to. Uses latest spot price if date_to is today or later, otherwise the daily median price for that date."},"pnl_usd_realised":{"anyOf":[{"type":"number"}],"title":"Pnl Usd Realised","description":"Realised profit and loss in USD."},"pnl_usd_unrealised":{"anyOf":[{"type":"number"}],"title":"Pnl Usd Unrealised","description":"Unrealised profit and loss in USD."},"holding_amount":{"anyOf":[{"type":"number"}],"title":"Holding Amount","description":"Current token balance"},"holding_usd":{"anyOf":[{"type":"number"}],"title":"Holding Usd","description":"USD value of token balance"},"max_balance_held":{"anyOf":[{"type":"number"}],"title":"Max Balance Held","description":"Maximum amount of tokens held at some point in time."},"max_balance_held_usd":{"anyOf":[{"type":"number"}],"title":"Max Balance Held Usd","description":"Maximum amount of tokens in current USD value, held at some point in time."},"still_holding_balance_ratio":{"anyOf":[{"type":"number"}],"title":"Still Holding Balance Ratio","description":"The ratio of current holdings to max balance held."},"netflow_amount_usd":{"anyOf":[{"type":"number"}],"title":"Netflow Amount Usd","description":"Netflow amount in USD."},"netflow_amount":{"anyOf":[{"type":"number"}],"title":"Netflow Amount","description":"Netflow amount."},"roi_percent_total":{"anyOf":[{"type":"number"}],"title":"Roi Percent Total","description":"Total ROI."},"roi_percent_realised":{"anyOf":[{"type":"number"}],"title":"Roi Percent Realised","description":"Realised ROI."},"roi_percent_unrealised":{"anyOf":[{"type":"number"}],"title":"Roi Percent Unrealised","description":"Unrealised ROI."},"pnl_usd_total":{"anyOf":[{"type":"number"}],"title":"Pnl Usd Total","description":"Total PNL in USD."},"nof_trades":{"anyOf":[{"type":"integer"}],"title":"Nof Trades","description":"Number of trades."}},"type":"object","required":["trader_address"],"title":"TGMPnlLeaderboard","description":"Individual TGM PnL leaderboard record.\nRepresents a single trader's PnL performance for a specific token."},"PaginationInfo":{"properties":{"page":{"type":"integer","minimum":1,"title":"Page","description":"Current page number","default":1},"per_page":{"type":"integer","maximum":1000,"minimum":1,"title":"Per Page","description":"Number of records per page","default":10},"is_last_page":{"type":"boolean","title":"Is Last Page","description":"Whether this is the last page","default":true}},"type":"object","title":"PaginationInfo","description":"Pagination information for API responses."}},"headers":{"XNansenCreditsUsed":{"description":"Number of credits consumed by this API request","schema":{"type":"string"}},"XNansenCreditsRemaining":{"description":"Total credits remaining in the user's account after this request","schema":{"type":"string"}},"PaymentReceipt":{"description":"Base64url-encoded MPP receipt returned on successful paid requests via Authorization: Payment","schema":{"type":"string"}},"RateLimitLimit":{"description":"Combined rate limit across all configured time windows","schema":{"type":"string"}},"RateLimitRemaining":{"description":"Number of requests remaining in the current limiting window","schema":{"type":"string"}},"RateLimitReset":{"description":"Time in seconds until the rate limit window resets","schema":{"type":"string"}},"XRateLimitLimitSecond":{"description":"Maximum requests allowed per second","schema":{"type":"string"}},"XRateLimitRemainingSecond":{"description":"Requests remaining in the current second","schema":{"type":"string"}},"XRateLimitLimitMinute":{"description":"Maximum requests allowed per minute","schema":{"type":"string"}},"XRateLimitRemainingMinute":{"description":"Requests remaining in the current minute","schema":{"type":"string"}},"PaymentRequired":{"description":"Base64-encoded x402 payment options returned on 402 responses for x402 clients","schema":{"type":"string"}},"WWWAuthenticatePayment":{"description":"MPP payment challenge returned on 402 responses, for example `Payment id=\"...\", realm=\"api.nansen.ai\", method=\"tempo\", intent=\"charge\", request=\"...\"`","schema":{"type":"string"}},"RetryAfter":{"description":"Number of seconds to wait before making a new request","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"Bad Request - Invalid request parameters or malformed request","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}},"UnauthorizedError":{"description":"Authentication error - No API key found in request","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}},"PaymentRequiredError":{"description":"Payment Required - This endpoint supports pay-per-request via x402 and MPP. x402 responses advertise payment options in `Payment-Required`; MPP responses advertise a fresh `WWW-Authenticate: Payment ...` challenge. Successful MPP responses may include `Payment-Receipt`.","headers":{"Payment-Required":{"$ref":"#/components/headers/PaymentRequired"},"WWW-Authenticate":{"$ref":"#/components/headers/WWWAuthenticatePayment"}},"content":{"application/json":{"schema":{"type":"object","description":"Problem-details body for x402 or MPP payment challenges."}}}},"ForbiddenError":{"description":"Forbidden - User does not have required subscription tier or has exceeded credit limit","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}},"NotFoundError":{"description":"Not Found - The requested resource was not found","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}},"ValidationError":{"description":"Validation error - Invalid request parameters","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"array","items":{"type":"object","properties":{"loc":{"type":"array","items":{"type":"string"}},"msg":{"type":"string"},"type":{"type":"string"}}}}}}}}},"TooManyRequestsError":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"},"retry_after":{"type":"integer","description":"Seconds to wait before retrying"}}}}},"headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"InternalServerError":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"type":"object","properties":{"detail":{"type":"string"}}}}}}}},"paths":{"/api/v1beta1/tgm/historical-pnl-leaderboard":{"post":{"tags":["Token God Mode"],"summary":"Get historical \"Token God Mode\" (TGM) PnL leaderboard (Beta)","description":"**Beta — subject to breaking changes.**\n\nPer-trader PnL statistics for a specific token over a historical date range with\ntemporally-correct labels resolved at `date_to`. Uses label history tables to\navoid forward-looking bias.\n\n**Key differences from `/tgm/pnl-leaderboard`:**\n- Accepts an explicit `date_range` with Date-only granularity\n- Labels resolved at `date_to`, not the current state\n- Supports page-based pagination via `per_page` and `page`\n- Filter parameters are applied server-side before pagination","operationId":"get_tgm_historical_pnl_leaderboard_beta_api_v1beta1_tgm_historical_pnl_leaderboard_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TGMHistoricalPnlLeaderboardRequest"}}},"required":true},"responses":{"200":{"description":"Historical TGM PnL leaderboard data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TGMHistoricalPnlLeaderboardResponse"}}},"headers":{"X-Nansen-Credits-Used":{"$ref":"#/components/headers/XNansenCreditsUsed"},"X-Nansen-Credits-Remaining":{"$ref":"#/components/headers/XNansenCreditsRemaining"},"Payment-Receipt":{"$ref":"#/components/headers/PaymentReceipt"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"X-RateLimit-Limit-Second":{"$ref":"#/components/headers/XRateLimitLimitSecond"},"X-RateLimit-Remaining-Second":{"$ref":"#/components/headers/XRateLimitRemainingSecond"},"X-RateLimit-Limit-Minute":{"$ref":"#/components/headers/XRateLimitLimitMinute"},"X-RateLimit-Remaining-Minute":{"$ref":"#/components/headers/XRateLimitRemainingMinute"}}},"400":{"description":"Bad Request","$ref":"#/components/responses/BadRequestError"},"401":{"description":"Unauthorized","$ref":"#/components/responses/UnauthorizedError"},"402":{"description":"Payment Required","$ref":"#/components/responses/PaymentRequiredError"},"403":{"description":"Forbidden","$ref":"#/components/responses/ForbiddenError"},"404":{"description":"Not Found","$ref":"#/components/responses/NotFoundError"},"422":{"description":"Unprocessable Content","$ref":"#/components/responses/ValidationError"},"429":{"description":"Too Many Requests","$ref":"#/components/responses/TooManyRequestsError"},"500":{"description":"Internal Server Error","$ref":"#/components/responses/InternalServerError"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.nansen.ai/api/backtesting-data/historical-token-pnl-leaderboard.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
