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

# Seguir depósitos y retiros de liquidez en Solana

> Consulta historial de liquidez y recibe eventos LP por token, pool o wallet, junto con swaps e identidad.

Carga actividad LP con el historial de trades y suscríbete a una sala de liquidez. Conserva los importes como cadenas y contrasta los eventos con el historial confirmado.

## Consultar el historial de liquidez

Los cuatro endpoints de operaciones por token aceptan `events` y `enrich`:

```http theme={null}
GET /trades/{token}?events=all
GET /trades/{token}/{pool}?events=liquidity
GET /trades/{token}/by-wallet/{wallet}?events=all&enrich=identity
GET /trades/{token}/{pool}/{wallet}?events=liquidity&sortDirection=ASC
```

* **`events=trades`** es el valor predeterminado: solo compras y ventas.
* **`events=all`** devuelve swaps, depósitos y retiros de liquidez en orden cronológico.
* **`events=liquidity`** devuelve solo `add_liquidity` y `remove_liquidity`.
* **`enrich=identity`** añade la identidad actual de cada wallet, con los perfiles KOL, etiquetas, plataformas, roles de desarrollador/pool y nombres SNS disponibles. Las wallets desconocidas devuelven `identity: null`.

Todos los modos devuelven los resultados en el **array `trades`**. Estas opciones se aplican a los cuatro endpoints anteriores; los endpoints globales de wallet, ballenas/KOL y perpetuos conservan su comportamiento.

```bash theme={null}
curl --get "https://data.solanatracker.io/trades/6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN" \
  --header "x-api-key: YOUR_API_KEY" \
  --data-urlencode "events=liquidity" \
  --data-urlencode "enrich=identity" \
  --data-urlencode "limit=50"
```

### Usar el SDK de TypeScript

Instala `@solana-tracker/data-api` **0.5.0 o posterior**. Los métodos de historial admiten `events`, `enrich`, `limit` y `sortDirection`; devuelve `nextCursor` sin modificar para cargar la siguiente página.

```typescript theme={null}
import { Client } from '@solana-tracker/data-api';

const client = new Client({ apiKey: 'YOUR_API_KEY' });
const token = '6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN';
const filters = {
  events: 'all',
  enrich: 'identity',
  limit: 100,
  sortDirection: 'DESC',
} as const;

const page = await client.getTokenTradeHistory(token, filters);
for (const event of page.trades) {
  if (event.type === 'add_liquidity' || event.type === 'remove_liquidity') {
    console.log(event.type, event.pool, event.tokens, event.identity);
  } else if (event.type === 'buy' || event.type === 'sell') {
    console.log(event.type, event.amount, event.volume);
  }
}

if (page.hasNextPage && page.nextCursor != null) {
  const nextPage = await client.getTokenTradeHistory(token, {
    ...filters,
    cursor: page.nextCursor,
  });
  console.log(nextPage.trades);
}
```

### Paginación y filtros

Usa `limit` entre `1` y `500` (por defecto `250`), y `sortDirection=DESC` para empezar por los eventos más recientes o `ASC` por los más antiguos.

Con `events=all` y `events=liquidity`, `nextCursor` es una cadena opaca. Envíala sin modificar como `cursor` en la siguiente solicitud y conserva el token, pool, wallet, `events` y dirección de ordenación. Continúa mientras `hasNextPage` sea verdadero; al terminar, `nextCursor` será `null`.

No sustituyas el cursor por la hora del último evento: puede haber varias acciones en el mismo milisegundo. Las solicitudes predeterminadas de swaps mantienen el cursor de tiempo; los modos nuevos también aceptan una marca de tiempo numérica como límite inicial exclusivo.

`showMeta=true` añade metadatos de tokens solo a los swaps. Los eventos de liquidez no incluyen precios de ejecución, volumen en USD ni PnL. `hideArb` no elimina las acciones de liquidez.

## Recibir liquidez en vivo

Conecta a `wss://datastream.solanatracker.io/{apiKey}` con tu clave de Data API. Datastream está disponible en los planes Premium, Business y Enterprise.

<h3 id="choose-a-room">Elige una sala</h3>

* **`liquidity:{mint}`** — todas las acciones que incluyan un token.
* **`liquidity:{mint}:{pool}`** — actividad de un token en un pool.
* **`liquidity:{mint}:{pool}:{wallet}`** — actividad de una wallet para ese token y pool.
* **`liquidity:pool:{pool}`** — todas las acciones de liquidez de un pool.
* **`liquidity:wallet:{wallet}`** — actividad de un proveedor entre pools y tokens.

```javascript theme={null}
const room = "liquidity:6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN";
const ws = new WebSocket("wss://datastream.solanatracker.io/YOUR_API_KEY");
ws.onopen = () => ws.send(JSON.stringify({ type: "join", room }));
ws.onmessage = ({ data }) => {
  const message = JSON.parse(data);
  if (message.type === "ping") {
    ws.send(JSON.stringify({ type: "pong" }));
    return;
  }
  if (message.type === "error") {
    console.error(message);
    return;
  }
  if (message.type !== "message" || message.room !== room) return;
  for (const event of message.data) {
    console.log(event.type, event.pool, event.tokens);
  }
};
// ws.send(JSON.stringify({ type: "leave", room }));
```

### Suscribirse con el SDK

El SDK gestiona los latidos y las reconexiones. Usa `{ enriched: true }` para incluir etiquetas de wallets, u omítelo para la sala base. Cada callback de liquidez recibe un evento.

```typescript theme={null}
import { Datastream } from '@solana-tracker/data-api';

const stream = new Datastream({
  wsUrl: 'wss://datastream.solanatracker.io/YOUR_API_KEY',
});
stream.on('error', console.error);
await stream.connect();

const sub = stream.subscribe.liquidity
  .token('6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN', { enriched: true })
  .on((event) => {
    console.log(event.type, event.pool, event.tokens, event.identity);
  });

// sub.unsubscribe();
// stream.disconnect();
```

Consulta el [protocolo de Datastream](/es/guides/datastream-protocol) para la autenticación, los latidos y la reconexión. Las salas `transaction:*` siguen recibiendo swaps; suscríbete por separado a las salas de liquidez.

### Identidad de las wallets en vivo

Añade **`:enriched`** a cualquier sala de liquidez, por ejemplo `liquidity:{mint}:enriched`. El sufijo también funciona en las salas de transacciones, wallets y ballenas/KOL.

Cada registro recibe `identity`. Una búsqueda completada sin identidad conocida devuelve `null`. Si la búsqueda está incompleta, también aparece **`identityStatus: "partial"`**. No se envía una corrección posterior para esa notificación.

Las notificaciones enriquecidas pueden llegar más tarde o en otro orden. Las etiquetas son actuales y pueden estar en caché; no representan la identidad histórica. Las salas por token usan el token solicitado como contexto; las de pool y wallet usan el primer token que no sea de cotización, o el primero si ambos lo son.

## Leer un evento de liquidez

Este es un ejemplo ilustrativo. WebSocket envuelve los eventos en `{ "type": "message", "room": "...", "data": [...] }`; REST los devuelve en `trades`.

```json theme={null}
{
  "tx": "TRANSACTION_SIGNATURE",
  "type": "add_liquidity",
  "program": "pumpfun-amm",
  "programId": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
  "instruction": "deposit",
  "pool": "POOL_ADDRESS",
  "wallet": "LIQUIDITY_PROVIDER_ADDRESS",
  "time": 1789722000000,
  "slot": 370000000,
  "amountBasis": "transfer",
  "tokens": [
    { "address": "TOKEN_MINT", "amount": "123.000001", "amountRaw": "123000001", "decimals": 6 },
    { "address": "So11111111111111111111111111111111111111112", "amount": "9.000000001", "amountRaw": "9000000001", "decimals": 9 }
  ]
}
```

* **`type`** es `add_liquidity` o `remove_liquidity`. Un rebalanceo puede emitir un retiro y un depósito por separado.
* **`pool`** es una dirección de pool; **`wallet`** es el propietario o autoridad de la instrucción y puede ser un delegado o una dirección derivada de programa.
* **`tokens[]`** contiene los mints participantes. Una operación unilateral puede tener una sola entrada; se omiten las cantidades cero.
* **`amount`** es una cadena decimal exacta y **`amountRaw`** una cadena entera. Conserva las cadenas o usa aritmética decimal y `BigInt` para evitar pérdida de precisión.
* **`time`** está en milisegundos Unix; **`slot`** identifica el slot de Solana.
* **`amountBasis: "transfer"`** indica transferencias brutas a través de la bóveda, antes de la retención Token-2022. No garantiza la cantidad neta recibida.
* **`amountBasis: "principal"`** separa el principal de las comisiones o reasignaciones internas. Los retiros de Raydium CLMM también pueden incluir `feeAmountRaw` y `transferredAmountRaw` por token.

Varias acciones pueden compartir firma, pool y wallet. No reduzcas el registro a un evento por firma. Los IDs internos no se exponen; usa el cursor devuelto para paginar REST.

## Eventos en vivo e historial confirmado

Los eventos en vivo son **provisionales, con compromiso processed**. REST contiene actividad confirmada/finalizada con la hora canónica del bloque, por lo que la marca de tiempo puede diferir. Un evento provisional puede desaparecer en una bifurcación; no hay notificación de reversión.

Las suscripciones superpuestas entregan la actividad en cada sala correspondiente. Una acción con dos tokens puede aparecer en las salas e historiales de ambos. Elige el alcance más específico que necesites y reconcilia el historial con REST tras reconectar.

## Actividad compatible

Las familias de instrucciones compatibles incluyen Raydium AMM v4, CPMM y CLMM; Orca Whirlpool; Pump AMM; Meteora DAMM v1/v2 y DLMM; Liquid Swap y Futarchy. La cobertura depende de la instrucción y los datos disponibles, no de toda operación de financiación de todos los DEX.

Se excluyen los cobros independientes de comisiones/recompensas, la emisión/quema de tokens LP, la renta y las transferencias ajenas. Los swaps de curvas de vinculación siguen siendo operaciones de intercambio. La liquidez no contribuye al volumen de swaps, las velas de precios ni el PnL de swaps.

[Referencia de operaciones por token](/es/data-api/trades/get-token-trades) · [Guía de operaciones en vivo](/es/guides/live-transactions)


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