The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats).
An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id.
Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows.
When the trader holds two accounts on one platform, each block comes from the account whose block is newest.
The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them.
canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.
Price
The price depends on the answer.
Answer
Credits
Reveals
The trader exists.
100
0
404: no trader has this id.
200
0
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 100 credits left gets 402 QUOTA_EXCEEDED before any work.
Capability blocks keyed by platform. A platform key is absent when the object has no side on that platform. A block is absent when the platform cannot provide it (GET /v3/capabilities lists which can) or we hold no reading of it yet. A field is null when the platform left it empty at observedAt or never fills it (unfilled in GET /v3/capabilities). Skip platform keys and blocks you do not know.
Show child attributes
{"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-one-trader","slug":"/v3/api-reference/traders/read-one-trader","pageMetadata":{"title":"Read one trader","description":"The trader behind this id. `canonical` says what to show and which platforms the trader is on; `sources` holds the blocks of each platform (`profile`, `followGraph`, `tradingStats`).\n\n- An id merged into another trader answers 200 with the trader that absorbed it: `id` differs from the one you sent, and `canonical.mergedFrom` lists yours. Store the new `id`.\n- Each field of `canonical.display` comes from the newest `profile` block (by `observedAt`) that has it, so a newer profile with an empty field never blanks a value another platform shows.\n- When the trader holds two accounts on one platform, each block comes from the account whose block is newest.\n- The envelope carries no wallets: `GET /v3/traders/{traderId}/wallets` lists them.\n- `canonical.walletAvailable` is `true` when `GET /v3/traders/{traderId}/wallets` lists at least one wallet for the trader and `false` when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.\n\n## Price\n\nThe price depends on the answer.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| The trader exists. | 100 | 0 |\n| 404: no trader has this id. | 200 | 0 |\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}","href":"/v3/api-reference/traders/read-one-trader","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: [\"The trader behind this id. \", _jsx(_components.code, {\n children: \"canonical\"\n }), \" says what to show and which platforms the trader is on; \", _jsx(_components.code, {\n children: \"sources\"\n }), \" holds the blocks of each platform (\", _jsx(_components.code, {\n children: \"profile\"\n }), \", \", _jsx(_components.code, {\n children: \"followGraph\"\n }), \", \", _jsx(_components.code, {\n children: \"tradingStats\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"An id merged into another trader answers 200 with the trader that absorbed it: \", _jsx(_components.code, {\n children: \"id\"\n }), \" differs from the one you sent, and \", _jsx(_components.code, {\n children: \"canonical.mergedFrom\"\n }), \" lists yours. Store the new \", _jsx(_components.code, {\n children: \"id\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Each field of \", _jsx(_components.code, {\n children: \"canonical.display\"\n }), \" comes from the newest \", _jsx(_components.code, {\n children: \"profile\"\n }), \" block (by \", _jsx(_components.code, {\n children: \"observedAt\"\n }), \") that has it, so a newer profile with an empty field never blanks a value another platform shows.\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"When the trader holds two accounts on one platform, each block comes from the account whose block is newest.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"The envelope carries no wallets: \", _jsx(_components.code, {\n children: \"GET /v3/traders/{traderId}/wallets\"\n }), \" lists them.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"canonical.walletAvailable\"\n }), \" is \", _jsx(_components.code, {\n children: \"true\"\n }), \" when \", _jsx(_components.code, {\n children: \"GET /v3/traders/{traderId}/wallets\"\n }), \" lists at least one wallet for the trader and \", _jsx(_components.code, {\n children: \"false\"\n }), \" when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Price\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"The price depends on the answer.\"\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: [_jsx(_components.td, {\n children: \"The trader exists.\"\n }), _jsx(_components.td, {\n children: \"100\"\n }), _jsx(_components.td, {\n children: \"0\"\n })]\n }), _jsxs(_components.tr, {\n children: [_jsx(_components.td, {\n children: \"404: no trader has this id.\"\n }), _jsx(_components.td, {\n children: \"200\"\n }), _jsx(_components.td, {\n children: \"0\"\n })]\n })]\n })]\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 100 credits left gets 402 \", _jsx(_components.code, {\n children: \"QUOTA_EXCEEDED\"\n }), \" before any work.\"]\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 one trader","description":"The trader behind this id. `canonical` says what to show and which platforms the trader is on; `sources` holds the blocks of each platform (`profile`, `followGraph`, `tradingStats`).\n\n- An id merged into another trader answers 200 with the trader that absorbed it: `id` differs from the one you sent, and `canonical.mergedFrom` lists yours. Store the new `id`.\n- Each field of `canonical.display` comes from the newest `profile` block (by `observedAt`) that has it, so a newer profile with an empty field never blanks a value another platform shows.\n- When the trader holds two accounts on one platform, each block comes from the account whose block is newest.\n- The envelope carries no wallets: `GET /v3/traders/{traderId}/wallets` lists them.\n- `canonical.walletAvailable` is `true` when `GET /v3/traders/{traderId}/wallets` lists at least one wallet for the trader and `false` when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.\n\n## Price\n\nThe price depends on the answer.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| The trader exists. | 100 | 0 |\n| 404: no trader has this id. | 200 | 0 |\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}","href":"/v3/api-reference/traders/read-one-trader","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getTrader","summary":"Read one trader","description":"The trader behind this id. `canonical` says what to show and which platforms the trader is on; `sources` holds the blocks of each platform (`profile`, `followGraph`, `tradingStats`).\n\n- An id merged into another trader answers 200 with the trader that absorbed it: `id` differs from the one you sent, and `canonical.mergedFrom` lists yours. Store the new `id`.\n- Each field of `canonical.display` comes from the newest `profile` block (by `observedAt`) that has it, so a newer profile with an empty field never blanks a value another platform shows.\n- When the trader holds two accounts on one platform, each block comes from the account whose block is newest.\n- The envelope carries no wallets: `GET /v3/traders/{traderId}/wallets` lists them.\n- `canonical.walletAvailable` is `true` when `GET /v3/traders/{traderId}/wallets` lists at least one wallet for the trader and `false` when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.\n\n## Price\n\nThe price depends on the answer.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| The trader exists. | 100 | 0 |\n| 404: no trader has this id. | 200 | 0 |\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.","tags":["Traders"],"x-operation":1,"parameters":["b03a59e7-1d02-4a8b-ac0f-a509df30b616"],"responses":{"200":"e91791de-d0a2-4e1d-a1ee-767a105211ae","400":"0eb9d879-ff20-4354-b0fa-9b6c6b76ad92","401":"4022bb06-cbe4-4176-b587-0873118d5bec","402":"a59e86c2-9ed9-4102-9097-2b772d7fe82d","403":"893274e4-390d-464b-b5fe-5062d62910c2","404":"6124f37f-18ed-440b-a039-ec9b915b1991","429":"ce7b1c41-558d-4d41-acb4-358e0c533ff8","500":"f142bab9-5673-488b-ad70-ac3c8377afcc","503":"9f9f4fcc-9078-4447-b123-d19cbfd044dd"},"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}","baseUrlOptions":["https://api.fomoscan.sh"],"title":"Read one trader","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b03a59e7-1d02-4a8b-ac0f-a509df30b616":{"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"}}},"responses":{"e91791de-d0a2-4e1d-a1ee-767a105211ae":{"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":{"kind":{"type":"string","const":"trader","description":"The kind of object, `trader` here, and the only field to switch on. Skip objects whose kind you do not know.","isRequired":true,"uniqueKey":"kind","typeLabel":"string"},"id":{"type":"string","description":"Our id of the object, `tdr_` and 26 lowercase base32 characters. Store it: it stays the same across calls and never holds a platform's own id.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"canonical":{"type":"object","properties":{"display":{"oneOf":[{"type":"object","description":"What to show for the trader. Each field comes from the `profile` block with the newest `observedAt` among the blocks in `sources` whose field is not `null`; a tie goes to the platform key that sorts first. One field can come from another platform than the next. `null` when no profile exists.","required":["handle","name","avatarUrl"],"properties":{"handle":{"oneOf":[{"description":"`handle` of the newest `profile` block that has one, `null` when none has.","type":"string","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.handle.oneOf.0","typeLabel":"string"},{"description":"`handle` of the newest `profile` block that has one, `null` when none has.","type":"null","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"canonical.display.oneOf.0.handle","typeLabel":"string | null"},"name":{"oneOf":[{"description":"`name` of the newest `profile` block that has one, `null` when none has.","type":"string","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.name.oneOf.0","typeLabel":"string"},{"description":"`name` of the newest `profile` block that has one, `null` when none has.","type":"null","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"canonical.display.oneOf.0.name","typeLabel":"string | null"},"avatarUrl":{"oneOf":[{"description":"`avatarUrl` of the newest `profile` block that has one, `null` when none has.","type":"string","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.avatarUrl.oneOf.0","typeLabel":"string"},{"description":"`avatarUrl` of the newest `profile` block that has one, `null` when none has.","type":"null","isRequired":true,"uniqueKey":"canonical.display.oneOf.0.avatarUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"canonical.display.oneOf.0.avatarUrl","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"canonical.display.oneOf.0","typeLabel":"object"},{"type":"null","description":"What to show for the trader. Each field comes from the `profile` block with the newest `observedAt` among the blocks in `sources` whose field is not `null`; a tie goes to the platform key that sorts first. One field can come from another platform than the next. `null` when no profile exists.","isRequired":true,"uniqueKey":"canonical.display.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"canonical.display","typeLabel":"object | null"},"platforms":{"type":"array","items":{"type":"string","enum":["fomo","pump","hyperliquid","markets","polymarket","legend","risex"],"uniqueKey":"canonical.platforms.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The platforms the trader holds an account on, sorted.","isRequired":true,"uniqueKey":"canonical.platforms","typeLabel":"enum\u003cstring>[]"},"mergedFrom":{"type":"array","items":{"type":"string","uniqueKey":"canonical.mergedFrom.items.[INDEX]","typeLabel":"string"},"description":"The `tdr_` ids of traders merged into this one, sorted. A request for one of them answers with this trader.","isRequired":true,"uniqueKey":"canonical.mergedFrom","typeLabel":"string[]"},"firstSeenAt":{"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 we first saw the trader.","isRequired":true,"uniqueKey":"canonical.firstSeenAt","typeLabel":"string\u003cdate-time>"},"walletAvailable":{"description":"`true` when `GET /v3/traders/{traderId}/wallets` lists at least one wallet for the trader, so its reveal returns an address; `false` when it lists none. Never the address. Sent by `GET /v3/traders/{traderId}` and `GET /v3/traders/lookup` at no extra charge and without a reveal, and absent from the trader envelopes of every other operation.","type":"boolean","uniqueKey":"canonical.walletAvailable","typeLabel":"boolean"}},"required":["display","platforms","mergedFrom","firstSeenAt"],"description":"Fields that mean the same on every platform.","isRequired":true,"uniqueKey":"canonical","typeLabel":"object"},"sources":{"type":"object","propertyNames":{"type":"string","enum":["fomo","pump","hyperliquid","markets","polymarket","legend","risex"]},"additionalProperties":{"type":"object","properties":{"profile":{"oneOf":[{"type":"object","description":"The public profile of the account on this platform.","required":["handle","name","bio","avatarUrl","xHandle","verified","observedAt"],"properties":{"handle":{"oneOf":[{"description":"The handle on this platform, without `@`.","type":"string","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.handle.oneOf.0","typeLabel":"string"},{"description":"The handle on this platform, without `@`.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.handle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.handle","typeLabel":"string | null"},"name":{"oneOf":[{"description":"The display name on this platform.","type":"string","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.name.oneOf.0","typeLabel":"string"},{"description":"The display name on this platform.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.name","typeLabel":"string | null"},"bio":{"oneOf":[{"description":"The profile text on this platform.","type":"string","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.bio.oneOf.0","typeLabel":"string"},{"description":"The profile text on this platform.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.bio.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.bio","typeLabel":"string | null"},"avatarUrl":{"oneOf":[{"description":"Our mirrored copy of the avatar (`/a/\u003ckey>.webp`), never the platform link.","type":"string","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.avatarUrl.oneOf.0","typeLabel":"string"},{"description":"Our mirrored copy of the avatar (`/a/\u003ckey>.webp`), never the platform link.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.avatarUrl.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.avatarUrl","typeLabel":"string | null"},"xHandle":{"oneOf":[{"description":"The X handle the platform shows, without `@`.","type":"string","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.xHandle.oneOf.0","typeLabel":"string"},{"description":"The X handle the platform shows, without `@`.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.xHandle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.xHandle","typeLabel":"string | null"},"verified":{"oneOf":[{"description":"The platform's own verified badge. We do not check it.","type":"boolean","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.verified.oneOf.0","typeLabel":"boolean"},{"description":"The platform's own verified badge. We do not check it.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.verified.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.verified","typeLabel":"boolean | null"},"observedAt":{"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 we read this block from the platform. Every value in the block is as of this time.","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.0.observedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"sources.additionalProperties.profile.oneOf.0","typeLabel":"object"},{"type":"object","description":"The public profile of the account on this platform.","required":["status","retryable"],"properties":{"status":{"type":"string","const":"unavailable","description":"Always `unavailable`.","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.1.status","typeLabel":"string"},"retryable":{"type":"boolean","description":"`true` when a later call can return the block.","isRequired":true,"uniqueKey":"sources.additionalProperties.profile.oneOf.1.retryable","typeLabel":"boolean"}},"uniqueKey":"sources.additionalProperties.profile.oneOf.1","typeLabel":"object"}],"uniqueKey":"sources.additionalProperties.profile","typeLabel":"object"},"followGraph":{"oneOf":[{"type":"object","description":"Follower and following counts on this platform.","required":["followers","following","observedAt"],"properties":{"followers":{"oneOf":[{"type":"integer","description":"Followers on this platform, as the platform counts them.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.followers.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Followers on this platform, as the platform counts them.","isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.followers.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.followers","typeLabel":"integer | null"},"following":{"oneOf":[{"type":"integer","description":"Accounts this account follows, as the platform counts them.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.following.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Accounts this account follows, as the platform counts them.","isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.following.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.following","typeLabel":"integer | null"},"observedAt":{"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 we read this block from the platform. Every value in the block is as of this time.","isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0.observedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"sources.additionalProperties.followGraph.oneOf.0","typeLabel":"object"},{"type":"object","description":"Follower and following counts on this platform.","required":["status","retryable"],"properties":{"status":{"type":"string","const":"unavailable","description":"Always `unavailable`.","isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.1.status","typeLabel":"string"},"retryable":{"type":"boolean","description":"`true` when a later call can return the block.","isRequired":true,"uniqueKey":"sources.additionalProperties.followGraph.oneOf.1.retryable","typeLabel":"boolean"}},"uniqueKey":"sources.additionalProperties.followGraph.oneOf.1","typeLabel":"object"}],"uniqueKey":"sources.additionalProperties.followGraph","typeLabel":"object"},"tradingStats":{"oneOf":[{"type":"object","description":"Trading figures the platform publishes. The platform's numbers, never ours.","required":["swapCount","tradeCount","volume","avgHoldSeconds","observedAt"],"properties":{"swapCount":{"oneOf":[{"type":"integer","description":"Swaps the platform reports for the account.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.swapCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Swaps the platform reports for the account.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.swapCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.swapCount","typeLabel":"integer | null"},"tradeCount":{"oneOf":[{"type":"integer","description":"Trades the platform reports for the account.","maximum":9007199254740991,"minimum":-9007199254740991,"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.tradeCount.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Trades the platform reports for the account.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.tradeCount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.tradeCount","typeLabel":"integer | null"},"volume":{"oneOf":[{"type":"object","description":"Traded volume the platform reports, in USD.","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":"sources.additionalProperties.tradingStats.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":"sources.additionalProperties.tradingStats.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":"sources.additionalProperties.tradingStats.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":"sources.additionalProperties.tradingStats.oneOf.0.volume.oneOf.0.priceAsOf","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.volume.oneOf.0","typeLabel":"object"},{"type":"null","description":"Traded volume the platform reports, in USD.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.volume","typeLabel":"object | null"},"avgHoldSeconds":{"oneOf":[{"description":"The average time the account held a position, in seconds, as the platform reports.","type":"number","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.avgHoldSeconds.oneOf.0","typeLabel":"number"},{"description":"The average time the account held a position, in seconds, as the platform reports.","type":"null","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.avgHoldSeconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.avgHoldSeconds","typeLabel":"number | null"},"observedAt":{"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 we read this block from the platform. Every value in the block is as of this time.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0.observedAt","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.0","typeLabel":"object"},{"type":"object","description":"Trading figures the platform publishes. The platform's numbers, never ours.","required":["status","retryable"],"properties":{"status":{"type":"string","const":"unavailable","description":"Always `unavailable`.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.1.status","typeLabel":"string"},"retryable":{"type":"boolean","description":"`true` when a later call can return the block.","isRequired":true,"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.1.retryable","typeLabel":"boolean"}},"uniqueKey":"sources.additionalProperties.tradingStats.oneOf.1","typeLabel":"object"}],"uniqueKey":"sources.additionalProperties.tradingStats","typeLabel":"object"}},"uniqueKey":"sources.additionalProperties","typeLabel":"object"},"description":"Capability blocks keyed by platform. A platform key is absent when the object has no side on that platform. A block is absent when the platform cannot provide it (`GET /v3/capabilities` lists which can) or we hold no reading of it yet. A field is `null` when the platform left it empty at `observedAt` or never fills it (`unfilled` in `GET /v3/capabilities`). Skip platform keys and blocks you do not know.","isRequired":true,"uniqueKey":"sources","typeLabel":"object"}},"required":["kind","id","canonical","sources"],"description":"A trader: one person behind accounts on one or more platforms. The envelope carries no wallets; `GET /v3/traders/{traderId}/wallets` lists them.","uniqueKey":"","typeLabel":"object"},"example":{"kind":"trader","id":"tdr_01jbst8pvcfp79y0938nkrkayd","canonical":{"display":{"handle":"nightowl","name":"Night Owl","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp"},"platforms":["fomo","pump"],"mergedFrom":["tdr_01jbst8zcefy8b28t5cy4tqkff"],"firstSeenAt":"2025-03-14T16:20:05.412Z","walletAvailable":true},"sources":{"fomo":{"profile":{"handle":"nightowl","name":"Night Owl","bio":"Solana memecoins, small size, long holds.","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp","xHandle":"nightowl_sol","verified":null,"observedAt":"2026-11-01T08:42:10.250Z"},"followGraph":{"followers":18450,"following":312,"observedAt":"2026-11-01T08:42:10.250Z"},"tradingStats":{"swapCount":1840,"tradeCount":977,"volume":{"value":"482113250000","decimals":6,"currency":"USD"},"avgHoldSeconds":15120.5,"observedAt":"2026-11-01T08:42:10.250Z"}},"pump":{"profile":{"handle":"nightowl","name":null,"bio":"Solana memecoins, small size, long holds.","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp","xHandle":"nightowl_sol","verified":false,"observedAt":"2026-11-01T08:42:10.250Z"},"followGraph":{"followers":2210,"following":312,"observedAt":"2026-11-01T08:42:10.250Z"}}}},"examples":{"Example":{"title":"Example","value":{"kind":"trader","id":"tdr_01jbst8pvcfp79y0938nkrkayd","canonical":{"display":{"handle":"nightowl","name":"Night Owl","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp"},"platforms":["fomo","pump"],"mergedFrom":["tdr_01jbst8zcefy8b28t5cy4tqkff"],"firstSeenAt":"2025-03-14T16:20:05.412Z","walletAvailable":true},"sources":{"fomo":{"profile":{"handle":"nightowl","name":"Night Owl","bio":"Solana memecoins, small size, long holds.","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp","xHandle":"nightowl_sol","verified":null,"observedAt":"2026-11-01T08:42:10.250Z"},"followGraph":{"followers":18450,"following":312,"observedAt":"2026-11-01T08:42:10.250Z"},"tradingStats":{"swapCount":1840,"tradeCount":977,"volume":{"value":"482113250000","decimals":6,"currency":"USD"},"avgHoldSeconds":15120.5,"observedAt":"2026-11-01T08:42:10.250Z"}},"pump":{"profile":{"handle":"nightowl","name":null,"bio":"Solana memecoins, small size, long holds.","avatarUrl":"https://img.example.com/a/9b1f0c7e3d2a4b5c8e6f1a2b3c4d5e6f.webp","xHandle":"nightowl_sol","verified":false,"observedAt":"2026-11-01T08:42:10.250Z"},"followGraph":{"followers":2210,"following":312,"observedAt":"2026-11-01T08:42:10.250Z"}}}}}},"exampleType":"examples"}},"exampleType":"examples"},"0eb9d879-ff20-4354-b0fa-9b6c6b76ad92":{"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"},"4022bb06-cbe4-4176-b587-0873118d5bec":{"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"},"a59e86c2-9ed9-4102-9097-2b772d7fe82d":{"description":"`QUOTA_EXCEEDED`: the credit balance cannot pay for the call.","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"},"893274e4-390d-464b-b5fe-5062d62910c2":{"description":"`PERMISSION_DENIED`: the key may not make this call.","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"},"6124f37f-18ed-440b-a039-ec9b915b1991":{"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"},"ce7b1c41-558d-4d41-acb4-358e0c533ff8":{"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"},"f142bab9-5673-488b-ad70-ac3c8377afcc":{"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"},"9f9f4fcc-9078-4447-b123-d19cbfd044dd":{"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 one trader - FomoScan","navMaps":{"firstHrefInVersion":{"v2":{"href":"/api-reference/identities/read-a-wallet-free-stored-profile","matchLevel":2},"v3":{"href":"/v3/api-reference/traders/read-one-trader","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T20:47:33.963Z","originalFileLocation":"v3/api-reference/traders/read-one-trader.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=\"The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats). - An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id. - Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows. - When the trader holds two accounts on one platform, each block comes from the account whose block is newest. - The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them. - canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal. ## Price The price depends on the answer. | Answer | Credits | Reveals | | --- | --- | --- | | The trader exists. | 100 | 0 | | 404: no trader has this id. | 200 | 0 | ## 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 100 credits left gets 402 QUOTA_EXCEEDED before any work.\">\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 one trader - FomoScan\">\u003cmeta data-mint-head property=\"og:description\" content=\"The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats). - An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id. - Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows. - When the trader holds two accounts on one platform, each block comes from the account whose block is newest. - The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them. - canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal. ## Price The price depends on the answer. | Answer | Credits | Reveals | | --- | --- | --- | | The trader exists. | 100 | 0 | | 404: no trader has this id. | 200 | 0 | ## 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 100 credits left gets 402 QUOTA_EXCEEDED before any work.\">\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-one-trader\">\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+one+trader\u0026amp;description=The+trader+behind+this+id.+%60canonical%60+says+what+to+show+and+which+platforms+the+trader+is+on%3B+%60sources%60+holds+the+blocks+of+each+platform+%28%60profile%60%2C+%60followGr\u0026amp;theme=eee421e92d714c8c3b4eb52f\u0026amp;signature=f8f0b13589c24219760811b93c38bec6d20cf2ff77fd913de53695c1474e1ab6\">\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 one trader - FomoScan\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats). - An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id. - Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows. - When the trader holds two accounts on one platform, each block comes from the account whose block is newest. - The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them. - canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal. ## Price The price depends on the answer. | Answer | Credits | Reveals | | --- | --- | --- | | The trader exists. | 100 | 0 | | 404: no trader has this id. | 200 | 0 | ## 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 100 credits left gets 402 QUOTA_EXCEEDED before any work.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://socialscan.mintlify.app/_mintlify/api/og/v2?division=Traders\u0026amp;title=Read+one+trader\u0026amp;description=The+trader+behind+this+id.+%60canonical%60+says+what+to+show+and+which+platforms+the+trader+is+on%3B+%60sources%60+holds+the+blocks+of+each+platform+%28%60profile%60%2C+%60followGr\u0026amp;theme=eee421e92d714c8c3b4eb52f\u0026amp;signature=f8f0b13589c24219760811b93c38bec6d20cf2ff77fd913de53695c1474e1ab6\">\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-one-trader\">\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-one-trader.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-one-trader#webpage\",\"url\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader\",\"name\":\"Read one trader\",\"description\":\"The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats). - An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id. - Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows. - When the trader holds two accounts on one platform, each block comes from the account whose block is newest. - The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them. - canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal. ## Price The price depends on the answer. | Answer | Credits | Reveals | | --- | --- | --- | | The trader exists. | 100 | 0 | | 404: no trader has this id. | 200 | 0 | ## 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 100 credits left gets 402 QUOTA_EXCEEDED before any work.\",\"dateModified\":\"2026-11-04T20:47:33.963Z\",\"isPartOf\":{\"@id\":\"https://docs.fomoscan.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"FomoScan\",\"item\":\"https://docs.fomoscan.sh\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Read one trader\",\"item\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader#apireference\",\"headline\":\"Read one trader\",\"name\":\"Read one trader\",\"description\":\"The trader behind this id. canonical says what to show and which platforms the trader is on; sources holds the blocks of each platform (profile, followGraph, tradingStats). - An id merged into another trader answers 200 with the trader that absorbed it: id differs from the one you sent, and canonical.mergedFrom lists yours. Store the new id. - Each field of canonical.display comes from the newest profile block (by observedAt) that has it, so a newer profile with an empty field never blanks a value another platform shows. - When the trader holds two accounts on one platform, each block comes from the account whose block is newest. - The envelope carries no wallets: GET /v3/traders/{traderId}/wallets lists them. - canonical.walletAvailable is true when GET /v3/traders/{traderId}/wallets lists at least one wallet for the trader and false when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal. ## Price The price depends on the answer. | Answer | Credits | Reveals | | --- | --- | --- | | The trader exists. | 100 | 0 | | 404: no trader has this id. | 200 | 0 | ## 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 100 credits left gets 402 QUOTA_EXCEEDED before any work.\",\"url\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader\",\"mainEntityOfPage\":{\"@id\":\"https://docs.fomoscan.sh/v3/api-reference/traders/read-one-trader#webpage\"},\"dateModified\":\"2026-11-04T20:47:33.963Z\",\"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","description":"The boards platforms publish, and the rankings we compute.","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","description":"The traders whose handle on a platform matches `handle`. Look a trader up once, then store our id and use it from then on.\n\n- The match covers the handle each account holds now and every handle it held in the last 30 days, so a renamed account still answers.\n- Order: traders whose current handle matches first, then traders who held it in the last 30 days. Inside each group, the newest profile `observedAt` first, then trader id.\n- One handle can match several traders, for example two people with the same handle on two platforms. Check `canonical.platforms` and `sources` before you pick one.\n- `canonical.walletAvailable` is `true` when `GET /v3/traders/{traderId}/wallets` lists at least one wallet for the trader and `false` when it lists none, so you know before you pay its reveal whether an address will come back. It never carries the address and takes no reveal.\n- No match answers 200 with an empty page. This operation never answers 404.\n- The first page of a miss carries `suggestions`: up to 5 traders whose handle or name looks like `handle` (a typo, a repeated letter, spaces) or whose handle starts with it, closest first, with a small lift for followed traders. Each names the platform, handle and name of the account that matched.\n- With `match=closest` that miss answers with the first suggestion as the only item and `match: \"closest\"`. Check it before you store the id: a close handle is a guess, not proof.\n- Paged with `cursor` and `limit` (default 50, maximum 200).\n\n## Price\n\nThe price depends on the answer.\n\n| Answer | Credits | Reveals |\n| --- | --- | --- |\n| At least one trader holds or held the handle. | 100 | 0 |\n| None does, and `match=closest` answers with the first suggestion. | 100 | 0 |\n| None does, and no trader answers: an empty page with `suggestions`. | 200 | 0 |\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/lookup","href":"/v3/api-reference/traders/find-traders-by-handle"},{"title":"List the wallets of a trader","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","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 one trader - 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"]}