Pay from any chain.
We handle the rest.
Move funds across networks automatically — no bridges, no manual swaps.
We abstract cross-chain payments into a single API call.
How it works
Liquidity guard: Pool balance is checked before payment is requested. You are never charged for an unavailable route.
Built for agents
Works with Metered API Access — agents get cross-chain payments automatically with a single API key.
Smart routing
RelAI automatically selects the best path for every transfer.
Reliability
Supported networks
svm-exactLiveexactLiveexactLiveQuery GET /v1/bridge/networks at runtime to get available directions. The bridge UI and SDK use this endpoint automatically.
Fees & limits
| Bridge fee | 1% of input amount, minimum $0.01 |
| Gas fees | Sponsored by RelAI — $0 for user |
| Minimum | $0.05 USDC |
| Maximum | $1 USDC per transaction (beta) |
| Settlement time | ~3 seconds on destination chain |
Bridge UI
Available at /bridge. Supports Phantom (Solana) and MetaMask / any EVM wallet (SKALE Base).
SDK integration
Use createX402Client from @relai-fi/x402 — it handles the 402 payment automatically.
import { createX402Client } from '@relai-fi/x402';
import { Keypair } from '@solana/web3.js';
const keypair = Keypair.fromSecretKey(Buffer.from(process.env.SOLANA_KEY!, 'base64'));
const x402 = createX402Client({
wallets: {
solana: {
publicKey: keypair.publicKey,
signTransaction: async (tx: any) => { tx.sign([keypair]); return tx; },
},
},
defaultHeaders: { 'X-Service-Key': process.env.RELAI_SERVICE_KEY! },
});
const res = await x402.fetch(
'https://api.relai.fi/v1/bridge/solana-to-skale-base',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ amount: 10.0, destinationWallet: '0xYourSkaleBaseAddress' }),
}
);
const result = await res.json();
// result.paymentTxHash — Solana payment tx
// result.txHash — SKALE Base payout tx
console.log('Payout:', result.explorerUrl);import { ethers } from 'ethers';
import { createX402Client } from '@relai-fi/x402';
const signer = new ethers.Wallet(process.env.EVM_KEY!, new ethers.JsonRpcProvider(process.env.SKALE_RPC_URL));
const x402 = createX402Client({
wallets: {
evm: {
address: signer.address,
signTypedData: (domain: any, types: any, message: any) =>
signer.signTypedData(domain, types, message),
},
},
defaultHeaders: { 'X-Service-Key': process.env.RELAI_SERVICE_KEY! },
});
const res = await x402.fetch(
'https://api.relai.fi/v1/bridge/skale-base-to-solana',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ amount: 5.0, destinationWallet: 'YourSolanaAddress' }),
}
);
const result = await res.json();
console.log('Payout:', result.explorerUrl); // solscan.ioManagement API
Requires X-Service-Key header. Routes are config-driven — new networks appear without changing endpoints.
/v1/bridge/networksList all enabled bridge directions
/v1/bridge/quoteFee and net output for a given amount (params: amount, from, to)
/v1/bridge/balancesCurrent USDC liquidity on all networks
/v1/bridge/:directionExecute bridge. Returns 402 — handled automatically by x402 SDK.
{
"success": true,
"direction": "solana-to-skale-base",
"destinationWallet": "0xYourSkaleAddress",
"amountOutUsd": 9.99,
"txHash": "0xabc123...",
"explorerUrl": "https://skale-base-explorer.skalenodes.com/tx/0xabc123...",
"paymentTxHash": "5Kq7...",
"paymentExplorerUrl": "https://solscan.io/tx/5Kq7..."
}Error reference
insufficient_liquidityDestination pool cannot fulfill the transfer. Returned before payment is requested — you are never charged. Check /v1/bridge/balances and retry.
Payment RequiredStandard x402 response. Handled automatically by createX402Client.
Validation errorInvalid amount or destinationWallet format. EVM addresses: 0x... · Solana: base58.
try {
const res = await x402.fetch('https://api.relai.fi/v1/bridge/solana-to-skale-base', {
method: 'POST',
body: JSON.stringify({ amount: 10.0, destinationWallet: '0x...' }),
});
const result = await res.json();
} catch (err) {
if (err.message.includes('insufficient_liquidity')) {
// Check available liquidity and retry later
const balRes = await fetch('https://api.relai.fi/v1/bridge/balances',
{ headers: { 'X-Service-Key': process.env.RELAI_SERVICE_KEY! } });
const { balances } = await balRes.json();
console.log('Available on SKALE Base:', balances['skale-base']);
}
}