curl --request GET \
--url https://router.raze.bot/evm/venues \
--header 'x-api-key: <api-key>'import requests
url = "https://router.raze.bot/evm/venues"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://router.raze.bot/evm/venues', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://router.raze.bot/evm/venues",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://router.raze.bot/evm/venues"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://router.raze.bot/evm/venues")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://router.raze.bot/evm/venues")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"venues": [
{
"id": "base-uniswap-v2",
"dex": "Uniswap V2",
"aliases": [
"base-uniswap-v2"
],
"chain": "base",
"chainId": 8453,
"protocol": "v2",
"factory": "0x8909dc15e40173ff4699343b6eb8132c65e18ec6",
"router": "0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24",
"wrappedNative": "0x4200000000000000000000000000000000000006",
"feeNumerator": 997,
"feeDenominator": 1000,
"routerAbi": "v2-router02",
"routerFactoryGetter": "factory",
"routerWrappedNativeGetter": "WETH",
"sources": [
"https://developers.uniswap.org/docs/protocols/v2/deployments",
"https://github.com/Uniswap/v2-periphery/blob/master/contracts/libraries/UniswapV2Library.sol",
"https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments"
],
"buildable": true,
"servable": true,
"verification": {
"status": "verified",
"anchor": {
"chainId": 8453,
"number": "52396910",
"hash": "0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44"
},
"at": "2026-10-09T21:59:34.502153925Z"
}
},
{
"id": "base-uniswap-v3",
"dex": "Uniswap V3",
"aliases": [
"base-uniswap-v3"
],
"chain": "base",
"chainId": 8453,
"protocol": "v3",
"factory": "0x33128a8fc17869897dce68ed026d694621f6fdfd",
"router": "0x2626664c2603336e57b271c5c0b26f421741e481",
"wrappedNative": "0x4200000000000000000000000000000000000006",
"quoter": "0x3d4e44eb1374240ce5f1b871ab261cd16335b76a",
"feeTiers": [
100,
500,
3000,
10000
],
"routerAbi": "v3-swap-router02",
"routerFactoryGetter": "factory",
"routerWrappedNativeGetter": "WETH9",
"quoterAbi": "quoter-v2",
"quoterFactoryGetter": "factory",
"quoterWrappedNativeGetter": "WETH9",
"sources": [
"https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments",
"https://github.com/Uniswap/swap-router-contracts/blob/main/contracts/SwapRouter02.sol",
"https://developers.uniswap.org/docs/get-started/concepts/fees"
],
"buildable": true,
"servable": true,
"verification": {
"status": "verified",
"anchor": {
"chainId": 8453,
"number": "52396910",
"hash": "0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44"
},
"at": "2026-10-09T21:59:34.502161828Z"
}
}
]
}{
"error": {
"code": "unauthorized",
"message": "missing or unknown API key (send it as x-api-key)"
}
}{
"error": {
"code": "rate_limited",
"message": "too many requests"
}
}EVM venues
Every venue of the EVM routes, one row per venue and chain, in a fixed order: its label
(dex), its id, the contracts it is quoted and built with, where those addresses come
from (sources), and whether the router has verified them against the chain
(verification). Only a servable venue (verification verified) is quoted. Each venue
is checked at start, and again with backoff until it passes: the bytecode of the factory,
router, quoter and wrapped token, the router’s and quoter’s factory() and WETH()
pointing at the manifest, the V3 fee tiers. dex (the label of quotes) and aliases
(the id) are what dexes and excludeDexes accept, ignoring case and punctuation. A
dex label is the same on every chain: in a filter it names the venue of the quote’s
chain. Always 200.
dex | Chain | id |
|---|---|---|
| Uniswap V2, Uniswap V3 | eth (1) | eth-uniswap-v2, eth-uniswap-v3 |
| PancakeSwap V2, PancakeSwap V3 | bsc (56) | bsc-pancakeswap-v2, bsc-pancakeswap-v3 |
| Uniswap V2, Uniswap V3 | base (8453) | base-uniswap-v2, base-uniswap-v3 |
| Uniswap V2, Uniswap V3 | robinhood (4663) | robinhood-uniswap-v2, robinhood-uniswap-v3 |
curl --request GET \
--url https://router.raze.bot/evm/venues \
--header 'x-api-key: <api-key>'import requests
url = "https://router.raze.bot/evm/venues"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://router.raze.bot/evm/venues', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://router.raze.bot/evm/venues",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://router.raze.bot/evm/venues"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://router.raze.bot/evm/venues")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://router.raze.bot/evm/venues")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"venues": [
{
"id": "base-uniswap-v2",
"dex": "Uniswap V2",
"aliases": [
"base-uniswap-v2"
],
"chain": "base",
"chainId": 8453,
"protocol": "v2",
"factory": "0x8909dc15e40173ff4699343b6eb8132c65e18ec6",
"router": "0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24",
"wrappedNative": "0x4200000000000000000000000000000000000006",
"feeNumerator": 997,
"feeDenominator": 1000,
"routerAbi": "v2-router02",
"routerFactoryGetter": "factory",
"routerWrappedNativeGetter": "WETH",
"sources": [
"https://developers.uniswap.org/docs/protocols/v2/deployments",
"https://github.com/Uniswap/v2-periphery/blob/master/contracts/libraries/UniswapV2Library.sol",
"https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments"
],
"buildable": true,
"servable": true,
"verification": {
"status": "verified",
"anchor": {
"chainId": 8453,
"number": "52396910",
"hash": "0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44"
},
"at": "2026-10-09T21:59:34.502153925Z"
}
},
{
"id": "base-uniswap-v3",
"dex": "Uniswap V3",
"aliases": [
"base-uniswap-v3"
],
"chain": "base",
"chainId": 8453,
"protocol": "v3",
"factory": "0x33128a8fc17869897dce68ed026d694621f6fdfd",
"router": "0x2626664c2603336e57b271c5c0b26f421741e481",
"wrappedNative": "0x4200000000000000000000000000000000000006",
"quoter": "0x3d4e44eb1374240ce5f1b871ab261cd16335b76a",
"feeTiers": [
100,
500,
3000,
10000
],
"routerAbi": "v3-swap-router02",
"routerFactoryGetter": "factory",
"routerWrappedNativeGetter": "WETH9",
"quoterAbi": "quoter-v2",
"quoterFactoryGetter": "factory",
"quoterWrappedNativeGetter": "WETH9",
"sources": [
"https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments",
"https://github.com/Uniswap/swap-router-contracts/blob/main/contracts/SwapRouter02.sol",
"https://developers.uniswap.org/docs/get-started/concepts/fees"
],
"buildable": true,
"servable": true,
"verification": {
"status": "verified",
"anchor": {
"chainId": 8453,
"number": "52396910",
"hash": "0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44"
},
"at": "2026-10-09T21:59:34.502161828Z"
}
}
]
}{
"error": {
"code": "unauthorized",
"message": "missing or unknown API key (send it as x-api-key)"
}
}{
"error": {
"code": "rate_limited",
"message": "too many requests"
}
}servable is true (its verification.status is verified) is quoted. Its dex is the label of quotes; dex and aliases (its id) are what dexes and excludeDexes in /evm/quote accept, and its router is the spender of the build’s approvals.