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

> Aporte liquidez y gestione tipos de cambio para pares de activos

<Note>
  En resumen<br />
  El Liquidity Pool de Blockradar permite que los Liquidity Providers (LPs) aprobados definan y gestionen tipos de cambio para pares de activos. Las tasas alimentan el motor interno de swaps: cuando un usuario inicia un swap, el sistema selecciona automáticamente la mejor tasa disponible de los LPs activos, valida la liquidez y ejecuta la transacción.
</Note>

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

## Requisitos previos

Antes de utilizar la API del Liquidity Pool, asegúrese de contar con:

<Steps>
  <Step title="Conviértase en Liquidity Provider">
    El Liquidity Pool está disponible únicamente para Liquidity Providers aprobados. Para comenzar, [complete el formulario de solicitud de LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) y el equipo de Blockradar revisará su solicitud y lo incorporará.
  </Step>

  <Step title="Clave API">
    Una vez incorporado, genere una clave API desde el [Dashboard de Blockradar](https://dashboard.blockradar.co). Vaya a **Developers** para crear una.
  </Step>

  <Step title="Financie sus wallets">
    Asegúrese de que sus wallets de tesorería tengan saldo suficiente de los activos para los que planea aportar liquidez, además de tokens nativos para cubrir las comisiones de red.
  </Step>
</Steps>

## Cómo funciona

Como Liquidity Provider, usted define tipos de cambio para pares de activos (por ejemplo, BNB → USDC). Cuando un usuario en la plataforma de Blockradar inicia un swap, el sistema:

1. **Encuentra tasas coincidentes** de todos los LPs activos para el par de activos solicitado.
2. **Clasifica los candidatos** por mejor tasa, prioridad del LP y hora de creación.
3. **Valida la liquidez** comprobando que la wallet de tesorería del LP seleccionado tenga saldo suficiente para cumplir con el swap.
4. **Ejecuta el swap** utilizando la tasa y la tesorería del LP seleccionado.

<CardGroup cols={2}>
  <Card title="Rate Management" icon="sliders">
    Cree, actualice, desactive y reactive tipos de cambio para cualquier par de activos compatible.
  </Card>

  <Card title="Amount Bands" icon="ruler-horizontal">
    Defina montos mínimos y máximos de transacción por tasa para controlar la exposición y segmentar niveles de precios.
  </Card>

  <Card title="Version History" icon="clock-rotate-left">
    Cada cambio de tasa crea una nueva versión. Se conserva el historial completo para auditoría y análisis.
  </Card>

  <Card title="Automatic Selection" icon="wand-magic-sparkles">
    El sistema selecciona automáticamente el mejor LP para cada swap en función de la tasa, la prioridad y la liquidez disponible.
  </Card>
</CardGroup>

## Ciclo de vida de la tasa

Las tasas siguen un ciclo de vida claro con seguimiento completo de versiones:

### 1. Crear una tasa

Defina un nuevo tipo de cambio para un par de activos. La tasa comienza como **active** en la versión 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>

### Parámetros de la solicitud

| Parámetro   | Tipo   | Requerido | Descripción                                                                                       |
| ----------- | ------ | --------- | ------------------------------------------------------------------------------------------------- |
| `fromAsset` | string | Sí        | El símbolo del activo a convertir **desde** (por ejemplo, `BNB`)                                  |
| `toAsset`   | string | Sí        | El símbolo del activo a convertir **a** (por ejemplo, `USDC`)                                     |
| `rate`      | string | Sí        | El tipo de cambio. Se proporciona como cadena para evitar problemas de precisión de coma flotante |
| `minAmount` | string | Sí        | Monto mínimo de transacción para esta tasa (inclusive)                                            |
| `maxAmount` | string | No        | Monto máximo de transacción (exclusivo). Omita para que sea ilimitado                             |

### Respuesta de creación

```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. Actualizar una tasa

Modifique la tasa o las restricciones de monto de una tasa activa existente. Esto crea una **nueva versión**: la versión anterior se marca automáticamente como `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>
  Proporcione únicamente los campos que desea cambiar: se admiten actualizaciones parciales.
</Info>

### 3. Desactivar una tasa

Retire temporalmente una tasa. La tasa pasa a estar **deactivated** y ya no se seleccionará para 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. Reactivar una tasa

Vuelva a poner en línea una tasa desactivada. Esto crea una **nueva versión** con estado `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

Antes de cotizar un nuevo nivel o reajustar uno existente, utilice las Pricing Tools para inspeccionar su propia cobertura y compararse con otros Liquidity Providers del mismo segmento de negocio.

### Consultar tasas activas para un par

`GET /rates/check-pair` devuelve todas las tasas activas que ha configurado para un par de activos en el entorno actual, incluida la banda de monto de cada una. Úselo para confirmar si ya está cotizando un par antes de abrir un nuevo nivel.

<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"
      }
    ]
  }
}
```

### Comparar con otros LPs

`GET /rates/market-benchmark` devuelve la mejor tasa competidora para un par de activos entre otros Liquidity Providers de su segmento de negocio. Sus propias tasas se excluyen para que pueda ver con qué está compitiendo. Los resultados se almacenan en caché durante 60 segundos por par.

Pase `amount` para restringir el benchmark a las tasas cuya banda cubra ese tamaño de transacción, o pase `pairs` (entradas `from:to` separadas por comas, máximo 20) para obtener un arreglo de benchmarks en una sola llamada.

<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` es `null` cuando ningún otro LP tiene una tasa activa para el par (o para la banda de monto proporcionada).
</Info>

### Inspeccionar saldos de tesorería

`GET /rates/treasury-balances` devuelve los saldos de tesorería agregados de cada activo que aparece en sus tasas activas, desglosados por blockchain. Úselo para supervisar la cobertura de liquidez en los pares que está cotizando.

La respuesta excluye activos con saldo on-chain igual a cero y elimina entradas duplicadas cuando varias tasas hacen referencia al mismo par activo/wallet.

<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"
        }
      ]
    }
  ]
}
```

## Versionado de tasas

Cada vez que se actualiza o reactiva una tasa, se crea una nueva versión. La versión anterior se marca como `superseded`. Esto proporciona un registro de auditoría completo.

| Campo            | Descripción                                                                    |
| ---------------- | ------------------------------------------------------------------------------ |
| `version`        | Número de versión secuencial que comienza en 1                                 |
| `rootRateId`     | Apunta a la tasa original: todas las versiones de una cadena comparten este ID |
| `previousRateId` | Apunta a la versión inmediatamente anterior                                    |

### Ejemplo de cadena de versiones

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

### Ver el historial de la tasa

Recupere el historial completo de versiones de una tasa:

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

### Respuesta del historial

```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
  }
}
```

## Estados de la tasa

| Estado        | Descripción                                                                      |
| ------------- | -------------------------------------------------------------------------------- |
| `active`      | Actualmente vigente y elegible para selección en swaps                           |
| `superseded`  | Reemplazada por una versión más reciente (mediante actualización o reactivación) |
| `deactivated` | Retirada manualmente: puede reactivarse                                          |

<Warning>
  `superseded` es un estado terminal: estos registros son históricos y no pueden modificarse.
</Warning>

## Amount Bands

Cada tasa cubre un rango de montos de transacción definido por `minAmount` y `maxAmount`:

* **`minAmount`**: el límite inferior inclusivo. Las transacciones por debajo de este monto no usarán esta tasa.
* **`maxAmount`**: el límite superior exclusivo. Establézcalo en `null` (omita) para que sea ilimitado.

### Múltiples tasas para el mismo par

Puede crear varias tasas para el mismo par de activos con diferentes bandas de monto para ofrecer precios escalonados:

| Tasa   | Banda         | Caso de uso            |
| ------ | ------------- | ---------------------- |
| 605.00 | 0.01 – 10 BNB | Transacciones pequeñas |
| 606.50 | 10 – 100 BNB  | Transacciones medianas |
| 608.00 | 100+ BNB      | Transacciones grandes  |

<Warning>
  Las bandas de monto para el mismo par de activos **no deben superponerse**. El sistema rechazará una tasa si su banda se superpone con otra tasa activa para el mismo par.
</Warning>

## Validación de liquidez

Antes de ejecutar un swap utilizando su tasa, el sistema valida que su wallet de tesorería tenga:

1. **Saldo de token suficiente** del activo de destino para cubrir la salida del swap (`amount x rate`).
2. **Saldo suficiente de token nativo** (ETH, BNB, etc.) para cubrir las comisiones de red de la transferencia.

Si el saldo de su wallet es insuficiente, el sistema omite su tasa y pasa al siguiente LP disponible. Recibirá una alerta por correo electrónico cuando su liquidez sea baja.

<Tip>
  Mantenga sus wallets de tesorería bien financiadas para evitar perder oportunidades de swap. El sistema le notificará cuando los saldos caigan por debajo de los umbrales.
</Tip>

## Buenas prácticas

### Rate Management

* **Supervise las condiciones del mercado** y actualice las tasas con regularidad para mantenerse competitivo
* **Use Amount Bands** para ofrecer precios escalonados según los distintos tamaños de transacción
* **Desactive las tasas** durante mantenimiento o alta volatilidad en lugar de eliminarlas
* **Revise el Version History** para hacer seguimiento de los cambios de tasa a lo largo del tiempo

### Liquidez

* **Mantenga saldo suficiente** en sus wallets de tesorería tanto del activo de destino como de los tokens nativos
* **Configure el monitoreo** para recibir alertas de saldo bajo
* **Financie las wallets de forma proactiva** para evitar interrupciones del servicio

## Referencia de la API

| Endpoint                                                                        | Descripción                                                                   |
| ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Create Rate](/en/api-reference/liquidity-pool/create-rate)                     | Cree un nuevo tipo de cambio para un par de activos                           |
| [Get Rate](/en/api-reference/liquidity-pool/get-rate)                           | Recupere una sola tasa por ID                                                 |
| [Update Rate](/en/api-reference/liquidity-pool/update-rate)                     | Actualice una tasa existente (crea una nueva versión)                         |
| [Deactivate Rate](/en/api-reference/liquidity-pool/deactivate-rate)             | Retire una tasa                                                               |
| [Reactivate Rate](/en/api-reference/liquidity-pool/reactivate-rate)             | Vuelva a poner en línea una tasa desactivada                                  |
| [Get Rate History](/en/api-reference/liquidity-pool/get-rate-history)           | Vea el historial completo de versiones de una tasa                            |
| [Check Pair](/en/api-reference/liquidity-pool/check-pair)                       | Liste sus tasas activas para un par de activos específico                     |
| [Get Market Benchmark](/en/api-reference/liquidity-pool/get-market-benchmark)   | Mejor tasa competidora para un par (o un lote de pares), excluyendo las suyas |
| [Get Treasury Balances](/en/api-reference/liquidity-pool/get-treasury-balances) | Saldos de tesorería agregados agrupados por activo y blockchain               |

## Soporte

* **Correo electrónico**: [support@blockradar.co](mailto:support@blockradar.co)
* **Conviértase en LP**: [Postule aquí](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) para manifestar su interés en convertirse en Liquidity Provider

<Note>
  El Liquidity Pool está diseñado para proveedores de liquidez institucionales y profesionales. [Postule para convertirse en LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) y, a continuación, pruebe sus configuraciones de tasas en testnet antes de pasar a producción.
</Note>
