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

# Escanear el historial de transacciones

> Busca en el servidor el historial de una dirección para encontrar transacciones que llamen instrucciones de programas o involucren acuñaciones de tokens, y devuelve las coincidencias analizadas, sus firmas o un conteo.

El cuerpo de la solicitud, el esquema de la respuesta y los ejemplos de esta página se generan a partir de la definición de OpenAPI.

Scan recorre el historial de una dirección, conserva las transacciones que coinciden con tus criterios de `match` y analiza solo esas. Úsalo en lugar de paginar [Historial de transacciones analizadas](https://www.helius.dev/docs/es/api-reference/parsed-events/transaction-history.md) y filtrar del lado del cliente.

De forma predeterminada, cada elemento de `data` usa la misma estructura de `TransactionResult` que devuelve [Analizar transacciones](https://www.helius.dev/docs/es/api-reference/parsed-events/transactions.md). Configura `returnShape` para obtener solo las firmas coincidentes o solo un conteo. La respuesta también incluye un resumen de `scan` que indica hasta dónde llegó el escaneo y por qué se detuvo.

## Cómo funciona Scan

1. Scan obtiene el historial de la dirección en páginas de hasta 1,000 transacciones, en `sortOrder`, dentro de los límites de `slot`, `time` y firma que establezcas.
2. Conserva las transacciones que coinciden con todos los criterios establecidos en `match`.
3. Se detiene cuando ocurre primero uno de estos casos: se encuentran `limit` coincidencias (solo con la estructura predeterminada `transactions`), se escanean `budget.maxScannedTransactions`, se llega al final del historial o del intervalo, o se alcanza el límite de tiempo de la solicitud.

Un escaneo que se detiene antes de tiempo sigue siendo un `200`. Vuelve a llamar con el `paginationToken` devuelto mientras haya uno, incluso cuando `data` esté vacío.

## Criterios de coincidencia

`match` es obligatorio. Configura `programs`, `mints` o ambos. Si configuras ambos, una transacción debe coincidir con los dos.

### Coincidencia por programa

`programs` enumera hasta 20 programas, cada uno como máximo una vez. Una transacción coincide cuando contiene una instrucción de cualquiera de ellos, de nivel superior o interna (CPI), dentro del `scope` del programa.

Para cada programa, puedes restringir la coincidencia:

* `instructions`: nombres de instrucciones de cualquier versión de la IDL del programa, tal como aparecen en la IDL o en snake\_case. Si un nombre no se encuentra en las IDL del programa, se devuelve `400`.
* `discriminators`: prefijos de datos de instrucciones, cada uno de 1 a 8 bytes codificados en hexadecimal con un prefijo `0x` opcional. Úsalos para programas sin una IDL.
* Configura una lista o ambas. Con ambas, una instrucción coincide cuando es una de las instrucciones nombradas o sus datos comienzan con uno de los discriminadores. Omite ambas para que coincida cualquier instrucción del programa.
* Cada lista acepta como máximo 50 entradas por programa.

Para confirmar los nombres de instrucciones decodificadas de un programa, usa el método [`describeProgram`](https://www.helius.dev/docs/es/parsed-streams/quickstart#descubrimiento) de Parsed Streams.

### Coincidencia por acuñación

`mints` enumera hasta 20 objetos con la forma `{ "mint": "...", "scope": "address" }`, cada acuñación como máximo una vez. Una transacción coincide cuando uno de sus saldos de tokens anteriores o posteriores corresponde a una de las acuñaciones, dentro del `scope` de esa acuñación.

Cuando escanees una billetera para una acuñación, configura `tokenAccounts` como `balanceChanged`. De forma predeterminada, el historial omite las transacciones que solo involucran las cuentas de tokens de la billetera y no la billetera en sí, lo que incluye muchas transferencias de tokens entrantes.

### Coincidencia con SOL nativo

SOL nativo no tiene saldos de tokens, por lo que Scan busca coincidencias según los lamports. Usa la acuñación de SOL nativo `So11111111111111111111111111111111111111111` (SOL envuelto es `So11111111111111111111111111111111111111112`):

* Con el alcance `address`, una transacción coincide cuando cambiaron los lamports de la dirección escaneada.
* Con el alcance `transaction`, coincide cuando cambiaron los lamports de cualquier cuenta.

La comisión cobrada al pagador de la comisión no cuenta. Cada cuenta se compara de manera individual, por lo que los lamports que salen de una cuenta y regresan en la misma transacción no cuentan. La coincidencia con SOL nativo detecta el SOL que un programa paga sin una instrucción de transferencia, como una venta en Pump.fun. También detecta movimientos secundarios, como propinas de Jito y alquileres pagados o reembolsados desde cuentas.

### Alcance de la coincidencia

Cada programa y cada acuñación admite un `scope`:

| `scope` | La instrucción de un programa cuenta cuando | El saldo de tokens de una acuñación cuenta cuando |
| - | - | - |
| `address` (predeterminado) | Una de sus cuentas es `address`, una cuenta de tokens que posee `address`, una cuenta de tokens cuya acuñación es `address`, o `address` es el programa en sí. | Su cuenta de tokens es `address` o pertenece a `address`, o su acuñación es `address`. |
| `transaction` | Aparece en cualquier parte de la transacción. | Aparece en cualquier parte de la transacción. |

Usa el alcance `transaction` cuando la dirección escaneada esté en la transacción, pero no en la instrucción o el saldo con el que buscas coincidencias. Por ejemplo, cuando la dirección solo paga la comisión, ejecuta una transacción multifirma o no aparece en una CPI de evento de Anchor. Para escanear la acuñación de un token en busca de transacciones que también contengan USDC, la entrada de USDC necesita el alcance `transaction`.

La propiedad de la cuenta de tokens proviene del `owner` registrado en cada saldo de tokens. Las transacciones antiguas que no lo registran solo coinciden con el alcance `address` en el propio `address`.

## Estructuras de retorno

`returnShape` establece qué contiene la respuesta para las coincidencias:

| `returnShape` | `data` | Úsalo para |
| - | - | - |
| `transactions` (predeterminado) | Coincidencias analizadas, hasta `limit`. | Leer las instrucciones decodificadas, las transferencias y los resúmenes. |
| `signatures` | Un objeto `{ signature, slot, transactionIndex, blockTime }` por coincidencia. | Recopilar firmas coincidentes sin analizarlas. |
| `count` | Omitido. `scan.matchedTransactions` es el número de coincidencias. | Contar coincidencias en un intervalo. |

`signatures` e `count` ignoran `limit` e `rawTransaction`. Devuelven todas las coincidencias del intervalo que escanea una solicitud, por lo que solo se detienen por `windowEnd`, `budget` o `deadline`. Para contar un historial completo, sigue llamando con `paginationToken` y suma `scan.matchedTransactions`.

Cada elemento de `data` con `returnShape: "signatures"` tiene este aspecto:

```json theme={"system"}
{
  "signature": "5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy",
  "slot": 460869102,
  "transactionIndex": 203,
  "blockTime": 1792848886
}
```

Las tres estructuras tienen el mismo costo, ya que los créditos dependen de las páginas del historial escaneadas, no de lo que se devuelve.

## Solicitudes de ejemplo

### Compras y ventas de Pump.fun

Escanea el historial del programa Pump.fun en busca de instrucciones `buy` e `sell`:

```json theme={"system"}
{
  "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "limit": 100
}
```

Pump.fun también tiene variantes como `buy_exact_sol_in`, `buy_v2` e `sell_v2`. Enumera todos los nombres de instrucciones con los que quieras buscar coincidencias.

### Compras y ventas de un token

Para obtener las operaciones de Pump.fun de un token, escanea la dirección de acuñación del token en lugar del programa. El historial de la acuñación solo contiene la actividad de ese token, y cada instrucción de compra o venta enumera la acuñación como una cuenta, por lo que coincide con el alcance predeterminado `address`:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  }
}
```

Para conservar solo las transacciones del token que también involucren una cuenta de tokens USDC, agrega USDC con el alcance `transaction`. Con el alcance predeterminado `address`, un saldo de USDC tendría que pertenecer a la dirección de acuñación, por lo que no habría coincidencias:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "mints": [
      { "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "scope": "transaction" }
    ]
  }
}
```

### Operaciones de una billetera en dos programas

Enumera varios programas para que coincida una llamada a cualquiera de ellos. Esta solicitud devuelve solo como firmas las operaciones de Pump.fun y PumpSwap de una billetera:

```json theme={"system"}
{
  "address": "<WALLET_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      },
      {
        "programId": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "returnShape": "signatures"
}
```

### Actividad de USDC de una billetera en un intervalo de tiempo

Escanea el historial de una billetera en busca de transacciones que involucraron USDC durante 2025. `tokenAccounts: "balanceChanged"` incluye transferencias que solo involucraron la cuenta de tokens USDC de la billetera:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }]
  },
  "tokenAccounts": "balanceChanged",
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

Para obtener solo el número de transacciones coincidentes, agrega `"returnShape": "count"`.

### Movimientos de SOL de una billetera

Escanea una billetera en busca de transacciones que cambiaron su saldo de SOL, sin contar la comisión que pagó, durante 2025. Esto incluye el SOL que un programa pagó sin una instrucción de transferencia:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "So11111111111111111111111111111111111111111" }]
  },
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

## Paginación y motivos de detención

`scan.stoppedOn` indica por qué finalizó la solicitud:

| `stoppedOn` | Significado | `paginationToken` |
| - | - | - |
| `windowEnd` | Se llegó al final del historial o del intervalo solicitado. | Ausente. El escaneo está completo. |
| `limit` | Se devolvieron `limit` coincidencias. Solo con la estructura predeterminada `transactions`. | Se reanuda justo después de la última coincidencia devuelta, por lo que no se omite ninguna. |
| `budget` | Se escanearon `budget.maxScannedTransactions` transacciones. | Se reanuda en la siguiente página del historial. |
| `deadline` | Se alcanzó el límite de tiempo de la solicitud. | Se reanuda en la siguiente página del historial. Una página interrumpida por el límite de tiempo se vuelve a obtener en la siguiente llamada. |

`scan.scannedThrough` proporciona el slot y la hora del bloque de la última transacción escaneada, para que puedas informar el progreso en historiales extensos.

Un escaneo de una instrucción poco frecuente puede agotar su presupuesto sin encontrar una coincidencia. En ese caso, la respuesta tiene un arreglo `data` vacío y aun así devuelve un `paginationToken`, por lo que debes seguir escaneando:

```json theme={"system"}
{
  "data": [],
  "paginationToken": "460903064:422",
  "scan": {
    "stoppedOn": "budget",
    "scannedTransactions": 2000,
    "matchedTransactions": 0,
    "scannedThrough": { "slot": 460903064, "blockTime": 1792856105 },
    "creditsCharged": 12
  }
}
```

Este bucle continúa el escaneo hasta agotar el historial:

```javascript scan-pumpfun-trades.js theme={"system"}
const API_KEY = process.env.HELIUS_API_KEY;

if (!API_KEY) {
  console.error("Missing HELIUS_API_KEY.");
  process.exit(1);
}

const URL = `https://mainnet.helius-rpc.com/v1/parsed-events/scan?api-key=${API_KEY}`;
const PUMP_PROGRAM = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";

async function scan(paginationToken) {
  const response = await fetch(URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      address: PUMP_PROGRAM,
      match: {
        programs: [{ programId: PUMP_PROGRAM, instructions: ["buy", "sell"] }],
      },
      limit: 100,
      ...(paginationToken && { paginationToken }),
    }),
  });

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }

  return response.json();
}

let paginationToken;

do {
  const page = await scan(paginationToken);

  for (const result of page.data) {
    console.log(result.signature, result.parsed?.slot);
  }

  console.log(
    `stopped on ${page.scan.stoppedOn}: scanned ${page.scan.scannedTransactions}, ` +
      `matched ${page.scan.matchedTransactions}, charged ${page.scan.creditsCharged} credits`
  );

  // Keep going while a token is returned, even when this page had no matches.
  paginationToken = page.paginationToken;
} while (paginationToken);
```

> [!TIP]
>
> Escanea la dirección más específica posible. Cada transacción del historial de la dirección cuenta para el presupuesto, por lo que, mientras menos transacciones no relacionadas tenga una dirección, más coincidencias encontrará cada solicitud.

## Créditos

Cada escaneo cuesta **10 créditos más 1 crédito por cada página del historial escaneada**. Una página contiene hasta 1,000 transacciones, por lo que un escaneo con el presupuesto predeterminado de 10,000 transacciones cuesta como máximo 20 créditos. Una página interrumpida por el límite de tiempo no se escanea ni se cobra.

Cada respuesta informa su costo en `scan.creditsCharged`. Consulta [Créditos](https://www.helius.dev/docs/es/billing/credits.md) para conocer los precios de los planes.

## Errores

| Estado | Cuándo ocurre |
| - | - |
| `400` | El cuerpo no es válido o tiene campos desconocidos; `match` no configura ni `programs` ni `mints`; un programa o una acuñación aparece más de una vez; una dirección o acuñación no es válida; un nombre de instrucción no está en las IDL del programa; una lista supera su límite; `scope`, `returnShape`, `rawTransaction` o `tokenAccounts` tiene un valor desconocido; `limit` está fuera del intervalo de 1 a 100 con la estructura `transactions`; o `budget.maxScannedTransactions` está fuera del intervalo de 1 a 10,000. |
| `500` | La solicitud falló en el servidor, por ejemplo, porque no se pudo decodificar una transacción almacenada en el intervalo escaneado. No se devuelven resultados parciales. |
| `503` | El servicio alcanzó su capacidad o la primera página del historial no se completó antes del límite de tiempo de la solicitud. Vuelve a intentar la solicitud. |

Los errores de nivel de solicitud devuelven un cuerpo JSON con un mensaje `error`, como `{"error": "limit must be between 1 and 100"}`. Un cuerpo con un campo desconocido, como `includeRawTransaction` (usa `rawTransaction`), o con `mints` como cadenas simples en lugar de objetos `{ "mint": "..." }`, devuelve `{"error": "invalid request payload"}`.

## Parámetros de la solicitud

**address** `string` *required*

Dirección cuyo historial se escanea.

**match** `object` *required*

Condiciones que debe cumplir una transacción. Configura `programs`, `mints` o ambos. Si configuras ambos, una transacción debe coincidir con los dos.

**match.programs** `array`

Programas con los que buscar coincidencias, como máximo 20 y cada uno como máximo una vez. Una transacción coincide cuando contiene una instrucción de cualquiera de ellos, de nivel superior o interna (CPI), dentro del `scope` del programa.

**match.programs\[].programId** `string` *required*

Dirección del programa.

**match.programs\[].instructions** `array`

Nombres de instrucciones de cualquier versión de la IDL del programa, tal como aparecen en la IDL o en snake\_case. Como máximo 50. Se puede combinar con `discriminators`.

**match.programs\[].discriminators** `array`

Prefijos de datos de instrucciones, cada uno de 1 a 8 bytes codificados en hexadecimal con un prefijo `0x` opcional. Como máximo 50. Se puede combinar con `instructions`.

**match.programs\[].scope** `string` (default: address)

Qué instrucciones del programa cuentan. `address` solo cuenta las instrucciones con una cuenta que sea `address`, una cuenta de tokens que posea `address` o una cuenta de tokens cuya acuñación sea `address`, o todas las instrucciones cuando `address` sea el programa. `transaction` cuenta cualquier instrucción del programa en la transacción.

* `address`
* `transaction`

**match.mints** `array`

Acuñaciones con las que buscar coincidencias, como máximo 20 y cada una como máximo una vez. Una transacción coincide cuando uno de sus saldos de tokens anteriores o posteriores corresponde a una de estas acuñaciones, dentro del `scope` de la acuñación.

**match.mints\[].mint** `string` *required*

Dirección de acuñación del token. La acuñación de SOL nativo `So11111111111111111111111111111111111111111` busca coincidencias según los cambios en lamports, en lugar de los saldos de tokens, sin contar la comisión.

**match.mints\[].scope** `string` (default: address)

Qué saldos de tokens de la acuñación cuentan. `address` solo cuenta los saldos cuya cuenta de tokens sea `address` o le pertenezca, o cuya acuñación sea `address`. Para SOL nativo, solo cuentan los cambios en los lamports de `address`. `transaction` cuenta cualquier saldo de la acuñación en la transacción. Para SOL nativo, cuenta un cambio en los lamports de cualquier cuenta.

* `address`
* `transaction`

**returnShape** `string` (default: transactions)

Lo que contiene la respuesta para las coincidencias: `transactions` (coincidencias analizadas en `data`, hasta `limit`), `signatures` (`signature`, `slot`, `transactionIndex` e `blockTime` por coincidencia en `data`), o `count` (sin `data`; `scan.matchedTransactions` es el número de coincidencias). `signatures` e `count` ignoran `limit` e `rawTransaction`.

* `transactions`
* `signatures`
* `count`

**limit** `number` (default: 100)

Número máximo de coincidencias que se devolverán con la estructura `transactions`, de 1 a 100.

**budget** `object`

Límites sobre la cantidad de historial que escanea una solicitud.

**budget.maxScannedTransactions** `number` (default: 10000)

Número máximo de transacciones que se escanearán en esta solicitud, de 1 a 10,000.

**beforeSignature** `string`

Escanea las transacciones anteriores a esta firma.

**afterSignature** `string`

Escanea las transacciones posteriores a esta firma.

**paginationToken** `string`

Cursor devuelto por un escaneo anterior. Su estructura es `slot:transactionIndex`.

**sortOrder** `string` (default: desc)

Orden en que se escanea el historial y se devuelven las coincidencias.

* `asc`
* `desc`

**commitment** `string` (default: confirmed)

Nivel de compromiso utilizado para obtener el historial. `processed` no es compatible.

* `confirmed`
* `finalized`

**status** `string` (default: succeeded)

Resultado de ejecución que se incluirá. El filtrado ocurre antes de buscar coincidencias, por lo que las transacciones excluidas no cuentan para el presupuesto.

* `succeeded`
* `failed`
* `any`

**tokenAccounts** `string` (default: none)

Indica si se deben incluir las transacciones que solo hacen referencia a una cuenta de tokens que pertenece a `address`, no al propio `address`: `none` las omite, `balanceChanged` incluye las que cambian el saldo de la cuenta de tokens e `all` las incluye todas. Usa `balanceChanged` cuando escanees una billetera por acuñación.

* `none`
* `balanceChanged`
* `all`

**minContextSlot** `number`

Slot mínimo en el que se puede evaluar la solicitud.

**rawTransaction** `string` (default: none)

Codificación de la transacción original de Solana devuelta como `rawTransaction` en cada resultado exitoso, con la estructura `getTransaction`. Solo se aplica a la estructura `transactions`.

* `none`
* `json`
* `jsonParsed`
* `base64`

**slot** `object`

Límites de comparación del slot. Cada límite es opcional.

**slot.gt** `number`

Busca valores mayores que este valor.

**slot.gte** `number`

Busca valores mayores o iguales que este valor.

**slot.lt** `number`

Busca valores menores que este valor.

**slot.lte** `number`

Busca valores menores o iguales que este valor.

**time** `object`

Límites de comparación de la hora del bloque en segundos Unix. Cada límite es opcional.

**time.gt** `number`

Busca valores mayores que este valor.

**time.gte** `number`

Busca valores mayores o iguales que este valor.

**time.lt** `number`

Busca valores menores que este valor.

**time.lte** `number`

Busca valores menores o iguales que este valor.


## OpenAPI

````yaml es/openapi/parsed-events.yaml POST /v1/parsed-events/scan
openapi: 3.0.3
info:
  title: Eventos analizados
  version: 0.1.0
  description: >-
    Analiza transacciones de Solana y el historial de transacciones analizadas
    con Eventos analizados.
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/scan:
    post:
      tags:
        - Eventos analizados
      summary: Escanear el historial de transacciones
      description: >-
        Busca en el historial de una dirección transacciones que llamen a uno de
        un conjunto de programas, involucren una de un conjunto de acuñaciones
        de tokens, o ambas cosas, y devuelve las coincidencias analizadas, sus
        firmas o un recuento.
      operationId: scanParsedTransactionHistory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScanRequest'
            examples:
              Pump.fun buys and sells:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - buy
                          - sell
                  limit: 1
              Rare instruction, budget stop:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  budget:
                    maxScannedTransactions: 2000
              Count matches:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  returnShape: count
                  budget:
                    maxScannedTransactions: 2000
              Token transactions with a USDC account:
                value:
                  address: <MINT_ADDRESS>
                  match:
                    mints:
                      - mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                        scope: transaction
                  returnShape: signatures
      responses:
        '200':
          description: >-
            Las coincidencias en el `returnShape` solicitado y un resumen del
            escaneo. Un resultado parcial sigue siendo un 200; continúa con
            `paginationToken` mientras se devuelva uno.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanPage'
              examples:
                Stopped on limit:
                  value:
                    data:
                      - signature: >-
                          5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy
                        parserStatus: OK
                        parsed:
                          slot: 460869102
                          blockTime: 1792848886
                          fee: 45000
                          feePayer: Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                          transactionStatus: OK
                          error: null
                          decodedError: null
                          nativeTransfers:
                            - fromUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              toUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              amount: 4207183
                          tokenTransfers:
                            - fromUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              toUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              fromTokenAccount: 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                              toTokenAccount: 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                              rawTokenAmount: 612181177082
                              decimals: 6
                              tokenStandard: Fungible
                              mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                          summary:
                            type: swap
                            description: >-
                              BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              intercambió 0.004207183 SOL por 612181.177082
                              3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                              mediante Pump.fun
                            parsedData:
                              type: swap
                              protocol: pump_fun
                              kind: buy
                              in_amount: '4207183'
                              actual_out_amount: '612181177082'
                              input_mint: So11111111111111111111111111111111111111112
                              output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                              inner_swaps: []
                          instructions:
                            - instructionIndex: 0
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: HMypLP
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_limit
                              decoded:
                                args:
                                  units: '400000'
                                accounts: []
                            - instructionIndex: 1
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: 3gJqkocMWaMm
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_price
                              decoded:
                                args:
                                  micro_lamports: '100000'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                                - 13ec7XdrjF3h3YcqBTFDSReRcUFwbCnJaAQspM4j6DDJ
                                - CNtxytSi1JNJgmBM444pGXK5eUEy5B2Q3haBHw2fzdoG
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                                - MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: 23s1EunhJwrvzz8YSBTPv5WDZGm8uym8KQXhF3u
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 0
                              stackHeight: 2
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: i43WeUBGKA8F2B6dwt5RBzavSKrhGu93LB
                              summary:
                                type: swap
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  intercambió 0.004207183 SOL por 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  mediante Pump.fun
                                parsedData:
                                  type: swap
                                  protocol: pump_fun
                                  kind: buy
                                  in_amount: '4207183'
                                  actual_out_amount: '612181177082'
                                  input_mint: So11111111111111111111111111111111111111112
                                  output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  inner_swaps: []
                              programName: pump
                              instructionName: buy
                              decoded:
                                args:
                                  amount: '612181177082'
                                  max_sol_cost: '4207183'
                                  track_volume:
                                    - false
                                accounts:
                                  - name: global
                                    pubkey: >-
                                      4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_recipient
                                    pubkey: >-
                                      GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: bonding_curve
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_bonding_curve
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_user
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: user
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: system_program
                                    pubkey: '11111111111111111111111111111111'
                                    isSigner: false
                                    isWritable: false
                                  - name: token_program
                                    pubkey: >-
                                      TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                    isSigner: false
                                    isWritable: false
                                  - name: creator_vault
                                    pubkey: >-
                                      HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                    isSigner: false
                                    isWritable: true
                                  - name: event_authority
                                    pubkey: >-
                                      Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                    isSigner: false
                                    isWritable: false
                                  - name: program
                                    pubkey: >-
                                      6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                    isSigner: false
                                    isWritable: false
                                  - name: global_volume_accumulator
                                    pubkey: >-
                                      Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                    isSigner: false
                                    isWritable: false
                                  - name: user_volume_accumulator
                                    pubkey: >-
                                      FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                    isSigner: false
                                    isWritable: true
                                  - name: fee_config
                                    pubkey: >-
                                      8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_program
                                    pubkey: >-
                                      pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount1
                                    pubkey: >-
                                      6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount2
                                    pubkey: >-
                                      5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                                    isSigner: false
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 1
                              stackHeight: 3
                              programId: pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                              rawAccounts:
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawData: >-
                                KX69VKtJ7u4E7dVvicNyuayxqa9Hr4EfndWiJBCjUyq1hDLtgcYW6pEh1tPqbHSkqHTQ8uiASv1QK1
                              summary: null
                              programName: pump_fees
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 2
                              stackHeight: 3
                              programId: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                              rawAccounts:
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: jHqzogtBj1ey3
                              summary:
                                type: transfer
                                description: >-
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                  transfirió 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  de
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98 a
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                parsedData: null
                              programName: token_2022
                              instructionName: transfer_checked
                              decoded:
                                args:
                                  amount: '612181177082'
                                  decimals: 6
                                accounts:
                                  - name: source_account
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: destination_account
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: owner_or_delegate
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: true
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 3
                              stackHeight: 3
                              programId: '11111111111111111111111111111111'
                              rawAccounts:
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: 3Bxs4E6xqUKPTjRy
                              summary:
                                type: transfer
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  transfirió 0.004207183 SOL a
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                parsedData: null
                              programName: system
                              instructionName: transfer
                              decoded:
                                args:
                                  lamports: '4207183'
                                accounts:
                                  - name: funding_account
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: recipient_account
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                            - instructionIndex: 2
                              innerInstructionIndex: 4
                              stackHeight: 3
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                              rawData: >-
                                8jV3ThAnvn3jwQVVxYoxU8MvQQneX8ryEqnGqWTeKGi8UcTcTFd5VQ8KLpzRZhN2g6qpShcNYKQ6aEiZojgETaWrW1Mn92Drm2irNbjBdHGCTkuK3SBZb4HSn6KPZiJehmZL1aPNtVSRmGh2ojKXZLFtokDPK31XJJJZYBMowkVME4yWDsiA81AKAyJYq3afuYidCUgWsSfzSo8tZZRtCpSaeUd3M5JeyiE9V45vsDuPYsyBxmVFWf3qKWEcQuCDYu5HctwzvAeqU6Hmr1st5Kd62GrbHxua73RLuXpHotAjm3wYD6BkKEtKDpSnq47ewySqeUgF8MrTc121NwjKhedGJfp1VWv4TULoKaNTuA9KRzYVsTNgjYuwSgiXxQF2F1ePSHexBQdTiMbL1STcahdzuLvZoRkEUQX1WE9ayykQ1uiJ1FPFNCitKm6YwpLLLVwDDi8Rf2J5aeHxtLorKV5UWn1CnRukDpSJxAC91mmc6qNcJ6XQW5VxJMdhJcSSmSr1hi4dUt1vW6gspsMxEMUzGtiyBZeo
                              summary: null
                              programName: pump
                              instructionName: TradeEvent
                              decoded:
                                args:
                                  buyback_fee: '0'
                                  buyback_fee_basis_points: '0'
                                  cashback: '0'
                                  cashback_fee_basis_points: '0'
                                  creator: 2G5ZssGjViBdr4DdwYaQ23JQeNG8TRsrnHKs9pabUoCz
                                  creator_fee: '0'
                                  creator_fee_basis_points: '0'
                                  current_sol_volume: '0'
                                  fee: '0'
                                  fee_basis_points: '0'
                                  fee_recipient: GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                  holder_rewards: '0'
                                  holder_rewards_bps: '0'
                                  is_buy: true
                                  ix_name: buy
                                  last_update_timestamp: '0'
                                  mayhem_mode: true
                                  mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  quote_amount: '4207183'
                                  quote_mint: '11111111111111111111111111111111'
                                  real_quote_reserves: '27976582'
                                  real_sol_reserves: '27976582'
                                  real_token_reserves: '793353696151809'
                                  shareholders: []
                                  sol_amount: '4207183'
                                  timestamp: '1792848886'
                                  token_amount: '612181177082'
                                  total_claimed_tokens: '0'
                                  total_unclaimed_tokens: '0'
                                  track_volume: false
                                  user: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  virtual_quote_reserves: '8676477109'
                                  virtual_sol_reserves: '8676477109'
                                  virtual_token_reserves: '1073253696151809'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: 5
                              stackHeight: 2
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                              rawData: >-
                                HaAvdxyruSvtMDoMtGvePmYV4dda7tWKCLFHadQoSjYsbWWixs1eN1wCF27wUxZao1NfTPQGxhVs9GXmaVGUZ5mgBAEUUWKK4se3JtE5oKMHzxp6GRbR7wagdMtwKQEaJbXuMb9c75n3gPnTTFrxTjJrtBCejTAEQpd6mv9HUaxpt2u83Cts4WgXdvWqiHqk7xXkXQwV6M1VXmAfwZYg4CSjzAmooqqAdzbHuf243dbws8uDS4GrteXQiAYow3395wuNqLWzrcHropQTzvaDtpfAupYXEt2AZHPEuUsVhtt5n8xAieU5d4oHSjAvgBczW9cktco7Wto3kEo53QaJfbdEz4V9Jnx6ib2fdvW2EpLXUprJLcP9voTKAuuCZCTbQKSbwJWRG9UCPTssTDR3m9eE38WcqtK1v2jeRtbtK
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                    paginationToken: '460869102:203'
                    scan:
                      stoppedOn: limit
                      scannedTransactions: 1
                      matchedTransactions: 1
                      scannedThrough:
                        slot: 460869102
                        blockTime: 1792848886
                      creditsCharged: 11
                Stopped on budget, no matches:
                  value:
                    data: []
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
                Count shape:
                  value:
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
        '400':
          description: Solicitud no válida. El mensaje `error` indica el problema.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      No se encontraron las instrucciones de match.programs en
                      los IDL de 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P:
                      not_a_real_ix
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          description: >-
            El servicio alcanzó su capacidad máxima o la primera página del
            historial no se completó antes del plazo de la solicitud. Reintenta
            la solicitud.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: servicio no disponible
components:
  schemas:
    ScanRequest:
      type: object
      description: >-
        Cuerpo de la solicitud para escanear el historial de una dirección en
        busca de transacciones coincidentes.
      required:
        - address
        - match
      additionalProperties: false
      properties:
        address:
          type: string
          description: Dirección cuyo historial se escanea.
        match:
          $ref: '#/components/schemas/ScanMatch'
        returnShape:
          type: string
          description: >-
            Contenido de la respuesta para las coincidencias: `transactions`
            (coincidencias analizadas en `data`, hasta `limit`), `signatures`
            (`signature`, `slot`, `transactionIndex` y `blockTime` para cada
            coincidencia en `data`) o `count` (sin `data`;
            `scan.matchedTransactions` es el número de coincidencias).
            `signatures` y `count` ignoran `limit` y `rawTransaction`.
          enum:
            - transactions
            - signatures
            - count
          default: transactions
        limit:
          type: integer
          description: >-
            Número máximo de coincidencias que se devolverán con la estructura
            `transactions`, de 1 a 100.
          minimum: 1
          maximum: 100
          default: 100
        budget:
          $ref: '#/components/schemas/ScanBudget'
        beforeSignature:
          type: string
          description: Escanea las transacciones anteriores a esta firma.
        afterSignature:
          type: string
          description: Escanea las transacciones posteriores a esta firma.
        paginationToken:
          type: string
          description: >-
            Cursor devuelto por un escaneo anterior. Su estructura es
            `slot:transactionIndex`.
        sortOrder:
          type: string
          description: >-
            Orden en el que se escanea el historial y se devuelven las
            coincidencias.
          enum:
            - asc
            - desc
          default: desc
        commitment:
          type: string
          description: >-
            Nivel de confirmación usado para obtener el historial. `processed`
            no es compatible.
          enum:
            - confirmed
            - finalized
          default: confirmed
        status:
          type: string
          description: >-
            Resultado de ejecución que se incluirá. El filtrado ocurre antes de
            buscar coincidencias, por lo que las transacciones excluidas no
            cuentan para el presupuesto.
          enum:
            - succeeded
            - failed
            - any
          default: succeeded
        tokenAccounts:
          allOf:
            - $ref: '#/components/schemas/TokenAccountsFilter'
          description: >-
            Indica si se incluyen transacciones que solo hacen referencia a una
            cuenta de tokens propiedad de `address`, pero no a `address` en sí:
            `none` las excluye, `balanceChanged` incluye las que cambian el
            saldo de la cuenta de tokens y `all` las incluye todas. Usa
            `balanceChanged` cuando escanees una billetera por acuñación.
        minContextSlot:
          type: integer
          description: Slot mínimo en el que se puede evaluar la solicitud.
        rawTransaction:
          allOf:
            - $ref: '#/components/schemas/RawTransactionEncoding'
          description: >-
            Codificación de la transacción original de Solana devuelta como
            `rawTransaction` en cada resultado correcto, con la estructura de
            `getTransaction`. Solo se aplica a la estructura `transactions`.
        slot:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: Límites de comparación del slot. Cada límite es opcional.
        time:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: >-
            Límites de comparación de la hora del bloque en segundos Unix. Cada
            límite es opcional.
    ScanPage:
      type: object
      description: >-
        Las coincidencias en el `returnShape` solicitado y un resumen del
        escaneo.
      properties:
        data:
          description: >-
            Las coincidencias, en `sortOrder`. Con `transactions`, cada elemento
            tiene la misma estructura `TransactionResult` que devuelve
            `/v1/parsed-events/transactions`; con `signatures`, cada elemento es
            un `ScanSignature`. No está presente con `count`. Puede estar vacío
            cuando `paginationToken` está presente.
          oneOf:
            - type: array
              title: Transacciones
              items:
                $ref: '#/components/schemas/TransactionResult'
            - type: array
              title: Firmas
              items:
                $ref: '#/components/schemas/ScanSignature'
        paginationToken:
          type: string
          description: >-
            Cursor donde continúa el siguiente escaneo. No está presente cuando
            el escaneo llega al final del historial o de la ventana.
        scan:
          $ref: '#/components/schemas/ScanSummary'
    ErrorResponse:
      type: object
      description: Respuesta de error de la solicitud.
      properties:
        error:
          type: string
          description: Mensaje de error.
    ScanMatch:
      type: object
      description: >-
        Criterios que debe cumplir una transacción. Establece `programs`,
        `mints` o ambos. Cuando estableces ambos, una transacción debe coincidir
        con los dos.
      additionalProperties: false
      properties:
        programs:
          type: array
          description: >-
            Programas que deben coincidir, como máximo 20 y cada uno una sola
            vez. Una transacción coincide cuando contiene una instrucción de
            cualquiera de ellos, de nivel superior o interna (CPI), dentro del
            `scope` del programa.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanProgramMatch'
        mints:
          type: array
          description: >-
            Acuñaciones que deben coincidir, como máximo 20 y cada una una sola
            vez. Una transacción coincide cuando uno de sus saldos de tokens
            anteriores o posteriores pertenece a una de estas acuñaciones,
            dentro del `scope` de la acuñación.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanMintMatch'
    ScanBudget:
      type: object
      description: Límites sobre la cantidad de historial que escanea una solicitud.
      additionalProperties: false
      properties:
        maxScannedTransactions:
          type: integer
          description: >-
            Número máximo de transacciones que se escanearán en esta solicitud,
            de 1 a 10,000.
          minimum: 1
          maximum: 10000
          default: 10000
    TokenAccountsFilter:
      type: string
      description: >-
        Indica si se incluyen transacciones que solo hacen referencia a una
        cuenta de tokens propiedad de `address`, pero no a `address` en sí:
        `none` las excluye, `balanceChanged` incluye las que cambian el saldo de
        la cuenta de tokens y `all` las incluye todas.
      enum:
        - none
        - balanceChanged
        - all
      default: none
    RawTransactionEncoding:
      type: string
      description: >-
        Codificación de la transacción original de Solana devuelta como
        `rawTransaction` en cada resultado correcto, con la estructura de
        `getTransaction`. `none` no devuelve ninguna transacción sin procesar.
      enum:
        - none
        - json
        - jsonParsed
        - base64
      default: none
    ComparisonBounds:
      type: object
      description: Límites de comparación numérica. Cada campo es opcional.
      additionalProperties: false
      properties:
        gt:
          type: integer
          description: Busca valores mayores que este valor.
        gte:
          type: integer
          description: Busca valores mayores o iguales que este valor.
        lt:
          type: integer
          description: Busca valores menores que este valor.
        lte:
          type: integer
          description: Busca valores menores o iguales que este valor.
    TransactionResult:
      type: object
      description: Resultado del analizador para cada firma.
      properties:
        signature:
          type: string
          description: Firma de la transacción de este elemento.
        parserStatus:
          type: string
          description: >-
            `OK` cuando el análisis se completa correctamente o `ERROR` cuando
            no se puede obtener o analizar el elemento.
          enum:
            - OK
            - ERROR
        parsed:
          allOf:
            - $ref: '#/components/schemas/ParsedTransaction'
          description: >-
            Objeto de transacción analizada. Está presente cuando `parserStatus`
            es `OK`.
        parserError:
          allOf:
            - $ref: '#/components/schemas/ParserError'
          description: Error del elemento. Está presente cuando `parserStatus` es `ERROR`.
        rawTransaction:
          type: object
          description: >-
            Transacción original de Solana con la estructura de `getTransaction`
            para la codificación `rawTransaction` solicitada. Con `base64`,
            `transaction` es `[data, "base64"]`. Solo está presente cuando se
            solicita una transacción sin procesar.
          additionalProperties: true
    ScanSignature:
      type: object
      description: Una coincidencia devuelta con `returnShape` establecido en `signatures`.
      properties:
        signature:
          type: string
          description: Firma de la transacción.
        slot:
          type: integer
          description: Slot que contiene la transacción.
        transactionIndex:
          type: integer
          description: Posición de la transacción dentro de su slot.
        blockTime:
          type: integer
          nullable: true
          description: Hora del bloque en segundos Unix, cuando esté disponible.
    ScanSummary:
      type: object
      description: Hasta dónde llegó el escaneo y por qué se detuvo.
      properties:
        stoppedOn:
          type: string
          description: >-
            Motivo por el que se detuvo el escaneo: `windowEnd` (fin del
            historial o de la ventana), `limit` (se devolvieron `limit`
            coincidencias), `budget` (se escanearon `maxScannedTransactions`) o
            `deadline` (se alcanzó el límite de tiempo de la solicitud).
          enum:
            - windowEnd
            - limit
            - budget
            - deadline
        scannedTransactions:
          type: integer
          description: Transacciones escaneadas en esta solicitud.
        matchedTransactions:
          type: integer
          description: >-
            Coincidencias encontradas en esta solicitud. Cuando `returnShape` se
            establece en `count`, este es el resultado.
        scannedThrough:
          allOf:
            - $ref: '#/components/schemas/ScannedThrough'
          description: >-
            La última transacción escaneada. No está presente cuando no se
            escaneó nada.
        creditsCharged:
          type: integer
          description: >-
            Créditos cobrados: 10 por solicitud más 1 por cada página del
            historial escaneada (hasta 1,000 transacciones cada una).
    ScanProgramMatch:
      type: object
      description: >-
        Busca transacciones con una instrucción de `programId`, de nivel
        superior o interna (CPI). Establece `instructions`, `discriminators` o
        ambos para limitar la coincidencia, o ninguno para buscar cualquier
        instrucción del programa.
      required:
        - programId
      additionalProperties: false
      properties:
        programId:
          type: string
          description: Dirección del programa.
        instructions:
          type: array
          description: >-
            Nombres de instrucciones de cualquier versión del IDL del programa,
            tal como aparecen en el IDL o en snake_case. Como máximo 50. Se
            pueden combinar con `discriminators`.
          maxItems: 50
          items:
            type: string
        discriminators:
          type: array
          description: >-
            Prefijos de datos de instrucciones, cada uno de 1 a 8 bytes
            codificados en hexadecimal con un prefijo `0x` opcional. Como máximo
            50. Se pueden combinar con `instructions`.
          maxItems: 50
          items:
            type: string
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Instrucciones del programa que cuentan. `address` solo cuenta las
            instrucciones con una cuenta que sea `address`, una cuenta de tokens
            propiedad de `address` o una cuenta de tokens cuya acuñación sea
            `address`; también cuenta todas las instrucciones cuando `address`
            es el programa. `transaction` cuenta cualquier instrucción del
            programa en la transacción.
    ScanMintMatch:
      type: object
      description: >-
        Busca transacciones con un saldo de tokens anterior o posterior de
        `mint`, dentro de `scope`. La acuñación de SOL nativo
        `So11111111111111111111111111111111111111111` busca en su lugar cambios
        de lamports, sin contar la comisión cobrada al pagador de la comisión.
      required:
        - mint
      additionalProperties: false
      properties:
        mint:
          type: string
          description: >-
            Dirección de acuñación del token. La acuñación de SOL nativo
            `So11111111111111111111111111111111111111111` busca cambios de
            lamports en lugar de saldos de tokens, sin contar la comisión.
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Saldos de tokens de la acuñación que cuentan. `address` solo cuenta
            los saldos cuya cuenta de tokens es `address`, es propiedad de esta
            o cuya acuñación es `address`. Para SOL nativo, solo cuentan los
            cambios en los lamports de `address`. `transaction` cuenta cualquier
            saldo de la acuñación en la transacción. Para SOL nativo, cuenta un
            cambio en los lamports de cualquier cuenta.
    ParsedTransaction:
      type: object
      description: Modelo de transacción de parser-v2.
      properties:
        slot:
          type: integer
          description: Slot que contiene la transacción.
        blockTime:
          type: integer
          description: Marca de tiempo Unix del bloque, cuando está disponible.
          nullable: true
        fee:
          type: integer
          description: Comisión de la transacción en lamports.
        feePayer:
          type: string
          description: Cuenta que paga la comisión, cuando está disponible.
          nullable: true
        transactionStatus:
          type: string
          description: >-
            `OK` cuando la transacción se ejecuta correctamente o `ERROR` cuando
            falla la ejecución.
          enum:
            - OK
            - ERROR
        nativeTransfers:
          type: array
          description: Transferencias de SOL de la transacción en lamports.
          items:
            $ref: '#/components/schemas/NativeTransfer'
        tokenTransfers:
          type: array
          description: Transferencias de SPL Token y Token-2022 de la transacción.
          items:
            $ref: '#/components/schemas/TokenTransfer'
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Mejor resumen disponible de la transacción.
          nullable: true
        instructions:
          type: array
          description: >-
            Instrucciones de nivel superior e internas analizadas en orden de
            ejecución.
          items:
            $ref: '#/components/schemas/ParsedInstruction'
    ParserError:
      type: object
      description: Error del analizador en un elemento.
      properties:
        code:
          type: string
          description: Código de error del analizador legible por máquina.
        message:
          type: string
          description: Mensaje de error del analizador legible.
    ScannedThrough:
      type: object
      description: Posición de la última transacción escaneada.
      properties:
        slot:
          type: integer
          description: Slot de la última transacción escaneada.
        blockTime:
          type: integer
          nullable: true
          description: >-
            Hora del bloque de la última transacción escaneada, en segundos
            Unix.
    MatchScope:
      type: string
      description: >-
        Lugar donde deben estar las instrucciones de un programa o los saldos de
        tokens de una acuñación para que cuenten.
      enum:
        - address
        - transaction
      default: address
    NativeTransfer:
      type: object
      description: Movimiento de SOL detectado en la transacción.
      properties:
        fromUserAccount:
          type: string
          description: Cuenta que envía lamports.
          nullable: true
        toUserAccount:
          type: string
          description: Cuenta que recibe lamports.
          nullable: true
        amount:
          type: integer
          description: Cantidad en lamports.
    TokenTransfer:
      type: object
      description: Movimiento de SPL Token o Token-2022 detectado en la transacción.
      properties:
        fromUserAccount:
          type: string
          description: Propietario o autoridad del lado de origen, cuando se conoce.
          nullable: true
        toUserAccount:
          type: string
          description: Propietario del lado de destino, cuando se conoce.
          nullable: true
        fromTokenAccount:
          type: string
          description: Cuenta de token de origen.
          nullable: true
        toTokenAccount:
          type: string
          description: Cuenta de token de destino.
          nullable: true
        rawTokenAmount:
          type: integer
          description: Cantidad entera del token sin procesar.
        decimals:
          type: integer
          description: >-
            Decimales de la acuñación utilizados para interpretar la cantidad
            sin procesar.
        tokenStandard:
          type: string
          description: >-
            Estándar del token cuando se conoce, como `Fungible` o
            `UnknownStandard`.
        mint:
          type: string
          description: Dirección de acuñación del token.
    ParsedSummary:
      type: object
      description: Resumen legible de una transacción o instrucción.
      properties:
        type:
          type: string
          description: Tipo de resumen, como `swap`, `transfer` o `create_account`.
        description:
          type: string
          description: Texto del resumen legible.
        parsedData:
          type: object
          description: >-
            Carga estructurada que respalda el resumen, cuando está disponible;
            por ejemplo, metadatos de intercambio con `protocol`, `kind`,
            cantidades y acuñaciones. La estructura varía según el tipo de
            resumen y el protocolo.
          nullable: true
          additionalProperties: true
    ParsedInstruction:
      type: object
      description: Instrucción de nivel superior o interna analizada.
      properties:
        instructionIndex:
          type: integer
          description: Índice de la instrucción de nivel superior.
        innerInstructionIndex:
          type: integer
          description: >-
            Índice de la instrucción interna dentro de la instrucción de nivel
            superior, cuando corresponde.
          nullable: true
        stackHeight:
          type: integer
          description: Altura de la pila, cuando está disponible.
          nullable: true
        programId:
          type: string
          description: ID del programa que ejecutó la instrucción.
        rawAccounts:
          type: array
          description: >-
            Claves públicas de las cuentas sin procesar resueltas a partir de
            los índices de cuentas de la instrucción.
          items:
            type: string
        rawData:
          type: string
          description: Datos sin procesar de la instrucción.
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Resumen de la instrucción, cuando está disponible.
          nullable: true
        programName:
          type: string
          description: >-
            Nombre del programa conocido por el analizador, cuando está
            disponible.
          nullable: true
        instructionName:
          type: string
          description: Nombre de la instrucción decodificada, cuando está disponible.
          nullable: true
        decoded:
          allOf:
            - $ref: '#/components/schemas/DecodedInstruction'
          description: >-
            Argumentos y cuentas decodificados, cuando la decodificación se
            completa correctamente.
          nullable: true
    DecodedInstruction:
      type: object
      description: Argumentos y cuentas con nombre de la instrucción decodificada.
      properties:
        args:
          type: object
          description: >-
            Argumentos de la instrucción decodificada. Los nombres y las
            estructuras de los argumentos dependen de la instrucción.
          additionalProperties: true
        accounts:
          type: array
          description: >-
            Cuentas de la instrucción decodificada con nombres conocidos por el
            analizador.
          items:
            $ref: '#/components/schemas/DecodedAccount'
    DecodedAccount:
      type: object
      description: Cuenta con nombre utilizada por una instrucción decodificada.
      properties:
        name:
          type: string
          description: Nombre de la cuenta conocido por el analizador.
        pubkey:
          type: string
          description: Clave pública de la cuenta.
        isSigner:
          type: boolean
          description: Indica si la cuenta firmó la transacción.
        isWritable:
          type: boolean
          description: Indica si se podía escribir en la cuenta para la instrucción.
  responses:
    InternalError:
      description: >-
        La solicitud falló en el servidor, por ejemplo, porque no se pudo
        decodificar una transacción almacenada en el intervalo solicitado. Toda
        la solicitud falla; no se devuelven resultados parciales.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            default:
              value:
                error: error interno del servidor
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key

````

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