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

# Consultar PnL de wallets y tokens por lotes

> Obtén resúmenes de wallets y posiciones por lotes. Elige el endpoint, respeta sus límites y gestiona los resultados ausentes.

Agrupa direcciones y mints conocidos para reducir peticiones. Los lotes de posiciones devuelven filas por token; los de resúmenes, totales e identidad.

## Cuándo usar endpoints batch

Los endpoints batch están diseñados para escenarios en los que necesitas datos de posición de **varias entidades a la vez**:

<CardGroup cols={3}>
  <Card title="Tracker de portfolio">
    Recupera las posiciones de un wallet en más de 50 tokens en una sola llamada
  </Card>

  <Card title="Dashboard de token">
    Obtén cómo rindieron 200 wallets en un token concreto
  </Card>

  <Card title="Enriquecimiento de leaderboard">
    Consulta pares wallet+token específicos a partir de resultados de leaderboard
  </Card>
</CardGroup>

Hay dos tipos de endpoints batch:

* **Batch de posiciones** devuelve filas de posición a nivel de token y soporta `pnlMode`.
* **Batch de resumen de wallets** devuelve resúmenes a nivel de wallet y etiquetas, hasta 100 wallets. No acepta `pnlMode`.

## Un wallet, muchos tokens

Usa [wallet batch positions](/es/data-api/pnl-v2/wallet/get-wallet-batch-positions) cuando tienes un wallet y quieres comprobar varios tokens a la vez.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions/batch" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "tokens": [
        "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump",
        "84cAEWqiDsV5xXh6CB69Hi3HcnumBbdjH4THfyorpump",
        "CMx7yon2cLzHcXqgHsKJhuU3MmME6noWLQk2rAycBAGS"
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const wallet = "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o";
  const tokens = [
    "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump",
    "84cAEWqiDsV5xXh6CB69Hi3HcnumBbdjH4THfyorpump"
  ];

  const res = await fetch(
    `https://data.solanatracker.io/v2/pnl/wallets/${wallet}/positions/batch`,
    {
      method: "POST",
      headers: {
        "x-api-key": "YOUR_API_KEY",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ tokens })
    }
  );
  const { positions, notFound } = await res.json();

  positions.forEach(p => {
    console.log(`${p.meta.symbol}: $${p.pnl.total.toFixed(2)} PnL`);
  });
  if (notFound.length) {
    console.log(`Not traded: ${notFound.join(", ")}`);
  }
  ```

  ```python Python theme={null}
  import requests

  wallet = "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o"
  tokens = [
      "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump",
      "84cAEWqiDsV5xXh6CB69Hi3HcnumBbdjH4THfyorpump"
  ]

  res = requests.post(
      f"https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions/batch",
      json={"tokens": tokens},
      headers={"x-api-key": "YOUR_API_KEY"}
  )
  data = res.json()

  for p in data["positions"]:
      print(f"{p['meta']['symbol']}: ${p['pnl']['total']:.2f}")
  ```
</CodeGroup>

**Límite:** 100 tokens por solicitud. Los tokens que la wallet nunca ha operado aparecen en el array `notFound`. Los faltantes se listan allí; no son errores de solicitud.

## Muchos resúmenes de wallets

Usa `POST /v2/pnl/wallets/batch` cuando solo necesites resúmenes a nivel de wallet y etiquetas, no posiciones por token. La solicitud acepta hasta 100 direcciones únicas. Las direcciones inválidas se devuelven en `invalid`, las wallets sin resumen de PnL se devuelven en `notFound`, y las solicitudes con más de 100 wallets únicas válidas incluyen un objeto `truncated`.

```bash theme={null}
curl -X POST "https://data.solanatracker.io/v2/pnl/wallets/batch" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "wallets": [
      "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
      "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
    ]
  }'
```

Cada wallet devuelta refleja la forma del resumen de wallet: `wallet`, `identity`, `summary`, `tags` y `updatedAt`.

## Un token, muchas wallets

Usa [token batch positions](/es/data-api/pnl-v2/token/get-token-batch-positions) para comparar cómo rindieron varias wallets en el mismo token.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://data.solanatracker.io/v2/pnl/tokens/{token}/positions/batch" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "wallets": [
        "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
        "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const token = "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump";
  const wallets = [
    "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
    "vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg"
  ];

  const res = await fetch(
    `https://data.solanatracker.io/v2/pnl/tokens/${token}/positions/batch`,
    {
      method: "POST",
      headers: {
        "x-api-key": "YOUR_API_KEY",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ wallets })
    }
  );
  const { positions, notFound } = await res.json();

  positions.forEach(p => {
    console.log(`${p.wallet}: $${p.pnl.token.total.toFixed(2)} on this token, ${p.counts.total} trades`);
  });
  ```
</CodeGroup>

**Límite:** 200 wallets por solicitud.

## Pares wallet-token arbitrarios

Use [position batch lookup](/es/data-api/pnl-v2/batch/get-position-batch-lookup) for a list of wallet-token pairs.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://data.solanatracker.io/v2/pnl/positions/batch" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "pairs": [
        {
          "wallet": "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
          "token": "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump"
        },
        {
          "wallet": "CyaE1VxvBrahnPWkqm5VsdCvyS2QmNht2UFrKJHga54o",
          "token": "84cAEWqiDsV5xXh6CB69Hi3HcnumBbdjH4THfyorpump"
        }
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const pairs = [
    { wallet: "CyaE1...", token: "38Pgz..." },
    { wallet: "CyaE1...", token: "84cAE..." },
    { wallet: "vines...", token: "38Pgz..." }
  ];

  const res = await fetch("https://data.solanatracker.io/v2/pnl/positions/batch", {
    method: "POST",
    headers: {
      "x-api-key": "YOUR_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ pairs })
  });
  const { positions, notFound } = await res.json();

  console.log(`Found ${positions.length} positions, ${notFound.length} not found`);
  ```
</CodeGroup>

**Límite:** 200 pares por solicitud.

## Qué endpoint usar

| Lo que quieres... | Endpoint | Límite |
| - | - | - |
| PnL de un wallet en 50 tokens | [Wallet batch](/es/data-api/pnl-v2/wallet/get-wallet-batch-positions) | 100 tokens |
| PnL de 100 wallets en un token | [Token batch](/es/data-api/pnl-v2/token/get-token-batch-positions) | 200 wallets |
| Combos wallet+token específicos | [Pair batch](/es/data-api/pnl-v2/batch/get-position-batch-lookup) | 200 pares |
| Resúmenes de wallet y etiquetas | `POST /v2/pnl/wallets/batch` | 100 wallets |

<Warning>
  Los inputs no encontrados vuelven en un array `notFound` en lugar de causar errores. Compruébalo siempre.
</Warning>

## Modo PnL

Los tres endpoints batch de **posiciones** aceptan `?pnlMode=strict|adjusted|raw` como parámetro de consulta. Por defecto es `strict`. El endpoint batch de resumen de wallets no acepta `pnlMode`. Consulta los [Esenciales](/es/guides/pnl-v2/overview#essentials) para ver qué hace cada modo.

```bash theme={null}
curl -X POST "https://data.solanatracker.io/v2/pnl/positions/batch?pnlMode=adjusted" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "pairs": [ ... ] }'
```

<CardGroup cols={2}>
  <Card title="Rankings de traders" href="/es/guides/pnl-v2/leaderboards">
    Construye una preselección de wallets para enriquecer por lotes.
  </Card>

  <Card title="PnL de la wallet" href="/es/guides/pnl-v2/wallet-analysis">
    Profundiza en una wallet a partir de tus resultados batch.
  </Card>
</CardGroup>


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