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

# Búsqueda de activos en Solana: encuentra NFT, tokens y activos comprimidos

> Usa el endpoint searchAssets para descubrir NFT, activos comprimidos y tokens fungibles en Solana, con filtrado, ordenamiento y paginación avanzados.

## Descripción general

`searchAssets` es el método de lectura más flexible de la API DAS. Devuelve activos que coinciden con una combinación de filtros —propietario, agrupación por colección, tipo de token y atributos— en una sola llamada paginada. Úsalo cuando necesites más de un activo o algo más que una lista simple por propietario.

`tokenType` es opcional. Si lo omites, `searchAssets` solo devuelve NFT estándar y comprimidos, sin tokens fungibles. Para incluir tokens fungibles, define `tokenType` (por ejemplo, `"fungible"` o `"all"`). Los valores aceptados son `fungible`, `nonFungible`, `regularNft`, `compressedNft` y `all`.

## Cuándo usarlo

Usa `searchAssets` cuando quieras:

* Filtrar los activos de una billetera para obtener solo tokens fungibles o solo NFT
* Enumerar los activos que una billetera posee dentro de una colección específica
* Descubrir NFT comprimidos de forma masiva
* Implementar desplazamiento infinito en conjuntos de resultados grandes con paginación por cursor
* Filtrar activos de MPL Core por estado del agente o firmante

Para activos individuales, usa [`getAsset`](/docs/es/api-reference/das/getasset); para obtener una lista simple de una billetera, usa [`getAssetsByOwner`](/docs/es/api-reference/das/getassetsbyowner).

<Card title="API Reference" horizontal icon="code" href="/docs/es/api-reference/das/searchassets">
  Consulta la documentación detallada de searchAssets
</Card>

## Inicio rápido

```typescript theme={"system"}
// Replace YOUR_API_KEY with your Helius API key
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`;

async function searchAssets(params) {
  const body = {
    jsonrpc: "2.0",
    id: "search-assets-example",
    method: "searchAssets",
    params,
  };
  const res = await fetch(url, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });
  if (!res.ok) {
    throw new Error(`${res.status} ${res.statusText}`);
  }
  const { result } = await res.json();
  return result;
}

// Example: fetch first 50 compressed NFTs in a wallet
searchAssets({
  ownerAddress: "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
  tokenType: "compressedNft",
  limit: 50,
}).then(console.log);
```

## Cómo elegir un tokenType

`tokenType` es opcional y especifica **qué tipo de activos** aparecen en la respuesta. Si lo omites, `searchAssets` solo devuelve NFT estándar y comprimidos. Define `tokenType` para incluir tokens fungibles.

<ParamField body="tokenType" type="string">
  Valores aceptados: `fungible`, `nonFungible`, `regularNft`, `compressedNft`, `all`. Si lo omites, el valor predeterminado incluye NFT estándar y comprimidos.
</ParamField>

| tokenType       | Qué obtienes                           | Caso de uso típico                                      |
| --------------- | -------------------------------------- | ------------------------------------------------------- |
| `fungible`      | Solo tokens SPL y Token-2022           | Saldos de billeteras, control de acceso mediante tokens |
| `nonFungible`   | Todos los NFT (comprimidos y estándar) | Resumen del portafolio                                  |
| `regularNft`    | NFT heredados y pNFT (sin comprimir)   | Listados de mercados                                    |
| `compressedNft` | Solo cNFT                              | Acuñaciones masivas de muy bajo costo                   |
| `all`           | Todo (tokens y NFT)                    | Descubrimiento general                                  |

## Paginación y ordenamiento

Las billeteras de Solana pueden poseer miles de activos, por lo que una paginación eficiente es importante:

* **Página / límite** — paginación clásica (`page` comienza en **1**). Adecuada para vistas estáticas.
* **Cursor** — pasa los valores `before` o `after` de la respuesta anterior para implementar un desplazamiento infinito rápido.

```json5 sortBy theme={"system"}
"sortBy": {
  "sortBy": "created",      // created | recent_action | updated | none
  "sortDirection": "desc"   // asc | desc
}
```

Para conocer las estrategias completas de página/límite y cursor, incluidas las consultas paralelas por conjunto de claves, consulta la [guía de paginación](/docs/es/das/pagination).

## Opciones de visualización

Estas marcas **agregan metadatos**; nunca cambian los activos que se devuelven.

| Marca                    | Efecto                                                |
| ------------------------ | ----------------------------------------------------- |
| `showNativeBalance`      | Incluye el saldo en SOL de la billetera               |
| `showCollectionMetadata` | Agrega datos JSON a nivel de colección                |
| `showGrandTotal`         | Devuelve el número total de coincidencias (más lento) |

```json5 options theme={"system"}
"options": {
  "showNativeBalance": true,
  "showCollectionMetadata": true,
  "showGrandTotal": true
}
```

## Agentes de MPL Core, firmantes de activos y grupos MIP-11

Los activos de MPL Core pueden exponer metadatos de **identidad del agente** y del **firmante del activo**, y los activos o las colecciones pueden incluir un **complemento `groups`** (MIP-11) que describe la pertenencia a un grupo. Los mismos campos opcionales aparecen en todos los métodos DAS que devuelven activos (`getAsset`, `getAssetBatch`, `getAssetsByOwner`, `getAssetsByGroup`, `getAssetsByCreator`, `getAssetsByAuthority` y cada elemento de `searchAssets`).

Usa `searchAssets` para filtrar por estado o direcciones del agente:

| Parámetro     | Tipo     | Propósito                                                |
| ------------- | -------- | -------------------------------------------------------- |
| `isAgent`     | booleano | Solo activos con una identidad de agente                 |
| `agentToken`  | cadena   | Coincidir con la acuñación del token del agente (base58) |
| `assetSigner` | cadena   | Coincidir con la PDA del firmante del activo (base58)    |

También puedes definir `interface` como `MplCoreAsset`, `MplCoreCollection` o `MplCoreGroup` para realizar búsquedas específicas de MPL Core.

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "searchAssets",
  "params": {
    "ownerAddress": "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
    "tokenType": "all",
    "isAgent": true,
    "page": 1,
    "limit": 10
  }
}
```

Los campos de respuesta `is_agent`, `agent_token` y `asset_signer` **se omiten cuando no se aplican** (por ejemplo, `is_agent` se omite cuando es falso). Consulta la [referencia de la API searchAssets](/docs/es/api-reference/das/searchassets) para ver los esquemas completos.

## Ejemplos

El primer ejemplo muestra el contenedor `fetch` completo. Los demás ejemplos siguen el mismo patrón y están contraídos; expándelos para ver el cuerpo de la solicitud.

### Buscar todos los tokens fungibles de una billetera

```typescript theme={"system"}
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

const searchAssets = async () => {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'my-id',
      method: 'searchAssets',
      params: {
        ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
        tokenType: 'fungible',
      },
    }),
  });
  const { result } = await response.json();
  console.log("Search Assets: ", result);
};
searchAssets();
```

<Accordion title="Search for fungible tokens with native balance and token info">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsTokenInfo = async () => {
      const response = await fetch(url, {
          method: 'POST',
          headers: {
              'Content-Type': 'application/json',
          },
          body: JSON.stringify({
              jsonrpc: '2.0',
              id: 'my-id',
              method: 'searchAssets',
              params: {
                  ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
                  tokenType: 'fungible',
                  options: {
                      showNativeBalance: true,
                  },
              },
          }),
      });

      const { result } = await response.json();

      result.items.forEach(item => {
        console.log(item.token_info);
      });

      console.log("Native Balance: ", result.nativeBalance);
  };

  searchAssetsTokenInfo();
  ```
</Accordion>

<Accordion title="Search for Drip NFTs owned by vibhu.sol">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsDrip = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: 'BAVjpySHMMGDpq3whU7qaqCCRE8ksCeGwxa53Qv2i8jS',
          grouping: ["collection", "DRiP2Pn2K6fuMLKQmt5rZWyHiUZ6WK3GChEySUpHSS4x"],
          page: 1,
          limit: 1000
        },
      }),
    });
    const { result } = await response.json();
    console.log("Drip Haus Assets: ", result);
  };
  searchAssetsDrip();
  ```
</Accordion>

<Accordion title="Search for compressed assets in a wallet">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsCompressed = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: '2k5AXX4guW9XwRQ1AKCpAuUqgWDpQpwFfpVFh3hnm2Ha',
          compressed: true,
        },
      }),
    });
    const { result } = await response.json();
    console.log("Search Assets: ", result);
  };
  searchAssetsCompressed();
  ```
</Accordion>

## Próximos pasos

<CardGroup cols={3}>
  <Card title="Pagination" icon="list" href="/docs/es/das/pagination">
    Paginación por páginas y por conjunto de claves para conjuntos de resultados grandes.
  </Card>

  <Card title="Fungible Token Extension" icon="coins" href="/docs/es/das/fungible-token-extension">
    Cómo aparecen tokenType, los saldos y los precios en los resultados.
  </Card>

  <Card title="searchAssets reference" icon="code" href="/docs/es/api-reference/das/searchassets">
    Esquemas completos de solicitudes y respuestas.
  </Card>
</CardGroup>
