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

# Recuperación de Activos

> Recupere activos enviados a la dirección correcta en la blockchain incorrecta

<Note>
  En resumen<br />
  La API de Recuperación de Activos de Yiksi Pay le permite recuperar activos que fueron enviados accidentalmente a la dirección correcta en la blockchain incorrecta. Soporta moneda nativa y activos personalizados (ERC-20 y estándares compatibles) en todas las redes soportadas.
</Note>

## ¿Qué es la Recuperación de Activos?

La recuperación de activos le permite recuperar fondos que fueron enviados a la dirección de billetera correcta pero en la red blockchain incorrecta. Esto comúnmente ocurre cuando:

* Los usuarios envían activos en Ethereum pero querían enviar en Polygon
* Los activos se envían en BNB Smart Chain en lugar de Arbitrum
* Cualquier confusión de direcciones entre cadenas donde la misma dirección existe en múltiples redes compatibles con EVM

<Info>
  Dado que las blockchains compatibles con EVM comparten el mismo formato de dirección, la misma dirección puede recibir activos en múltiples redes. La recuperación de activos le permite acceder a estos fondos programáticamente.
</Info>

## Prerrequisitos

Antes de usar la API de Recuperación de Activos, asegúrese de tener:

<Steps>
  <Step title="Clave API">
    Obtenga su clave API desde el [Panel de Yiksi Pay](https://dashboard.yiksipay.com). Navegue a **Developers** para generar una.
  </Step>

  <Step title="Billetera Creada">
    Cree una billetera a través de la [API Crear Billetera](/es/api-reference/wallets/create-wallet) o el panel. Necesitará el `walletId` para operaciones de recuperación.
  </Step>

  <Step title="ID de Blockchain">
    Obtenga el `blockchainId` para la red donde los activos están atrapados. Puede encontrarlo en el panel o a través de la [API Obtener Blockchains](/es/api-reference/miscellaneous/get-blockchains).
  </Step>

  <Step title="Saldo de Moneda Nativa">
    Asegúrese de que la dirección emisora tenga suficiente moneda nativa (ETH, BNB, MATIC, etc.) en la blockchain de recuperación para cubrir las tarifas de gas.
  </Step>
</Steps>

## Cómo Funciona

La API de Recuperación de Activos transfiere activos desde una dirección emisora (donde los activos están atrapados) a una dirección receptora en la misma blockchain:

<CardGroup cols={2}>
  <Card title="Recuperación de Moneda Nativa" icon="coins">
    Recupere moneda nativa como ETH, BNB, MATIC o AVAX enviada a la red incorrecta.
  </Card>

  <Card title="Recuperación de Activos Personalizados" icon="file-contract">
    Recupere activos ERC-20 y compatibles especificando la dirección del contrato.
  </Card>

  <Card title="Estimación de Tarifas" icon="calculator">
    Calcule las tarifas de red antes de la ejecución para asegurar saldo suficiente.
  </Card>

  <Card title="Soporte de RPC Personalizado" icon="server">
    Recupere activos en blockchains no soportadas proporcionando su propio endpoint RPC.
  </Card>
</CardGroup>

## Blockchains Soportadas

La recuperación de activos está disponible en **todas las blockchains** soportadas por Yiksi Pay, incluyendo redes compatibles con EVM, Tron y Solana. Consulta [Integraciones](/es/essentials/integrations) para la lista completa de redes soportadas y enlaces de faucets.

<Note>
  Para redes EVM no soportadas directamente, puede proporcionar una URL RPC personalizada y opcionalmente habilitar el modo Layer 2 para redes basadas en rollup.
</Note>

<Tip>
  Comience con testnets durante el desarrollo para evitar gastar fondos reales.
</Tip>

***

## Recuperar Activos

Inicie una operación de recuperación de activos para transferir activos atrapados a una dirección receptora.

### Parámetros de Solicitud

| Parámetro          | Tipo          | Requerido | Descripción                                                                                                                                       |
| ------------------ | ------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `senderAddress`    | string        | Sí        | La dirección de Yiksi Pay donde los activos están actualmente atrapados.                                                                          |
| `recipientAddress` | string        | Sí        | La dirección de destino donde se enviarán los activos recuperados.                                                                                |
| `amount`           | string        | Sí        | La cantidad a recuperar. Use la cantidad completa o una porción.                                                                                  |
| `blockchainId`     | string (UUID) | Sí        | El UUID de blockchain donde ocurrirá la recuperación. Obténgalo de la [API Obtener Blockchains](/es/api-reference/miscellaneous/get-blockchains). |
| `tokenAddress`     | string        | No        | Dirección del contrato para recuperación de activos personalizados. Omita para moneda nativa.                                                     |
| `rpcUrl`           | string        | No        | Endpoint RPC personalizado para blockchains no soportadas.                                                                                        |
| `isL2`             | boolean       | No        | Establezca en `true` si la URL RPC apunta a una red Layer 2.                                                                                      |

### Recuperación de Moneda Nativa

Recupere moneda nativa (ETH, BNB, MATIC, etc.) de la red incorrecta:

<CodeGroup>
  ```bash Curl theme={null}
  curl --request POST \
    --url https://api.yiksipay.com/v1/wallets/{walletId}/salvage \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: TU_CLAVE_API' \
    --data '{
      "senderAddress": "0x1234567890abcdef1234567890abcdef12345678",
      "recipientAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
      "amount": "0.5",
      "blockchainId": "b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': 'TU_CLAVE_API'
      },
      body: JSON.stringify({
        senderAddress: '0x1234567890abcdef1234567890abcdef12345678',
        recipientAddress: '0xabcdef1234567890abcdef1234567890abcdef12',
        amount: '0.5',
        blockchainId: 'b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa'
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.post(
      'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
      headers={
          'Content-Type': 'application/json',
          'x-api-key': 'TU_CLAVE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'polygon-mainnet'
      }
  )

  print(response.json())
  ```
</CodeGroup>

### Recuperación de Activos Personalizados

Recupere activos ERC-20 o compatibles especificando la dirección del contrato:

<CodeGroup>
  ```bash Curl theme={null}
  curl --request POST \
    --url https://api.yiksipay.com/v1/wallets/{walletId}/salvage \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: TU_CLAVE_API' \
    --data '{
      "senderAddress": "0x1234567890abcdef1234567890abcdef12345678",
      "recipientAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
      "amount": "100",
      "blockchainId": "b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa",
      "tokenAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': 'TU_CLAVE_API'
      },
      body: JSON.stringify({
        senderAddress: '0x1234567890abcdef1234567890abcdef12345678',
        recipientAddress: '0xabcdef1234567890abcdef1234567890abcdef12',
        amount: '100',
        blockchainId: 'b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa',
        tokenAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359'
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.post(
      'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
      headers={
          'Content-Type': 'application/json',
          'x-api-key': 'TU_CLAVE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '100',
          'blockchainId': 'polygon-mainnet',
          'tokenAddress': '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359'
      }
  )

  print(response.json())
  ```
</CodeGroup>

### Recuperación con RPC Personalizado

Recupere activos en blockchains no soportadas proporcionando su propio endpoint RPC:

<CodeGroup>
  ```bash Curl theme={null}
  curl --request POST \
    --url https://api.yiksipay.com/v1/wallets/{walletId}/salvage \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: TU_CLAVE_API' \
    --data '{
      "senderAddress": "0x1234567890abcdef1234567890abcdef12345678",
      "recipientAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
      "amount": "0.5",
      "blockchainId": "b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa",
      "rpcUrl": "https://rpc.custom-network.io",
      "isL2": true
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': 'TU_CLAVE_API'
      },
      body: JSON.stringify({
        senderAddress: '0x1234567890abcdef1234567890abcdef12345678',
        recipientAddress: '0xabcdef1234567890abcdef1234567890abcdef12',
        amount: '0.5',
        blockchainId: 'b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa',
        rpcUrl: 'https://rpc.custom-network.io',
        isL2: true
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.post(
      'https://api.yiksipay.com/v1/wallets/{walletId}/salvage',
      headers={
          'Content-Type': 'application/json',
          'x-api-key': 'TU_CLAVE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'custom',
          'rpcUrl': 'https://rpc.custom-network.io',
          'isL2': True
      }
  )

  print(response.json())
  ```
</CodeGroup>

### Respuesta Exitosa

```json theme={null}
{
  "message": "Salvage asset initiated successfully",
  "statusCode": 200
}
```

***

## Estimación de Tarifas de Red

Antes de ejecutar una recuperación, estime las tarifas de red para asegurar saldo suficiente.

### Solicitud de Estimación de Tarifas

<CodeGroup>
  ```bash Curl theme={null}
  curl --request POST \
    --url https://api.yiksipay.com/v1/wallets/{walletId}/salvage/network-fee \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: TU_CLAVE_API' \
    --data '{
      "senderAddress": "0x1234567890abcdef1234567890abcdef12345678",
      "recipientAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
      "amount": "0.5",
      "blockchainId": "b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.yiksipay.com/v1/wallets/{walletId}/salvage/network-fee',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': 'TU_CLAVE_API'
      },
      body: JSON.stringify({
        senderAddress: '0x1234567890abcdef1234567890abcdef12345678',
        recipientAddress: '0xabcdef1234567890abcdef1234567890abcdef12',
        amount: '0.5',
        blockchainId: 'b80d3d5e-16f1-4d99-be5e-6dfcd27f89aa'
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.post(
      'https://api.yiksipay.com/v1/wallets/{walletId}/salvage/network-fee',
      headers={
          'Content-Type': 'application/json',
          'x-api-key': 'TU_CLAVE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'polygon-mainnet'
      }
  )

  print(response.json())
  ```
</CodeGroup>

### Parámetros de Respuesta de Tarifas

| Parámetro            | Descripción                                         |
| -------------------- | --------------------------------------------------- |
| `networkFee`         | Tarifa de gas estimada en unidades de moneda nativa |
| `networkFeeInUSD`    | Tarifa de gas convertida a USD                      |
| `nativeBalance`      | Saldo actual de moneda nativa del emisor            |
| `nativeBalanceInUSD` | Saldo nativo convertido a USD                       |

<Warning>
  Siempre estime las tarifas antes de ejecutar operaciones de recuperación. La dirección emisora debe tener suficiente moneda nativa para cubrir las tarifas de gas en la blockchain de recuperación.
</Warning>

***

## Webhooks

Suscríbase a eventos de webhook para recibir notificaciones en tiempo real sobre operaciones de recuperación.

### Eventos de Recuperación

| Evento              | Descripción                                                                                                           |
| ------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `salvage.success`   | Se activa cuando una operación de recuperación se completa exitosamente.                                              |
| `salvage.failed`    | Se activa cuando una operación de recuperación falla debido a fondos insuficientes, problemas de red u otros errores. |
| `salvage.cancelled` | Se activa cuando una operación de recuperación es cancelada antes de completarse.                                     |

### Payload del Webhook

```json theme={null}
{
  "event": "salvage.success",
  "data": {
    "id": "txn_abc123",
    "type": "SALVAGE",
    "status": "SUCCESS",
    "amount": "0.5",
    "senderAddress": "0x1234567890abcdef1234567890abcdef12345678",
    "recipientAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
    "blockchain": "polygon-mainnet",
    "txHash": "0x9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba",
    "networkFee": "0.001",
    "createdAt": "2025-01-12T10:30:00Z"
  }
}
```

<Note>
  Configure webhooks en el [Panel de Yiksi Pay](https://dashboard.yiksipay.com/developers) bajo **Developers → Webhooks**. Vea la [documentación de Webhooks](/es/essentials/webhooks) para instrucciones de configuración.
</Note>

***

## Casos de Uso Comunes

<AccordionGroup>
  <Accordion title="Usuario envió USDC en red incorrecta">
    Un usuario quería enviar USDC en Ethereum pero accidentalmente lo envió en Polygon. Como la dirección es la misma, los fondos llegaron a Polygon. Use la recuperación de activos con la dirección del contrato USDC en Polygon para recuperar los fondos.
  </Accordion>

  <Accordion title="ETH enviado a Arbitrum en lugar de Ethereum">
    Un usuario hizo bridge de ETH a Arbitrum pero lo envió a una dirección de Yiksi Pay. La misma dirección existe en Arbitrum debido a la compatibilidad EVM. Recupere el ETH de Arbitrum usando la recuperación de moneda nativa.
  </Accordion>

  <Accordion title="Activo personalizado en Layer 2">
    Un usuario envió un activo ERC-20 personalizado en una red L2 como Optimism. Proporcione la dirección del contrato del activo y use la API de recuperación para recuperarlo.
  </Accordion>

  <Accordion title="Activos en red no soportada">
    Los activos están atrapados en una blockchain no soportada directamente por Yiksi Pay. Proporcione su propio endpoint RPC y establezca `isL2: true` si es un rollup para recuperar los fondos.
  </Accordion>
</AccordionGroup>

***

## Manejo de Errores

<AccordionGroup>
  <Accordion title="Saldo Nativo Insuficiente">
    ```json theme={null}
    {
      "error": "Insufficient native balance for gas",
      "code": "INSUFFICIENT_GAS",
      "details": {
        "required": "0.01",
        "available": "0.001",
        "currency": "MATIC"
      }
    }
    ```

    **Solución:** Financie la dirección emisora con suficiente moneda nativa para cubrir las tarifas de gas antes de reintentar.
  </Accordion>

  <Accordion title="Dirección Emisora Inválida">
    ```json theme={null}
    {
      "error": "Sender address not found in wallet",
      "code": "INVALID_SENDER"
    }
    ```

    **Solución:** Asegúrese de que la dirección emisora pertenezca a su billetera Yiksi Pay y sea una dirección hija válida.
  </Accordion>

  <Accordion title="Activo No Encontrado">
    ```json theme={null}
    {
      "error": "No balance found for specified asset",
      "code": "ASSET_NOT_FOUND",
      "details": {
        "tokenAddress": "0x...",
        "blockchain": "polygon-mainnet"
      }
    }
    ```

    **Solución:** Verifique la dirección del contrato y la blockchain. Use un explorador de bloques para confirmar que el activo existe en la dirección emisora.
  </Accordion>

  <Accordion title="Conexión RPC Fallida">
    ```json theme={null}
    {
      "error": "Failed to connect to custom RPC",
      "code": "RPC_ERROR"
    }
    ```

    **Solución:** Verifique que su URL RPC sea correcta y accesible. Asegúrese de que soporte los métodos JSON-RPC requeridos.
  </Accordion>
</AccordionGroup>

***

## Mejores Prácticas

<CardGroup cols={2}>
  <Card title="Siempre Estime Tarifas Primero" icon="calculator">
    Use el endpoint de tarifas de red antes de la recuperación para asegurar saldo de gas suficiente y mostrar costos precisos.
  </Card>

  <Card title="Verifique Direcciones" icon="magnifying-glass">
    Verifique las direcciones emisora y receptora usando un explorador de bloques antes de iniciar la recuperación.
  </Card>

  <Card title="Use Webhooks" icon="bell">
    Configure webhooks para recibir actualizaciones de estado en tiempo real en lugar de consultar la API.
  </Card>

  <Card title="Pruebe en Testnet" icon="flask">
    Pruebe su integración de recuperación en testnet antes de usarla en producción.
  </Card>
</CardGroup>

***

## Referencia API

| Endpoint                                                                    | Descripción                                  |
| --------------------------------------------------------------------------- | -------------------------------------------- |
| [Salvage](/es/api-reference/asset-recovery/salvage)                         | Iniciar operación de recuperación de activos |
| [Salvage Network Fee](/es/api-reference/asset-recovery/salvage-network-fee) | Estimar tarifas de red para recuperación     |

<br /> ¡Feliz recuperación!
