Configuration
curl --request GET \
--url https://relay-production-f175.up.railway.app/v1/configimport requests
url = "https://relay-production-f175.up.railway.app/v1/config"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://relay-production-f175.up.railway.app/v1/config', 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://relay-production-f175.up.railway.app/v1/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://relay-production-f175.up.railway.app/v1/config"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://relay-production-f175.up.railway.app/v1/config")
.asString();require 'uri'
require 'net/http'
url = URI("https://relay-production-f175.up.railway.app/v1/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"chains": [
{
"kind": "evm", "chainId": 84532, "name": "Base Sepolia",
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"reactor": "0x6228F9505647Df94838397A0ED03b158e3C8c59C",
"validation": "0x42c1E8Aa00C0D48338494CC5a631169E4F2a4E7E",
"permit2": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"feeController": "0xAFfB63E5a0B9168E04678668137F4F9b1C265aA8",
"tokens": [
{ "symbol": "cNGN", "address": "0xe2387F04d3858e7Cb64Ef5Ed6617f9B2fcEEAfa2", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "decimals": 6, "minimum": "1000000" }
],
"gasFee": { "fixed": "0", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" }
},
{
"kind": "solana", "chainId": 103, "name": "Solana devnet", "cluster": "devnet",
"program": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n", "executor": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n",
"treasury": "HNxotR7XfmwVxq85hemdnTmwrgmyQTZir9S2U9Cq2kDn", "keeper": "6XVEMkczPazR48FspJneiVdE7GYJ77PofQBtcfVAq8YB",
"tokens": [
{ "symbol": "cNGN", "address": "6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" },
{ "symbol": "USDT", "address": "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" }
],
"fee": { "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokens": ["72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"], "bps": 5 },
"computeUnitLimit": 200000, "computeUnitPrice": "10000",
"gasFee": { "fixed": "20000", "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx" },
"pairs": [
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx"],
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"]
]
}
],
"chainId": 84532,
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"rfqWindowMs": 1500,
"requireTakerProof": true,
"requireRegistration": true,
"maxOutstandingRfqs": 4,
"limitOrders": { "minExpirySeconds": 300, "maxExpirySeconds": 2592000, "maxOpenPerTaker": 20 }
}
Network
Configuration
Every chain the relay serves, with contracts, tokens, minimums and the relay’s settings.
GET
/
v1
/
config
Configuration
curl --request GET \
--url https://relay-production-f175.up.railway.app/v1/configimport requests
url = "https://relay-production-f175.up.railway.app/v1/config"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://relay-production-f175.up.railway.app/v1/config', 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://relay-production-f175.up.railway.app/v1/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://relay-production-f175.up.railway.app/v1/config"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://relay-production-f175.up.railway.app/v1/config")
.asString();require 'uri'
require 'net/http'
url = URI("https://relay-production-f175.up.railway.app/v1/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"chains": [
{
"kind": "evm", "chainId": 84532, "name": "Base Sepolia",
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"reactor": "0x6228F9505647Df94838397A0ED03b158e3C8c59C",
"validation": "0x42c1E8Aa00C0D48338494CC5a631169E4F2a4E7E",
"permit2": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"feeController": "0xAFfB63E5a0B9168E04678668137F4F9b1C265aA8",
"tokens": [
{ "symbol": "cNGN", "address": "0xe2387F04d3858e7Cb64Ef5Ed6617f9B2fcEEAfa2", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "decimals": 6, "minimum": "1000000" }
],
"gasFee": { "fixed": "0", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" }
},
{
"kind": "solana", "chainId": 103, "name": "Solana devnet", "cluster": "devnet",
"program": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n", "executor": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n",
"treasury": "HNxotR7XfmwVxq85hemdnTmwrgmyQTZir9S2U9Cq2kDn", "keeper": "6XVEMkczPazR48FspJneiVdE7GYJ77PofQBtcfVAq8YB",
"tokens": [
{ "symbol": "cNGN", "address": "6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" },
{ "symbol": "USDT", "address": "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" }
],
"fee": { "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokens": ["72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"], "bps": 5 },
"computeUnitLimit": 200000, "computeUnitPrice": "10000",
"gasFee": { "fixed": "20000", "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx" },
"pairs": [
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx"],
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"]
]
}
],
"chainId": 84532,
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"rfqWindowMs": 1500,
"requireTakerProof": true,
"requireRegistration": true,
"maxOutstandingRfqs": 4,
"limitOrders": { "minExpirySeconds": 300, "maxExpirySeconds": 2592000, "maxOpenPerTaker": 20 }
}
object[]
Every chain served. An EVM entry carries
kind: "evm"; a Solana entry kind: "solana".Show EVM entry
Show EVM entry
number
string
address
PanofxExecutor.
address
LimitOrderReactor.
address
PanofxValidation.
address
address
object[]
{ symbol, address, decimals, minimum }. minimum is the smallest sell amount in base units, or null.object
{ fixed, token }: the fallback gas fee and the token it is charged in (null means the buy token of each quote).Show Solana entry
Show Solana entry
string
devnet, testnet or mainnet-beta.string
The order-engine program.
executor repeats it.string
string
The fee payer.
object[]
{ symbol, address, tokenProgram, decimals, minimum }.object
{ token, tokens, bps }. tokens are the fee mints in priority order; token is the first.number
string
Micro-lamports per compute unit.
object
{ fixed, token }.string[][]
The corridors quoted, as
[mintA, mintB]. Either may be sold.The first EVM chain’s fields inline.
number
How long resolvers have to reply. 1500 by default.
boolean
Whether
POST /v1/quotes needs a taker proof.boolean
Whether only registered resolvers may connect.
number
In-flight RFQs allowed per taker.
object | null
{ minExpirySeconds, maxExpirySeconds, maxOpenPerTaker }, or null when limit orders are off.{
"chains": [
{
"kind": "evm", "chainId": 84532, "name": "Base Sepolia",
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"reactor": "0x6228F9505647Df94838397A0ED03b158e3C8c59C",
"validation": "0x42c1E8Aa00C0D48338494CC5a631169E4F2a4E7E",
"permit2": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"feeController": "0xAFfB63E5a0B9168E04678668137F4F9b1C265aA8",
"tokens": [
{ "symbol": "cNGN", "address": "0xe2387F04d3858e7Cb64Ef5Ed6617f9B2fcEEAfa2", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "0x036CbD53842c5426634e7929541eC2318f3dCF7e", "decimals": 6, "minimum": "1000000" }
],
"gasFee": { "fixed": "0", "token": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" }
},
{
"kind": "solana", "chainId": 103, "name": "Solana devnet", "cluster": "devnet",
"program": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n", "executor": "PFXzwLoUsUAC1eNBGVxbgpsrhduaMFVmqLy9oge4N5n",
"treasury": "HNxotR7XfmwVxq85hemdnTmwrgmyQTZir9S2U9Cq2kDn", "keeper": "6XVEMkczPazR48FspJneiVdE7GYJ77PofQBtcfVAq8YB",
"tokens": [
{ "symbol": "cNGN", "address": "6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", "decimals": 6, "minimum": "1000000000" },
{ "symbol": "USDC", "address": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" },
{ "symbol": "USDT", "address": "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN", "tokenProgram": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "decimals": 6, "minimum": "1000000" }
],
"fee": { "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "tokens": ["72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"], "bps": 5 },
"computeUnitLimit": 200000, "computeUnitPrice": "10000",
"gasFee": { "fixed": "20000", "token": "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx" },
"pairs": [
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "72GtYU66mCGJV311qh12EVGyQGkAb8TJVpxSXMPSghKx"],
["6RFnYruxidpR1m9L91bs8cZKjmigEpxXB2Wv2rR8m2pu", "An2RV3ZgsyXspuWLY2TgmjwR5UY1iYNgymrsLCTaPpCN"]
]
}
],
"chainId": 84532,
"executor": "0x64DcA68A0186c6aa632088fBE90b630e0c9D6b32",
"rfqWindowMs": 1500,
"requireTakerProof": true,
"requireRegistration": true,
"maxOutstandingRfqs": 4,
"limitOrders": { "minExpirySeconds": 300, "maxExpirySeconds": 2592000, "maxOpenPerTaker": 20 }
}

