> ## 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.

# Whole-wallet profit for up to 100 traders in one call

> GET /v2/user/handle/{handle}/pnl for up to 100 handles at once.

- Each entry is the object the single endpoint returns, with the same windows,
  `status` and `unrealized`.
- Entries come back in the order requested. Handles match case-insensitively,
  a leading @ is stripped, and a repeated handle counts once.
- A handle we do not know goes into `missing` and the call still succeeds.
- A handle the user renamed to is found through their theses of the last 30 days;
  the entry carries the handle we hold for them.
- A batch is charged as one call: it is served in full or refused as a whole
  with **402**, before any entry comes back.
- Accounts are read live, several at a time, for up to 8 seconds. An account or
  window that does not finish in time comes back `pending` and is ready on the next
  call. Only `ready` entries are charged the hit price.

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

**Price:** 30,000 CU per entry answered ready, 200 CU per entry not ready and per handle in `missing`.



## OpenAPI

````yaml https://api.fomoscan.sh/openapi.json post /v2/user/handles/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/handles/pnl:
    post:
      tags:
        - Identities
      summary: Whole-wallet profit for up to 100 traders in one call
      description: >-
        GET /v2/user/handle/{handle}/pnl for up to 100 handles at once.


        - Each entry is the object the single endpoint returns, with the same
        windows,
          `status` and `unrealized`.
        - Entries come back in the order requested. Handles match
        case-insensitively,
          a leading @ is stripped, and a repeated handle counts once.
        - A handle we do not know goes into `missing` and the call still
        succeeds.

        - A handle the user renamed to is found through their theses of the last
        30 days;
          the entry carries the handle we hold for them.
        - A batch is charged as one call: it is served in full or refused as a
        whole
          with **402**, before any entry comes back.
        - Accounts are read live, several at a time, for up to 8 seconds. An
        account or
          window that does not finish in time comes back `pending` and is ready on the next
          call. Only `ready` entries are charged the hit price.

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


        **Price:** 30,000 CU per entry answered ready, 200 CU per entry not
        ready and per handle in `missing`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - handles
              properties:
                handles:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                  description: FOMO usernames (case-insensitive; leading @ is stripped).
                  example:
                    - tradername
                    - anothertrader
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                required:
                  - count
                  - missing
                  - entries
                properties:
                  count:
                    type: integer
                    description: 'Entries returned: the handles we hold.'
                  missing:
                    type: array
                    items:
                      type: string
                    description: >-
                      Requested handles we do not hold, lowercased and without a
                      leading @. Each is still charged.
                  entries:
                    type: array
                    items:
                      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.
                    description: >-
                      One entry per handle we hold, in the order requested, each
                      shaped as GET /v2/user/handle/{handle}/pnl answers.
      security:
        - b2bApiKey: []
components:
  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.