> For the complete documentation index, see [llms.txt](https://docs.expand.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.expand.network/how-to/execute-a-local-swap.md).

# Execute a Local Swap

This section explains the integration and usage of various decentralized exchange (DEX) protocols for local swapping functionalities.

Please see the attached document for information about error messages you may encounter when executing a swap:<https://docs.google.com/document/d/1SuBJwPOmvJtUUf-9QJiBcTr0l2zbWlusMTUOGfC8S50/edit?usp=sharing>

<figure><img src="/files/glEuWQYqLYBJuX7ZBAMf" alt="" width="563"><figcaption></figcaption></figure>

### Step 1: **Check the Allowance of the DEX on the Token Contract**

To initiate a swap, first determine if the DEX has the necessary allowance to access the tokens. This can be done using the following API endpoint:&#x20;

**API URL**: [`https://api.expand.network/fungibletoken/getuserallowance`](https://docs.expand.network/categories/fungible-tokens/erc20#getuserallowance)

***

**Sample Request:**

```url
https://api.expand.network/fungibletoken/getuserallowance?owner=0x6Fb447Ae94F5180254D436A693907a1f57696900&tokenAddress=0x6b175474e89094c44da98b954eedeac495271d0f&spender=0xBA12222222228d8Ba445958a75a0704d566BF2C8
```

***

**Sample Response:**&#x20;

```json
{
    "status": 200,
    "msg": "success",
    "data": {
        "allowance": "999000000000000000000"
    }
}
```

### Step 2: Approve the Dex from the Token Contract

If the allowance is less than the token amount to be swapped, the user must approve the DEX router from the token contract. \
This can be done using the following API endpoint:&#x20;

**API URL**: [`https://api.expand.network/fungibletoken/approve`](https://docs.expand.network/categories/fungible-tokens/erc20#approve)

***

**Sample Request:**

```json
{
    "from": "0x63056E00436Da25BcF48A40dfBbDcc7089351006", 
    "tokenAddress":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",  
    "amount": "1000000000000000000000",                  
    "to": "0x828b154032950c8ff7cf8085d841723db2696056", 
    "gas": "100000",
    "chainId": "1"
}
```

***

**Sample Response:**&#x20;

```json
{
    "status": 200,
    "msg": "success",
    "data": {
        "from": "0x63056E00436Da25BcF48A40dfBbDcc7089351006",
        "to": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
        "value": "0",
        "gas": "100000",
        "data": "0x095ea7b3000000000000000000000000828b154032950c8ff7cf8085d841723db269605600000000000000000000000000000000000000000000003635c9adc5dea00000"
    }
}
```

### Step 3: Swap the tokens&#x20;

After the successful approval, we can do the swap. User can swap the tokens on their preferred Dex by changing the "[<mark style="color:blue;">dexId</mark>](broken://pages/8x8qwIu19Aq8uFsjOXvI)" parameter.\
This can be done using the following API endpoint:&#x20;

**API URL**: [`https://api.expand.network/dex/swap`](https://docs.expand.network/categories/dex-and-aggregators/uniswap-v2#swap)

***

**Sample Request:**

```json
{
    "dexId":"1000",
    "amountIn": "1000000000000000",
    "amountOutMin": "0",
    "path": ["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","0x6B175474E89094C44Da98b954EedeAC495271d0F"],
    "to": "0x63056E00436Da25BcF48A40dfBbDcc7089351006",
    "deadline": "1665990894",
    "from": "0x63056E00436Da25BcF48A40dfBbDcc7089351006",
    "gas": "173376"
}
```

***

**Sample Response:**&#x20;

```json
{
    "status": 200,
    "msg": "success",
    "data": {
        "from": "0x63056E00436Da25BcF48A40dfBbDcc7089351006",
        "to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
        "value": "0",
        "gas": "173376",
        "data": "0x38ed173900000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000063056e00436da25bcf48a40dfbbdcc708935100600000000000000000000000000000000000000000000000000000000634d00ee0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b4fbf271143f4fbf7b91a5ded31805e42b2208d600000000000000000000000011fe4b6ae13d2a6055c8d9cf65c55bac32b5d844"
    }
}
```
