---
title: "Exchange Routes"
description: "Exchange routes define the available conversion paths between fiat currencies and digital assets. Before creating an order, you should verify that the desired route is supported and currently available."
canonical_url: "https://docs.stablegate.com/docs/guide/exchange-routes"
---
# Exchange Routes

> Exchange routes define the available conversion paths between fiat currencies and digital assets. Before creating an order, you should verify that the desired route is supported and currently available.

Exchange routes define the available conversion paths between fiat currencies and digital assets. Before creating an order, you should verify that the desired route is supported and currently available.

## List All Routes

Retrieve the full list of supported exchange routes.

**Endpoint:**

```text
GET /v1/exchange-routes/
```

**Request:**

::code-switcher{method="GET" path="/v1/exchange-routes/"}
```bash
curl https://api.stablegate.com/v1/exchange-routes/ \
  --header 'X-Api-Key: YOUR_API_KEY'
```
::

**Response:**

```json
[
  {
    "source": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    },
    "destination": {
      "rail": "ethereum",
      "asset": {
        "code": "USDT",
        "fraction_digits": 6
      }
    }
  },
  {
    "source": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    },
    "destination": {
      "rail": "ethereum",
      "asset": {
        "code": "USDC",
        "fraction_digits": 6
      }
    }
  },
  {
    "source": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    },
    "destination": {
      "rail": "ethereum",
      "asset": {
        "code": "EURC",
        "fraction_digits": 6
      }
    }
  },
  {
    "source": {
      "rail": "ethereum",
      "asset": {
        "code": "USDT",
        "fraction_digits": 6
      }
    },
    "destination": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    }
  },
  {
    "source": {
      "rail": "ethereum",
      "asset": {
        "code": "USDC",
        "fraction_digits": 6
      }
    },
    "destination": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    }
  },
  {
    "source": {
      "rail": "ethereum",
      "asset": {
        "code": "EURC",
        "fraction_digits": 6
      }
    },
    "destination": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    }
  }
]
```

### Response Fields

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        source.rail
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Payment rail code for the incoming side (e.g., <code>
        sepa
      </code>
      
      , <code>
        ethereum
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        source.asset.code
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Currency code for the incoming asset (e.g., <code>
        EUR
      </code>
      
      , <code>
        USDT
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        source.asset.fraction_digits
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      Maximum decimal places for amounts in this asset
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination.rail
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Payment rail code for the outgoing side
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination.asset.code
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Currency code for the outgoing asset
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination.asset.fraction_digits
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      Maximum decimal places for amounts in this asset
    </td>
  </tr>
</tbody>
</table>

### Understanding `fraction_digits`

The `fraction_digits` value indicates the maximum decimal precision for amounts:

- `EUR` has `fraction_digits: 2` — amounts can have up to 2 decimal places (e.g., `1000.50`)
- `USDC` has `fraction_digits: 6` — amounts can have up to 6 decimal places (e.g., `1000.123456`)

Always respect `fraction_digits` when specifying amounts in order creation or fee checks.

## Check Route Availability

A route may exist in the system but be temporarily unavailable. Before creating an order, check that the specific route is currently operational.

**Endpoint:**

```text
POST /v1/exchange-routes/check/
```

### Request Body

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        source.rail
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Source payment rail code
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        source.asset_code
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Source currency code
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination.rail
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Destination payment rail code
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination.asset_code
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Destination currency code
    </td>
  </tr>
</tbody>
</table>

### Example: Route Available

**Request:**

::code-switcher{body="{"source":{"rail":"sepa","asset_code":"EUR"},"destination":{"rail":"ethereum","asset_code":"USDC"}}" method="POST" path="/v1/exchange-routes/check/"}
```bash
curl https://api.stablegate.com/v1/exchange-routes/check/ \
  --request POST \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "source": {
    "rail": "sepa",
    "asset_code": "EUR"
  },
  "destination": {
    "rail": "ethereum",
    "asset_code": "USDC"
  }
}'
```
::

**Response:**

```json
{
  "available": true,
  "route": {
    "source": {
      "rail": "sepa",
      "asset": {
        "code": "EUR",
        "fraction_digits": 2
      }
    },
    "destination": {
      "rail": "ethereum",
      "asset": {
        "code": "USDC",
        "fraction_digits": 6
      }
    }
  }
}
```

### Example: Route Unavailable

**Request:**

::code-switcher{body="{"source":{"rail":"swift","asset_code":"USD"},"destination":{"rail":"ethereum","asset_code":"USDC"}}" method="POST" path="/v1/exchange-routes/check/"}
```bash
curl https://api.stablegate.com/v1/exchange-routes/check/ \
  --request POST \
  --header 'X-Api-Key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "source": {
    "rail": "swift",
    "asset_code": "USD"
  },
  "destination": {
    "rail": "ethereum",
    "asset_code": "USDC"
  }
}'
```
::

**Response:**

```json
{
  "available": false,
  "route": null
}
```

### Response Fields

<table>
<thead>
  <tr>
    <th>
      Field
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        available
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      <code>
        true
      </code>
      
       if the route is currently operational, <code>
        false
      </code>
      
       otherwise
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        route
      </code>
    </td>
    
    <td>
      object | null
    </td>
    
    <td>
      Route details when available, <code>
        null
      </code>
      
       when not
    </td>
  </tr>
</tbody>
</table>

## Best Practices

- **Cache routes locally** but refresh periodically. Routes don't change frequently, but availability can.
- **Always check availability** before creating an order to avoid unnecessary errors.
- **Use the check endpoint** rather than filtering the list response — it validates the full route configuration.

## Rail Codes Reference

<table>
<thead>
  <tr>
    <th>
      Code
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        sepa
      </code>
    </td>
    
    <td>
      Bank
    </td>
    
    <td>
      SEPA — European bank transfers in EUR
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        swift
      </code>
    </td>
    
    <td>
      Bank
    </td>
    
    <td>
      SWIFT — International bank transfers
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ach
      </code>
    </td>
    
    <td>
      Bank
    </td>
    
    <td>
      ACH — US domestic bank transfers
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ethereum
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Ethereum mainnet
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        polygon
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Polygon (MATIC) network
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tron
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Tron (TRX) network
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        algorand
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Algorand network
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ripple
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Ripple (XRP) network
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        stellar
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      Stellar network
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        xinfin
      </code>
    </td>
    
    <td>
      Crypto
    </td>
    
    <td>
      XinFin (XDC) network
    </td>
  </tr>
</tbody>
</table>

:note[Not all rails are active for exchange routes. Query the API for the current list of supported combinations.]## Asset Codes Reference

<table>
<thead>
  <tr>
    <th>
      Code
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        EUR
      </code>
    </td>
    
    <td>
      Fiat
    </td>
    
    <td>
      Euro
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        USD
      </code>
    </td>
    
    <td>
      Fiat
    </td>
    
    <td>
      US Dollar
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        GBP
      </code>
    </td>
    
    <td>
      Fiat
    </td>
    
    <td>
      British Pound
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        CHF
      </code>
    </td>
    
    <td>
      Fiat
    </td>
    
    <td>
      Swiss Franc
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        USDT
      </code>
    </td>
    
    <td>
      Stablecoin
    </td>
    
    <td>
      Tether USD
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        USDC
      </code>
    </td>
    
    <td>
      Stablecoin
    </td>
    
    <td>
      USD Coin
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        EURC
      </code>
    </td>
    
    <td>
      Stablecoin
    </td>
    
    <td>
      Euro Coin
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        EURS
      </code>
    </td>
    
    <td>
      Stablecoin
    </td>
    
    <td>
      STASIS Euro
    </td>
  </tr>
</tbody>
</table>

:note[Not all assets are available on all rails. The exchange routes endpoint returns the exact supported combinations.]


## Sitemap

See the full [sitemap](https://docs.stablegate.com/sitemap.md) for all pages.
