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

> Forneça liquidez e gerencie taxas de câmbio para pares de ativos

<Note>
  Em resumo<br />
  O Liquidity Pool da Blockradar permite que Liquidity Providers (LPs) aprovados definam e gerenciem taxas de câmbio para pares de ativos. As taxas alimentam o motor interno de swaps — quando um usuário inicia um swap, o sistema seleciona automaticamente a melhor taxa disponível entre os LPs ativos, valida a liquidez e executa a transação.
</Note>

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

## Pré-requisitos

Antes de usar a API do Liquidity Pool, certifique-se de ter:

<Steps>
  <Step title="Torne-se um Liquidity Provider">
    O Liquidity Pool está disponível apenas para Liquidity Providers aprovados. Para começar, [preencha o formulário de inscrição de LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) e a equipe da Blockradar analisará sua solicitação e fará seu onboarding.
  </Step>

  <Step title="Chave de API">
    Após o onboarding, gere uma chave de API no [Dashboard da Blockradar](https://dashboard.blockradar.co). Acesse **Developers** para criar uma.
  </Step>

  <Step title="Financie suas wallets">
    Garanta que suas wallets de tesouraria tenham saldo suficiente dos ativos para os quais você pretende fornecer liquidez, além de tokens nativos para cobrir as taxas de rede.
  </Step>
</Steps>

## Como funciona

Como Liquidity Provider, você define taxas de câmbio para pares de ativos (por exemplo, BNB → USDC). Quando um usuário na plataforma da Blockradar inicia um swap, o sistema:

1. **Encontra taxas correspondentes** de todos os LPs ativos para o par de ativos solicitado.
2. **Classifica os candidatos** por melhor taxa, prioridade do LP e horário de criação.
3. **Valida a liquidez** verificando se a wallet de tesouraria do LP selecionado tem saldo suficiente para concluir o swap.
4. **Executa o swap** usando a taxa e a tesouraria do LP selecionado.

<CardGroup cols={2}>
  <Card title="Rate Management" icon="sliders">
    Crie, atualize, desative e reative taxas de câmbio para qualquer par de ativos suportado.
  </Card>

  <Card title="Amount Bands" icon="ruler-horizontal">
    Defina valores mínimos e máximos de transação por taxa para controlar a exposição e segmentar faixas de preço.
  </Card>

  <Card title="Version History" icon="clock-rotate-left">
    Cada alteração de taxa cria uma nova versão. O histórico completo é preservado para auditoria e análise.
  </Card>

  <Card title="Automatic Selection" icon="wand-magic-sparkles">
    O sistema seleciona automaticamente o melhor LP para cada swap com base na taxa, prioridade e liquidez disponível.
  </Card>
</CardGroup>

## Ciclo de vida da taxa

As taxas seguem um ciclo de vida claro com rastreamento completo de versões:

### 1. Criar uma taxa

Defina uma nova taxa de câmbio para um par de ativos. A taxa começa como **active** na versão 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 da requisição

| Parâmetro   | Tipo   | Obrigatório | Descrição                                                                                    |
| ----------- | ------ | ----------- | -------------------------------------------------------------------------------------------- |
| `fromAsset` | string | Sim         | O símbolo do ativo a ser convertido **de** (por exemplo, `BNB`)                              |
| `toAsset`   | string | Sim         | O símbolo do ativo a ser convertido **para** (por exemplo, `USDC`)                           |
| `rate`      | string | Sim         | A taxa de câmbio. Fornecida como string para evitar problemas de precisão de ponto flutuante |
| `minAmount` | string | Sim         | Valor mínimo da transação para esta taxa (inclusivo)                                         |
| `maxAmount` | string | Não         | Valor máximo da transação (exclusivo). Omita para ilimitado                                  |

### Resposta de criação

```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. Atualizar uma taxa

Modifique a taxa ou as restrições de valor de uma taxa ativa existente. Isso cria uma **nova versão** — a versão anterior é automaticamente marcada 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>
  Forneça apenas os campos que deseja alterar — atualizações parciais são suportadas.
</Info>

### 3. Desativar uma taxa

Retire temporariamente uma taxa do ar. A taxa passa a ser **deactivated** e não será mais selecionada 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. Reativar uma taxa

Coloque uma taxa desativada novamente no ar. Isso cria uma **nova versão** com status `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 cotar uma nova faixa ou reprecificar uma existente, use as Pricing Tools para inspecionar sua própria cobertura e comparar com outros Liquidity Providers do mesmo segmento de negócio.

### Verificar taxas ativas para um par

`GET /rates/check-pair` retorna todas as taxas ativas que você configurou para um par de ativos no ambiente atual, incluindo a faixa de valores de cada uma. Use-o para confirmar se você já está cotando um par antes de abrir uma nova faixa.

<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 com outros LPs

`GET /rates/market-benchmark` retorna a melhor taxa concorrente para um par de ativos entre outros Liquidity Providers do seu segmento de negócio. Suas próprias taxas são excluídas para que você veja contra o que está precificando. Os resultados ficam em cache por 60 segundos por par.

Passe `amount` para restringir o benchmark às taxas cuja faixa cobre aquele tamanho de transação, ou passe `pairs` (entradas `from:to` separadas por vírgula, máximo 20) para obter um array de benchmarks em uma única chamada.

<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` é `null` quando nenhum outro LP tem uma taxa ativa para o par (ou para a faixa de valor informada).
</Info>

### Inspecionar saldos da tesouraria

`GET /rates/treasury-balances` retorna os saldos de tesouraria agregados de cada ativo presente em suas taxas ativas, divididos por blockchain. Use-o para monitorar a cobertura de liquidez nos pares que você está cotando.

A resposta exclui ativos com saldo on-chain igual a zero e elimina entradas duplicadas quando o mesmo par ativo/wallet é referenciado por várias taxas.

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

## Versionamento de taxas

Sempre que uma taxa é atualizada ou reativada, uma nova versão é criada. A versão anterior é marcada como `superseded`. Isso fornece uma trilha de auditoria completa.

| Campo            | Descrição                                                                         |
| ---------------- | --------------------------------------------------------------------------------- |
| `version`        | Número de versão sequencial começando em 1                                        |
| `rootRateId`     | Aponta para a taxa original — todas as versões em uma cadeia compartilham este ID |
| `previousRateId` | Aponta para a versão imediatamente anterior                                       |

### Exemplo de cadeia de versões

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

### Visualizar histórico da taxa

Recupere o histórico completo de versões de uma taxa:

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

### Resposta do histórico

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

## Status da taxa

| Status        | Descrição                                                               |
| ------------- | ----------------------------------------------------------------------- |
| `active`      | Atualmente no ar e elegível para seleção em swaps                       |
| `superseded`  | Substituída por uma versão mais recente (via atualização ou reativação) |
| `deactivated` | Retirada manualmente do ar — pode ser reativada                         |

<Warning>
  `superseded` é um estado terminal — esses registros são históricos e não podem ser modificados.
</Warning>

## Amount Bands

Cada taxa cobre uma faixa de valores de transação definida por `minAmount` e `maxAmount`:

* **`minAmount`** — O limite inferior inclusivo. Transações abaixo desse valor não usarão essa taxa.
* **`maxAmount`** — O limite superior exclusivo. Defina como `null` (omita) para ilimitado.

### Várias taxas para o mesmo par

Você pode criar várias taxas para o mesmo par de ativos com diferentes faixas de valor para oferecer preços em camadas:

| Taxa   | Faixa         | Caso de uso         |
| ------ | ------------- | ------------------- |
| 605.00 | 0.01 – 10 BNB | Transações pequenas |
| 606.50 | 10 – 100 BNB  | Transações médias   |
| 608.00 | 100+ BNB      | Transações grandes  |

<Warning>
  As faixas de valor para o mesmo par de ativos **não podem se sobrepor**. O sistema rejeitará uma taxa se sua faixa se sobrepuser a outra taxa ativa para o mesmo par.
</Warning>

## Validação de liquidez

Antes de executar um swap usando sua taxa, o sistema valida se sua wallet de tesouraria tem:

1. **Saldo suficiente do token** do ativo de destino para cobrir a saída do swap (`amount x rate`).
2. **Saldo suficiente de token nativo** (ETH, BNB, etc.) para cobrir as taxas de rede da transferência.

Se o saldo da sua wallet for insuficiente, o sistema pula sua taxa e passa para o próximo LP disponível. Você receberá um alerta por e-mail quando sua liquidez estiver baixa.

<Tip>
  Mantenha suas wallets de tesouraria bem financiadas para evitar perder oportunidades de swap. O sistema notificará você quando os saldos caírem abaixo dos limites.
</Tip>

## Boas práticas

### Rate Management

* **Monitore as condições do mercado** e atualize as taxas regularmente para se manter competitivo
* **Use Amount Bands** para oferecer preços em camadas para diferentes tamanhos de transação
* **Desative taxas** durante manutenção ou alta volatilidade em vez de excluí-las
* **Revise o Version History** para acompanhar as alterações de taxa ao longo do tempo

### Liquidez

* **Mantenha saldo suficiente** em suas wallets de tesouraria tanto para o ativo de destino quanto para os tokens nativos
* **Configure o monitoramento** para alertas de saldo baixo
* **Financie as wallets de forma proativa** para evitar interrupções no serviço

## Referência da API

| Endpoint                                                                        | Descrição                                                                    |
| ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [Create Rate](/en/api-reference/liquidity-pool/create-rate)                     | Crie uma nova taxa de câmbio para um par de ativos                           |
| [Get Rate](/en/api-reference/liquidity-pool/get-rate)                           | Recupere uma única taxa pelo ID                                              |
| [Update Rate](/en/api-reference/liquidity-pool/update-rate)                     | Atualize uma taxa existente (cria uma nova versão)                           |
| [Deactivate Rate](/en/api-reference/liquidity-pool/deactivate-rate)             | Tire uma taxa do ar                                                          |
| [Reactivate Rate](/en/api-reference/liquidity-pool/reactivate-rate)             | Coloque uma taxa desativada de volta no ar                                   |
| [Get Rate History](/en/api-reference/liquidity-pool/get-rate-history)           | Veja o histórico completo de versões de uma taxa                             |
| [Check Pair](/en/api-reference/liquidity-pool/check-pair)                       | Liste suas taxas ativas para um par de ativos específico                     |
| [Get Market Benchmark](/en/api-reference/liquidity-pool/get-market-benchmark)   | Melhor taxa concorrente para um par (ou um lote de pares), excluindo as suas |
| [Get Treasury Balances](/en/api-reference/liquidity-pool/get-treasury-balances) | Saldos de tesouraria agregados agrupados por ativo e blockchain              |

## Suporte

* **E-mail**: [support@blockradar.co](mailto:support@blockradar.co)
* **Torne-se um LP**: [Inscreva-se aqui](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) para manifestar interesse em se tornar um Liquidity Provider

<Note>
  O Liquidity Pool foi projetado para provedores de liquidez institucionais e profissionais. [Inscreva-se para se tornar um LP](https://airtable.com/appBkyXEaGJaQeMxF/pagmjSZwFRFa9OSme/form) e, em seguida, teste suas configurações de taxa em testnet antes de entrar em produção.
</Note>
