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

# Aerodrome Remove Liquidity

Removes liquidity from an Aerodrome pool on Base. Burns LP tokens to receive the underlying token pair as ERC20 tokens (WETH, not native ETH). Use unwrap-eth after to convert WETH back to native ETH if needed. Handles LP token approval to Router automatically. Use aerodrome-get-lp-positions to discover your LP positions first. Ideal for: exit positions, rebalancing, DeFi automation.

![Aerodrome Remove Liquidity logo](https://aerodrome.finance/images/AERO/logo-512.png)
Catalog action EVM Onchain wallet Gas receive

Removes liquidity from an Aerodrome pool on Base. Burns LP tokens to receive the underlying token pair as ERC20 tokens (WETH, not native ETH). Use unwrap-eth after to convert WETH back to native ETH if needed. Handles LP token approval to Router automatically. Use aerodrome-get-lp-positions to discover your LP positions first. Ideal for: exit positions, rebalancing, DeFi automation.

**Review wallet and value movement**

This action can require a wallet connector, gas, token movement, or an external side effect. Test with simulation or a controlled amount before using it in a live workflow.

## At a Glance

| Field | Value |
| --- | --- |
| Action ID | `aerodrome-remove-liquidity` |
| Category | EVM Onchain |
| Connector | `wallet` |
| Requires gas | Yes |
| Funds movement | `receive` |
| Tags | `defi`, `liquidity`, `base`, `onchain`, `write` |

## Payload Schema

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `chainId` | `number` | Yes | Chain ID. Supported: Base \(8453\) |
| `tokenA` | `string` | Yes | First token address |
| `tokenB` | `string` | Yes | Second token address |
| `stable` | `boolean` | Yes | True for stable pool, false for volatile |
| `liquidity` | `string` | Yes | Amount of LP tokens to remove in raw units |
| `slippageBps` | `number` | No | Slippage tolerance in basis points \(default: 50 = 0.5%\) |
| `deadlineMinutes` | `number` | No | Transaction deadline in minutes from now \(default: 20\) |

## Result Schema

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `transactionHash` | `string` | Yes | - |
| `poolAddress` | `string` | No | - |
| `liquidityBurned` | `string` | No | - |

## Examples

**Workflow node**

```json
{
  "type": "aerodrome-remove-liquidity",
  "payload": {
    "chainId": 8453,
    "tokenA": "ETH",
    "tokenB": "ETH",
    "stable": true,
    "liquidity": "example-liquidity"
  },
  "children": [],
  "connector": {
    "type": "wallet",
    "id": "conn_wallet"
  }
}
```
  **Test with API**

```bash
curl -X POST "https://api.b3os.org/v1/actions/aerodrome-remove-liquidity/test" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "inputs": {
    "chainId": 8453,
    "tokenA": "ETH",
    "tokenB": "ETH",
    "stable": true,
    "liquidity": "example-liquidity"
  }
}'
```

**Use expressions for dynamic values**

Payload fields can use workflow expressions such as `{{$trigger.body.amount}}`, `{{$nodes.fetch.result.price}}`, and `{{$props.asset}}` when the value should come from a trigger, prior node, or reusable workflow prop.