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

# Recuperation d'Actifs

> Recuperez des actifs envoyes a la bonne adresse sur la mauvaise blockchain

<Note>
  En bref<br />
  L'API de Recuperation d'Actifs Yiksi Pay vous permet de recuperer des actifs qui ont ete accidentellement envoyes a la bonne adresse sur la mauvaise blockchain. Elle prend en charge la monnaie native et les actifs personnalises (ERC-20 et standards compatibles) sur tous les reseaux supportes.
</Note>

## Qu'est-ce que la Recuperation d'Actifs?

La recuperation d'actifs vous permet de recuperer des fonds qui ont ete envoyes a la bonne adresse de portefeuille mais sur le mauvais reseau blockchain. Cela se produit couramment lorsque:

* Les utilisateurs envoient des actifs sur Ethereum mais voulaient envoyer sur Polygon
* Des actifs sont envoyes sur BNB Smart Chain au lieu d'Arbitrum
* Toute confusion d'adresses entre chaines ou la meme adresse existe sur plusieurs reseaux compatibles EVM

<Info>
  Etant donne que les blockchains compatibles EVM partagent le meme format d'adresse, la meme adresse peut recevoir des actifs sur plusieurs reseaux. La recuperation d'actifs vous permet d'acceder a ces fonds de maniere programmatique.
</Info>

## Prerequis

Avant d'utiliser l'API de Recuperation d'Actifs, assurez-vous d'avoir:

<Steps>
  <Step title="Cle API">
    Obtenez votre cle API depuis le [Tableau de Bord Yiksi Pay](https://dashboard.yiksipay.com). Naviguez vers **Parametres → Cles API** pour en generer une.
  </Step>

  <Step title="Portefeuille Cree">
    Creez un portefeuille via l'[API Creer Portefeuille](/fr/api-reference/wallets/create-wallet) ou le tableau de bord. Vous aurez besoin du `walletId` pour les operations de recuperation.
  </Step>

  <Step title="ID Blockchain">
    Obtenez le `blockchainId` pour le reseau ou les actifs sont bloques. Vous pouvez le trouver dans le tableau de bord ou via l'[API Obtenir Blockchains](/fr/api-reference/miscellaneous/get-blockchains).
  </Step>

  <Step title="Solde en Monnaie Native">
    Assurez-vous que l'adresse emettrice dispose de suffisamment de monnaie native (ETH, BNB, MATIC, etc.) sur la blockchain de recuperation pour couvrir les frais de gas.
  </Step>
</Steps>

## Comment Ca Fonctionne

L'API de Recuperation d'Actifs transfere des actifs d'une adresse emettrice (ou les actifs sont bloques) vers une adresse destinataire sur la meme blockchain:

<CardGroup cols={2}>
  <Card title="Recuperation de Monnaie Native" icon="coins">
    Recuperez de la monnaie native comme ETH, BNB, MATIC ou AVAX envoyee sur le mauvais reseau.
  </Card>

  <Card title="Recuperation d'Actifs Personnalises" icon="file-contract">
    Recuperez des actifs ERC-20 et compatibles en specifiant l'adresse du contrat.
  </Card>

  <Card title="Estimation des Frais" icon="calculator">
    Calculez les frais de reseau avant l'execution pour assurer un solde suffisant.
  </Card>

  <Card title="Support RPC Personnalise" icon="server">
    Recuperez des actifs sur des blockchains non supportees en fournissant votre propre endpoint RPC.
  </Card>
</CardGroup>

## Blockchains Supportees

La recuperation d'actifs est disponible sur **toutes les blockchains** supportees par Yiksi Pay, y compris les reseaux compatibles EVM, Tron et Solana. Voir [Integrations](/fr/essentials/integrations) pour la liste complete des reseaux supportes et les liens vers les faucets.

<Note>
  Pour les reseaux EVM non directement supportes, vous pouvez fournir une URL RPC personnalisee et optionnellement activer le mode Layer 2 pour les reseaux bases sur des rollups.
</Note>

<Tip>
  Commencez avec les testnets pendant le developpement pour eviter de depenser des fonds reels.
</Tip>

***

## Recuperer des Actifs

Initiez une operation de recuperation d'actifs pour transferer des actifs bloques vers une adresse destinataire.

### Parametres de Requete

| Parametre          | Type          | Requis | Description                                                                                                                                  |
| ------------------ | ------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `senderAddress`    | string        | Oui    | L'adresse Yiksi Pay ou les actifs sont actuellement bloques.                                                                                 |
| `recipientAddress` | string        | Oui    | L'adresse de destination ou les actifs recuperes seront envoyes.                                                                             |
| `amount`           | string        | Oui    | Le montant a recuperer. Utilisez le montant complet ou une portion.                                                                          |
| `blockchainId`     | string (UUID) | Oui    | L'UUID blockchain ou la recuperation aura lieu. Obtenez-le via l'[API Obtenir Blockchains](/fr/api-reference/miscellaneous/get-blockchains). |
| `tokenAddress`     | string        | Non    | Adresse du contrat pour la recuperation d'actifs personnalises. Omettez pour la monnaie native.                                              |
| `rpcUrl`           | string        | Non    | Endpoint RPC personnalise pour les blockchains non supportees.                                                                               |
| `isL2`             | boolean       | Non    | Definissez sur `true` si l'URL RPC pointe vers un reseau Layer 2.                                                                            |

### Recuperation de Monnaie Native

Recuperez de la monnaie native (ETH, BNB, MATIC, etc.) du mauvais reseau:

<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: VOTRE_CLE_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': 'VOTRE_CLE_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': 'VOTRE_CLE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'polygon-mainnet'
      }
  )

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

### Recuperation d'Actifs Personnalises

Recuperez des actifs ERC-20 ou compatibles en specifiant l'adresse du contrat:

<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: VOTRE_CLE_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': 'VOTRE_CLE_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': 'VOTRE_CLE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '100',
          'blockchainId': 'polygon-mainnet',
          'tokenAddress': '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359'
      }
  )

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

### Recuperation avec RPC Personnalise

Recuperez des actifs sur des blockchains non supportees en fournissant votre propre 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: VOTRE_CLE_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': 'VOTRE_CLE_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': 'VOTRE_CLE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'custom',
          'rpcUrl': 'https://rpc.custom-network.io',
          'isL2': True
      }
  )

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

### Reponse Reussie

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

***

## Estimation des Frais de Reseau

Avant d'executer une recuperation, estimez les frais de reseau pour assurer un solde suffisant.

### Requete d'Estimation des Frais

<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: VOTRE_CLE_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': 'VOTRE_CLE_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': 'VOTRE_CLE_API'
      },
      json={
          'senderAddress': '0x1234567890abcdef1234567890abcdef12345678',
          'recipientAddress': '0xabcdef1234567890abcdef1234567890abcdef12',
          'amount': '0.5',
          'blockchainId': 'polygon-mainnet'
      }
  )

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

### Parametres de Reponse des Frais

| Parametre            | Description                                      |
| -------------------- | ------------------------------------------------ |
| `networkFee`         | Frais de gas estimes en unites de monnaie native |
| `networkFeeInUSD`    | Frais de gas convertis en USD                    |
| `nativeBalance`      | Solde actuel en monnaie native de l'emetteur     |
| `nativeBalanceInUSD` | Solde natif converti en USD                      |

<Warning>
  Estimez toujours les frais avant d'executer des operations de recuperation. L'adresse emettrice doit avoir suffisamment de monnaie native pour couvrir les frais de gas sur la blockchain de recuperation.
</Warning>

***

## Webhooks

Abonnez-vous aux evenements webhook pour recevoir des notifications en temps reel sur les operations de recuperation.

### Evenements de Recuperation

| Evenement           | Description                                                                                                                        |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `salvage.success`   | Declenche lorsqu'une operation de recuperation se termine avec succes.                                                             |
| `salvage.failed`    | Declenche lorsqu'une operation de recuperation echoue en raison de fonds insuffisants, de problemes de reseau ou d'autres erreurs. |
| `salvage.cancelled` | Declenche lorsqu'une operation de recuperation est annulee avant son achevement.                                                   |

### Payload 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>
  Configurez les webhooks dans le [Tableau de Bord Yiksi Pay](https://dashboard.yiksipay.com/developers) sous **Developers → Webhooks**. Consultez la [documentation Webhooks](/fr/essentials/webhooks) pour les instructions de configuration.
</Note>

***

## Cas d'Utilisation Courants

<AccordionGroup>
  <Accordion title="Utilisateur a envoye USDC sur le mauvais reseau">
    Un utilisateur voulait envoyer des USDC sur Ethereum mais les a accidentellement envoyes sur Polygon. Comme l'adresse est la meme, les fonds sont arrives sur Polygon. Utilisez la recuperation d'actifs avec l'adresse du contrat USDC sur Polygon pour recuperer les fonds.
  </Accordion>

  <Accordion title="ETH envoye sur Arbitrum au lieu d'Ethereum">
    Un utilisateur a fait un bridge d'ETH vers Arbitrum mais l'a envoye a une adresse Yiksi Pay. La meme adresse existe sur Arbitrum grace a la compatibilite EVM. Recuperez l'ETH d'Arbitrum en utilisant la recuperation de monnaie native.
  </Accordion>

  <Accordion title="Actif personnalise sur Layer 2">
    Un utilisateur a envoye un actif ERC-20 personnalise sur un reseau L2 comme Optimism. Fournissez l'adresse du contrat de l'actif et utilisez l'API de recuperation pour le recuperer.
  </Accordion>

  <Accordion title="Actifs sur reseau non supporte">
    Des actifs sont bloques sur une blockchain non directement supportee par Yiksi Pay. Fournissez votre propre endpoint RPC et definissez `isL2: true` s'il s'agit d'un rollup pour recuperer les fonds.
  </Accordion>
</AccordionGroup>

***

## Gestion des Erreurs

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

    **Solution:** Approvisionnez l'adresse emettrice avec suffisamment de monnaie native pour couvrir les frais de gas avant de reessayer.
  </Accordion>

  <Accordion title="Adresse Emettrice Invalide">
    ```json theme={null}
    {
      "error": "Sender address not found in wallet",
      "code": "INVALID_SENDER"
    }
    ```

    **Solution:** Assurez-vous que l'adresse emettrice appartient a votre portefeuille Yiksi Pay et est une adresse enfant valide.
  </Accordion>

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

    **Solution:** Verifiez l'adresse du contrat et la blockchain. Utilisez un explorateur de blocs pour confirmer que l'actif existe a l'adresse emettrice.
  </Accordion>

  <Accordion title="Connexion RPC Echouee">
    ```json theme={null}
    {
      "error": "Failed to connect to custom RPC",
      "code": "RPC_ERROR"
    }
    ```

    **Solution:** Verifiez que votre URL RPC est correcte et accessible. Assurez-vous qu'elle supporte les methodes JSON-RPC requises.
  </Accordion>
</AccordionGroup>

***

## Bonnes Pratiques

<CardGroup cols={2}>
  <Card title="Toujours Estimer les Frais d'Abord" icon="calculator">
    Utilisez l'endpoint des frais de reseau avant la recuperation pour assurer un solde de gas suffisant et afficher des couts precis.
  </Card>

  <Card title="Verifiez les Adresses" icon="magnifying-glass">
    Verifiez les adresses emettrice et destinataire en utilisant un explorateur de blocs avant d'initier la recuperation.
  </Card>

  <Card title="Utilisez les Webhooks" icon="bell">
    Configurez des webhooks pour recevoir des mises a jour de statut en temps reel au lieu d'interroger l'API.
  </Card>

  <Card title="Testez sur Testnet" icon="flask">
    Testez votre integration de recuperation sur testnet avant de l'utiliser en production.
  </Card>
</CardGroup>

***

## Reference API

| Endpoint                                                                    | Description                                      |
| --------------------------------------------------------------------------- | ------------------------------------------------ |
| [Salvage](/fr/api-reference/asset-recovery/salvage)                         | Initier une operation de recuperation d'actifs   |
| [Salvage Network Fee](/fr/api-reference/asset-recovery/salvage-network-fee) | Estimer les frais de reseau pour la recuperation |

<br /> Bonne recuperation!
