# Removing Liquidity

In this guide, we will use an example of Nexus process to show how to remove liquidity from a pool, which includes:

* Removing
  * Pre-remove Request
  * Get Unsigned Remove PSBT
  * Send Signed Remove PSBT
* Get Estimated Remove Amount

> The removing interface for Runes/BRC20/ARC20 is the same, differentiated by `coin_type_*`.

{% openapi src="/files/ebMomft3frkz221TDkVa" path="/brc20swap/v2/pre\_remove\_liquid" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "tick1": "BTC",
    "tick2": "RUNEONERUNEONE",
    "coin_type_1": "btc",
    "coin_type_2": "runes",
    "payer_ord_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "payer_btc_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "percent": "15",
    "slipper": "12",
    "fee_rate": "57",
    "payer_pub_key": "02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"tick1":"BTC","tick2":"RUNEONERUNEONE","coin_type_1":"btc","coin_type_2":"runes","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","percent":"15","slipper":"12","fee_rate":"57","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"}'
```

{% endtab %}

{% tab title="cURL Example (BRC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://192.168.10.66:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://192.168.10.66:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"percent":"10","tick1":"BTC","tick2":"bqbq","coin_type_1":"btc","coin_type_2":"brc20","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81","slipper":"12","fee_rate":"11"}' \
  --compressed
```

{% endtab %}

{% tab title="cURL Example (ARC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"tick1":"BTC","tick2":"3dbb","coin_type_1":"btc","coin_type_2":"arc20","payer_ord_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","payer_btc_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","percent":"30","slipper":"12","fee_rate":"3","payer_pub_key":"036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace:036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace"}'
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The returned result should be passed as is to the `create_remove_liquid_psbt` (the following interface).
{% endhint %}

{% openapi src="/files/ebMomft3frkz221TDkVa" path="/brc20swap/v2/create\_remove\_liquid\_psbt" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "expect_amount1": "1500",
    "expect_amount2": "75",
    "expect_transfer_fee": 20121,
    "check_sum": "D6CCF094281BC79DD4AF6E7A7FBF1CDA",
    "tx_size": 353,
    "usr_cnt": 1,
    "vins": [
        "6cf1c2614a4eaaadf68769909b04687a2ddc4d6082fe4a78654dfad08a9a9323:6"
    ],
    "tick1": "BTC",
    "tick2": "RUNEONERUNEONE",
    "coin_type_1": "btc",
    "coin_type_2": "runes",
    "payer_ord_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "payer_btc_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "percent": "15",
    "slipper": "12",
    "fee_rate": "57",
    "payer_pub_key": "02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"1500","expect_amount2":"75","expect_transfer_fee":20121,"check_sum":"D6CCF094281BC79DD4AF6E7A7FBF1CDA","tx_size":353,"usr_cnt":1,"vins":["6cf1c2614a4eaaadf68769909b04687a2ddc4d6082fe4a78654dfad08a9a9323:6"],"tick1":"BTC","tick2":"RUNEONERUNEONE","coin_type_1":"btc","coin_type_2":"runes","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","percent":"15","slipper":"12","fee_rate":"57","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"}' Ex
```

{% endtab %}

{% tab title="cURL Example (BRC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://192.168.10.66:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://192.168.10.66:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"5075.803216837728754467","expect_amount2":"282.002432596010007297781694096138448","expect_transfer_fee":15798,"check_sum":"8DEFAA3590E994E291F02030EE7BBBE1","usr_cnt":1,"vins":["5fbfbe6ed863c228b8dc77ed2ec55a8b09fcbb8a2767874c12f61c9ce1dbc263:2"],"tx_size":642,"percent":"10","slipper":"12","tick1":"BTC","tick2":"bqbq","coin_type_1":"btc","coin_type_2":"brc20","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81","fee_rate":"11"}' \
  --compressed
```

{% endtab %}

{% tab title="cURL Example (ARC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"120383.33777471435486031353079418688523444","expect_amount2":"637.35028437485150273725464254913146868","expect_transfer_fee":1911,"check_sum":"35B665B6AA891953152CC576C5FE125F","tx_size":637,"usr_cnt":1,"vins":["9ad1f5f681637d6d11443b941cfa2f5e0ba4dad2405b88ee8254a34f763969e7:1"],"tick1":"BTC","tick2":"3dbb","coin_type_1":"btc","coin_type_2":"arc20","payer_ord_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","payer_btc_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","percent":"30","slipper":"12","fee_rate":"3","payer_pub_key":"036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace:036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace"}'
```

{% endtab %}
{% endtabs %}

{% openapi src="/files/ebMomft3frkz221TDkVa" path="/brc20swap/v2/remove\_liquid\_by\_psbt" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```
{
    "psbt": "70736274ff01007d020000000123939a8ad0fa4d65784afe82604ddc2d7a68049b906987f6adaa4e4a61c2f16c0600000000ffffffff02994e00000000000022512054f638dfba2ea8d607a59ec681a1ec479f741b0f505a116fe20172fde877eede52ca040000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c658000000000001011ffc3a050000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c65801086b0247304402200b398be45be70f30793de6e31aa9a9007a954f391f82e12b7a72c663af5d94570220230c28c921ca20e94669fab5abb7baf9cc908d121d2a5ffb96643e02c2d529bd012102d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81000000",
    "order_id": "liquid_972788279311073280",
    "checksum": "CAA324EB56C64FA1A6646C9AED0E2BAF",
    "to_sign_inputs": null
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/remove_liquid_by_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"psbt":"70736274ff01007d020000000123939a8ad0fa4d65784afe82604ddc2d7a68049b906987f6adaa4e4a61c2f16c0600000000ffffffff02994e00000000000022512054f638dfba2ea8d607a59ec681a1ec479f741b0f505a116fe20172fde877eede52ca040000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c658000000000001011ffc3a050000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c65801086b0247304402200b398be45be70f30793de6e31aa9a9007a954f391f82e12b7a72c663af5d94570220230c28c921ca20e94669fab5abb7baf9cc908d121d2a5ffb96643e02c2d529bd012102d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81000000","order_id":"liquid_972788279311073280","checksum":"CAA324EB56C64FA1A6646C9AED0E2BAF","to_sign_inputs":null}'
```

{% endtab %}
{% endtabs %}

{% openapi src="/files/ebMomft3frkz221TDkVa" path="/brc20swap/get\_liquid\_info" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "address": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "lp_precent": 35,
    "from_tick": "BTC",
    "to_tick": "RUNEONERUNEONE",
    "from_coin_type": "btc",
    "to_coin_type": "runes"
}
```

{% endtab %}

{% tab title="cURL Example" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/get_liquid_info' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"address":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","lp_precent":35,"from_tick":"BTC","to_tick":"RUNEONERUNEONE","from_coin_type":"btc","to_coin_type":"runes"}'
```

{% endtab %}
{% endtabs %}

### Explanation on Fees

The actual amount received by the user will have the key custodial service's fee deducted, which is calculated using the `mutisign_fee_proportion` field returned by the backend (initially 0.3%, and may adjust in the future if the key custodial service changes).

### Fee Calculation

* Removing BTC-BRC20: Fee = BTC satoshi amount \* 0.3%
* Removing BTC-ARC20: Fee = BTC satoshi amount \* 0.3% + ARC20 satoshi amount \* 0.3%
* Removing BRC20-BRC20: Free

Calculation of the Actual Amount Received by the User:

```typescript

if (from_coin_type === "btc") {
  finally_from_amount = from_amount * (1 - mutisign_fee_proportion); 
  if (to_coin_type === "arc20") {
    finally_from_amount =
      finally_from_amount - to_amount * mutisign_fee_proportion;
  }
  finally_to_amount = to_amount;
}
if (to_coin_type === "btc") {
  finally_from_amount = from_amount;
  finally_to_amount = to_amount * (1 - mutisign_fee_proportion);
  if (to_coin_type === "arc20") {
    finally_to_amount =
      finally_to_amount - from_amount * mutisign_fee_proportion;
  }
}

```

{% hint style="info" %}
The estimated amount will change in real-time based on the total token amount in the liquidity pool. Your frontend can perform polling requests to obtain the latest estimate.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.on.nexus/dotswap/developers/l1-swap-and-liquidity-apis/remove-liquidity/remove.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
