> ## 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 traders y primeros compradores de un token

> Compara traders de un token Solana por PnL, posiciones, primeras compras e identidad de wallet.

Usa traders para ordenar o filtrar wallets que operaron un mint. Usa primeros compradores cuando necesites el orden cronológico de entrada.

## Traders del token

El endpoint de [traders del token](/es/data-api/pnl-v2/token/get-token-traders) devuelve cada wallet que operó un token determinado, con su posición actual y PnL.

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://data.solanatracker.io/v2/pnl/tokens/{token}/traders?sort=pnl&direction=desc&limit=20" \
    -H "x-api-key: YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const token = "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump";

  const res = await fetch(
    `https://data.solanatracker.io/v2/pnl/tokens/${token}/traders?sort=pnl&direction=desc&limit=20`,
    { headers: { "x-api-key": "YOUR_API_KEY" } }
  );
  const { traders } = await res.json();

  traders.forEach(t => {
    // pnl.token = this token's PnL, pnl.wallet = the wallet's lifetime PnL across all tokens
    console.log(`${t.wallet}: $${t.pnl.token.total.toFixed(2)} on this token, lifetime $${t.pnl.wallet?.total?.toFixed(2) ?? "n/a"}`);
  });
  ```

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

  token = "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump"
  res = requests.get(
      f"https://data.solanatracker.io/v2/pnl/tokens/{token}/traders",
      params={"sort": "pnl", "direction": "desc", "limit": 20},
      headers={"x-api-key": "YOUR_API_KEY"}
  )

  for t in res.json()["traders"]:
      print(f"{t['wallet']}: ${t['pnl']['token']['total']:.2f} on this token, {t['counts']['total']} trades")
  ```
</CodeGroup>

### Opciones de ordenación

| Campo de orden | Descripción |
| - | - |
| `pnl` | PnL total |
| `realized` | Solo PnL realizado |
| `unrealized` | Solo PnL no realizado |
| `invested` | Total invertido en USD |
| `roi` | Porcentaje de ROI |
| `holding` | Saldo actual del token |
| `value` | Valor en USD de la posición restante |
| `first_trade` | Hora de la primera operación |
| `last_trade` | Hora de la operación más reciente |

### Opciones de filtrado

| Parámetro | Descripción |
| - | - |
| `activeOnly` | Solo wallets que mantienen el token actualmente |
| `minTrades` | Número mínimo de operaciones |
| `excludeArbitrage` | Excluye wallets marcadas como bots de arbitraje. **Por defecto: `true`** — el PnL de arbitraje es ruidoso y el objetivo es seguir a traders reales. Pasa `false` para incluirlas. |
| `excludeZeroBuys` | Excluye wallets que recibieron tokens sin comprar (airdrops, transferencias). **Por defecto: `true`.** |
| `platform` | Filtra por plataforma de trading (`axiom`, `bloom`, `photon`). Separados por coma para varios. `axiom-flash` se acepta como alias de `axiom`. |

<Note>
  Este endpoint no acepta `pnlMode`. El PnL a nivel de wallet que devuelve (`pnl.wallet`) refleja la vista del resumen de wallet de la API.
</Note>

### Forma de la respuesta: pnl.token vs pnl.wallet

Cada trader lleva **dos** objetos de PnL:

* `pnl.token` — realizado / no realizado / total solo para este token exacto.
* `pnl.wallet` — realizado / no realizado / total de toda la vida en todos los tokens que la wallet ha operado.

Esto permite detectar, en una sola consulta, traders rentables en este token pero en pérdidas globalmente (y viceversa) sin una segunda solicitud.

| Pregunta | Campo a usar |
| - | - |
| ¿Esta wallet ganó en este token? | `pnl.token` |
| ¿Es esta wallet rentable globalmente? | `pnl.wallet` |
| ¿La wallet sigue manteniendo el token? | `position.balance` |
| ¿Cuándo compró por primera vez? | `timing.firstTrade` |

### Identidad inline

Cada trader en la respuesta incluye un objeto `identity` estructurado. En endpoints de token, esto se resuelve contra el token en la URL, así que las etiquetas `pool` y `developer` reflejan automáticamente el token correcto:

```json theme={null}
"identity": {
  "tags": ["kol", "developer"],
  "kol": { "name": "Ansem", "twitter": "blknoiz06" },
  "developer": { "via": "creator", "creationTx": "5x7Y...", "createdAt": 1713600000000 }
}
```

Úsalo para filtrar snipers, detectar al dev del token comprando su propio lanzamiento o destacar actividad de KOLs sin una segunda solicitud.

<CardGroup cols={2}>
  <Card title="Filtra por calidad">
    Combina `minTrades`, `activeOnly` y `excludeArbitrage` para quitar bots y ruido.
  </Card>

  <Card title="PnL de la wallet" href="/es/guides/pnl-v2/wallet-analysis">
    ¿Has encontrado un trader interesante? Pásalo por la guía de análisis de wallet.
  </Card>
</CardGroup>

## Primeros compradores

El endpoint de [primeros compradores](/es/data-api/pnl-v2/token/get-token-first-buyers) devuelve los mismos datos que traders del token pero **solo en orden cronológico**: la primera operación primero, `sort=first_trade`, `direction=asc`. Úsalo para detección de snipers y análisis de primeros compradores.

<Warning>
  `first-buyers` rechaza ordenación tipo leaderboard. Para ROI, PnL, tamaño de posición, última operación u orden descendente, usa [`/v2/pnl/tokens/:token/traders`](/es/data-api/pnl-v2/token/get-token-traders).
</Warning>

```bash theme={null}
curl "https://data.solanatracker.io/v2/pnl/tokens/{token}/first-buyers?limit=50" \
  -H "x-api-key: YOUR_API_KEY"
```

<Tip>
  Cruza los primeros compradores con el [resumen de wallet](/es/data-api/pnl-v2/wallet/get-wallet-summary) para comprobar si son wallets reales, KOLs o direcciones desechables.
</Tip>

### Ejemplo: snipers que ya vendieron

```javascript theme={null}
const token = "38PgzpJYu2HkiYvV8qePFakB8tuobPdGm2FFEn7Dpump";

const res = await fetch(
  `https://data.solanatracker.io/v2/pnl/tokens/${token}/first-buyers?limit=50`,
  { headers: { "x-api-key": "YOUR_API_KEY" } }
);
const { traders } = await res.json();

// Early buyers who are fully out of the position
const snipersSold = traders.filter(t => 
  t.position.balance === 0 && t.pnl.token.realized > 0
);

console.log(`${snipersSold.length} early buyers already sold at a profit`);
snipersSold.forEach(t => {
  const holdMins = (t.timing.lastTrade - t.timing.firstTrade) / 60000;
  console.log(`  ${t.wallet}: +$${t.pnl.token.realized.toFixed(2)}, held ${holdMins.toFixed(0)} minutes`);
});
```

<Tip>
  **Flujo típico:** traders del token → preselecciona wallets interesantes → primeros compradores para comportamiento al lanzamiento → análisis de wallet para la imagen completa.
</Tip>

<CardGroup cols={2}>
  <Card title="PnL de la wallet" href="/es/guides/pnl-v2/wallet-analysis">
    Profundiza en el PnL completo, posiciones y perfil de riesgo de un wallet.
  </Card>

  <Card title="Compradores y bundlers" href="/es/guides/sniper-detection">
    Más herramientas para encontrar primeros compradores, bundlers y actividad sospechosa.
  </Card>
</CardGroup>


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