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

# Wallet PnL Breakdown

> Get a detailed profit and loss breakdown by token for a given wallet, over a specified timeframe (`days`). Optionally filter by `token_addresses` for specific tokens.

export const SupportedChains = ({chains}) => {
  const chainData = {
    ethereum: {
      name: "Ethereum",
      chainId: "0x1",
      alias: "eth"
    },
    polygon: {
      name: "Polygon",
      chainId: "0x89",
      alias: "polygon"
    },
    binance: {
      name: "BNB Chain",
      chainId: "0x38",
      alias: "bsc"
    },
    avalanche: {
      name: "Avalanche",
      chainId: "0xa86a",
      alias: "avalanche"
    },
    base: {
      name: "Base",
      chainId: "0x2105",
      alias: "base"
    },
    optimism: {
      name: "Optimism",
      chainId: "0xa",
      alias: "optimism"
    },
    arbitrum: {
      name: "Arbitrum",
      chainId: "0xa4b1",
      alias: "arbitrum"
    },
    cronos: {
      name: "Cronos",
      chainId: "0x19",
      alias: "cronos"
    },
    gnosis: {
      name: "Gnosis",
      chainId: "0x64",
      alias: "gnosis"
    },
    chiliz: {
      name: "Chiliz",
      chainId: "0x15b38",
      alias: "chiliz"
    },
    moonbeam: {
      name: "Moonbeam",
      chainId: "0x504",
      alias: "moonbeam"
    },
    moonriver: {
      name: "Moonriver",
      chainId: "0x505",
      alias: "moonriver"
    },
    flow: {
      name: "Flow",
      chainId: "0x2eb",
      alias: "flow"
    },
    ronin: {
      name: "Ronin",
      chainId: "0x7e4",
      alias: "ronin"
    },
    lisk: {
      name: "Lisk",
      chainId: "0x46f",
      alias: "lisk"
    },
    linea: {
      name: "Linea",
      chainId: "0xe708",
      alias: "linea"
    },
    pulse: {
      name: "PulseChain",
      chainId: "0x171",
      alias: "pulse"
    },
    sei: {
      name: "Sei",
      chainId: "0x531",
      alias: "sei"
    },
    monad: {
      name: "Monad",
      chainId: "0x8f",
      alias: "monad"
    },
    solana: {
      name: "Solana",
      chainId: "mainnet",
      alias: "solana"
    }
  };
  const resolved = chains.map(c => {
    const key = c.toLowerCase().trim();
    return chainData[key] || ({
      name: c,
      chainId: "—",
      alias: "—"
    });
  });
  return <Accordion title="Supported Chains (Beta)">
      <p style={{
    marginBottom: "12px",
    fontSize: "14px"
  }}>
        This endpoint currently supports <strong>{resolved.length}</strong>{" "}
        chain{resolved.length !== 1 && "s"}:
      </p>
      <table>
        <thead>
          <tr>
            <th>Chain</th>
            <th>Query Params</th>
          </tr>
        </thead>
        <tbody>
          {resolved.map(chain => <tr key={chain.chainId}>
              <td>{chain.name}</td>
              <td>
                <code>{chain.alias}</code> · <code>{chain.chainId}</code>
              </td>
            </tr>)}
        </tbody>
      </table>
    </Accordion>;
};

export const EndpointMeta = ({premium, cus, cusUnit, mainnetOnly}) => {
  const items = [];
  const planName = typeof premium === "string" ? premium : "Pro";
  if (premium) {
    items.push({
      icon: "\u26a0\ufe0f",
      label: "Premium endpoint",
      text: <>
          Requires the <strong>{planName} plan</strong> or above.{" "}
          <a href="/data-api/introduction/resources/premium-endpoints">
            View all
          </a>
          .
        </>
    });
  }
  if (cus) {
    const isDynamic = !!cusUnit;
    items.push({
      icon: "\u26a1",
      label: isDynamic ? "Dynamic cost" : "Endpoint cost",
      text: isDynamic ? <>
          {cus} CUs per {cusUnit}.{" "}
          <a href="/get-started/pricing#dynamic-endpoints">Learn more</a>.
        </> : <>
          {cus} CUs.{" "}
          <a href="/get-started/pricing">Learn more</a>.
        </>
    });
  }
  if (mainnetOnly) {
    items.push({
      icon: "\ud83d\udd17",
      label: "Mainnet only",
      text: <>Testnet chains are not supported.</>
    });
  }
  if (items.length === 0) return null;
  return <div className="endpoint-meta" style={{
    border: "1px solid var(--border-color, #e2e8f0)",
    borderRadius: "8px",
    overflow: "hidden",
    marginBottom: "16px",
    fontSize: "14px",
    lineHeight: "1.6",
    maxWidth: "100%"
  }}>
      <style dangerouslySetInnerHTML={{
    __html: `
            .endpoint-meta {
              --border-color: #e2e8f0;
              --row-bg: #f8fafc;
              --label-color: #0f172a;
              --text-color: #1f2937;
            }
            .endpoint-meta a {
              color: #0f7fff !important;
              text-decoration: underline;
            }
            @media (prefers-color-scheme: dark) {
              .endpoint-meta {
                --border-color: #374151 !important;
                --row-bg: #1e293b !important;
                --label-color: #f9fafb !important;
                --text-color: #e5e7eb !important;
              }
              .endpoint-meta a {
                color: #60a5fa !important;
              }
            }
            html.dark .endpoint-meta,
            [data-theme="dark"] .endpoint-meta {
              --border-color: #374151 !important;
              --row-bg: #1e293b !important;
              --label-color: #f9fafb !important;
              --text-color: #e5e7eb !important;
            }
            html.dark .endpoint-meta a,
            [data-theme="dark"] .endpoint-meta a {
              color: #60a5fa !important;
            }
          `
  }} />
      {items.map((item, i) => <div key={i} style={{
    display: "flex",
    alignItems: "baseline",
    gap: "8px",
    padding: "10px 14px",
    borderBottom: i < items.length - 1 ? "1px solid var(--border-color, #e2e8f0)" : "none",
    backgroundColor: "var(--row-bg, #f8fafc)"
  }}>
          <span style={{
    flexShrink: 0
  }}>{item.icon}</span>
          <span style={{
    wordBreak: "break-word",
    color: "var(--text-color, #1f2937)"
  }}>
            <strong style={{
    color: "var(--label-color, #0f172a)"
  }}>
              {item.label}:
            </strong>{" "}
            {item.text}
          </span>
        </div>)}
    </div>;
};

<EndpointMeta cus={50} mainnetOnly />

<SupportedChains chains={["ethereum", "base", "polygon"]} />


## OpenAPI

````yaml /openapi-files/data-api/api.json GET /wallets/{address}/profitability
openapi: 3.0.0
info:
  title: EVM API
  version: '2.2'
servers:
  - url: https://deep-index.moralis.io/api/v2.2
security:
  - ApiKeyAuth: []
tags: []
paths:
  /wallets/{address}/profitability:
    get:
      tags:
        - Wallets
      summary: Get detailed profit and loss by wallet address
      description: >-
        Get a detailed profit and loss breakdown by token for a given wallet,
        over a specified timeframe (`days`). Optionally filter by
        `token_addresses` for specific tokens.
      operationId: getWalletProfitability
      parameters:
        - in: path
          name: address
          required: true
          schema:
            type: string
            example: '0xcB1C1FdE09f811B294172696404e88E658659905'
          description: The wallet address for which profitability is to be retrieved.
        - in: query
          name: days
          required: false
          schema:
            type: string
          description: >-
            Timeframe in days for which profitability is calculated, Options
            include 'all', '7', '30', '60', '90' default is 'all'.
        - in: query
          name: chain
          description: The chain to query
          required: false
          schema:
            $ref: '#/components/schemas/chainList'
        - in: query
          name: token_addresses
          description: The token addresses list to filter the result with
          required: false
          schema:
            type: array
            maxItems: 25
            items:
              type: string
      responses:
        '200':
          description: Successful response with profitability data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletProfitabilityResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    chainList:
      type: string
      example: eth
      default: eth
      enum:
        - eth
        - '0x1'
        - sepolia
        - '0xaa36a7'
        - polygon
        - '0x89'
        - bsc
        - '0x38'
        - bsc testnet
        - '0x61'
        - avalanche
        - '0xa86a'
        - cronos
        - '0x19'
        - arbitrum
        - '0xa4b1'
        - chiliz
        - '0x15b38'
        - gnosis
        - '0x64'
        - base
        - '0x2105'
        - base sepolia
        - '0x14a34'
        - optimism
        - '0xa'
        - polygon amoy
        - '0x13882'
        - linea
        - '0xe708'
        - moonbeam
        - '0x504'
        - moonriver
        - '0x505'
        - flow
        - '0x2eb'
        - flow-testnet
        - '0x221'
        - ronin
        - '0x7e4'
        - ronin-testnet
        - '0x31769'
        - lisk
        - '0x46f'
        - pulse
        - '0x171'
        - sei-testnet
        - '0x530'
        - sei
        - '0x531'
        - monad
        - '0x8f'
    WalletProfitabilityResponse:
      type: object
      properties:
        result:
          type: array
          items:
            $ref: '#/components/schemas/WalletProfitabilityTokenData'
          description: List of tokens traded with their respective profitability data.
    WalletProfitabilityTokenData:
      type: object
      required:
        - token_address
        - avg_buy_price_usd
        - avg_sell_price_usd
        - total_usd_invested
        - total_tokens_sold
        - total_tokens_bought
        - total_sold_usd
        - avg_cost_of_quantity_sold
        - count_of_trades
        - realized_profit_usd
        - realized_profit_percentage
        - total_buys
        - total_sells
        - name
        - symbol
        - decimals
        - logo
        - possible_spam
      properties:
        token_address:
          type: string
          description: The address of the traded token.
        avg_buy_price_usd:
          type: string
          description: Average buy price in USD.
        avg_sell_price_usd:
          type: string
          description: Average sell price in USD.
        total_usd_invested:
          type: string
          description: Total USD invested.
        total_tokens_sold:
          type: string
          description: Total tokens sold.
        total_tokens_bought:
          type: string
          description: Total tokens bought.
        total_sold_usd:
          type: string
          description: Total USD received from selling tokens.
        avg_cost_of_quantity_sold:
          type: string
          description: Average cost of sold quantity.
        count_of_trades:
          type: number
          description: Count of trades for the token.
        realized_profit_usd:
          type: string
          description: Realized profit in USD for the token.
        realized_profit_percentage:
          type: number
          description: Realized profit percentage for the token.
        total_buys:
          type: number
          description: Total number of buys.
        total_sells:
          type: number
          description: Total number of sells.
        name:
          type: string
          description: Name of the token.
        symbol:
          type: string
          description: Symbol of the token.
        decimals:
          type: string
          description: Decimals of the token.
        logo:
          type: string
          description: Logo URL of the token.
        possible_spam:
          type: boolean
          description: Indicates whether the token is possibly spam.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      x-default: test

````