Best Practice
Transferring token example
Step 1: Get Token Info
You can call the get Token List API to get all the available tokens we have on the blockchain you choose.
Method: Get
Parameters:
parameter
type
example
description
chain
string
bsc
eth, bsc, polygon, avax, arbitrum, fantom, xdai, moonriver, aurora, cronos, harmony, solana, sifchain, osmosis, optimism, ont, tron, okex, zksync, linea, scroll
Your request will look like this:
async tokenList() {
 const { data } = axios.get('https://api.0xgen.io/v1/bsc/tokenList');
}
And your response will look like this:
{ "code": 200,
"data": [
{
"id": 2048,
"code": "ezeth",
"name": "Renzo Restaked ETH",
"address": "0x2416092f143378750bb29b79eD961ab195CcEea5",
"decimals": 18,
"symbol": "ezETH",
"icon": "https://s3.0xgen.io/logos/1720409237571_35144943543615725.png",
"chain": "bsc",
"createtime": "2024-07-08T03:27:21.000Z",
"hot": null,
"sort": "2024-07-08T03:27:21.000Z",
"chainId": null,
"usd": null
},...]
}
Then you pick up the token you choose in the specific chain which is included. You need to save the token information you need for further operations
Step 2: Quote
You can obtain quotes from different platforms.
Method: Get
Parameters:
parameter
type
example
description
chain
string
bsc
eth, bsc, polygon, avax, arbitrum, fantom, xdai, moonriver, aurora, cronos, harmony, solana, sifchain, osmosis, optimism, ont, tron, okex, zksync, linea, scroll
inTokenAddress
string
0x783C08b5F26E3daf8C4681F3bf49844e425b6393
token address
outTokenAddress
string
0xD81D45E7635400dDD9c028839e9a9eF479006B28
out token address
amount
string
5
token amount(without decimals)
gasPrice
string
1
without decimals
Your request will be like this
 let params = {
   inTokenAddress: '0x9029FdFAe9A03135846381c7cE16595C3554e10A',
   outTokenAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
   amount: 5,
   gasPrice: 1,
   };
 async quote(){
  const { data } = await axios.get('https://api.0xgen.io/v1/bsc/quote', {params})
 }
And your response will look like this:
{
 "code": 200,
 "data": {
   "dexes": [
     {
       "name": "openOcean",
       "amount": "1614773503060146858429"
     },
     {
       "name": "1inch",
       "amount": "1614222924617714762008"
     }
   ],
   "maxOutAmount": "1614773503060146858429",
   "minOutAmount": "1614222924617714762008",
   "inToken": {
     "symbol": "BNB",
     "name": "Binance Coin",
     "address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
     "decimals": 18
   },
   "outToken": {
     "symbol": "1INCH",
     "name": "1INCH Token",
     "address": "0x111111111117dc0aa78b770fa6a738034120c302",
     "decimals": 18
   },
   "inAmount": "5000000000000000000"
 }
}
Step 3: Obtain on-chain transaction data.
You can obtain the on-chain transaction data from a specified platform.
Method: Get
Parameters:
parameter
type
example
description
chain
string
bsc
eth, bsc, polygon, avax, arbitrum, fantom, xdai, moonriver, aurora, cronos, harmony, solana, sifchain, osmosis, optimism, ont, tron, okex, zksync, linea, scroll
dex
string
openOcean
openOcean, 1inch, paraSwap, matcha, jupiter, 1sol
inTokenAddress
string
0x783C08b5F26E3daf8C4681F3bf49844e425b6393
token address
outTokenAddress
string
0xD81D45E7635400dDD9c028839e9a9eF479006B28
out token address
amount
string
5
token amount(without decimals)
gasPrice
string
5
without decimals
slippage
number
1
1 equals 1%, 1%-100%
account
string
user's address
disableEstimate
boolean
true
true/false(check balance and allowance)
referrer
string?
0x0000000000000000000000000000000000000000
Please contact us for a unique referrer parameter
For example, you want to use openocean to obtain the on-chain transaction data;
{
 let params = {
   inTokenAddress: '0x9029FdFAe9A03135846381c7cE16595C3554e10A',
   outTokenAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
   amount: 5,
   gasPrice: 1,
   slippage:100,
   account: ''// wallet address
   };
 const res = await axios.get('https://api.0xgen.io/v1/bsc/openOcean/swap_quote', {params})
}
response:
If you call it right, you will get a result like this:
{
 "code": 200,
 "data": {
   "inToken": {
     "symbol": "BNB",
     "name": "Binance Coin",
     "address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
     "decimals": 18
   },
   "outToken": {
     "symbol": "USDT",
     "name": "Binance-Peg USD (T)",
     "decimals": 18,
     "address": "0x55d398326f99059ff775485246999027b3197955"
   },
   "inAmount": "5000000000000000",
   "outAmount": "1533988843342961506",
   "estimatedGas": "198245",
   "minOutAmount": "1518648954909531891",
   "from": "0x929B44e589AC4dD99c0282614e9a844Ea9483C69",
   "to": "0x6352a56caadC4F1E25CD6c75970Fa768A3304e64",
   "value": "5000000000000000",
   "gasPrice": "5000000000",
   "data": ""
 }
 }
sendTransaction
Here is a case for you to make a transaction on BNB Chain.
import { ethers } from "ethers";
import axios from "axios";
async function swap() {
 const account = ''; // wallet address;
 const private_key = ''; //private key;
 const provider = new ethers.providers.JsonRpcProvider('');
 const wallet = new ethers.Wallet(private_key, provider);
 let params = {
   inTokenAddress: '0x9029FdFAe9A03135846381c7cE16595C3554e10A',
   outTokenAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
   amount: 5,
   gasPrice: 1,
   slippage: 100,
   account// wallet address
 };
 const res = await axios.get("https://api.0xgen.io/v1/bsc/openOcean/swap_quote", { params });
 if (res) {
​
   const { estimatedGas, data, gasPrice } = res.data.data;
   const swapParams = {
     from: '', // wallet address
     to: '0x6352a56caadc4f1e25cd6c75970fa768a3304e64', //Please use the contract from the contract page
     gas: estimatedGas,
     gasPrice: gasPrice,
     data
   };
​
   if (isNativeToken(params.inTokenAddress.toLowerCase())) {
     swapParams.value = ethers.BigNumber.from(res.data.value);
   }
​
   const { hash } = await wallet.sendTransaction(swapParams)
 } else {
   return
 }
}
Last updated