A trader’s profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow.
Read status first:
status
Meaning
What to do
ready
The figures are present, and wallets lists the wallets they cover.
Use them. When stale is true, a call after nextUpdateAt can carry newer figures.
pending
No reading exists yet, and a read is running. Every provider value is null.
Call again after retryAfterSeconds (30).
failed
The last read of our data provider failed.
Call again after retryAfterSeconds.
no_wallet
The trader holds no wallet that passes the wallet rule below.
Nothing to wait for.
unavailable
Provider reads are switched off, or this month’s provider budget is spent and we hold no reading of the last 7 days.
Call again next month or ask us; all can still hold figures.
Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt.
wallets is empty for every status but ready.
When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call.
A call that cannot read a figure again serves the stored one, at most 7 days old, with staletrue. nextUpdateAt is when the first provider figure falls due to be read again.
window keeps one key in windows. status stays the same.
Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days.
When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again.
all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader.
Price
The price depends on the answer. The Reveals column says when a reveal is taken.
Answer
Credits
Reveals
status is ready.
30,000
1
Any other status, or 404.
200
0
Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals.
Limits
2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.
A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work.
A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.
ready: figures present. Only this status takes a reveal. pending: no reading yet; call again after retryAfterSeconds. failed: the last read failed; call again after retryAfterSeconds. no_wallet: the trader holds no verified wallet (tier proven, account or partial) that no other trader also holds. unavailable: provider reads are off or this month's provider budget is spent.
When the first figure from our data provider falls due to be read again: its asOf plus its refresh interval. The first call after that time reads it again. Earlier than now when stale is true. null unless status is ready.
true when at least one figure from our data provider is past its refresh interval and this call could not read it again: the read failed, did not finish within the 8 second wait, or this month's provider budget is spent. A later call can carry newer figures. The computed all window does not count. false unless status is ready.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FomoScan","colors":{"primary":"#2D6BF5","light":"#3B78FF","dark":"#2D6BF5"},"logo":{"light":"https://mintcdn.com/socialscan/HNyN-bTZ1IatgGfu/images/mark.png?fit=max\u0026auto=format\u0026n=HNyN-bTZ1IatgGfu\u0026q=85\u0026s=d477c368ad11635c9133ca701da2f527","dark":"https://mintcdn.com/socialscan/HNyN-bTZ1IatgGfu/images/mark.png?fit=max\u0026auto=format\u0026n=HNyN-bTZ1IatgGfu\u0026q=85\u0026s=d477c368ad11635c9133ca701da2f527"},"favicon":"https://mintcdn.com/socialscan/HNyN-bTZ1IatgGfu/images/mark.png?fit=max\u0026auto=format\u0026n=HNyN-bTZ1IatgGfu\u0026q=85\u0026s=d477c368ad11635c9133ca701da2f527","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"]}},"appearance":{"default":"dark"},"background":{"color":{"dark":"#08090C"}},"navbar":{"links":[{"href":"https://partner.fomoscan.sh/login","label":"Log in"}],"primary":{"type":"button","label":"Get an API key","href":"https://partner.fomoscan.sh/signup"}},"footer":{"socials":{"website":"https://fomoscan.sh"}},"contextual":{"options":["copy","view","chatgpt","claude","cursor","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Partner portal","icon":"key","href":"https://partner.fomoscan.sh"},{"anchor":"OpenAPI spec","icon":"code","href":"https://api.fomoscan.sh/openapi.json"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"socialscan","hasAudioNarration":false,"actualSubdomain":"socialscan","customDomains":["docs.fomoscan.sh"],"gitSource":{"type":"github","owner":"funny-development-org","repo":"fomoscan-monorepo","deployBranch":"main","contentDirectory":"apps/web/docs","isPrivate":true,"mountPath":"","label":"","_id":"6aeb9444574a98914de25354"},"chroma":{"latestBuiltDeploymentHistoryId":"6aeba1c79a06eb92c7d964e2","collectionId":"ebaf5f04-b731-4f1f-be6c-a698b18b49c8","liveDeploymentHistoryId":"6aeba1c79a06eb92c7d964e2","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aeba1c79a06eb92c7d964e2","clientVersion":"0.0.4064","searchFilterCounts":[{"language":"default","tag":"API reference","count":56},{"language":"default","tag":"Endpoints","count":49},{"language":"default","tag":"Overview","count":26},{"language":"default","tag":"Core concepts","count":10},{"language":"default","tag":"Examples","count":10},{"language":"default","tag":"Identities","count":9},{"language":"default","tag":"WebSocket","count":7},{"language":"default","tag":"Pump","count":7},{"language":"default","tag":"Traders","count":7},{"language":"default","tag":"Get started","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets","slug":"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets","pageMetadata":{"title":"Read a trader's PnL across whole wallets","description":"A trader's profit and loss over the wallets we verified for them. `24h`, `7d`, `30d` and `unrealized` come from our data provider and cover the whole wallets on every venue; `all` is ours, computed from the ranking of net flow.\n\nRead `status` first:\n\n| `status` | Meaning | What to do |\n| --- | --- | --- |\n| `ready` | The figures are present, and `wallets` lists the wallets they cover. | Use them. When `stale` is `true`, a call after `nextUpdateAt` can carry newer figures. |\n| `pending` | No reading exists yet, and a read is running. Every provider value is `null`. | Call again after `retryAfterSeconds` (30). |\n| `failed` | The last read of our data provider failed. | Call again after `retryAfterSeconds`. |\n| `no_wallet` | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. |\n| `unavailable` | Provider reads are switched off, or this month's provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; `all` can still hold figures. |\n\n- Wallet rule: verified links only (tiers `proven`, `account`, `partial`), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest `lastVerifiedAt`.\n- `wallets` is empty for every status but `ready`.\n- When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call.\n- A call that cannot read a figure again serves the stored one, at most 7 days old, with `stale` `true`. `nextUpdateAt` is when the first provider figure falls due to be read again.\n- `window` keeps one key in `windows`. `status` stays the same.\n- Every window carries `realized`, `unrealized` and `total` (`realized` plus `unrealized`). On `24h`, `7d` and `30d`, `unrealized` covers the open positions last traded inside the window, on UTC calendar days.\n- When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it `approximate`; the next reading replaces it. When that fails too, the window waits an hour before it is read again.\n- `all` takes `netFlow`, `volume`, `tradeCount`, `returnPct` and `rank` from the ranking `traders_net_flow_all`; its `realized`, `unrealized` and `total` are `null`. It is `null` when that ranking does not list the trader.\n\n## Price\n\nThe price depends on the answer. The Reveals column says when a reveal is taken.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| `status` is `ready`. | 30,000 | 1 |\n| Any other `status`, or 404. | 200 | 0 |\n\nReveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 `REVEAL_LIMIT_REACHED`, or 403 `PERMISSION_DENIED` for a key on a free plan without reveals.\n\n## Limits\n\n- 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.\n- A key with less than 200 credits left gets 402 `QUOTA_EXCEEDED` before any work.\n- A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/pnl","href":"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n h2: \"h2\",\n li: \"li\",\n p: \"p\",\n table: \"table\",\n tbody: \"tbody\",\n td: \"td\",\n th: \"th\",\n thead: \"thead\",\n tr: \"tr\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"A trader’s profit and loss over the wallets we verified for them. \", _jsx(_components.code, {\n children: \"24h\"\n }), \", \", _jsx(_components.code, {\n children: \"7d\"\n }), \", \", _jsx(_components.code, {\n children: \"30d\"\n }), \" and \", _jsx(_components.code, {\n children: \"unrealized\"\n }), \" come from our data provider and cover the whole wallets on every venue; \", _jsx(_components.code, {\n children: \"all\"\n }), \" is ours, computed from the ranking of net flow.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Read \", _jsx(_components.code, {\n children: \"status\"\n }), \" first:\"]\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: _jsx(_components.code, {\n children: \"status\"\n })\n }), _jsx(_components.th, {\n children: \"Meaning\"\n }), _jsx(_components.th, {\n children: \"What to do\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"ready\"\n })\n }), _jsxs(_components.td, {\n children: [\"The figures are present, and \", _jsx(_components.code, {\n children: \"wallets\"\n }), \" lists the wallets they cover.\"]\n }), _jsxs(_components.td, {\n children: [\"Use them. When \", _jsx(_components.code, {\n children: \"stale\"\n }), \" is \", _jsx(_components.code, {\n children: \"true\"\n }), \", a call after \", _jsx(_components.code, {\n children: \"nextUpdateAt\"\n }), \" can carry newer figures.\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"pending\"\n })\n }), _jsxs(_components.td, {\n children: [\"No reading exists yet, and a read is running. Every provider value is \", _jsx(_components.code, {\n children: \"null\"\n }), \".\"]\n }), _jsxs(_components.td, {\n children: [\"Call again after \", _jsx(_components.code, {\n children: \"retryAfterSeconds\"\n }), \" (30).\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"failed\"\n })\n }), _jsx(_components.td, {\n children: \"The last read of our data provider failed.\"\n }), _jsxs(_components.td, {\n children: [\"Call again after \", _jsx(_components.code, {\n children: \"retryAfterSeconds\"\n }), \".\"]\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"no_wallet\"\n })\n }), _jsx(_components.td, {\n children: \"The trader holds no wallet that passes the wallet rule below.\"\n }), _jsx(_components.td, {\n children: \"Nothing to wait for.\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: _jsx(_components.code, {\n children: \"unavailable\"\n })\n }), _jsx(_components.td, {\n children: \"Provider reads are switched off, or this month’s provider budget is spent and we hold no reading of the last 7 days.\"\n }), _jsxs(_components.td, {\n children: [\"Call again next month or ask us; \", _jsx(_components.code, {\n children: \"all\"\n }), \" can still hold figures.\"]\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Wallet rule: verified links only (tiers \", _jsx(_components.code, {\n children: \"proven\"\n }), \", \", _jsx(_components.code, {\n children: \"account\"\n }), \", \", _jsx(_components.code, {\n children: \"partial\"\n }), \"), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest \", _jsx(_components.code, {\n children: \"lastVerifiedAt\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"wallets\"\n }), \" is empty for every status but \", _jsx(_components.code, {\n children: \"ready\"\n }), \".\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"A call that cannot read a figure again serves the stored one, at most 7 days old, with \", _jsx(_components.code, {\n children: \"stale\"\n }), \" \", _jsx(_components.code, {\n children: \"true\"\n }), \". \", _jsx(_components.code, {\n children: \"nextUpdateAt\"\n }), \" is when the first provider figure falls due to be read again.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"window\"\n }), \" keeps one key in \", _jsx(_components.code, {\n children: \"windows\"\n }), \". \", _jsx(_components.code, {\n children: \"status\"\n }), \" stays the same.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Every window carries \", _jsx(_components.code, {\n children: \"realized\"\n }), \", \", _jsx(_components.code, {\n children: \"unrealized\"\n }), \" and \", _jsx(_components.code, {\n children: \"total\"\n }), \" (\", _jsx(_components.code, {\n children: \"realized\"\n }), \" plus \", _jsx(_components.code, {\n children: \"unrealized\"\n }), \"). On \", _jsx(_components.code, {\n children: \"24h\"\n }), \", \", _jsx(_components.code, {\n children: \"7d\"\n }), \" and \", _jsx(_components.code, {\n children: \"30d\"\n }), \", \", _jsx(_components.code, {\n children: \"unrealized\"\n }), \" covers the open positions last traded inside the window, on UTC calendar days.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it \", _jsx(_components.code, {\n children: \"approximate\"\n }), \"; the next reading replaces it. When that fails too, the window waits an hour before it is read again.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"all\"\n }), \" takes \", _jsx(_components.code, {\n children: \"netFlow\"\n }), \", \", _jsx(_components.code, {\n children: \"volume\"\n }), \", \", _jsx(_components.code, {\n children: \"tradeCount\"\n }), \", \", _jsx(_components.code, {\n children: \"returnPct\"\n }), \" and \", _jsx(_components.code, {\n children: \"rank\"\n }), \" from the ranking \", _jsx(_components.code, {\n children: \"traders_net_flow_all\"\n }), \"; its \", _jsx(_components.code, {\n children: \"realized\"\n }), \", \", _jsx(_components.code, {\n children: \"unrealized\"\n }), \" and \", _jsx(_components.code, {\n children: \"total\"\n }), \" are \", _jsx(_components.code, {\n children: \"null\"\n }), \". It is \", _jsx(_components.code, {\n children: \"null\"\n }), \" when that ranking does not list the trader.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Price\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"The price depends on the answer. The Reveals column says when a reveal is taken.\"\n }), \"\\n\", _jsxs(_components.table, {\n children: [_jsx(_components.thead, {\n children: _jsxs(_components.tr, {\n children: [_jsx(_components.th, {\n children: \"Answer\"\n }), _jsx(_components.th, {\n children: \"Credits\"\n }), _jsx(_components.th, {\n children: \"Reveals\"\n })]\n })\n }), _jsxs(_components.tbody, {\n children: [_jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [_jsx(_components.code, {\n children: \"status\"\n }), \" is \", _jsx(_components.code, {\n children: \"ready\"\n }), \".\"]\n }), _jsx(_components.td, {\n children: \"30,000\"\n }), _jsx(_components.td, {\n children: \"1\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsxs(_components.td, {\n children: [\"Any other \", _jsx(_components.code, {\n children: \"status\"\n }), \", or 404.\"]\n }), _jsx(_components.td, {\n children: \"200\"\n }), _jsx(_components.td, {\n children: \"0\"\n })]\n })]\n })]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 \", _jsx(_components.code, {\n children: \"REVEAL_LIMIT_REACHED\"\n }), \", or 403 \", _jsx(_components.code, {\n children: \"PERMISSION_DENIED\"\n }), \" for a key on a free plan without reveals.\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Limits\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"A key with less than 200 credits left gets 402 \", _jsx(_components.code, {\n children: \"QUOTA_EXCEEDED\"\n }), \" before any work.\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\"\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Read a trader's PnL across whole wallets","description":"A trader's profit and loss over the wallets we verified for them. `24h`, `7d`, `30d` and `unrealized` come from our data provider and cover the whole wallets on every venue; `all` is ours, computed from the ranking of net flow.\n\nRead `status` first:\n\n| `status` | Meaning | What to do |\n| --- | --- | --- |\n| `ready` | The figures are present, and `wallets` lists the wallets they cover. | Use them. When `stale` is `true`, a call after `nextUpdateAt` can carry newer figures. |\n| `pending` | No reading exists yet, and a read is running. Every provider value is `null`. | Call again after `retryAfterSeconds` (30). |\n| `failed` | The last read of our data provider failed. | Call again after `retryAfterSeconds`. |\n| `no_wallet` | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. |\n| `unavailable` | Provider reads are switched off, or this month's provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; `all` can still hold figures. |\n\n- Wallet rule: verified links only (tiers `proven`, `account`, `partial`), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest `lastVerifiedAt`.\n- `wallets` is empty for every status but `ready`.\n- When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call.\n- A call that cannot read a figure again serves the stored one, at most 7 days old, with `stale` `true`. `nextUpdateAt` is when the first provider figure falls due to be read again.\n- `window` keeps one key in `windows`. `status` stays the same.\n- Every window carries `realized`, `unrealized` and `total` (`realized` plus `unrealized`). On `24h`, `7d` and `30d`, `unrealized` covers the open positions last traded inside the window, on UTC calendar days.\n- When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it `approximate`; the next reading replaces it. When that fails too, the window waits an hour before it is read again.\n- `all` takes `netFlow`, `volume`, `tradeCount`, `returnPct` and `rank` from the ranking `traders_net_flow_all`; its `realized`, `unrealized` and `total` are `null`. It is `null` when that ranking does not list the trader.\n\n## Price\n\nThe price depends on the answer. The Reveals column says when a reveal is taken.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| `status` is `ready`. | 30,000 | 1 |\n| Any other `status`, or 404. | 200 | 0 |\n\nReveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 `REVEAL_LIMIT_REACHED`, or 403 `PERMISSION_DENIED` for a key on a free plan without reveals.\n\n## Limits\n\n- 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.\n- A key with less than 200 credits left gets 402 `QUOTA_EXCEEDED` before any work.\n- A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/pnl","href":"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getTraderPnl","summary":"Read a trader's PnL across whole wallets","description":"A trader's profit and loss over the wallets we verified for them. `24h`, `7d`, `30d` and `unrealized` come from our data provider and cover the whole wallets on every venue; `all` is ours, computed from the ranking of net flow.\n\nRead `status` first:\n\n| `status` | Meaning | What to do |\n| --- | --- | --- |\n| `ready` | The figures are present, and `wallets` lists the wallets they cover. | Use them. When `stale` is `true`, a call after `nextUpdateAt` can carry newer figures. |\n| `pending` | No reading exists yet, and a read is running. Every provider value is `null`. | Call again after `retryAfterSeconds` (30). |\n| `failed` | The last read of our data provider failed. | Call again after `retryAfterSeconds`. |\n| `no_wallet` | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. |\n| `unavailable` | Provider reads are switched off, or this month's provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; `all` can still hold figures. |\n\n- Wallet rule: verified links only (tiers `proven`, `account`, `partial`), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest `lastVerifiedAt`.\n- `wallets` is empty for every status but `ready`.\n- When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call.\n- A call that cannot read a figure again serves the stored one, at most 7 days old, with `stale` `true`. `nextUpdateAt` is when the first provider figure falls due to be read again.\n- `window` keeps one key in `windows`. `status` stays the same.\n- Every window carries `realized`, `unrealized` and `total` (`realized` plus `unrealized`). On `24h`, `7d` and `30d`, `unrealized` covers the open positions last traded inside the window, on UTC calendar days.\n- When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it `approximate`; the next reading replaces it. When that fails too, the window waits an hour before it is read again.\n- `all` takes `netFlow`, `volume`, `tradeCount`, `returnPct` and `rank` from the ranking `traders_net_flow_all`; its `realized`, `unrealized` and `total` are `null`. It is `null` when that ranking does not list the trader.\n\n## Price\n\nThe price depends on the answer. The Reveals column says when a reveal is taken.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| `status` is `ready`. | 30,000 | 1 |\n| Any other `status`, or 404. | 200 | 0 |\n\nReveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 `REVEAL_LIMIT_REACHED`, or 403 `PERMISSION_DENIED` for a key on a free plan without reveals.\n\n## Limits\n\n- 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.\n- A key with less than 200 credits left gets 402 `QUOTA_EXCEEDED` before any work.\n- A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.","tags":["Traders"],"x-operation":5,"parameters":["e221bce5-a9c3-421b-80af-9d7882c87aa8","a68452dc-2c29-4c0c-bce6-7d1c947dea84"],"responses":{"200":"d923ad40-f8e0-4900-99c7-cc90826a7f7d","400":"4659ff0f-a619-4d26-97b1-dcafd60d3f3b","401":"abb60163-9ced-446a-bb54-05b01edb5d98","402":"c46ee17d-8d14-401b-b034-e94e1e31668b","403":"21e6c7d7-b039-45cb-b594-748303356597","404":"5e27ebbc-f452-446b-ab9f-42a8514ceb70","429":"0f6c3550-7463-46fb-9018-0111087148b6","500":"08eb60b1-c488-4bcb-83fd-1f12478e575f","503":"ec812763-558e-4398-8a2f-05ceb1cfe8d2"},"method":"get","type":"path","servers":["5fe32091-bca0-4091-894b-0b0476baa441"],"security":["1dae2ee9-4ade-434c-a812-454ff298e096","cc08a9cd-c1f8-4037-b1f0-a8a921734bd0"],"path":"/v3/traders/{traderId}/pnl","baseUrlOptions":["https://api.fomoscan.sh"],"title":"Read a trader's PnL across whole wallets","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"e221bce5-a9c3-421b-80af-9d7882c87aa8":{"name":"traderId","in":"path","description":"A trader id: `tdr_` and 26 characters. `GET /v3/traders/lookup` finds it by handle.","required":true,"schema":{"type":"string","pattern":"^tdr_[0-7][0-9a-hjkmnp-tv-z]{25}$","isRequired":true,"description":"A trader id: `tdr_` and 26 characters. `GET /v3/traders/lookup` finds it by handle.","uniqueKey":"","typeLabel":"string"}},"a68452dc-2c29-4c0c-bce6-7d1c947dea84":{"name":"window","in":"query","description":"One window: `24h`, `7d`, `30d` or `all`. Leave it out for all four. `status` stays the same either way.","required":false,"schema":{"type":"string","enum":["24h","7d","30d","all"],"isRequired":false,"description":"One window: `24h`, `7d`, `30d` or `all`. Leave it out for all four. `status` stays the same either way.","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"d923ad40-f8e0-4900-99c7-cc90826a7f7d":{"description":"OK","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}},"RateLimit-Limit":{"description":"Requests per minute allowed for the key.","schema":{"type":"integer","minimum":0}},"RateLimit-Remaining":{"description":"Requests left in the current minute.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Seconds until the current minute ends.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","properties":{"trader":{"type":"string","description":"The `tdr_` id of the trader, after merges.","isRequired":true,"uniqueKey":"trader","typeLabel":"string"},"status":{"type":"string","enum":["ready","pending","failed","no_wallet","unavailable"],"description":"`ready`: figures present. Only this status takes a reveal. `pending`: no reading yet; call again after `retryAfterSeconds`. `failed`: the last read failed; call again after `retryAfterSeconds`. `no_wallet`: the trader holds no verified wallet (tier `proven`, `account` or `partial`) that no other trader also holds. `unavailable`: provider reads are off or this month's provider budget is spent.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"retryAfterSeconds":{"oneOf":[{"type":"integer","description":"Seconds to wait before you ask again while `status` is `pending` or `failed`; else `null`.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"retryAfterSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Seconds to wait before you ask again while `status` is `pending` or `failed`; else `null`.","isRequired":true,"uniqueKey":"retryAfterSeconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"retryAfterSeconds","typeLabel":"integer | null"},"wallets":{"type":"array","items":{"type":"string","uniqueKey":"wallets.items.[INDEX]","typeLabel":"string"},"description":"The `wal_` ids the figures cover, at most one per address family. Empty unless `status` is `ready`.","isRequired":true,"uniqueKey":"wallets","typeLabel":"string[]"},"windows":{"type":"object","properties":{"24h":{"description":"The last 24 hours, from our data provider.","type":"object","properties":{"origin":{"type":"string","enum":["computed","provider"],"description":"`provider`: figures of the whole wallets from our data provider, every venue. `computed`: our figures from the trades and rankings we compute.","isRequired":true,"uniqueKey":"windows.24h.origin","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["ready","pending"],"description":"`ready`: the values hold a reading. `pending`: no reading yet, and every value is `null`.","isRequired":true,"uniqueKey":"windows.24h.status","typeLabel":"enum\u003cstring>"},"realized":{"oneOf":[{"type":"object","description":"Profit or loss taken by selling, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.realized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.realized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.realized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.realized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.realized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss taken by selling, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.realized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.realized","typeLabel":"object | null"},"unrealized":{"oneOf":[{"type":"object","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.unrealized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.unrealized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.unrealized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.unrealized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.unrealized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","isRequired":true,"uniqueKey":"windows.24h.unrealized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.unrealized","typeLabel":"object | null"},"total":{"oneOf":[{"type":"object","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.total.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.total.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.total.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.total.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.total.oneOf.0","typeLabel":"object"},{"type":"null","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","isRequired":true,"uniqueKey":"windows.24h.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.total","typeLabel":"object | null"},"unpricedProceeds":{"oneOf":[{"type":"object","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.unpricedProceeds.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds.oneOf.0","typeLabel":"object"},{"type":"null","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.unpricedProceeds","typeLabel":"object | null"},"netFlow":{"oneOf":[{"type":"object","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.netFlow.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.netFlow.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.netFlow.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.netFlow.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.netFlow.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.netFlow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.netFlow","typeLabel":"object | null"},"volume":{"oneOf":[{"type":"object","description":"Buy volume plus sell volume, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.volume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.volume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.volume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.volume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.volume.oneOf.0","typeLabel":"object"},{"type":"null","description":"Buy volume plus sell volume, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.volume","typeLabel":"object | null"},"buyVolume":{"oneOf":[{"type":"object","description":"USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.buyVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.buyVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.buyVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.buyVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.buyVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.buyVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.buyVolume","typeLabel":"object | null"},"sellVolume":{"oneOf":[{"type":"object","description":"USD received from sells, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.24h.sellVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.24h.sellVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.24h.sellVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.24h.sellVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.24h.sellVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.sellVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.sellVolume","typeLabel":"object | null"},"returnPct":{"oneOf":[{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"number","isRequired":true,"uniqueKey":"windows.24h.returnPct.oneOf.0","typeLabel":"number"},{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"null","isRequired":true,"uniqueKey":"windows.24h.returnPct.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.returnPct","typeLabel":"number | null"},"tradeCount":{"oneOf":[{"type":"integer","description":"Trades in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.24h.tradeCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Trades in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.tradeCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.tradeCount","typeLabel":"integer | null"},"buys":{"oneOf":[{"type":"integer","description":"Buys in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.24h.buys.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Buys in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.buys.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.buys","typeLabel":"integer | null"},"sells":{"oneOf":[{"type":"integer","description":"Sells in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.24h.sells.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Sells in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.sells.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.sells","typeLabel":"integer | null"},"tokensTraded":{"oneOf":[{"type":"integer","description":"Distinct tokens traded in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.24h.tokensTraded.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Distinct tokens traded in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.tokensTraded.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.tokensTraded","typeLabel":"integer | null"},"winningTokens":{"oneOf":[{"type":"integer","description":"Tokens closed at a profit in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.24h.winningTokens.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Tokens closed at a profit in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.24h.winningTokens.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.winningTokens","typeLabel":"integer | null"},"rank":{"oneOf":[{"type":"object","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","required":["position","of","ranking"],"properties":{"position":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1 plus the number of subjects with a higher value. Ties share a position.","isRequired":true,"uniqueKey":"windows.24h.rank.oneOf.0.position","typeLabel":"integer"},"of":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Subjects in the ranking.","isRequired":true,"uniqueKey":"windows.24h.rank.oneOf.0.of","typeLabel":"integer"},"ranking":{"type":"string","description":"The ranking key, for `GET /v3/rankings/{key}`.","isRequired":true,"uniqueKey":"windows.24h.rank.oneOf.0.ranking","typeLabel":"string"}},"isRequired":true,"uniqueKey":"windows.24h.rank.oneOf.0","typeLabel":"object"},{"type":"null","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","isRequired":true,"uniqueKey":"windows.24h.rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.rank","typeLabel":"object | null"},"asOf":{"oneOf":[{"type":"string","description":"When the figures were read or computed. `null` while `pending`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"windows.24h.asOf.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the figures were read or computed. `null` while `pending`.","isRequired":true,"uniqueKey":"windows.24h.asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.24h.asOf","typeLabel":"string\u003cdate-time> | null"},"approximate":{"type":"boolean","description":"`true` when our data provider could not read this window and we counted it from per-token totals of the wallets' positions instead: each token's whole realized profit, volume and trade count lands in the window of its last trade, so `24h`, `7d` and `30d` can show more than happened inside them. The next reading of the window replaces these figures. `false` otherwise, while `pending`, and on a computed window.","isRequired":true,"uniqueKey":"windows.24h.approximate","typeLabel":"boolean"}},"required":["origin","status","realized","unrealized","total","unpricedProceeds","netFlow","volume","buyVolume","sellVolume","returnPct","tradeCount","buys","sells","tokensTraded","winningTokens","rank","asOf","approximate"],"uniqueKey":"windows.24h","typeLabel":"object"},"7d":{"description":"The last 7 days, from our data provider.","type":"object","properties":{"origin":{"type":"string","enum":["computed","provider"],"description":"`provider`: figures of the whole wallets from our data provider, every venue. `computed`: our figures from the trades and rankings we compute.","isRequired":true,"uniqueKey":"windows.7d.origin","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["ready","pending"],"description":"`ready`: the values hold a reading. `pending`: no reading yet, and every value is `null`.","isRequired":true,"uniqueKey":"windows.7d.status","typeLabel":"enum\u003cstring>"},"realized":{"oneOf":[{"type":"object","description":"Profit or loss taken by selling, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.realized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.realized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.realized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.realized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.realized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss taken by selling, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.realized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.realized","typeLabel":"object | null"},"unrealized":{"oneOf":[{"type":"object","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.unrealized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.unrealized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.unrealized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.unrealized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.unrealized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","isRequired":true,"uniqueKey":"windows.7d.unrealized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.unrealized","typeLabel":"object | null"},"total":{"oneOf":[{"type":"object","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.total.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.total.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.total.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.total.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.total.oneOf.0","typeLabel":"object"},{"type":"null","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","isRequired":true,"uniqueKey":"windows.7d.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.total","typeLabel":"object | null"},"unpricedProceeds":{"oneOf":[{"type":"object","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.unpricedProceeds.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds.oneOf.0","typeLabel":"object"},{"type":"null","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.unpricedProceeds","typeLabel":"object | null"},"netFlow":{"oneOf":[{"type":"object","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.netFlow.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.netFlow.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.netFlow.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.netFlow.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.netFlow.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.netFlow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.netFlow","typeLabel":"object | null"},"volume":{"oneOf":[{"type":"object","description":"Buy volume plus sell volume, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.volume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.volume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.volume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.volume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.volume.oneOf.0","typeLabel":"object"},{"type":"null","description":"Buy volume plus sell volume, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.volume","typeLabel":"object | null"},"buyVolume":{"oneOf":[{"type":"object","description":"USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.buyVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.buyVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.buyVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.buyVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.buyVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.buyVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.buyVolume","typeLabel":"object | null"},"sellVolume":{"oneOf":[{"type":"object","description":"USD received from sells, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.7d.sellVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.7d.sellVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.7d.sellVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.7d.sellVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.7d.sellVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.sellVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.sellVolume","typeLabel":"object | null"},"returnPct":{"oneOf":[{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"number","isRequired":true,"uniqueKey":"windows.7d.returnPct.oneOf.0","typeLabel":"number"},{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"null","isRequired":true,"uniqueKey":"windows.7d.returnPct.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.returnPct","typeLabel":"number | null"},"tradeCount":{"oneOf":[{"type":"integer","description":"Trades in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.7d.tradeCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Trades in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.tradeCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.tradeCount","typeLabel":"integer | null"},"buys":{"oneOf":[{"type":"integer","description":"Buys in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.7d.buys.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Buys in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.buys.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.buys","typeLabel":"integer | null"},"sells":{"oneOf":[{"type":"integer","description":"Sells in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.7d.sells.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Sells in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.sells.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.sells","typeLabel":"integer | null"},"tokensTraded":{"oneOf":[{"type":"integer","description":"Distinct tokens traded in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.7d.tokensTraded.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Distinct tokens traded in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.tokensTraded.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.tokensTraded","typeLabel":"integer | null"},"winningTokens":{"oneOf":[{"type":"integer","description":"Tokens closed at a profit in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.7d.winningTokens.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Tokens closed at a profit in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.7d.winningTokens.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.winningTokens","typeLabel":"integer | null"},"rank":{"oneOf":[{"type":"object","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","required":["position","of","ranking"],"properties":{"position":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1 plus the number of subjects with a higher value. Ties share a position.","isRequired":true,"uniqueKey":"windows.7d.rank.oneOf.0.position","typeLabel":"integer"},"of":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Subjects in the ranking.","isRequired":true,"uniqueKey":"windows.7d.rank.oneOf.0.of","typeLabel":"integer"},"ranking":{"type":"string","description":"The ranking key, for `GET /v3/rankings/{key}`.","isRequired":true,"uniqueKey":"windows.7d.rank.oneOf.0.ranking","typeLabel":"string"}},"isRequired":true,"uniqueKey":"windows.7d.rank.oneOf.0","typeLabel":"object"},{"type":"null","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","isRequired":true,"uniqueKey":"windows.7d.rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.rank","typeLabel":"object | null"},"asOf":{"oneOf":[{"type":"string","description":"When the figures were read or computed. `null` while `pending`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"windows.7d.asOf.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the figures were read or computed. `null` while `pending`.","isRequired":true,"uniqueKey":"windows.7d.asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.7d.asOf","typeLabel":"string\u003cdate-time> | null"},"approximate":{"type":"boolean","description":"`true` when our data provider could not read this window and we counted it from per-token totals of the wallets' positions instead: each token's whole realized profit, volume and trade count lands in the window of its last trade, so `24h`, `7d` and `30d` can show more than happened inside them. The next reading of the window replaces these figures. `false` otherwise, while `pending`, and on a computed window.","isRequired":true,"uniqueKey":"windows.7d.approximate","typeLabel":"boolean"}},"required":["origin","status","realized","unrealized","total","unpricedProceeds","netFlow","volume","buyVolume","sellVolume","returnPct","tradeCount","buys","sells","tokensTraded","winningTokens","rank","asOf","approximate"],"uniqueKey":"windows.7d","typeLabel":"object"},"30d":{"description":"The last 30 days, from our data provider.","type":"object","properties":{"origin":{"type":"string","enum":["computed","provider"],"description":"`provider`: figures of the whole wallets from our data provider, every venue. `computed`: our figures from the trades and rankings we compute.","isRequired":true,"uniqueKey":"windows.30d.origin","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["ready","pending"],"description":"`ready`: the values hold a reading. `pending`: no reading yet, and every value is `null`.","isRequired":true,"uniqueKey":"windows.30d.status","typeLabel":"enum\u003cstring>"},"realized":{"oneOf":[{"type":"object","description":"Profit or loss taken by selling, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.realized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.realized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.realized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.realized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.realized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss taken by selling, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.realized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.realized","typeLabel":"object | null"},"unrealized":{"oneOf":[{"type":"object","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.unrealized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.unrealized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.unrealized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.unrealized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.unrealized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","isRequired":true,"uniqueKey":"windows.30d.unrealized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.unrealized","typeLabel":"object | null"},"total":{"oneOf":[{"type":"object","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.total.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.total.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.total.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.total.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.total.oneOf.0","typeLabel":"object"},{"type":"null","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","isRequired":true,"uniqueKey":"windows.30d.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.total","typeLabel":"object | null"},"unpricedProceeds":{"oneOf":[{"type":"object","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.unpricedProceeds.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds.oneOf.0","typeLabel":"object"},{"type":"null","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.unpricedProceeds","typeLabel":"object | null"},"netFlow":{"oneOf":[{"type":"object","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.netFlow.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.netFlow.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.netFlow.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.netFlow.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.netFlow.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.netFlow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.netFlow","typeLabel":"object | null"},"volume":{"oneOf":[{"type":"object","description":"Buy volume plus sell volume, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.volume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.volume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.volume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.volume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.volume.oneOf.0","typeLabel":"object"},{"type":"null","description":"Buy volume plus sell volume, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.volume","typeLabel":"object | null"},"buyVolume":{"oneOf":[{"type":"object","description":"USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.buyVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.buyVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.buyVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.buyVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.buyVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.buyVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.buyVolume","typeLabel":"object | null"},"sellVolume":{"oneOf":[{"type":"object","description":"USD received from sells, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.30d.sellVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.30d.sellVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.30d.sellVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.30d.sellVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.30d.sellVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.sellVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.sellVolume","typeLabel":"object | null"},"returnPct":{"oneOf":[{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"number","isRequired":true,"uniqueKey":"windows.30d.returnPct.oneOf.0","typeLabel":"number"},{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"null","isRequired":true,"uniqueKey":"windows.30d.returnPct.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.returnPct","typeLabel":"number | null"},"tradeCount":{"oneOf":[{"type":"integer","description":"Trades in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.30d.tradeCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Trades in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.tradeCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.tradeCount","typeLabel":"integer | null"},"buys":{"oneOf":[{"type":"integer","description":"Buys in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.30d.buys.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Buys in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.buys.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.buys","typeLabel":"integer | null"},"sells":{"oneOf":[{"type":"integer","description":"Sells in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.30d.sells.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Sells in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.sells.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.sells","typeLabel":"integer | null"},"tokensTraded":{"oneOf":[{"type":"integer","description":"Distinct tokens traded in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.30d.tokensTraded.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Distinct tokens traded in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.tokensTraded.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.tokensTraded","typeLabel":"integer | null"},"winningTokens":{"oneOf":[{"type":"integer","description":"Tokens closed at a profit in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.30d.winningTokens.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Tokens closed at a profit in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.30d.winningTokens.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.winningTokens","typeLabel":"integer | null"},"rank":{"oneOf":[{"type":"object","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","required":["position","of","ranking"],"properties":{"position":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1 plus the number of subjects with a higher value. Ties share a position.","isRequired":true,"uniqueKey":"windows.30d.rank.oneOf.0.position","typeLabel":"integer"},"of":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Subjects in the ranking.","isRequired":true,"uniqueKey":"windows.30d.rank.oneOf.0.of","typeLabel":"integer"},"ranking":{"type":"string","description":"The ranking key, for `GET /v3/rankings/{key}`.","isRequired":true,"uniqueKey":"windows.30d.rank.oneOf.0.ranking","typeLabel":"string"}},"isRequired":true,"uniqueKey":"windows.30d.rank.oneOf.0","typeLabel":"object"},{"type":"null","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","isRequired":true,"uniqueKey":"windows.30d.rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.rank","typeLabel":"object | null"},"asOf":{"oneOf":[{"type":"string","description":"When the figures were read or computed. `null` while `pending`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"windows.30d.asOf.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the figures were read or computed. `null` while `pending`.","isRequired":true,"uniqueKey":"windows.30d.asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.30d.asOf","typeLabel":"string\u003cdate-time> | null"},"approximate":{"type":"boolean","description":"`true` when our data provider could not read this window and we counted it from per-token totals of the wallets' positions instead: each token's whole realized profit, volume and trade count lands in the window of its last trade, so `24h`, `7d` and `30d` can show more than happened inside them. The next reading of the window replaces these figures. `false` otherwise, while `pending`, and on a computed window.","isRequired":true,"uniqueKey":"windows.30d.approximate","typeLabel":"boolean"}},"required":["origin","status","realized","unrealized","total","unpricedProceeds","netFlow","volume","buyVolume","sellVolume","returnPct","tradeCount","buys","sells","tokensTraded","winningTokens","rank","asOf","approximate"],"uniqueKey":"windows.30d","typeLabel":"object"},"all":{"oneOf":[{"type":"object","description":"All time, computed by us. `null` when we hold no figure.","required":["origin","status","realized","unrealized","total","unpricedProceeds","netFlow","volume","buyVolume","sellVolume","returnPct","tradeCount","buys","sells","tokensTraded","winningTokens","rank","asOf","approximate"],"properties":{"origin":{"type":"string","enum":["computed","provider"],"description":"`provider`: figures of the whole wallets from our data provider, every venue. `computed`: our figures from the trades and rankings we compute.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.origin","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["ready","pending"],"description":"`ready`: the values hold a reading. `pending`: no reading yet, and every value is `null`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.status","typeLabel":"enum\u003cstring>"},"realized":{"oneOf":[{"type":"object","description":"Profit or loss taken by selling, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.realized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss taken by selling, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.realized","typeLabel":"object | null"},"unrealized":{"oneOf":[{"type":"object","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss on tokens still held, in USD. On `24h`, `7d` and `30d`: the open positions last traded inside the window, on UTC calendar days (`24h` from 00:00 UTC today, `7d` and `30d` from 00:00 UTC 6 and 29 days before), from the reading of the top `unrealized`, which leaves out the same positions. On `all`: our own figure from the trades we hold, on a wallet. `null` when not known, and on the `all` of a trader.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.unrealized","typeLabel":"object | null"},"total":{"oneOf":[{"type":"object","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.total.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.total.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.total.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.total.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.total.oneOf.0","typeLabel":"object"},{"type":"null","description":"`realized` plus `unrealized`, in USD: one formula on every window. `null` when either is `null`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.total.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.total","typeLabel":"object | null"},"unpricedProceeds":{"oneOf":[{"type":"object","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.0","typeLabel":"object"},{"type":"null","description":"Proceeds of tokens sold beyond the position we saw them buy, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.unpricedProceeds","typeLabel":"object | null"},"netFlow":{"oneOf":[{"type":"object","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells minus USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.netFlow","typeLabel":"object | null"},"volume":{"oneOf":[{"type":"object","description":"Buy volume plus sell volume, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.volume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume.oneOf.0","typeLabel":"object"},{"type":"null","description":"Buy volume plus sell volume, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.volume","typeLabel":"object | null"},"buyVolume":{"oneOf":[{"type":"object","description":"USD paid for buys, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD paid for buys, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.buyVolume","typeLabel":"object | null"},"sellVolume":{"oneOf":[{"type":"object","description":"USD received from sells, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.0","typeLabel":"object"},{"type":"null","description":"USD received from sells, in USD. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.sellVolume","typeLabel":"object | null"},"returnPct":{"oneOf":[{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"number","isRequired":true,"uniqueKey":"windows.all.oneOf.0.returnPct.oneOf.0","typeLabel":"number"},{"description":"Return in percent, rounded to 8 decimals: 10 means a 10 % gain. `null` when the base is zero or not known.","type":"null","isRequired":true,"uniqueKey":"windows.all.oneOf.0.returnPct.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.returnPct","typeLabel":"number | null"},"tradeCount":{"oneOf":[{"type":"integer","description":"Trades in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.all.oneOf.0.tradeCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Trades in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.tradeCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.tradeCount","typeLabel":"integer | null"},"buys":{"oneOf":[{"type":"integer","description":"Buys in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.all.oneOf.0.buys.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Buys in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.buys.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.buys","typeLabel":"integer | null"},"sells":{"oneOf":[{"type":"integer","description":"Sells in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.all.oneOf.0.sells.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Sells in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.sells.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.sells","typeLabel":"integer | null"},"tokensTraded":{"oneOf":[{"type":"integer","description":"Distinct tokens traded in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.all.oneOf.0.tokensTraded.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Distinct tokens traded in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.tokensTraded.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.tokensTraded","typeLabel":"integer | null"},"winningTokens":{"oneOf":[{"type":"integer","description":"Tokens closed at a profit in the window. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"windows.all.oneOf.0.winningTokens.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Tokens closed at a profit in the window. `null` when not known.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.winningTokens.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.winningTokens","typeLabel":"integer | null"},"rank":{"oneOf":[{"type":"object","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","required":["position","of","ranking"],"properties":{"position":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1 plus the number of subjects with a higher value. Ties share a position.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank.oneOf.0.position","typeLabel":"integer"},"of":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Subjects in the ranking.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank.oneOf.0.of","typeLabel":"integer"},"ranking":{"type":"string","description":"The ranking key, for `GET /v3/rankings/{key}`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank.oneOf.0.ranking","typeLabel":"string"}},"isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank.oneOf.0","typeLabel":"object"},{"type":"null","description":"Where the trader stands in our ranking for this window. Set on a trader's `all`; `null` on the other windows and on a wallet.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.rank","typeLabel":"object | null"},"asOf":{"oneOf":[{"type":"string","description":"When the figures were read or computed. `null` while `pending`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"windows.all.oneOf.0.asOf.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the figures were read or computed. `null` while `pending`.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"windows.all.oneOf.0.asOf","typeLabel":"string\u003cdate-time> | null"},"approximate":{"type":"boolean","description":"`true` when our data provider could not read this window and we counted it from per-token totals of the wallets' positions instead: each token's whole realized profit, volume and trade count lands in the window of its last trade, so `24h`, `7d` and `30d` can show more than happened inside them. The next reading of the window replaces these figures. `false` otherwise, while `pending`, and on a computed window.","isRequired":true,"uniqueKey":"windows.all.oneOf.0.approximate","typeLabel":"boolean"}},"uniqueKey":"windows.all.oneOf.0","typeLabel":"object"},{"type":"null","description":"All time, computed by us. `null` when we hold no figure.","uniqueKey":"windows.all.oneOf.1","typeLabel":"null"}],"uniqueKey":"windows.all","typeLabel":"object | null"}},"description":"One entry per window. With `window` set, only that key is present.","isRequired":true,"uniqueKey":"windows","typeLabel":"object"},"unrealized":{"oneOf":[{"type":"object","description":"Unrealized profit or loss over the wallets, from our data provider. `null` without a reading.","required":["origin","value","holdingsValue","positions","excludedPositions","asOf"],"properties":{"origin":{"type":"string","const":"provider","description":"Always `provider`: our data provider reads it.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.origin","typeLabel":"string"},"value":{"oneOf":[{"type":"object","description":"Profit or loss on the tokens still held, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.value.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.value.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.value.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"unrealized.oneOf.0.value.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"unrealized.oneOf.0.value.oneOf.0","typeLabel":"object"},{"type":"null","description":"Profit or loss on the tokens still held, in USD. `null` when not known.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.value.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"unrealized.oneOf.0.value","typeLabel":"object | null"},"holdingsValue":{"oneOf":[{"type":"object","description":"What the held tokens are worth, in USD. `null` when not known.","required":["value","decimals","currency"],"properties":{"value":{"type":"string","pattern":"^(0|-?[1-9]\\d*)$","description":"An integer in base units, as a string, and negative below zero. Read it with a decimal or big integer type; a float loses digits.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.0.value","typeLabel":"string"},"decimals":{"type":"integer","minimum":0,"maximum":36,"description":"The power of ten between base units and one whole unit: `value` ÷ 10^`decimals`.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.0.decimals","typeLabel":"integer"},"currency":{"type":"string","minLength":1,"description":"`USD`, or the token id (`tok_\u003cnetwork>_\u003caddress>`) of a token quantity.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.0.currency","typeLabel":"string"},"priceAsOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"The time of the price we converted the value with. Absent when no price was used.","uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the held tokens are worth, in USD. `null` when not known.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"unrealized.oneOf.0.holdingsValue","typeLabel":"object | null"},"positions":{"oneOf":[{"type":"integer","description":"Positions counted. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"unrealized.oneOf.0.positions.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Positions counted. `null` when not known.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.positions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"unrealized.oneOf.0.positions","typeLabel":"integer | null"},"excludedPositions":{"oneOf":[{"type":"integer","description":"Positions left out, such as tokens without a price. `null` when not known.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"unrealized.oneOf.0.excludedPositions.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Positions left out, such as tokens without a price. `null` when not known.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.excludedPositions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"unrealized.oneOf.0.excludedPositions","typeLabel":"integer | null"},"asOf":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","description":"When our data provider read the wallets.","isRequired":true,"uniqueKey":"unrealized.oneOf.0.asOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"unrealized.oneOf.0","typeLabel":"object"},{"type":"null","description":"Unrealized profit or loss over the wallets, from our data provider. `null` without a reading.","isRequired":true,"uniqueKey":"unrealized.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"unrealized","typeLabel":"object | null"},"asOf":{"oneOf":[{"type":"string","description":"The oldest `asOf` among the ready windows, else the ranking time of `all`, else `null`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"asOf.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"The oldest `asOf` among the ready windows, else the ranking time of `all`, else `null`.","isRequired":true,"uniqueKey":"asOf.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"asOf","typeLabel":"string\u003cdate-time> | null"},"nextUpdateAt":{"oneOf":[{"type":"string","description":"When the first figure from our data provider falls due to be read again: its `asOf` plus its refresh interval. The first call after that time reads it again. Earlier than now when `stale` is `true`. `null` unless `status` is `ready`.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$","isRequired":true,"uniqueKey":"nextUpdateAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the first figure from our data provider falls due to be read again: its `asOf` plus its refresh interval. The first call after that time reads it again. Earlier than now when `stale` is `true`. `null` unless `status` is `ready`.","isRequired":true,"uniqueKey":"nextUpdateAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"nextUpdateAt","typeLabel":"string\u003cdate-time> | null"},"stale":{"type":"boolean","description":"`true` when at least one figure from our data provider is past its refresh interval and this call could not read it again: the read failed, did not finish within the 8 second wait, or this month's provider budget is spent. A later call can carry newer figures. The computed `all` window does not count. `false` unless `status` is `ready`.","isRequired":true,"uniqueKey":"stale","typeLabel":"boolean"}},"required":["trader","status","retryAfterSeconds","wallets","windows","unrealized","asOf","nextUpdateAt","stale"],"description":"A trader's profit and loss over the wallets we verified for them, per window.","uniqueKey":"","typeLabel":"object"},"example":{"trader":"tdr_01jbst8pvcfp79y0938nkrkayd","status":"ready","retryAfterSeconds":null,"wallets":["wal_svm_9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM","wal_evm_0x52908400098527886e0f7030069857d2e4169ee7"],"windows":{"24h":{"origin":"provider","status":"ready","realized":{"value":"1250500000","decimals":6,"currency":"USD"},"unrealized":{"value":"412150000","decimals":6,"currency":"USD"},"total":{"value":"1662650000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"18050500000","decimals":6,"currency":"USD"},"buyVolume":{"value":"8400000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"9650500000","decimals":6,"currency":"USD"},"returnPct":14.88690476,"tradeCount":21,"buys":12,"sells":9,"tokensTraded":6,"winningTokens":4,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"7d":{"origin":"provider","status":"ready","realized":{"value":"-312750000","decimals":6,"currency":"USD"},"unrealized":{"value":"1506900000","decimals":6,"currency":"USD"},"total":{"value":"1194150000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"80160000000","decimals":6,"currency":"USD"},"buyVolume":{"value":"41200000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"38960000000","decimals":6,"currency":"USD"},"returnPct":-0.79635371,"tradeCount":105,"buys":58,"sells":47,"tokensTraded":19,"winningTokens":8,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"30d":{"origin":"provider","status":"ready","realized":{"value":"9884200000","decimals":6,"currency":"USD"},"unrealized":{"value":"2101300000","decimals":6,"currency":"USD"},"total":{"value":"11985500000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"312410000000","decimals":6,"currency":"USD"},"buyVolume":{"value":"152300000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"160110000000","decimals":6,"currency":"USD"},"returnPct":6.57956223,"tradeCount":412,"buys":214,"sells":198,"tokensTraded":61,"winningTokens":27,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"all":{"origin":"computed","status":"ready","realized":null,"unrealized":null,"total":null,"unpricedProceeds":null,"netFlow":{"value":"48210330000","decimals":6,"currency":"USD"},"volume":{"value":"1290446800000","decimals":6,"currency":"USD"},"buyVolume":null,"sellVolume":null,"returnPct":7.76186035,"tradeCount":3105,"buys":null,"sells":null,"tokensTraded":null,"winningTokens":null,"rank":{"position":37,"of":18204,"ranking":"traders_net_flow_all"},"asOf":"2026-11-01T08:40:00.000Z","approximate":false}},"unrealized":{"origin":"provider","value":{"value":"2318400000","decimals":6,"currency":"USD"},"holdingsValue":{"value":"11904650000","decimals":6,"currency":"USD"},"positions":9,"excludedPositions":2,"asOf":"2026-11-01T08:55:00.000Z"},"asOf":"2026-11-01T08:55:00.000Z","nextUpdateAt":"2026-11-01T11:55:00.000Z","stale":false},"examples":{"Example":{"title":"Example","value":{"trader":"tdr_01jbst8pvcfp79y0938nkrkayd","status":"ready","retryAfterSeconds":null,"wallets":["wal_svm_9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM","wal_evm_0x52908400098527886e0f7030069857d2e4169ee7"],"windows":{"24h":{"origin":"provider","status":"ready","realized":{"value":"1250500000","decimals":6,"currency":"USD"},"unrealized":{"value":"412150000","decimals":6,"currency":"USD"},"total":{"value":"1662650000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"18050500000","decimals":6,"currency":"USD"},"buyVolume":{"value":"8400000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"9650500000","decimals":6,"currency":"USD"},"returnPct":14.88690476,"tradeCount":21,"buys":12,"sells":9,"tokensTraded":6,"winningTokens":4,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"7d":{"origin":"provider","status":"ready","realized":{"value":"-312750000","decimals":6,"currency":"USD"},"unrealized":{"value":"1506900000","decimals":6,"currency":"USD"},"total":{"value":"1194150000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"80160000000","decimals":6,"currency":"USD"},"buyVolume":{"value":"41200000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"38960000000","decimals":6,"currency":"USD"},"returnPct":-0.79635371,"tradeCount":105,"buys":58,"sells":47,"tokensTraded":19,"winningTokens":8,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"30d":{"origin":"provider","status":"ready","realized":{"value":"9884200000","decimals":6,"currency":"USD"},"unrealized":{"value":"2101300000","decimals":6,"currency":"USD"},"total":{"value":"11985500000","decimals":6,"currency":"USD"},"unpricedProceeds":null,"netFlow":null,"volume":{"value":"312410000000","decimals":6,"currency":"USD"},"buyVolume":{"value":"152300000000","decimals":6,"currency":"USD"},"sellVolume":{"value":"160110000000","decimals":6,"currency":"USD"},"returnPct":6.57956223,"tradeCount":412,"buys":214,"sells":198,"tokensTraded":61,"winningTokens":27,"rank":null,"asOf":"2026-11-01T08:55:00.000Z","approximate":false},"all":{"origin":"computed","status":"ready","realized":null,"unrealized":null,"total":null,"unpricedProceeds":null,"netFlow":{"value":"48210330000","decimals":6,"currency":"USD"},"volume":{"value":"1290446800000","decimals":6,"currency":"USD"},"buyVolume":null,"sellVolume":null,"returnPct":7.76186035,"tradeCount":3105,"buys":null,"sells":null,"tokensTraded":null,"winningTokens":null,"rank":{"position":37,"of":18204,"ranking":"traders_net_flow_all"},"asOf":"2026-11-01T08:40:00.000Z","approximate":false}},"unrealized":{"origin":"provider","value":{"value":"2318400000","decimals":6,"currency":"USD"},"holdingsValue":{"value":"11904650000","decimals":6,"currency":"USD"},"positions":9,"excludedPositions":2,"asOf":"2026-11-01T08:55:00.000Z"},"asOf":"2026-11-01T08:55:00.000Z","nextUpdateAt":"2026-11-01T11:55:00.000Z","stale":false}}},"exampleType":"examples"}},"exampleType":"examples"},"4659ff0f-a619-4d26-97b1-dcafd60d3f3b":{"description":"`INVALID_ARGUMENT`: a parameter, an id, a cursor or the body is malformed, or the operation does not take it.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"abb60163-9ced-446a-bb54-05b01edb5d98":{"description":"`UNAUTHENTICATED`: no key, or the key is unknown, revoked or expired.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"c46ee17d-8d14-401b-b034-e94e1e31668b":{"description":"`QUOTA_EXCEEDED`: the credit balance cannot pay for the call.\n\n`REVEAL_LIMIT_REACHED`: the answer needs a reveal and the key has used every reveal this month. Nothing is charged.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"21e6c7d7-b039-45cb-b594-748303356597":{"description":"`PERMISSION_DENIED`: the key may not make this call.\n\n`PERMISSION_DENIED` also when a key on a free plan without reveals asks for an answer that needs one. Nothing is charged.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"5e27ebbc-f452-446b-ab9f-42a8514ceb70":{"description":"`NOT_FOUND`. No trader has this id, merges included.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"0f6c3550-7463-46fb-9018-0111087148b6":{"description":"`RATE_LIMITED`: too many requests. Retry after the seconds in `Retry-After`.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"08eb60b1-c488-4bcb-83fd-1f12478e575f":{"description":"`INTERNAL`: the call failed on our side.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"ec812763-558e-4398-8a2f-05ceb1cfe8d2":{"description":"`OVERLOADED`: the API holds too many requests at once. Retry after the seconds in `Retry-After`.","headers":{"X-Request-Id":{"description":"The id of this request, as in our logs.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","authentication","quota","permission","rate_limit","internal","overloaded"],"description":"The group of the error. Each `code` belongs to one type.","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["INVALID_ARGUMENT","UNAUTHENTICATED","QUOTA_EXCEEDED","REVEAL_LIMIT_REACHED","PERMISSION_DENIED","PLAN_REQUIRED","NOT_FOUND","RATE_LIMITED","INTERNAL","OVERLOADED"],"description":"What went wrong, from a closed list. Act on this field.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"A sentence for people. It can change; never parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request, equal to `X-Request-Id`. Quote it when you write to us.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"}},"required":["type","code","message","requestId"],"description":"The error.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"The body of every error answer.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","code":"INVALID_ARGUMENT","message":"\u003cstring>","requestId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1dae2ee9-4ade-434c-a812-454ff298e096":{"bearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"}},"cc08a9cd-c1f8-4037-b1f0-a8a921734bd0":{"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Api-Key","scopes":[],"schemeName":"apiKeyHeader"}}},"servers":{"5fe32091-bca0-4091-894b-0b0476baa441":{"url":"https://api.fomoscan.sh","description":"The API host"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Key","scopes":[],"schemeName":"apiKeyHeader"},"schema":{"title":"X-Api-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyHeader","name":"X-Api-Key"}],"title":"apiKeyHeader"}]},"originalFileLocation":"https://api.fomoscan.sh/v3/openapi.json"},"subdomain":"socialscan","siteName":"FomoScan","title":"Read a trader's PnL across whole wallets - FomoScan","navMaps":{"firstHrefInVersion":{"v2":{"href":"/api-reference/identities/read-a-wallet-free-stored-profile","matchLevel":2},"v3":{"href":"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T20:47:34.011Z","originalFileLocation":"v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A trader\u0026#x27;s profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow. Read status first: | status | Meaning | What to do | | --- | --- | --- | | ready | The figures are present, and wallets lists the wallets they cover. | Use them. When stale is true, a call after nextUpdateAt can carry newer figures. | | pending | No reading exists yet, and a read is running. Every provider value is null. | Call again after retryAfterSeconds (30). | | failed | The last read of our data provider failed. | Call again after retryAfterSeconds. | | no_wallet | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. | | unavailable | Provider reads are switched off, or this month\u0026#x27;s provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; all can still hold figures. | - Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt. - wallets is empty for every status but ready. - When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call. - A call that cannot read a figure again serves the stored one, at most 7 days old, with stale true. nextUpdateAt is when the first provider figure falls due to be read again. - window keeps one key in windows. status stays the same. - Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days. - When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again. - all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader. ## Price The price depends on the answer. The Reveals column says when a reveal is taken. | Answer | Credits | Reveals | | --- | --- | --- | | status is ready. | 30,000 | 1 | | Any other status, or 404. | 200 | 0 | Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals. ## Limits - 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key. - A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work. - A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\">\u003cmeta data-mint-head name=\"application-name\" content=\"FomoScan\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Read a trader\u0026#x27;s PnL across whole wallets - FomoScan\">\u003cmeta data-mint-head property=\"og:description\" content=\"A trader\u0026#x27;s profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow. Read status first: | status | Meaning | What to do | | --- | --- | --- | | ready | The figures are present, and wallets lists the wallets they cover. | Use them. When stale is true, a call after nextUpdateAt can carry newer figures. | | pending | No reading exists yet, and a read is running. Every provider value is null. | Call again after retryAfterSeconds (30). | | failed | The last read of our data provider failed. | Call again after retryAfterSeconds. | | no_wallet | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. | | unavailable | Provider reads are switched off, or this month\u0026#x27;s provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; all can still hold figures. | - Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt. - wallets is empty for every status but ready. - When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call. - A call that cannot read a figure again serves the stored one, at most 7 days old, with stale true. nextUpdateAt is when the first provider figure falls due to be read again. - window keeps one key in windows. status stays the same. - Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days. - When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again. - all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader. ## Price The price depends on the answer. The Reveals column says when a reveal is taken. | Answer | Credits | Reveals | | --- | --- | --- | | status is ready. | 30,000 | 1 | | Any other status, or 404. | 200 | 0 | Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals. ## Limits - 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key. - A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work. - A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FomoScan\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://socialscan.mintlify.app/_mintlify/api/og/v2?division=Traders\u0026amp;title=Read+a+trader%27s+PnL+across+whole+wallets\u0026amp;description=A+trader%27s+profit+and+loss+over+the+wallets+we+verified+for+them.+%6024h%60%2C+%607d%60%2C+%6030d%60+and+%60unrealized%60+come+from+our+data+provider+and+cover+the+whole+wallets+on\u0026amp;theme=eee421e92d714c8c3b4eb52f\u0026amp;signature=018ec78b141a190a98b486f68734cfee8176d3004cc66fe4438d8b27b78d9635\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Read a trader\u0026#x27;s PnL across whole wallets - FomoScan\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A trader\u0026#x27;s profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow. Read status first: | status | Meaning | What to do | | --- | --- | --- | | ready | The figures are present, and wallets lists the wallets they cover. | Use them. When stale is true, a call after nextUpdateAt can carry newer figures. | | pending | No reading exists yet, and a read is running. Every provider value is null. | Call again after retryAfterSeconds (30). | | failed | The last read of our data provider failed. | Call again after retryAfterSeconds. | | no_wallet | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. | | unavailable | Provider reads are switched off, or this month\u0026#x27;s provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; all can still hold figures. | - Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt. - wallets is empty for every status but ready. - When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call. - A call that cannot read a figure again serves the stored one, at most 7 days old, with stale true. nextUpdateAt is when the first provider figure falls due to be read again. - window keeps one key in windows. status stays the same. - Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days. - When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again. - all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader. ## Price The price depends on the answer. The Reveals column says when a reveal is taken. | Answer | Credits | Reveals | | --- | --- | --- | | status is ready. | 30,000 | 1 | | Any other status, or 404. | 200 | 0 | Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals. ## Limits - 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key. - A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work. - A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://socialscan.mintlify.app/_mintlify/api/og/v2?division=Traders\u0026amp;title=Read+a+trader%27s+PnL+across+whole+wallets\u0026amp;description=A+trader%27s+profit+and+loss+over+the+wallets+we+verified+for+them.+%6024h%60%2C+%607d%60%2C+%6030d%60+and+%60unrealized%60+come+from+our+data+provider+and+cover+the+whole+wallets+on\u0026amp;theme=eee421e92d714c8c3b4eb52f\u0026amp;signature=018ec78b141a190a98b486f68734cfee8176d3004cc66fe4438d8b27b78d9635\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/socialscan/Akelxu7vD__0Z47A/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FomoScan\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2D6BF5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.fomoscan.sh/#organization\",\"name\":\"FomoScan\",\"url\":\"https://docs.fomoscan.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/socialscan/HNyN-bTZ1IatgGfu/images/mark.png?fit=max\u0026auto=format\u0026n=HNyN-bTZ1IatgGfu\u0026q=85\u0026s=d477c368ad11635c9133ca701da2f527\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.fomoscan.sh#website\",\"name\":\"FomoScan\",\"url\":\"https://docs.fomoscan.sh\",\"publisher\":{\"@id\":\"https://docs.fomoscan.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets#webpage\",\"url\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets\",\"name\":\"Read a trader's PnL across whole wallets\",\"description\":\"A trader's profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow. Read status first: | status | Meaning | What to do | | --- | --- | --- | | ready | The figures are present, and wallets lists the wallets they cover. | Use them. When stale is true, a call after nextUpdateAt can carry newer figures. | | pending | No reading exists yet, and a read is running. Every provider value is null. | Call again after retryAfterSeconds (30). | | failed | The last read of our data provider failed. | Call again after retryAfterSeconds. | | no_wallet | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. | | unavailable | Provider reads are switched off, or this month's provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; all can still hold figures. | - Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt. - wallets is empty for every status but ready. - When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call. - A call that cannot read a figure again serves the stored one, at most 7 days old, with stale true. nextUpdateAt is when the first provider figure falls due to be read again. - window keeps one key in windows. status stays the same. - Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days. - When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again. - all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader. ## Price The price depends on the answer. The Reveals column says when a reveal is taken. | Answer | Credits | Reveals | | --- | --- | --- | | status is ready. | 30,000 | 1 | | Any other status, or 404. | 200 | 0 | Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals. ## Limits - 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key. - A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work. - A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\",\"dateModified\":\"2026-11-04T20:47:34.011Z\",\"isPartOf\":{\"@id\":\"https://docs.fomoscan.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Traders\",\"item\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Read a trader's PnL across whole wallets\",\"item\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets#apireference\",\"headline\":\"Read a trader's PnL across whole wallets\",\"name\":\"Read a trader's PnL across whole wallets\",\"description\":\"A trader's profit and loss over the wallets we verified for them. 24h, 7d, 30d and unrealized come from our data provider and cover the whole wallets on every venue; all is ours, computed from the ranking of net flow. Read status first: | status | Meaning | What to do | | --- | --- | --- | | ready | The figures are present, and wallets lists the wallets they cover. | Use them. When stale is true, a call after nextUpdateAt can carry newer figures. | | pending | No reading exists yet, and a read is running. Every provider value is null. | Call again after retryAfterSeconds (30). | | failed | The last read of our data provider failed. | Call again after retryAfterSeconds. | | no_wallet | The trader holds no wallet that passes the wallet rule below. | Nothing to wait for. | | unavailable | Provider reads are switched off, or this month's provider budget is spent and we hold no reading of the last 7 days. | Call again next month or ask us; all can still hold figures. | - Wallet rule: verified links only (tiers proven, account, partial), one wallet per address family, and none that another trader also holds. Per family the strongest tier wins, then the newest lastVerifiedAt. - wallets is empty for every status but ready. - When no fresh reading exists, the call asks our data provider for one and waits for it. A read that misses the wait finishes and serves your next call. - A call that cannot read a figure again serves the stored one, at most 7 days old, with stale true. nextUpdateAt is when the first provider figure falls due to be read again. - window keeps one key in windows. status stays the same. - Every window carries realized, unrealized and total (realized plus unrealized). On 24h, 7d and 30d, unrealized covers the open positions last traded inside the window, on UTC calendar days. - When our data provider fails to read a window, the call counts it from per-token totals of the positions and marks it approximate; the next reading replaces it. When that fails too, the window waits an hour before it is read again. - all takes netFlow, volume, tradeCount, returnPct and rank from the ranking traders_net_flow_all; its realized, unrealized and total are null. It is null when that ranking does not list the trader. ## Price The price depends on the answer. The Reveals column says when a reveal is taken. | Answer | Credits | Reveals | | --- | --- | --- | | status is ready. | 30,000 | 1 | | Any other status, or 404. | 200 | 0 | Reveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 REVEAL_LIMIT_REACHED, or 403 PERMISSION_DENIED for a key on a free plan without reveals. ## Limits - 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key. - A key with less than 200 credits left gets 402 QUOTA_EXCEEDED before any work. - A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.\",\"url\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets\",\"mainEntityOfPage\":{\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets#webpage\"},\"dateModified\":\"2026-11-04T20:47:34.011Z\",\"publisher\":{\"@id\":\"https://docs.fomoscan.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.fomoscan.sh#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FomoScan\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FomoScan","nav":{"global":{"anchors":[{"anchor":"Partner portal","icon":"key","href":"https://partner.fomoscan.sh"},{"anchor":"OpenAPI spec","icon":"code","href":"https://api.fomoscan.sh/openapi.json"}]},"versions":[{"version":"v2","default":true,"pages":[{"title":"v2","href":"/api-reference/identities/read-a-wallet-free-stored-profile"}]},{"version":"v3","tag":"New","tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/v3"}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API reference","href":"/v3/api-reference/introduction"},{"title":"Traders, wallets and PnL","href":"/v3/guides/traders"},{"title":"Posts","href":"/v3/guides/posts"},{"title":"Leaderboards and rankings","href":"/v3/guides/boards"}]},{"group":"Endpoints","pages":[{"group":"Traders","pages":[{"title":"Read one trader","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}","href":"/v3/api-reference/traders/read-one-trader"},{"title":"Find traders by handle","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/lookup","href":"/v3/api-reference/traders/find-traders-by-handle"},{"title":"List the wallets of a trader","description":"The wallets of a trader, each as a wallet envelope whose `owners` lists this trader alone.\n\n- The list covers every account of the trader on every platform, merges included.\n- Order: tier strongest first, then the earliest `firstVerifiedAt`, then family and address.\n- A link read from the wallet a platform profile shows never counts; every other active link does, at its tier.\n- A trader without wallets answers 200 with an empty page.\n- Paged with `cursor` and `limit` (default 50, maximum 200).\n\n## Price\n\nThe price depends on the answer. The Reveals column says when a reveal is taken.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| The page lists at least one wallet. | 100 | 1 |\n| The page lists no wallet. | 100 | 0 |\n| 404: no trader has this id. | 200 | 0 |\n\nReveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 `REVEAL_LIMIT_REACHED`, or 403 `PERMISSION_DENIED` for a key on a free plan without reveals.\n\n## Limits\n\n- 2,000 requests per minute from one address on this operation, beside the per-minute limit of the key.\n- A key with less than 100 credits left gets 402 `QUOTA_EXCEEDED` before any work.","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/wallets","href":"/v3/api-reference/traders/list-the-wallets-of-a-trader"},{"title":"Read a trader's PnL across whole wallets","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/pnl","href":"/v3/api-reference/traders/read-a-traders-pnl-across-whole-wallets"},{"title":"Read the PnL of up to 100 traders","description":"The PnL of up to 100 traders in one call. `items` follows the order of `traderIds`, one item per distinct id.\n\n- Each item holds the id as you sent it, `found`, and the document `GET /v3/traders/{traderId}/pnl` returns, or `null` when no trader has the id.\n- Two ids that resolve to one trader after merges are two items.\n- Every rule of `GET /v3/traders/{traderId}/pnl` applies per item: `status`, `retryAfterSeconds`, `wallets`, `window`.\n- An unknown id is an item with `found: false`. This operation never answers 404.\n\n## Price\n\n**Per item**: 30,000 credits and one reveal for each item whose `status` is `ready`, 200 credits for every other item. Before any work the whole batch is refused when the balance holds less than 200 credits per item (402 `QUOTA_EXCEEDED`), or the key has fewer reveals left this month than items, whatever their status turns out to be.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| Each item whose `status` is `ready`. | 30,000 | 1 |\n| Each item with another `status`, or not found. | 200 | 0 |\n| 100 ids, 60 of them `ready`. | 1,808,000 | 60 |\n\nReveals count against a key with a monthly reveal cap. When the answer needs more reveals than the key has left, the call is refused before any credit is taken: 402 `REVEAL_LIMIT_REACHED`, or 403 `PERMISSION_DENIED` for a key on a free plan without reveals.\n\n## Limits\n\n- 120 requests per minute from one address on this operation, beside the per-minute limit of the key.\n- A key with less than 200 credits left gets 402 `QUOTA_EXCEEDED` before any work.\n- A read of our data provider runs up to 8 seconds inside the call. Past that the call answers with what we hold, and the read finishes for your next call.","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json post /v3/traders/pnl","href":"/v3/api-reference/traders/read-the-pnl-of-up-to-100-traders"},{"title":"List the traders who follow a trader","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/followers","href":"/v3/api-reference/traders/list-the-traders-who-follow-a-trader"},{"title":"List the traders a trader follows","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/following","href":"/v3/api-reference/traders/list-the-traders-a-trader-follows"}]},{"group":"Wallets","pages":[{"title":"Read one wallet and who owns it","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/wallets/{family}/{address}","href":"/v3/api-reference/wallets/read-one-wallet-and-who-owns-it"},{"title":"Read one wallet's PnL across the whole wallet","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/wallets/{family}/{address}/pnl","href":"/v3/api-reference/wallets/read-one-wallets-pnl-across-the-whole-wallet"},{"title":"Read the PnL of up to 100 wallets","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json post /v3/wallets/pnl","href":"/v3/api-reference/wallets/read-the-pnl-of-up-to-100-wallets"}]},{"group":"Posts","pages":[{"title":"Read the post feed","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/posts","href":"/v3/api-reference/posts/read-the-post-feed"},{"title":"Read the posts about a token","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/tokens/{network}/{address}/posts","href":"/v3/api-reference/posts/read-the-posts-about-a-token"},{"title":"Read the posts of a trader","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/posts","href":"/v3/api-reference/posts/read-the-posts-of-a-trader"}]},{"group":"Tokens","pages":[{"title":"Read one token","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/tokens/{network}/{address}","href":"/v3/api-reference/tokens/read-one-token"}]},{"group":"Leaderboards","pages":[{"title":"List the leaderboards platforms publish","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/leaderboards","href":"/v3/api-reference/leaderboards/list-the-leaderboards-platforms-publish"},{"title":"Read one capture of a platform leaderboard","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/leaderboards/{platform}/{board}","href":"/v3/api-reference/leaderboards/read-one-capture-of-a-platform-leaderboard"}]},{"group":"Rankings","pages":[{"title":"List our rankings","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/rankings","href":"/v3/api-reference/rankings/list-our-rankings"},{"title":"Read the newest snapshot of one of our rankings","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/rankings/{key}","href":"/v3/api-reference/rankings/read-the-newest-snapshot-of-one-of-our-rankings"}]},{"group":"Account","pages":[{"title":"Read the calling key, its plan and its usage","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/me","href":"/v3/api-reference/account/read-the-calling-key-its-plan-and-its-usage"},{"title":"Read which platform provides which block","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/capabilities","href":"/v3/api-reference/account/read-which-platform-provides-which-block"}]},{"group":"Trades","pages":[{"title":"Read the newest trades of the traders we mapped","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/trades","href":"/v3/api-reference/trades/read-the-newest-trades-of-the-traders-we-mapped"},{"title":"Read the trades of a trader's wallets","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/traders/{traderId}/trades","href":"/v3/api-reference/trades/read-the-trades-of-a-traders-wallets"},{"title":"Read the trades of one wallet","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3/wallets/{family}/{address}/trades","href":"/v3/api-reference/trades/read-the-trades-of-one-wallet"}]},{"group":"WebSocket","pages":[{"title":"Live posts (WebSocket)","deprecated":null,"version":null,"openapi":"https://api.fomoscan.sh/v3/openapi.json get /v3","href":"/v3/api-reference/websocket/live-posts-websocket"}]}]}]},{"tab":"WebSocket","pages":[{"title":"WebSocket","href":"/v3/websocket/overview"}]}]}]},"basePath":"","title":"Read a trader's PnL across whole wallets - FomoScan","buildId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","deploymentId":"dpl_2gSLkbMoF5kkLsBqYzq9KWtDyJRo","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-hfTk6MZX.js","utils-Bfp7HcY4.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D8dSW7yV.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CFgQXcZO.js","snippetPresets-dMW1-pV3.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-DyrCOido.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Bwwdcyh3.js","shallow-drVXTg79.js","getApiPlaygroundDisplay-GMPxUzWV.js","CodeSnippet-wTmV0wP6.js","CodeSnippets-D_QxCJEq.js","Page-BsZAA8xk.js","getPastedJson-Dev-X0Xy.js","icon-7L2WL0jD.js","MethodPill-Ble59Dl_.js","DuplicateIcon-r-98uLGh.js","createIcon-DaFzipjW.js","DynamicMarkdown-Jk8YAWGN.js","SectionHeading-nLgrCDOg.js","axios-vUo_bRtp.js","Markdown-_QGow1Wo.js","clsx-v8ssfMzu.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CjboTi0T.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DkAyo-p5.js"]}