curl "https://api.fibrous.finance/{network}/route?amount=1000000000000000000&tokenInAddress=0x0000000000000000000000000000000000000000&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&slippage=0.5"
const params = new URLSearchParams({
amount: '1000000000000000000',
tokenInAddress: '0x0000000000000000000000000000000000000000',
tokenOutAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
slippage: '0.5'
});
const response = await fetch(`https://api.fibrous.finance/base/route?${params}`);
const data = await response.json();
console.log(data);
import requests
url = "https://api.fibrous.finance/{network}/route"
params = {
"amount": "1000000000000000000",
"tokenInAddress": "0x0000000000000000000000000000000000000000",
"tokenOutAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"slippage": 0.5
}
response = requests.get(url, params=params)
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class FibrousRoute {
public static void main(String[] args) throws Exception {
String baseUrl = "https://api.fibrous.finance/{network}/route";
String params = "amount=1000000000000000000" +
"&tokenInAddress=0x0000000000000000000000000000000000000000" +
"&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" +
"&slippage=0.5";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "?" + params))
.header("Accept", "*/*")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response: " + response.body());
}
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.fibrous.finance/{network}/route"
params := url.Values{}
params.Add("amount", "1000000000000000000")
params.Add("tokenInAddress", "0x0000000000000000000000000000000000000000")
params.Add("tokenOutAddress", "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")
params.Add("slippage", "0.5")
req, err := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
if err != nil {
panic(err)
}
req.Header.Set("Accept", "*/*")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println("Response:", string(body))
}
{
"success": true,
"routeSwapType": 0,
"inputToken": {
"name": "Wrapped Ether",
"address": "0x4200000000000000000000000000000000000006",
"decimals": 18,
"price": 3171.37
},
"inputAmount": "1000000000000000000",
"outputToken": {
"name": "USD Coin",
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals": 6,
"price": 0.99971
},
"outputAmount": "3165007379",
"time": 0.495,
"estimatedGasUsed": "0",
"estimatedGasUsedInUsd": 0,
"route": [
{
"percent": "51%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0x72ab388e2e2f6facef59e3c3fa2c4e29011c2d38",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
]
]
},
{
"percent": "49%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0xc211e1f853a898bd1302385ccde55f33a8c4b3f3",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
],
[
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x4e962bb3889bf030368f56810a9c96b83cb3e778",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "61.00%",
"extraData": {
"tickSpacing": 100
}
},
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x3e66e55e97ce60096f74b7c475e8249f2d31a9fb",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "39.00%",
"extraData": {
"tickSpacing": 2000
}
}
]
]
}
],
"initial": false
}
Core Endpoints
Get Route
Find the optimal trading route across supported networks
GET
/
{network}
/
route
curl "https://api.fibrous.finance/{network}/route?amount=1000000000000000000&tokenInAddress=0x0000000000000000000000000000000000000000&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&slippage=0.5"
const params = new URLSearchParams({
amount: '1000000000000000000',
tokenInAddress: '0x0000000000000000000000000000000000000000',
tokenOutAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
slippage: '0.5'
});
const response = await fetch(`https://api.fibrous.finance/base/route?${params}`);
const data = await response.json();
console.log(data);
import requests
url = "https://api.fibrous.finance/{network}/route"
params = {
"amount": "1000000000000000000",
"tokenInAddress": "0x0000000000000000000000000000000000000000",
"tokenOutAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"slippage": 0.5
}
response = requests.get(url, params=params)
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class FibrousRoute {
public static void main(String[] args) throws Exception {
String baseUrl = "https://api.fibrous.finance/{network}/route";
String params = "amount=1000000000000000000" +
"&tokenInAddress=0x0000000000000000000000000000000000000000" +
"&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" +
"&slippage=0.5";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "?" + params))
.header("Accept", "*/*")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response: " + response.body());
}
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.fibrous.finance/{network}/route"
params := url.Values{}
params.Add("amount", "1000000000000000000")
params.Add("tokenInAddress", "0x0000000000000000000000000000000000000000")
params.Add("tokenOutAddress", "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")
params.Add("slippage", "0.5")
req, err := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
if err != nil {
panic(err)
}
req.Header.Set("Accept", "*/*")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println("Response:", string(body))
}
{
"success": true,
"routeSwapType": 0,
"inputToken": {
"name": "Wrapped Ether",
"address": "0x4200000000000000000000000000000000000006",
"decimals": 18,
"price": 3171.37
},
"inputAmount": "1000000000000000000",
"outputToken": {
"name": "USD Coin",
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals": 6,
"price": 0.99971
},
"outputAmount": "3165007379",
"time": 0.495,
"estimatedGasUsed": "0",
"estimatedGasUsedInUsd": 0,
"route": [
{
"percent": "51%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0x72ab388e2e2f6facef59e3c3fa2c4e29011c2d38",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
]
]
},
{
"percent": "49%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0xc211e1f853a898bd1302385ccde55f33a8c4b3f3",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
],
[
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x4e962bb3889bf030368f56810a9c96b83cb3e778",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "61.00%",
"extraData": {
"tickSpacing": 100
}
},
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x3e66e55e97ce60096f74b7c475e8249f2d31a9fb",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "39.00%",
"extraData": {
"tickSpacing": 2000
}
}
]
]
}
],
"initial": false
}
Overview
V2 Available: An enhanced version of this endpoint is available at
/{network}/v2/route with integrator support, metadata, and API key features. See Get Route V2 and the V2 Migration Guide.Supported Networks
- Base
- HyperEVM
- Citrea
- Monad
- Starknet
https://api.fibrous.finance/base/route
https://api.fibrous.finance/hyperevm/route
https://api.fibrous.finance/citrea/route
https://api.fibrous.finance/monad/route
https://api.fibrous.finance/starknet/route
Starknet has additional batch routing capabilities. See Starknet API for details.
Request Parameters
string
required
The amount of input tokens in wei format (for EVM chains) or the smallest unit for the token.Example:
"1000000000000000000" for 1 token with 18 decimalsstring
required
The contract address of the input token.
- Base/HyperEVM/Citrea/Monad
- Starknet
Use
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE or 0x0000000000000000000000000000000000000000 for native tokensUse the Cairo contract address format
string
required
The contract address of the output token.
number
default:"0.5"
Maximum acceptable slippage in percentage (0.1 to 100).Example:
0.5 for 0.5% slippage tolerancestring
The destination address to receive the output tokens. If not provided, defaults to the sender address.
string[]
Array of protocol IDs to exclude from routing.
boolean
default:"false"
If true, only direct swaps will be considered (no multi-hop routes).
Response
boolean
Indicates if the route was successfully found
number
Type of swap route (0 = standard)
object
object
Information about the output token (same structure as inputToken)
string
The amount of input tokens in wei format
string
The expected amount of output tokens in wei format
number
Time taken to calculate the route (in seconds)
string
Estimated gas units for the transaction
number
Estimated gas cost in USD
object[]
Array of route segments showing how the swap is split
Show child attributes
Show child attributes
string
Percentage of input amount routed through this segment
array
Array of swap hops for this route segment
boolean
Indicates if this is an initial route calculation
Example Request
curl "https://api.fibrous.finance/{network}/route?amount=1000000000000000000&tokenInAddress=0x0000000000000000000000000000000000000000&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&slippage=0.5"
const params = new URLSearchParams({
amount: '1000000000000000000',
tokenInAddress: '0x0000000000000000000000000000000000000000',
tokenOutAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
slippage: '0.5'
});
const response = await fetch(`https://api.fibrous.finance/base/route?${params}`);
const data = await response.json();
console.log(data);
import requests
url = "https://api.fibrous.finance/{network}/route"
params = {
"amount": "1000000000000000000",
"tokenInAddress": "0x0000000000000000000000000000000000000000",
"tokenOutAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"slippage": 0.5
}
response = requests.get(url, params=params)
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class FibrousRoute {
public static void main(String[] args) throws Exception {
String baseUrl = "https://api.fibrous.finance/{network}/route";
String params = "amount=1000000000000000000" +
"&tokenInAddress=0x0000000000000000000000000000000000000000" +
"&tokenOutAddress=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" +
"&slippage=0.5";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(baseUrl + "?" + params))
.header("Accept", "*/*")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response: " + response.body());
}
}
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.fibrous.finance/{network}/route"
params := url.Values{}
params.Add("amount", "1000000000000000000")
params.Add("tokenInAddress", "0x0000000000000000000000000000000000000000")
params.Add("tokenOutAddress", "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")
params.Add("slippage", "0.5")
req, err := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
if err != nil {
panic(err)
}
req.Header.Set("Accept", "*/*")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println("Response:", string(body))
}
{
"success": true,
"routeSwapType": 0,
"inputToken": {
"name": "Wrapped Ether",
"address": "0x4200000000000000000000000000000000000006",
"decimals": 18,
"price": 3171.37
},
"inputAmount": "1000000000000000000",
"outputToken": {
"name": "USD Coin",
"address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"decimals": 6,
"price": 0.99971
},
"outputAmount": "3165007379",
"time": 0.495,
"estimatedGasUsed": "0",
"estimatedGasUsedInUsd": 0,
"route": [
{
"percent": "51%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0x72ab388e2e2f6facef59e3c3fa2c4e29011c2d38",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
]
]
},
{
"percent": "49%",
"swaps": [
[
{
"protocol": 9,
"poolName": "PancakeSwap V3",
"poolAddress": "0xc211e1f853a898bd1302385ccde55f33a8c4b3f3",
"fromTokenAddress": "0x4200000000000000000000000000000000000006",
"toTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"percent": "100.00%",
"extraData": {
"fee": 100
}
}
],
[
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x4e962bb3889bf030368f56810a9c96b83cb3e778",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "61.00%",
"extraData": {
"tickSpacing": 100
}
},
{
"protocol": 3,
"poolName": "Aerodrome Slipstream",
"poolAddress": "0x3e66e55e97ce60096f74b7c475e8249f2d31a9fb",
"fromTokenAddress": "0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf",
"toTokenAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"percent": "39.00%",
"extraData": {
"tickSpacing": 2000
}
}
]
]
}
],
"initial": false
}
Best Practices
- Fresh Routes
- Always fetch a new route before executing a swap
- Routes can become stale due to market movements
- Typical validity: 30-60 seconds depending on market volatility
- Slippage Settings
- Stable pairs: 0.1% - 0.5%
- Volatile pairs: 1% - 3%
- Low liquidity tokens: 3% - 5%
- Gas Optimization
- Use
direct: truefor major token pairs - Consider gas costs vs. price improvement for small amounts
- Exclude high-gas protocols when optimizing for speed
- Use
- Error Handling
- Implement retry logic with exponential backoff
- Check for insufficient liquidity errors
- Validate token addresses before calling
Network-Specific Notes
Base Network
Base Network
- Native token: ETH
- Common tokens: USDC, USDbC, WETH, DAI
- Average block time: ~2 seconds
HyperEVM
HyperEVM
- Native token: HYPE
- Common tokens: USDC, WHYPE
- Average block time: ~2 seconds
Citrea
Citrea
- Native token: cBTC
- Common tokens: wcBTC, USDC.e
- Average block time: TBD
- Bitcoin’s first ZK rollup with EVM compatibility
Starknet
Starknet
- Native token: ETH
- Common tokens: USDC, STRK
- Uses Cairo VM (different address format)
- See Starknet-specific documentation
Related Endpoints
- Execute - Execute the swap using the route
- Calldata - Get transaction calldata
- Health Check - Check API status
- Get Route V2 - Enhanced route endpoint with integrator support
- V2 Migration Guide - Migrate to V2 API