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

# Liquidity Pool

> Fournissez de la liquidité et gérez les taux de change pour les paires d'actifs

<Note>
  En bref<br />
  Le Liquidity Pool de Blockradar permet aux Liquidity Providers (LP) approuvés de définir et de gérer les taux de change pour les paires d'actifs. Les taux alimentent le moteur de swap interne — lorsqu'un utilisateur lance un swap, le système sélectionne automatiquement le meilleur taux disponible parmi les LP actifs, valide la liquidité et exécute la transaction.
</Note>

<img src="https://mintcdn.com/blockradar/JulBWGK83ekgPTqZ/images/rates.png?fit=max&auto=format&n=JulBWGK83ekgPTqZ&q=85&s=f84f7846199bb84fc2c0f5c7d3f5d2f2" alt="Taux du Liquidity Pool de Blockradar" width="3018" height="1722" data-path="images/rates.png" />

## Prérequis

Avant d'utiliser l'API du Liquidity Pool, assurez-vous d'avoir :

<Steps>
  <Step title="Devenir Liquidity Provider">
    Le Liquidity Pool est réservé aux Liquidity Providers approuvés. Pour commencer, [remplissez le formulaire de candidature LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) et l'équipe Blockradar examinera votre candidature et procédera à votre intégration.
  </Step>

  <Step title="Clé API">
    Une fois intégré, générez une clé API depuis le [Dashboard Blockradar](https://dashboard.blockradar.co). Accédez à **Developers** pour en créer une.
  </Step>

  <Step title="Approvisionnez vos wallets">
    Assurez-vous que vos wallets de trésorerie disposent d'un solde suffisant des actifs pour lesquels vous prévoyez de fournir de la liquidité, ainsi que de tokens natifs pour couvrir les frais de réseau.
  </Step>
</Steps>

## Fonctionnement

En tant que Liquidity Provider, vous définissez des taux de change pour des paires d'actifs (par exemple, BNB → USDC). Lorsqu'un utilisateur de la plateforme Blockradar lance un swap, le système :

1. **Trouve les taux correspondants** parmi tous les LP actifs pour la paire d'actifs demandée.
2. **Classe les candidats** par meilleur taux, priorité du LP et heure de création.
3. **Valide la liquidité** en vérifiant que la wallet de trésorerie du LP sélectionné dispose d'un solde suffisant pour exécuter le swap.
4. **Exécute le swap** en utilisant le taux et la trésorerie du LP sélectionné.

<CardGroup cols={2}>
  <Card title="Rate Management" icon="sliders">
    Créez, mettez à jour, désactivez et réactivez les taux de change pour toute paire d'actifs prise en charge.
  </Card>

  <Card title="Amount Bands" icon="ruler-horizontal">
    Définissez des montants de transaction minimums et maximums par taux pour contrôler l'exposition et segmenter les paliers de tarification.
  </Card>

  <Card title="Version History" icon="clock-rotate-left">
    Chaque modification de taux crée une nouvelle version. L'historique complet est conservé à des fins d'audit et d'analyse.
  </Card>

  <Card title="Automatic Selection" icon="wand-magic-sparkles">
    Le système sélectionne automatiquement le meilleur LP pour chaque swap en fonction du taux, de la priorité et de la liquidité disponible.
  </Card>
</CardGroup>

## Cycle de vie du taux

Les taux suivent un cycle de vie clair avec un suivi complet des versions :

### 1. Créer un taux

Définissez un nouveau taux de change pour une paire d'actifs. Le taux démarre comme **active** à la version 1.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request POST \
    --url https://api.blockradar.co/v1/rates \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: <api-key>' \
    --data '{
      "fromAsset": "BNB",
      "toAsset": "USDC",
      "rate": "605.50",
      "minAmount": "0.01",
      "maxAmount": "100"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.blockradar.co/v1/rates', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': apiKey
    },
    body: JSON.stringify({
      fromAsset: 'BNB',
      toAsset: 'USDC',
      rate: '605.50',
      minAmount: '0.01',
      maxAmount: '100'
    })
  }).then(r => r.json());

  console.log('Rate created:', response.data);
  ```
</CodeGroup>

### Paramètres de la requête

| Paramètre   | Type   | Requis | Description                                                                                                |
| ----------- | ------ | ------ | ---------------------------------------------------------------------------------------------------------- |
| `fromAsset` | string | Oui    | Le symbole de l'actif à convertir **depuis** (par exemple, `BNB`)                                          |
| `toAsset`   | string | Oui    | Le symbole de l'actif à convertir **vers** (par exemple, `USDC`)                                           |
| `rate`      | string | Oui    | Le taux de change. Fourni sous forme de chaîne pour éviter les problèmes de précision en virgule flottante |
| `minAmount` | string | Oui    | Montant minimum de transaction pour ce taux (inclusif)                                                     |
| `maxAmount` | string | Non    | Montant maximum de transaction (exclusif). Omettez pour illimité                                           |

### Réponse de création

```json theme={null}
{
  "message": "Rate created successfully",
  "statusCode": 201,
  "data": {
    "id": "d69078ef-2467-40f4-bb00-63394efe32c0",
    "fromAsset": "BNB",
    "toAsset": "USDC",
    "rate": "605.50",
    "minAmount": "0.01",
    "maxAmount": "100",
    "isActive": true,
    "status": "active",
    "version": 1,
    "network": "testnet",
    "createdAt": "2026-02-19T07:50:17.042Z"
  }
}
```

### 2. Mettre à jour un taux

Modifiez le taux ou les contraintes de montant d'un taux actif existant. Cela crée une **nouvelle version** — la version précédente est automatiquement marquée comme `superseded`.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request PATCH \
    --url https://api.blockradar.co/v1/rates/{id} \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: <api-key>' \
    --data '{
      "rate": "610.00",
      "minAmount": "0.005"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(`https://api.blockradar.co/v1/rates/${rateId}`, {
    method: 'PATCH',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': apiKey
    },
    body: JSON.stringify({
      rate: '610.00',
      minAmount: '0.005'
    })
  }).then(r => r.json());

  console.log('Rate updated:', response.data);
  ```
</CodeGroup>

<Info>
  Ne fournissez que les champs que vous souhaitez modifier — les mises à jour partielles sont prises en charge.
</Info>

### 3. Désactiver un taux

Mettez temporairement un taux hors ligne. Le taux devient **deactivated** et ne sera plus sélectionné pour les swaps.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request PATCH \
    --url https://api.blockradar.co/v1/rates/{id}/deactivate \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: <api-key>' \
    --data '{
      "reason": "Pausing for maintenance"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    `https://api.blockradar.co/v1/rates/${rateId}/deactivate`,
    {
      method: 'PATCH',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey
      },
      body: JSON.stringify({
        reason: 'Pausing for maintenance'
      })
    }
  ).then(r => r.json());

  console.log('Rate deactivated:', response.data);
  ```
</CodeGroup>

### 4. Réactiver un taux

Remettez un taux désactivé en ligne. Cela crée une **nouvelle version** avec le statut `active`.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request PATCH \
    --url https://api.blockradar.co/v1/rates/{id}/reactivate \
    --header 'x-api-key: <api-key>'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    `https://api.blockradar.co/v1/rates/${rateId}/reactivate`,
    {
      method: 'PATCH',
      headers: { 'x-api-key': apiKey }
    }
  ).then(r => r.json());

  console.log('Rate reactivated:', response.data);
  ```
</CodeGroup>

## Pricing Tools

Avant de coter un nouveau palier ou de retarifer un palier existant, utilisez les Pricing Tools pour inspecter votre propre couverture et vous comparer aux autres Liquidity Providers du même segment d'activité.

### Vérifier les taux actifs pour une paire

`GET /rates/check-pair` retourne tous les taux actifs que vous avez configurés pour une paire d'actifs sur l'environnement actuel, y compris la fourchette de montants de chacun. Utilisez-le pour confirmer si vous cotez déjà une paire avant d'ouvrir un nouveau palier.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request GET \
    --url 'https://api.blockradar.co/v1/rates/check-pair?fromAsset=USDT&toAsset=cNGN' \
    --header 'x-api-key: <api-key>'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.blockradar.co/v1/rates/check-pair?fromAsset=USDT&toAsset=cNGN',
    { headers: { 'x-api-key': apiKey } }
  ).then(r => r.json());

  console.log('Active rates:', response.data.rates);
  ```
</CodeGroup>

```json Response theme={null}
{
  "message": "Pair check completed",
  "statusCode": 200,
  "data": {
    "fromAsset": "USDT",
    "toAsset": "cNGN",
    "hasActiveRates": true,
    "activeRateCount": 2,
    "rates": [
      {
        "id": "d69078ef-2467-40f4-bb00-63394efe32c0",
        "rate": "1545.00",
        "minAmount": "10",
        "maxAmount": "1000",
        "version": 1,
        "createdAt": "2026-04-12T09:14:22.501Z"
      },
      {
        "id": "5b6683f0-6e92-4eaf-ae8d-5f2ddd76b376",
        "rate": "1547.50",
        "minAmount": "1000",
        "maxAmount": null,
        "version": 3,
        "createdAt": "2026-04-12T09:18:41.022Z"
      }
    ]
  }
}
```

### Se comparer aux autres LP

`GET /rates/market-benchmark` retourne le meilleur taux concurrent pour une paire d'actifs parmi les autres Liquidity Providers de votre segment d'activité. Vos propres taux sont exclus afin que vous puissiez voir face à quoi vous cotez. Les résultats sont mis en cache pendant 60 secondes par paire.

Passez `amount` pour limiter le benchmark aux taux dont la fourchette couvre cette taille de transaction, ou passez `pairs` (entrées `from:to` séparées par des virgules, max 20) pour obtenir un tableau de benchmarks en un seul appel.

<CodeGroup>
  ```bash Single pair theme={null}
  curl --request GET \
    --url 'https://api.blockradar.co/v1/rates/market-benchmark?fromAsset=USDT&toAsset=cNGN' \
    --header 'x-api-key: <api-key>'
  ```

  ```bash Batch theme={null}
  curl --request GET \
    --url 'https://api.blockradar.co/v1/rates/market-benchmark?pairs=USDT:cNGN,cNGN:USDT' \
    --header 'x-api-key: <api-key>'
  ```

  ```javascript JavaScript theme={null}
  const single = await fetch(
    'https://api.blockradar.co/v1/rates/market-benchmark?fromAsset=USDT&toAsset=cNGN',
    { headers: { 'x-api-key': apiKey } }
  ).then(r => r.json());

  const batch = await fetch(
    'https://api.blockradar.co/v1/rates/market-benchmark?pairs=USDT:cNGN,cNGN:USDT',
    { headers: { 'x-api-key': apiKey } }
  ).then(r => r.json());
  ```
</CodeGroup>

```json Single pair response theme={null}
{
  "message": "Market benchmark retrieved",
  "statusCode": 200,
  "data": {
    "fromAsset": "USDT",
    "toAsset": "cNGN",
    "bestRate": "1547.50"
  }
}
```

```json Batch response theme={null}
{
  "message": "Market benchmark retrieved",
  "statusCode": 200,
  "data": [
    { "fromAsset": "USDT", "toAsset": "cNGN", "bestRate": "1547.50" },
    { "fromAsset": "cNGN", "toAsset": "USDT", "bestRate": "0.000647" }
  ]
}
```

<Info>
  `bestRate` est `null` lorsqu'aucun autre LP n'a de taux actif pour la paire (ou pour la fourchette de montants fournie).
</Info>

### Inspecter les soldes de trésorerie

`GET /rates/treasury-balances` retourne les soldes de trésorerie agrégés pour chaque actif présent dans vos taux actifs, ventilés par blockchain. Utilisez-le pour surveiller la couverture de liquidité sur les paires que vous cotez.

La réponse exclut les actifs dont le solde on-chain est nul et déduplique les entrées lorsque la même paire actif/wallet est référencée par plusieurs taux.

<CodeGroup>
  ```bash Curl theme={null}
  curl --request GET \
    --url https://api.blockradar.co/v1/rates/treasury-balances \
    --header 'x-api-key: <api-key>'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.blockradar.co/v1/rates/treasury-balances',
    { headers: { 'x-api-key': apiKey } }
  ).then(r => r.json());

  console.log('Treasury balances:', response.data);
  ```
</CodeGroup>

```json Response theme={null}
{
  "message": "Treasury balances retrieved successfully",
  "statusCode": 200,
  "data": [
    {
      "asset": "USDT",
      "totalBalance": "5000.00",
      "totalConvertedBalance": "5000.00",
      "chains": [
        {
          "blockchain": "ethereum",
          "balance": "3000.00",
          "convertedBalance": "3000.00",
          "walletAddress": "0xA1b2C3d4E5f6789012345678901234567890aBcD"
        },
        {
          "blockchain": "polygon",
          "balance": "2000.00",
          "convertedBalance": "2000.00",
          "walletAddress": "0xA1b2C3d4E5f6789012345678901234567890aBcD"
        }
      ]
    }
  ]
}
```

## Versionnement des taux

Chaque fois qu'un taux est mis à jour ou réactivé, une nouvelle version est créée. La version précédente est marquée comme `superseded`. Cela fournit une piste d'audit complète.

| Champ            | Description                                                                       |
| ---------------- | --------------------------------------------------------------------------------- |
| `version`        | Numéro de version séquentiel commençant à 1                                       |
| `rootRateId`     | Pointe vers le taux d'origine — toutes les versions d'une chaîne partagent cet ID |
| `previousRateId` | Pointe vers la version immédiatement précédente                                   |

### Exemple de chaîne de versions

```
v1 (active)  →  v2 (active, v1 superseded)  →  v3 (deactivated)  →  v4 (active, v3 superseded)
```

### Consulter l'historique d'un taux

Récupérez l'historique complet des versions d'un taux :

<CodeGroup>
  ```bash Curl theme={null}
  curl --request GET \
    --url https://api.blockradar.co/v1/rates/{id}/history \
    --header 'x-api-key: <api-key>'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    `https://api.blockradar.co/v1/rates/${rateId}/history`,
    {
      headers: { 'x-api-key': apiKey }
    }
  ).then(r => r.json());

  console.log('History:', response.data);
  console.log('Page:', response.meta.currentPage);
  ```
</CodeGroup>

### Réponse de l'historique

```json theme={null}
{
  "message": "Rate history retrieved successfully",
  "statusCode": 200,
  "data": [
    {
      "id": "d69078ef-2467-40f4-bb00-63394efe32c0",
      "fromAsset": "BNB",
      "toAsset": "USDC",
      "network": "testnet",
      "rate": "605.50",
      "minAmount": "0.01",
      "maxAmount": null,
      "isActive": false,
      "status": "deactivated",
      "version": 1,
      "previousRateId": null,
      "rootRateId": null,
      "createdBy": "86964e42-79dc-4267-a2ca-3612c4b095a8",
      "deactivatedBy": "86964e42-79dc-4267-a2ca-3612c4b095a8",
      "deactivatedAt": "2026-02-25T18:13:48.113Z",
      "deactivationReason": "re",
      "createdAt": "2026-02-19T07:50:17.042Z",
      "updatedAt": "2026-02-25T18:13:48.101Z"
    }
  ],
  "meta": {
    "totalItems": 1,
    "itemCount": 1,
    "itemsPerPage": 10,
    "totalPages": 1,
    "currentPage": 1
  }
}
```

## Statuts des taux

| Statut        | Description                                                                     |
| ------------- | ------------------------------------------------------------------------------- |
| `active`      | Actuellement en ligne et éligible à la sélection pour les swaps                 |
| `superseded`  | Remplacé par une version plus récente (via une mise à jour ou une réactivation) |
| `deactivated` | Mis hors ligne manuellement — peut être réactivé                                |

<Warning>
  `superseded` est un état terminal — ces enregistrements sont historiques et ne peuvent pas être modifiés.
</Warning>

## Amount Bands

Chaque taux couvre une plage de montants de transaction définie par `minAmount` et `maxAmount` :

* **`minAmount`** — La borne inférieure inclusive. Les transactions inférieures à ce montant n'utiliseront pas ce taux.
* **`maxAmount`** — La borne supérieure exclusive. Définissez-la sur `null` (omettez) pour illimité.

### Plusieurs taux pour la même paire

Vous pouvez créer plusieurs taux pour la même paire d'actifs avec différentes fourchettes de montants pour proposer une tarification par paliers :

| Taux   | Fourchette    | Cas d'usage           |
| ------ | ------------- | --------------------- |
| 605.00 | 0.01 – 10 BNB | Petites transactions  |
| 606.50 | 10 – 100 BNB  | Transactions moyennes |
| 608.00 | 100+ BNB      | Grosses transactions  |

<Warning>
  Les fourchettes de montants pour la même paire d'actifs **ne doivent pas se chevaucher**. Le système rejettera un taux si sa fourchette chevauche celle d'un autre taux actif pour la même paire.
</Warning>

## Validation de la liquidité

Avant d'exécuter un swap en utilisant votre taux, le système vérifie que votre wallet de trésorerie dispose de :

1. **Solde de token suffisant** de l'actif de destination pour couvrir la sortie du swap (`amount x rate`).
2. **Solde de token natif suffisant** (ETH, BNB, etc.) pour couvrir les frais de réseau du transfert.

Si le solde de votre wallet est insuffisant, le système ignore votre taux et passe au LP disponible suivant. Vous recevrez une alerte par e-mail lorsque votre liquidité sera faible.

<Tip>
  Maintenez vos wallets de trésorerie bien approvisionnées pour éviter de manquer des opportunités de swap. Le système vous notifiera lorsque les soldes passeront sous les seuils.
</Tip>

## Bonnes pratiques

### Rate Management

* **Surveillez les conditions du marché** et mettez régulièrement à jour les taux pour rester compétitif
* **Utilisez les Amount Bands** pour proposer une tarification par paliers selon les différentes tailles de transaction
* **Désactivez les taux** pendant la maintenance ou les fortes volatilités au lieu de les supprimer
* **Consultez le Version History** pour suivre les changements de taux dans le temps

### Liquidité

* **Maintenez un solde suffisant** dans vos wallets de trésorerie tant pour l'actif de destination que pour les tokens natifs
* **Mettez en place un monitoring** pour les alertes de solde faible
* **Approvisionnez les wallets de manière proactive** pour éviter les ruptures de service

## Référence de l'API

| Endpoint                                                                        | Description                                                                    |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| [Create Rate](/en/api-reference/liquidity-pool/create-rate)                     | Créez un nouveau taux de change pour une paire d'actifs                        |
| [Get Rate](/en/api-reference/liquidity-pool/get-rate)                           | Récupérez un seul taux par ID                                                  |
| [Update Rate](/en/api-reference/liquidity-pool/update-rate)                     | Mettez à jour un taux existant (crée une nouvelle version)                     |
| [Deactivate Rate](/en/api-reference/liquidity-pool/deactivate-rate)             | Mettez un taux hors ligne                                                      |
| [Reactivate Rate](/en/api-reference/liquidity-pool/reactivate-rate)             | Remettez un taux désactivé en ligne                                            |
| [Get Rate History](/en/api-reference/liquidity-pool/get-rate-history)           | Consultez l'historique complet des versions d'un taux                          |
| [Check Pair](/en/api-reference/liquidity-pool/check-pair)                       | Listez vos taux actifs pour une paire d'actifs spécifique                      |
| [Get Market Benchmark](/en/api-reference/liquidity-pool/get-market-benchmark)   | Meilleur taux concurrent pour une paire (ou un lot de paires), hors les vôtres |
| [Get Treasury Balances](/en/api-reference/liquidity-pool/get-treasury-balances) | Soldes de trésorerie agrégés regroupés par actif et blockchain                 |

## Support

* **E-mail** : [support@blockradar.co](mailto:support@blockradar.co)
* **Devenir LP** : [Postulez ici](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) pour manifester votre intérêt à devenir Liquidity Provider

<Note>
  Le Liquidity Pool est conçu pour les fournisseurs de liquidité institutionnels et professionnels. [Postulez pour devenir LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form), puis testez vos configurations de taux sur testnet avant de passer en production.
</Note>
