> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fomoscan.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# One trader's realized and unrealized profit across their whole wallet

> Profit and trading activity across one account's whole wallet: every venue, Solana and EVM together.

- `24h`, `7d` and `30d`: realized profit (`netUsd`), return, buy and sell volume, trade
  counts and tokens traded.
- `all`: FOMO trades only, as cash flow (sold minus bought) with its `rank`, plus
  whole-wallet realized and unrealized profit since 1 January 2025.
- Every window carries `realizedPnlUsd`, `unrealizedPnlUsd` and `totalPnlUsd`, one
  formula across 24h, 7d, 30d and all: realized profit on average cost plus the
  unrealized profit of positions last traded in the window.
- `unrealized`: profit on what the wallets hold now. It has no window, and it leaves
  out spam, pools under $10,000 of liquidity and positions larger than their pool.
- Each window carries its own `status` and `updatedAt`. A window that is due to be
  read again is read while you wait, up to 8 seconds; if the read does not finish in
  time, the previous figures are served with their older `updatedAt`.
- The first call for an account reads it live. A window that does not finish within
  8 seconds comes back `pending` with null figures and is ready on the next call.
- `status` is `pending` only when nothing could be read in time. Only a `ready`
  answer is charged the hit price; every other answer is charged the miss price.
- A handle the user renamed to is found through their theses of the last 30 days;
  `handle` in the answer is the handle we hold for them.
- **404** when we do not hold the handle.

A response with `status` `ready` carries a wallet and counts as one of the plan’s monthly reveals.

**Price:** 30,000 CU on a hit, 200 CU on any answer that is not ready, and on a 404.



## OpenAPI

````yaml https://api.fomoscan.sh/openapi.json get /v2/user/handle/{handle}/pnl
openapi: 3.1.0
info:
  title: FomoScan Identity API
  version: 1.1.0
  description: >-
    Resolve a FOMO trader handle to their on-chain wallet addresses, and

    any wallet back to the traders behind it. Every returned address is a

    verified match.


    ## Authentication

    Send your API key as `Authorization: Bearer fsk_live_…` (or the

    `X-Api-Key` header). Enter it under Authentication at the top of this

    page to call any endpoint live.


    ```bash

    curl -s -H "Authorization: Bearer $KEY" \
      "https://api.fomoscan.sh/v2/user/handle/tradername"
    ```


    ## Response format

    A successful response is the record itself, as flat JSON. There is no

    wrapper to unwrap. Timestamps on thesis and PnL records are epoch

    milliseconds.


    ## Billing

    - A lookup that finds nothing is still charged, at the miss price stated on
    the endpoint.

    - `GET /v2/me` is free and reports your remaining units.

    - Errors that are our fault or your client’s (`401`, `403`, `429`, `5xx`)
    are not billed.

    - When the allowance is spent, calls return `402 QUOTA_EXCEEDED` until the
    counter resets.


    ## Free keys

    A free key reveals wallets for the sample set below and nobody else.

    Sample lookups cost no credits. Outside the set, a wallet lookup, or a

    handle or id lookup whose answer carries a wallet, returns

    `403 SAMPLE_SET_ONLY`. Profiles without a wallet and misses answer as

    they do for any key. A self-serve free key cannot open the WebSocket.


    - Handles: `frankdegods`, `unipcs`, `pointfarmcap`, `orangie`, `theveeman`

    - Wallets: `498g1rVnFcnjBjpfw1xyqA1WvgQXUU8RWuELjxkjAayQ`,
    `0x696d1265c8fc4f14797abebfae3c43ebfa9d8e28`,
    `2heJbC32Tpfcb3nbUb5ER61K11FGZVfVGtVnDm6LDogF`,
    `Beqv6dzTcjV2eodo8RRXCiCcnSYrS1vkQKhfqwHXqeit`,
    `83b2LMf12aLec92kur3duRA8VvUkLaXUtML31aCcZNCM`,
    `F5hkYsi8JxjyA2JHN5CA7MbnnhWubkXB2ZQB7Gkaxqs6`


    ## 404 NOT_FOUND

    A lookup that finds nothing answers `404` with the code `NOT_FOUND`. On

    a handle or id lookup it means we hold no user under that handle or id.

    On a wallet lookup it means we hold no verified link from that address

    to a trader. Treat it as "no answer today", cache the negative briefly

    and ask again later. A user we hold without a verified wallet answers

    `200` with both addresses `null`.


    ## Errors

    Every error uses one shape: `{ "error": { "code": "…", "message": "…" } }`.


    | HTTP | Code | Meaning |

    |---|---|---|

    | 400 | `VALIDATION_ERROR` | A malformed handle, address or query parameter.
    |

    | 400 | `BAD_REQUEST` | The request cannot be served as sent. |

    | 401 | `UNAUTHORIZED` | Missing or invalid API key. |

    | 402 | `QUOTA_EXCEEDED` | Out of credits. |

    | 402 | `REVEAL_LIMIT_REACHED` | The key’s reveal limit is reached. |

    | 403 | `FORBIDDEN` | The key may not perform this action. |

    | 403 | `FORBIDDEN_SCOPE` | The key is not provisioned for this endpoint. |

    | 403 | `FREE_TIER_DISABLED` | The key has no allowance. |

    | 403 | `SAMPLE_SET_ONLY` | A free key asked for a wallet outside the sample
    set. |

    | 403 | `WEBSOCKET_PLAN_REQUIRED` | The key’s plan has no WebSocket. It is
    included from Growth ($899), and legacy plans keep it. |

    | 404 | `NOT_FOUND` | No answer for the handle, id or wallet you asked
    about, or no such route. See the section above. |

    | 409 | `CONFLICT` | The request conflicts with one already accepted. |

    | 429 | `RATE_LIMITED` | Per-minute limit exceeded. Retry after `retryAfter`
    seconds. |

    | 500 | `INTERNAL_ERROR` | Our fault. Retry. If it persists, contact support
    with the path and the time. |

    | 503 | `OVERLOADED` | We are shedding load. Retry. |

    | 503 | `B2B_DISABLED` | The API is switched off on this deployment. |

    | 504 | `TIMEOUT` | The answer did not arrive in time. Retry. |


    A `429` also carries `retryAfter`, in seconds.


    ## Rate limits

    Each key has one per-minute request limit across every endpoint,

    readable from `GET /v2/me` as `ratePerMinute`. A per-IP burst ceiling

    sits behind it. Exceeding either returns `429 RATE_LIMITED`.


    ## Pricing

    Paid plans reach every REST endpoint. Plans differ in credits, request rate,

    wallet reveals and the WebSocket. Credits and CU are the same unit.


    | Plan | Free | Starter | Builder | Growth | Scale | Enterprise |

    | --- | --- | --- | --- | --- | --- | --- |

    | Price per month | $0 | $99 | $299 | $899 | $2,499 | Set in the contract |

    | Credits | 25,000 once, for 30 days | 1,000,000 a month | 5,000,000 a month
    | 20,000,000 a month | 75,000,000 a month | Set in the contract |

    | Requests per minute | 60 | 150 | 300 | 600 | 1,200 | Set in the contract |

    | Wallet reveals per month | Sample set only | 150 | 500 | 1,500 | 4,000 |
    No cap |

    | Price per 30,000-credit reveal | $0 on the sample set | $2.97 | $1.79 |
    $1.35 | $1.00 | Set in the contract |

    | WebSocket | No | No | No | Included | Included | Included |


    Keys on legacy plans keep the WebSocket access they already have.


    ### Wallet reveals

    A wallet reveal is an answer that returns a verified wallet. Each reveal
    counts

    against the plan’s wallet reveals for the month. It costs the credits of the

    endpoint that returned it:


    | Reveal endpoint | Credits per reveal |

    | --- | --- |

    | `GET /v2/user/handle/{handle}` | 100 |

    | `GET /v2/user/wallet/{address}` | 30,000 |

    | `GET /v2/user/id/{id}` | 100 |

    | `POST /v2/user/handle/{handle}/resolve` | 30,000 |

    | `GET /v2/user/handle/{handle}/pnl` | 30,000 |

    | `POST /v2/user/handles/pnl` | 30,000 per handle revealed |


    The price per 30,000-credit reveal in the plan table is what 30,000 credits

    cost on the plan. It applies to `GET /v2/user/wallet/{address}`, `POST
    /v2/user/handle/{handle}/resolve`, `GET /v2/user/handle/{handle}/pnl`, `POST
    /v2/user/handles/pnl`.

    A reveal on another endpoint costs that endpoint’s credits.


    ### Credit cost per endpoint


    | Endpoint | Credits |

    | --- | --- |

    | `GET /v2/user/handle/{handle}` | 100 CU on a hit, 200 CU on a 404. |

    | `GET /v2/user/wallet/{address}` | 30,000 CU on a hit, 200 CU on a 404. |

    | `GET /v2/user/id/{id}` | 100 CU on a hit, 200 CU on a 404. |

    | `POST /v2/user/handle/{handle}/resolve` | 30,000 CU on a hit, 200 CU on a
    202 or a 404. A paused lookup (202 with reason unavailable and retryable
    false) is not charged. |

    | `GET /v2/user/handle/{handle}/pnl` | 30,000 CU on a hit, 200 CU on any
    answer that is not ready, and on a 404. |

    | `POST /v2/user/handles/pnl` | 30,000 CU per entry answered ready, 200 CU
    per entry not ready and per handle in `missing`. |

    | `GET /v2/thesis` | 200 CU per 20 requested rows (`limit`, up to 100). An
    empty page costs the same as a full one. |

    | `GET /v2/thesis/token/{tokenAddress}` | 200 CU per 20 requested rows
    (`limit`, up to 100). An empty page costs the same as a full one. |

    | `GET /v2/thesis/user/{id}` | 200 CU per 20 requested rows (`limit`, up to
    100). An empty page costs the same as a full one. |

    | `GET /v2/thesis/user/{id}/token/{tokenAddress}` | 200 CU per 20 requested
    rows (`limit`, up to 100). An empty page costs the same as a full one. |

    | `GET /v2/me` | Free. |

    | `GET /v2/pump/user/wallet/{wallet}` | 10 CU per call. |

    | `GET /v2/pump/thesis` | 10 CU per call. |

    | `GET /v2/pump/thesis/token/{mint}` | 10 CU per call. |

    | `GET /v2/pump/thesis/wallet/{wallet}` | 10 CU per call. |

    | `GET /v2/pump/leaderboard/traders` | 10 CU per call. |

    | `GET /v2/pump/user/wallet/{wallet}/pnl` | 500 CU per call. |

    | `GET /v2/ws` | 20,000 CU per minute held open. |

    | `GET /v2/ws/pump` | 20,000 CU per minute held open. |


    ### Credit packs

    A pack adds credits on top of a plan. Pack credits do not expire, and they
    are

    spent after the plan’s monthly credits run out.


    | Pack | Price |

    | --- | --- |

    | 250,000 credits | $29 |

    | 1,000,000 credits | $115 |

    | 5,000,000 credits | $349 |

    | 20,000,000 credits | $1,049 |

    | 75,000,000 credits | $2,899 |


    ### Payment

    Plans are paid by card, and Apple Pay counts as a card. Credit packs are
    paid

    in crypto only, with no surcharge.


    ## Chains

    Wallet lookups take a Solana address or an EVM address. A verified EVM
    address

    is the same address on every EVM chain.


    Theses carry their token’s chain in `tokenNetwork`. This table shows the
    value

    the API returns for each chain we serve. Some chains arrive as a short name
    and

    some as a numeric chain id. Match on the exact value in the table.


    | Chain | `tokenNetwork` |

    | --- | --- |

    | Solana | `sol` |

    | Base | `base` |

    | BNB Chain | `bsc` |

    | Robinhood Chain | `robinhood` |

    | Ethereum | `eth` |

    | Arc | `5042` |

    | Monad | `143` |


    A thesis on a chain outside this table arrives as a short name or a numeric
    chain id.


    ## Breaking changes

    A breaking change removes or renames an endpoint, a field or an error code,
    or

    changes what a field means. We announce each one at least 3 days before it

    ships. The notice goes out on the changelog, on the Telegram announcements

    channel (https://t.me/scanfomo) and on every other channel we run.


    New fields can appear without notice. Ignore fields you do not recognise.
  contact:
    name: FomoScan
    url: https://fomoscan.sh
    email: fomoscan-support@proton.me
servers:
  - url: https://api.fomoscan.sh
    description: Production
security: []
tags:
  - name: Identities
    description: Resolve handles ↔ wallets.
  - name: Thesis Feed
    description: >-
      Trader "thesis" posts, newest first, by token, by author, or both. Ask
      with no `before` for the newest page. Clients MUST dedupe on `id`.
  - name: WebSocket
    description: >-
      The streaming surface. Everything above is a request you make; this is a
      connection you hold. It delivers the same thesis objects `Thesis Feed`
      returns.
  - name: Pump
    description: >-
      pump.fun lookups: a user by wallet, the global callout feed or one coin's
      or wallet's wall, and the PnL leaderboard. On pump.fun the wallet IS the
      account, so a wallet lookup here is a stored read, not a resolution.
  - name: Account
    description: 'Your key: entitlements and usage.'
paths:
  /v2/user/handle/{handle}/pnl:
    get:
      tags:
        - Identities
      summary: One trader's realized and unrealized profit across their whole wallet
      description: >-
        Profit and trading activity across one account's whole wallet: every
        venue, Solana and EVM together.


        - `24h`, `7d` and `30d`: realized profit (`netUsd`), return, buy and
        sell volume, trade
          counts and tokens traded.
        - `all`: FOMO trades only, as cash flow (sold minus bought) with its
        `rank`, plus
          whole-wallet realized and unrealized profit since 1 January 2025.
        - Every window carries `realizedPnlUsd`, `unrealizedPnlUsd` and
        `totalPnlUsd`, one
          formula across 24h, 7d, 30d and all: realized profit on average cost plus the
          unrealized profit of positions last traded in the window.
        - `unrealized`: profit on what the wallets hold now. It has no window,
        and it leaves
          out spam, pools under $10,000 of liquidity and positions larger than their pool.
        - Each window carries its own `status` and `updatedAt`. A window that is
        due to be
          read again is read while you wait, up to 8 seconds; if the read does not finish in
          time, the previous figures are served with their older `updatedAt`.
        - The first call for an account reads it live. A window that does not
        finish within
          8 seconds comes back `pending` with null figures and is ready on the next call.
        - `status` is `pending` only when nothing could be read in time. Only a
        `ready`
          answer is charged the hit price; every other answer is charged the miss price.
        - A handle the user renamed to is found through their theses of the last
        30 days;
          `handle` in the answer is the handle we hold for them.
        - **404** when we do not hold the handle.


        A response with `status` `ready` carries a wallet and counts as one of
        the plan’s monthly reveals.


        **Price:** 30,000 CU on a hit, 200 CU on any answer that is not ready,
        and on a 404.
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 64
          example: tradername
          in: path
          name: handle
          required: true
          description: FOMO username (case-insensitive; leading @ is stripped).
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                required:
                  - handle
                  - wallet
                  - evmWallet
                  - status
                  - retryAfterSeconds
                  - updatedAt
                  - windows
                  - unrealized
                properties:
                  handle:
                    type: string
                  displayName:
                    type:
                      - 'null'
                      - string
                  avatarUrl:
                    type:
                      - 'null'
                      - string
                    description: >-
                      Avatar URL on our image host, or null. The path is
                      `/a/<key>.webp`. A new picture gets a new URL. A picture
                      added in the last few minutes can show a neutral
                      placeholder until it is ready.
                  twitter:
                    type:
                      - 'null'
                      - string
                    description: Bare X username.
                  followers:
                    type:
                      - 'null'
                      - integer
                  wallet:
                    type:
                      - 'null'
                      - string
                    description: >-
                      The Solana address these numbers include: the verified
                      Solana wallet of this account, left out when the same
                      address is verified for another account too. Null when
                      there is none.
                  evmWallet:
                    type:
                      - 'null'
                      - string
                    description: >-
                      The EVM address these numbers include, across every EVM
                      chain FOMO runs on: the verified EVM wallet of this
                      account, left out when the same address is verified for
                      another account too. Null when there is none.
                  status:
                    type: string
                    enum:
                      - ready
                      - pending
                      - failed
                      - no-wallet
                      - unavailable
                    description: >-
                      `ready`: whole-wallet figures are served; each window
                      carries its own status and updatedAt, and a window read
                      for the first time can still be pending. `pending`:
                      nothing could be read within the wait; every field of 24h,
                      7d and 30d is null and unrealized is null; ask again after
                      retryAfterSeconds. `failed`: the last reading failed and
                      nothing is held yet; the next attempt starts after
                      retryAfterSeconds. `no-wallet`: we hold no verified
                      wallet. `unavailable`: whole-wallet reading is switched
                      off or out of capacity; retrying will not help soon. Only
                      `ready` is charged the hit price.
                  retryAfterSeconds:
                    type:
                      - 'null'
                      - integer
                    description: >-
                      Set only when status is pending or failed: seconds until
                      asking again is worth it.
                  updatedAt:
                    type:
                      - 'null'
                      - integer
                    description: >-
                      Epoch ms of the oldest figure served: the oldest window or
                      unrealized reading when status is ready, the FOMO board
                      otherwise. Each window carries its own updatedAt.
                  windows:
                    type: object
                    description: >-
                      One entry per window, with all four keys present. 24h, 7d
                      and 30d are always objects: whole-wallet figures when
                      their own status is ready, every figure null while it is
                      pending (FOMO cash flow is never shown in their place). On
                      all, netUsd, returnPct, volumeUsd, trades and rank are
                      FOMO cash flow with its rank, and realizedPnlUsd,
                      unrealizedPnlUsd and totalPnlUsd are whole-wallet figures
                      since 1 January 2025. all is null for an account with no
                      FOMO trade until its whole-wallet figures have been read.
                    properties:
                      24h:
                        type:
                          - 'null'
                          - object
                        properties:
                          netUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit across the
                              whole wallet, every venue, Solana and EVM
                              together, in USD. On all: sold minus bought across
                              FOMO trades, which is cash flow and not profit.
                              Null on 24h, 7d and 30d unless status is ready,
                              and whenever the figure is one no real wallet
                              reaches (not a number, or over 1e12 USD in size),
                              or a realized profit larger than sellVolumeUsd;
                              the size rule also applies to the volumes.
                          returnPct:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit as a
                              percentage of what the sold tokens cost. On all:
                              netUsd as a percentage of what was paid on buys.
                              Null when there is nothing to divide by.
                          volumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Bought plus sold in the window, USD. On 24h, 7d
                              and 30d across the whole wallet; on all across
                              FOMO trades.
                          buyVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Paid on buys in the window across the whole
                              wallet, USD. Null on all.
                          sellVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Received on sells in the window across the whole
                              wallet, USD. Null on all.
                          trades:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Trades in the window. On 24h, 7d and 30d across
                              the whole wallet; on all FOMO swaps.
                          buys:
                            type:
                              - 'null'
                              - integer
                            description: Buy trades in the window. Null on all.
                          sells:
                            type:
                              - 'null'
                              - integer
                            description: Sell trades in the window. Null on all.
                          tokensTraded:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Distinct tokens bought or sold in the window. Null
                              on all.
                          winningTokens:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Tokens that closed the window with positive
                              realized profit. Null on all.
                          realizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Realized profit in the window across the whole
                              wallet, every venue, Solana and EVM together, USD:
                              what sells received minus the average cost of the
                              tokens sold. On 24h, 7d and 30d the same figure as
                              netUsd. On all, every trade since 1 January 2025.
                              Null until the window has been read, and on the
                              same rules as netUsd.
                          unrealizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              What the tokens held now are worth minus what they
                              cost, USD, for the positions last traded in the
                              window. On all, every position counted in
                              unrealized. It leaves out the positions unrealized
                              leaves out. Null until the positions have been
                              read.
                          totalPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              realizedPnlUsd plus unrealizedPnlUsd, USD: one
                              formula on every window. Null when either part is
                              null.
                          rank:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Position on the FOMO cash-flow ranking for this
                              window, 1 = highest, ties share a rank. Set on
                              all. Always null on 24h, 7d and 30d, whose numbers
                              the ranking does not order.
                          status:
                            type: string
                            enum:
                              - ready
                              - pending
                            description: >-
                              `ready`: the figures are filled. `pending`: this
                              window is still being read for the first time; its
                              figures are null and the next call a few seconds
                              later carries them.
                          updatedAt:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Epoch ms when this window's figures were read. It
                              can be older than usual when a fresh reading could
                              not be taken, in which case the previous figures
                              are served. On all, when the FOMO board was read.
                              Null while pending.
                      7d:
                        type:
                          - 'null'
                          - object
                        properties:
                          netUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit across the
                              whole wallet, every venue, Solana and EVM
                              together, in USD. On all: sold minus bought across
                              FOMO trades, which is cash flow and not profit.
                              Null on 24h, 7d and 30d unless status is ready,
                              and whenever the figure is one no real wallet
                              reaches (not a number, or over 1e12 USD in size),
                              or a realized profit larger than sellVolumeUsd;
                              the size rule also applies to the volumes.
                          returnPct:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit as a
                              percentage of what the sold tokens cost. On all:
                              netUsd as a percentage of what was paid on buys.
                              Null when there is nothing to divide by.
                          volumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Bought plus sold in the window, USD. On 24h, 7d
                              and 30d across the whole wallet; on all across
                              FOMO trades.
                          buyVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Paid on buys in the window across the whole
                              wallet, USD. Null on all.
                          sellVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Received on sells in the window across the whole
                              wallet, USD. Null on all.
                          trades:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Trades in the window. On 24h, 7d and 30d across
                              the whole wallet; on all FOMO swaps.
                          buys:
                            type:
                              - 'null'
                              - integer
                            description: Buy trades in the window. Null on all.
                          sells:
                            type:
                              - 'null'
                              - integer
                            description: Sell trades in the window. Null on all.
                          tokensTraded:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Distinct tokens bought or sold in the window. Null
                              on all.
                          winningTokens:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Tokens that closed the window with positive
                              realized profit. Null on all.
                          realizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Realized profit in the window across the whole
                              wallet, every venue, Solana and EVM together, USD:
                              what sells received minus the average cost of the
                              tokens sold. On 24h, 7d and 30d the same figure as
                              netUsd. On all, every trade since 1 January 2025.
                              Null until the window has been read, and on the
                              same rules as netUsd.
                          unrealizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              What the tokens held now are worth minus what they
                              cost, USD, for the positions last traded in the
                              window. On all, every position counted in
                              unrealized. It leaves out the positions unrealized
                              leaves out. Null until the positions have been
                              read.
                          totalPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              realizedPnlUsd plus unrealizedPnlUsd, USD: one
                              formula on every window. Null when either part is
                              null.
                          rank:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Position on the FOMO cash-flow ranking for this
                              window, 1 = highest, ties share a rank. Set on
                              all. Always null on 24h, 7d and 30d, whose numbers
                              the ranking does not order.
                          status:
                            type: string
                            enum:
                              - ready
                              - pending
                            description: >-
                              `ready`: the figures are filled. `pending`: this
                              window is still being read for the first time; its
                              figures are null and the next call a few seconds
                              later carries them.
                          updatedAt:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Epoch ms when this window's figures were read. It
                              can be older than usual when a fresh reading could
                              not be taken, in which case the previous figures
                              are served. On all, when the FOMO board was read.
                              Null while pending.
                      30d:
                        type:
                          - 'null'
                          - object
                        properties:
                          netUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit across the
                              whole wallet, every venue, Solana and EVM
                              together, in USD. On all: sold minus bought across
                              FOMO trades, which is cash flow and not profit.
                              Null on 24h, 7d and 30d unless status is ready,
                              and whenever the figure is one no real wallet
                              reaches (not a number, or over 1e12 USD in size),
                              or a realized profit larger than sellVolumeUsd;
                              the size rule also applies to the volumes.
                          returnPct:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit as a
                              percentage of what the sold tokens cost. On all:
                              netUsd as a percentage of what was paid on buys.
                              Null when there is nothing to divide by.
                          volumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Bought plus sold in the window, USD. On 24h, 7d
                              and 30d across the whole wallet; on all across
                              FOMO trades.
                          buyVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Paid on buys in the window across the whole
                              wallet, USD. Null on all.
                          sellVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Received on sells in the window across the whole
                              wallet, USD. Null on all.
                          trades:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Trades in the window. On 24h, 7d and 30d across
                              the whole wallet; on all FOMO swaps.
                          buys:
                            type:
                              - 'null'
                              - integer
                            description: Buy trades in the window. Null on all.
                          sells:
                            type:
                              - 'null'
                              - integer
                            description: Sell trades in the window. Null on all.
                          tokensTraded:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Distinct tokens bought or sold in the window. Null
                              on all.
                          winningTokens:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Tokens that closed the window with positive
                              realized profit. Null on all.
                          realizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Realized profit in the window across the whole
                              wallet, every venue, Solana and EVM together, USD:
                              what sells received minus the average cost of the
                              tokens sold. On 24h, 7d and 30d the same figure as
                              netUsd. On all, every trade since 1 January 2025.
                              Null until the window has been read, and on the
                              same rules as netUsd.
                          unrealizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              What the tokens held now are worth minus what they
                              cost, USD, for the positions last traded in the
                              window. On all, every position counted in
                              unrealized. It leaves out the positions unrealized
                              leaves out. Null until the positions have been
                              read.
                          totalPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              realizedPnlUsd plus unrealizedPnlUsd, USD: one
                              formula on every window. Null when either part is
                              null.
                          rank:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Position on the FOMO cash-flow ranking for this
                              window, 1 = highest, ties share a rank. Set on
                              all. Always null on 24h, 7d and 30d, whose numbers
                              the ranking does not order.
                          status:
                            type: string
                            enum:
                              - ready
                              - pending
                            description: >-
                              `ready`: the figures are filled. `pending`: this
                              window is still being read for the first time; its
                              figures are null and the next call a few seconds
                              later carries them.
                          updatedAt:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Epoch ms when this window's figures were read. It
                              can be older than usual when a fresh reading could
                              not be taken, in which case the previous figures
                              are served. On all, when the FOMO board was read.
                              Null while pending.
                      all:
                        type:
                          - 'null'
                          - object
                        properties:
                          netUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit across the
                              whole wallet, every venue, Solana and EVM
                              together, in USD. On all: sold minus bought across
                              FOMO trades, which is cash flow and not profit.
                              Null on 24h, 7d and 30d unless status is ready,
                              and whenever the figure is one no real wallet
                              reaches (not a number, or over 1e12 USD in size),
                              or a realized profit larger than sellVolumeUsd;
                              the size rule also applies to the volumes.
                          returnPct:
                            type:
                              - 'null'
                              - number
                            description: >-
                              On 24h, 7d and 30d: realized profit as a
                              percentage of what the sold tokens cost. On all:
                              netUsd as a percentage of what was paid on buys.
                              Null when there is nothing to divide by.
                          volumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Bought plus sold in the window, USD. On 24h, 7d
                              and 30d across the whole wallet; on all across
                              FOMO trades.
                          buyVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Paid on buys in the window across the whole
                              wallet, USD. Null on all.
                          sellVolumeUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Received on sells in the window across the whole
                              wallet, USD. Null on all.
                          trades:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Trades in the window. On 24h, 7d and 30d across
                              the whole wallet; on all FOMO swaps.
                          buys:
                            type:
                              - 'null'
                              - integer
                            description: Buy trades in the window. Null on all.
                          sells:
                            type:
                              - 'null'
                              - integer
                            description: Sell trades in the window. Null on all.
                          tokensTraded:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Distinct tokens bought or sold in the window. Null
                              on all.
                          winningTokens:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Tokens that closed the window with positive
                              realized profit. Null on all.
                          realizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              Realized profit in the window across the whole
                              wallet, every venue, Solana and EVM together, USD:
                              what sells received minus the average cost of the
                              tokens sold. On 24h, 7d and 30d the same figure as
                              netUsd. On all, every trade since 1 January 2025.
                              Null until the window has been read, and on the
                              same rules as netUsd.
                          unrealizedPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              What the tokens held now are worth minus what they
                              cost, USD, for the positions last traded in the
                              window. On all, every position counted in
                              unrealized. It leaves out the positions unrealized
                              leaves out. Null until the positions have been
                              read.
                          totalPnlUsd:
                            type:
                              - 'null'
                              - number
                            description: >-
                              realizedPnlUsd plus unrealizedPnlUsd, USD: one
                              formula on every window. Null when either part is
                              null.
                          rank:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Position on the FOMO cash-flow ranking for this
                              window, 1 = highest, ties share a rank. Set on
                              all. Always null on 24h, 7d and 30d, whose numbers
                              the ranking does not order.
                          status:
                            type: string
                            enum:
                              - ready
                              - pending
                            description: >-
                              `ready`: the figures are filled. `pending`: this
                              window is still being read for the first time; its
                              figures are null and the next call a few seconds
                              later carries them.
                          updatedAt:
                            type:
                              - 'null'
                              - integer
                            description: >-
                              Epoch ms when this window's figures were read. It
                              can be older than usual when a fresh reading could
                              not be taken, in which case the previous figures
                              are served. On all, when the FOMO board was read.
                              Null while pending.
                  unrealized:
                    type:
                      - 'null'
                      - object
                    required:
                      - unrealizedPnlUsd
                      - holdingsUsd
                      - positions
                      - excludedPositions
                      - status
                      - updatedAt
                    properties:
                      unrealizedPnlUsd:
                        type: number
                        description: >-
                          What the tokens held now are worth minus what they
                          cost, USD. A token held without any buy, such as a
                          transfer in or an airdrop, has no cost to measure
                          against and is left out.
                      holdingsUsd:
                        type: number
                        description: Current value of the positions counted, USD.
                      positions:
                        type: integer
                        description: Open positions counted.
                      excludedPositions:
                        type: integer
                        description: >-
                          Open positions left out: flagged as spam, a pool under
                          $10,000 of liquidity, or a position worth more than
                          its pool holds, since none of those can be sold at the
                          quoted price; and a token held without any buy, which
                          has no cost.
                      status:
                        type: string
                        enum:
                          - ready
                        description: Always `ready` when present.
                      updatedAt:
                        type: integer
                        description: Epoch ms when the positions were read.
                    description: >-
                      Profit on what the wallets hold now, across the whole
                      wallet, every venue, Solana and EVM. It has no window.
                      Null until the positions have been read at least once.
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/def-0'
      security:
        - b2bApiKey: []
components:
  schemas:
    def-0:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Stable, lower-snake-case error code.
              enum:
                - BAD_REQUEST
                - B2B_DISABLED
                - CONFLICT
                - FORBIDDEN
                - FORBIDDEN_SCOPE
                - FREE_TIER_DISABLED
                - INTERNAL_ERROR
                - NOT_FOUND
                - OVERLOADED
                - QUOTA_EXCEEDED
                - RATE_LIMITED
                - REVEAL_LIMIT_REACHED
                - SAMPLE_SET_ONLY
                - TIMEOUT
                - UNAUTHORIZED
                - VALIDATION_ERROR
                - WEBSOCKET_PLAN_REQUIRED
            message:
              type: string
            retryAfter:
              type: integer
              description: Seconds; only on RATE_LIMITED.
            addUrl:
              type: string
              description: Hint URL, present on some NOT_FOUND responses.
      title: ErrorBody
  securitySchemes:
    b2bApiKey:
      type: http
      scheme: bearer
      description: >-
        B2B API key (`fsk_live_…` / `fsk_test_…`), issued by FomoScan. Also
        accepted via `X-Api-Key`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.