XXYY Trade
On-chain token trading and data queries on Solana, Ethereum, BSC, and Base via XXYY Open API.
Prerequisites
Set environment variables before use:
XXYY_API_KEY(required) -- Your XXYY Open API Key (format:xxyy_ak_xxxx). Get one at https://www.xxyy.io/apikeyXXYY_API_BASE_URL(optional) -- API base URL, defaults tohttps://www.xxyy.io
Authentication
All requests require header: Authorization: Bearer $XXYY_API_KEY
Security Notes
- ⚠️ API Key = Wallet access -- Your XXYY API Key can execute real on-chain trades using your wallet balance. If it leaks, anyone can buy/sell tokens with your funds. Never share it, never commit it to version control, never expose it in logs or public channels. If you suspect a leak, regenerate the key immediately at https://xxyy.io.
- Custodial trading model -- XXYY is a custodial trading platform. You only provide your wallet address (public key) and API Key. No private keys or wallet signing are needed -- XXYY executes trades on your behalf through their platform.
- No read-only mode -- The same API Key is used for both data queries (Feed, Token Query) and trading (Buy, Sell). There is currently no separate read-only key.
API Reference
Buy Token
POST ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/swap
{
"chain": "sol",
"walletAddress": "<user_wallet>",
"tokenAddress": "<token_contract>",
"isBuy": true,
"amount": 0.1,
"tip": 0.001,
"slippage": 20
}
Buy Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
chain | YES | string | sol / eth / bsc / base | Only these 4 values accepted |
walletAddress | YES | string | SOL: Base58 32-44 chars; EVM: 0x+40hex | Wallet address on XXYY platform, must match chain |
tokenAddress | YES | string | Valid contract address | Token contract address to buy |
isBuy | YES | boolean | true | Must be true for buy |
amount | YES | number | > 0 | Amount in native currency (SOL/ETH/BNB) |
tip | YES | number | SOL: 0.001-0.1 (unit: SOL); EVM: 0.1-100 (unit: Gwei) | Priority fee for all chains. If not provided, falls back to priorityFee |
slippage | NO | number | 0-100 | Slippage tolerance %, default 20 |
model | NO | number | 1 or 2 | 1=anti-sandwich (default), 2=fast mode |
priorityFee | NO | number | >= 0 | Solana chain only. Extra priority fee in addition to tip |
Sell Token
POST ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/swap
{
"chain": "sol",
"walletAddress": "<user_wallet>",
"tokenAddress": "<token_contract>",
"isBuy": false,
"amount": 50,
"tip": 0.001
}
Sell Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
chain | YES | string | sol / eth / bsc / base | Only these 4 values accepted |
walletAddress | YES | string | SOL: Base58 32-44 chars; EVM: 0x+40hex | Wallet address on XXYY platform, must match chain |
tokenAddress | YES | string | Valid contract address | Token contract address to sell |
isBuy | YES | boolean | false | Must be false for sell |
amount | YES | number | 1-100 | Sell percentage. Example: 50 = sell 50% of holdings |
tip | YES | number | SOL: 0.001-0.1 (unit: SOL); EVM: 0.1-100 (unit: Gwei) | Priority fee for all chains. If not provided, falls back to priorityFee |
slippage | NO | number | 0-100 | Slippage tolerance %, default 20 |
model | NO | number | 1 or 2 | 1=anti-sandwich (default), 2=fast mode |
priorityFee | NO | number | >= 0 | Solana chain only. Extra priority fee in addition to tip |
tip / priorityFee Rules
tip(required) -- Universal priority fee for ALL chains. EVM chains (eth/bsc/base) use tip as the priority fee. If tip is not provided, the API falls back to priorityFee.- SOL chain: unit is SOL (1 = 1 SOL, very expensive). Recommended range: 0.001 - 0.1
- EVM chains (eth/bsc/base): unit is Gwei. Recommended range: 0.1 - 100
priorityFee(optional) -- Only effective on Solana chain. Solana supports both tip and priorityFee simultaneously.
Query Trade
GET ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/trade?txId=<tx_id>
Response fields: txId, status (pending/success/failed), statusDesc, chain, tokenAddress, walletAddress, isBuy, baseAmount, quoteAmount
Ping
GET ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/ping
Returns "pong" if API key is valid.
Feed (Scan Tokens)
POST ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/feed/{type}?chain={chain}
Retrieve Meme token lists: newly launched, almost graduated, or graduated.
Path & Query Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
type | YES | path string | NEW / ALMOST / COMPLETED | NEW = newly launched, ALMOST = almost graduated, COMPLETED = graduated |
chain | NO | query string | sol / bsc | Only these 2 chains supported. Default sol |
Body (Filter Parameters)
All filters are optional. Range parameters use comma-separated string format "min,max". Leave one side empty to set only min or max (e.g. "100," = min 100, ",50" = max 50).
| Param | Type | Description | Example |
|---|---|---|---|
dex | string[] | DEX platform filter | See DEX Values by Chain below |
quoteTokens | string[] | Quote token filter | See quoteTokens Values by Chain below |
link | string[] | Social media link filter | ["x","tg","web"] |
keywords | string[] | Token name/symbol keyword match | ["pepe","doge"] |
ignoreWords | string[] | Ignore keywords | ["scam"] |
mc | string | Market cap range (USD) | "10000,500000" |
liq | string | Liquidity range (USD) | "1000," |
vol | string | Trading volume range (USD) | "5000,100000" |
holder | string | Holder count range | "50," |
createTime | string | Creation time range (minutes from now) | "1,20" |
tradeCount | string | Trade count range | "100," |
buyCount | string | Buy count range | "50," |
sellCount | string | Sell count range | "10," |
devBuy | string | Dev buy amount range (native token) | "0.001," |
devSell | string | Dev sell amount range (native token) | "0.001," |
devHp | string | Dev holding % range | ",60" |
topHp | string | Top10 holding % range | ",60" |
insiderHp | string | Insider holding % range | ",50" |
bundleHp | string | Bundle holding % range | ",60" |
newWalletHp | string | New wallet holding % range | ",30" |
progress | string | Graduation progress % range (NEW/ALMOST only) | "1,90" |
snipers | string | Sniper count range | ",5" |
xnameCount | string | Twitter rename count range | ",3" |
tagHolder | string | Watched wallet buy count range | "1,2" |
kol | string | KOL buy count range | "1,2" |
dexPay | int | DexScreener paid, 1 = filter paid only | 1 |
oneLink | int | At least one social link, 1 = enabled | 1 |
live | int | Currently live streaming, 1 = filter live | 1 |
DEX Values by Chain
- SOL:
pump,pumpmayhem,bonk,heaven,believe,daosfun,launchlab,mdbc,jupstudio,mdbcbags,trends,moonshotn,boop,moon,time - BSC:
four,four_agent,bnonly,flap
quoteTokens Values by Chain
- SOL:
sol,usdc,usd1 - BSC:
bnb,usdt,usdc,usd1,aster,u
Feed Response
{
"code": 200,
"msg": "success",
"data": {
"items": [
{
"tokenAddress": "...",
"symbol": "TOKEN",
"name": "Token Name",
"createTime": 1773140232851,
"dexName": "PUMPFUN",
"launchPlatform": { "name": "PUMPFUN", "progress": "12.89", "completed": false },
"holders": 3,
"priceUSD": 0.000003046,
"marketCapUSD": 3046.80,
"devHoldPercent": 12.48,
"hasLink": false,
"snipers": 0,
"quoteToken": "sol"
}
]
},
"success": true
}
Key response fields: tokenAddress, symbol, name, createTime, dexName, launchPlatform (name/progress/completed), holders, priceUSD, marketCapUSD, devHoldPercent, hasLink, snipers, volume, tradeCount, buyCount, sellCount, topHolderPercent, insiderHp, bundleHp
Token Query
GET ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/query?ca={contract_address}&chain={chain}
Query token details: price, security checks, tax rates, holder distribution, etc.
Token Query Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
ca | YES | string | Contract address | Token contract address |
chain | NO | string | sol / eth / bsc / base | Default sol. All 4 chains supported |
Token Query Response
{
"code": 200,
"msg": "success",
"data": {
"chainId": "bsc",
"tokenAddress": "0x...",
"baseSymbol": "TOKEN",
"tradeInfo": {
"marketCapUsd": 15464629.87,
"price": 0.01546,
"holder": 7596,
"hourTradeNum": 20611,
"hourTradeVolume": 2564705.05
},
"pairInfo": {
"pairAddress": "0x...",
"pair": "TOKEN - WBNB",
"liquidateUsd": 581750.57,
"createTime": 1772182240000
},
"securityInfo": {
"honeyPot": false,
"openSource": true,
"noOwner": true,
"locked": true
},
"taxInfo": { "buy": "0", "sell": "0" },
"linkInfo": { "tg": "", "x": "", "web": "" },
"dev": { "address": "0x...", "pct": 0.0 },
"topHolderPct": 25.14,
"topHolderList": [
{ "address": "0x...", "balance": 98665702.34, "pct": 9.86 }
]
},
"success": true
}
Response groups:
- tradeInfo: marketCapUsd, price, holder, hourTradeNum, hourTradeVolume
- pairInfo: pairAddress, pair, liquidateUsd, createTime
- securityInfo: honeyPot, openSource, noOwner, locked
- taxInfo: buy, sell (percentage strings)
- dev: address, pct
- topHolderPct and topHolderList: top 10 holder distribution
List Wallets
GET ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/wallets
Query the current user's wallet list (with balances) for a specific chain.
Wallets Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
chain | NO | string | sol / eth / bsc / base | Default sol |
pageNum | NO | int | >= 1 | Page number, default 1 |
pageSize | NO | int | 1-20 | Items per page, default 20 |
tokenAddress | NO | string | Contract address | Returns token holdings per wallet |
Wallets Response
{
"code": 200,
"msg": "success",
"data": {
"totalCount": 3,
"pageSize": 20,
"totalPage": 1,
"currPage": 1,
"list": [
{
"userId": 12345,
"chain": 1,
"name": "Wallet-1",
"address": "5xYz...abc",
"balance": 1.523456789,
"topUp": 1,
"tokenBalance": null,
"createTime": "2025-01-01 00:00:00",
"updateTime": "2025-06-01 12:00:00",
"isImport": false
}
]
},
"success": true
}
Response fields:
- totalCount: Total wallet count
- list[].chain: Chain code (1=SOL, 2=BSC, 3=ETH, 6=BASE)
- list[].name: Wallet display name
- list[].address: Wallet address
- list[].balance: Native token balance
- list[].topUp: 1=pinned, 0=normal
- list[].tokenBalance: Token holdings (only present when
tokenAddressis provided). Containsamount,decimals,uiAmount,uiAmountString - list[].isImport: Whether the wallet was imported
Chain Codes
| Code | Chain |
|---|---|
| 1 | SOL |
| 2 | BSC |
| 3 | ETH |
| 6 | BASE |
Wallet Info
GET ${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/wallet/info
Query a single wallet's details (native balance + optional token balance).
Wallet Info Parameters
| Param | Required | Type | Valid values | Description |
|---|---|---|---|---|
walletAddress | YES | string | Wallet address | EVM chains are case-insensitive |
chain | NO | string | sol / eth / bsc / base | Default sol |
tokenAddress | NO | string | Contract address | Returns token holdings for this token |
Wallet Info Response
{
"code": 200,
"msg": "success",
"data": {
"address": "5xY...abc",
"name": "MyWallet",
"chain": 1,
"isImport": false,
"topUp": 0,
"balance": 1.234567,
"tokenBalance": {
"amount": "1000000",
"uiAmount": 1.0,
"decimals": 6
}
},
"success": true
}
Response fields:
- address: Wallet address
- name: Wallet display name
- chain: Chain code (1=SOL, 2=BSC, 3=ETH, 6=BASE)
- balance: Native token balance
- topUp: 1=pinned, 0=normal
- isImport: Whether the wallet was imported
- tokenBalance: Only present when
tokenAddressis provided. Containsamount,uiAmount,decimals
Execution Rules
- Always confirm before trading -- Ask user to confirm: chain, token address, amount/percentage, buy or sell
- Auto-query wallet -- If the user does not provide a wallet address: a. If there is a remembered default wallet for that chain, use it directly and show its current balance via Wallet Info API before confirming. b. Otherwise, call List Wallets API. If only 1 wallet exists, auto-select it. If multiple, ask user to choose. If none, guide to create at https://www.xxyy.io/wallet/manager?chainId={chain}. c. Remember the selected wallet as default for that chain. d. If the user provides a wallet address, call Wallet Info API to verify it exists and show its balance before confirming the trade.
- Use Bash with curl to call the API
- Poll trade result -- After swap submission, query trade status up to 3 times with 5s intervals
- Show transaction link -- Always display the block explorer URL with the txId
- Never retry failed swap requests -- show the error to user instead
- Chain-wallet validation -- walletAddress must match the selected chain. A Solana wallet cannot be used for BSC/ETH/Base trades and vice versa. If the user provides a mismatched wallet/chain combination, warn them and ask to correct before proceeding.
- Strict parameter validation -- Before calling the API, validate EVERY field:
- All required parameters must be present and have legal values
chainmust be one ofsol/eth/bsc/baseisBuymust be booleantrueorfalseamountfor buy: must be > 0; for sell: must be 1-100tipmust be provided; SOL chain: 0.001-0.1 (unit: SOL); EVM chains: 0.1-100 (unit: Gwei). If tip is outside the recommended range, must warn the user about potentially high cost and require explicit confirmation before proceedingmodelif provided must be 1 or 2priorityFeeif provided only applies to Solana chain- Do NOT send any field names outside the parameter tables above
- If any validation fails, refuse to send the request and ask the user to correct
Feed Rules
- type validation -- Only accept
NEW,ALMOST,COMPLETED(uppercase). Reject any other value. - chain validation -- Feed only supports
solandbsc. If user specifiesethorbase, reject and inform them that Feed scanning is only available on Solana and BSC chains. - Single query mode (default) -- Call the Feed API once, format and display key info for each token: symbol, priceUSD, marketCapUSD, holders, devHoldPercent, launchPlatform (name + progress).
- Continuous monitor mode -- Activate only when user explicitly says "持续监控", "monitor", or "watch":
- Use a Bash polling loop, calling Feed API every 5 seconds
- Deduplicate by
tokenAddress— only display newly appeared tokens - Loop limit: 480 seconds (8 minutes). Set Bash timeout to 540000ms
- After loop ends, use AskUserQuestion to ask: continue monitoring / view token details / buy a token / stop
- When continuing, preserve the seen
tokenAddressset to avoid repeats
- Filter guidance -- Before querying, optionally ask user about filter preferences (market cap range, liquidity, holder count, etc.). If not asked, use no filters (return all).
- No auto-trading -- Feed scanning is for observation only. NEVER automatically buy or sell based on scan results.
- Error handling -- See Error Codes table. For data query APIs:
code == 200withsuccess == truemeans success;code == 300is server error (inform user to retry later);code == 8060/8061means stop immediately;code == 8062means wait 2 seconds and retry.
Token Query Rules
- ca required -- Contract address (
ca) must be provided. If missing, ask user for it. - chain validation -- Supports all 4 chains:
sol,eth,bsc,base. Defaultsol. - HoneyPot warning -- If
securityInfo.honeyPot == true, display a prominent warning that this token is a honeypot and trading it is extremely risky. - High tax alert -- If
taxInfo.buyortaxInfo.sell> 5%, warn user about high tax rates. - Display format -- Present results in groups: Trade Info → Security Check → Tax Rates → Holder Distribution → Social Links.
- Trade follow-up -- After displaying query results, optionally ask user if they want to buy this token, linking to the Buy Token flow.
- Error handling -- Same as Feed Rules (see Error Codes table).
Wallets Rules
- chain validation -- Supports all 4 chains. Default
sol. - Display format -- Show wallet name, address, native balance. Mark pinned wallets with ⭐.
- Token holdings -- If user asks about specific token holdings, pass
tokenAddressto show per-wallet balance. - No wallets -- If response returns empty list, guide user to create at: https://www.xxyy.io/wallet/manager?chainId={chain}
- Default wallet memory -- After user selects a wallet, remember it as the default for that chain in the current session. Use this default for subsequent trades on the same chain without asking again.
- Single wallet query -- When the user provides a specific wallet address and asks for its balance, use Wallet Info API instead of List Wallets. Also use Wallet Info to show balance before trade confirmation.
- Error handling -- Same as other data query APIs (see Error Codes table).
Wallet Address Formats
| Chain | Format | Example pattern |
|---|---|---|
| SOL | Base58, 32-44 characters | 7xKX... |
| ETH / BSC / Base | 0x + 40 hex characters | 0x1a2B... |
Block Explorer URLs
- SOL:
https://solscan.io/tx/{txId} - ETH:
https://etherscan.io/tx/{txId} - BSC:
https://bscscan.com/tx/{txId} - BASE:
https://basescan.org/tx/{txId}
Error Codes
| Code | Meaning | Scope |
|---|---|---|
| 200 | Success | Data query APIs (Feed, Token Query) |
| 300 | Server error — inform user to retry later | Data query APIs (Feed, Token Query) |
| 8060 | API Key invalid | All APIs |
| 8061 | API Key disabled | All APIs |
| 8062 | Rate limited | All APIs — data query: retry after 2s; trade: retry after 1s (except swap, see Execution Rules #5) |
Example curl
# Buy
curl -s -X POST "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/swap" \
-H "Authorization: Bearer $XXYY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"chain":"sol","walletAddress":"...","tokenAddress":"...","isBuy":true,"amount":0.1,"tip":0.001}'
# Query Trade
curl -s "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/trade?txId=..." \
-H "Authorization: Bearer $XXYY_API_KEY"
# Feed - Scan newly launched tokens on SOL (with filters)
curl -s -X POST "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/feed/NEW?chain=sol" \
-H "Authorization: Bearer $XXYY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mc":"10000,500000","holder":"50,","insiderHp":",50"}'
# Token Query
curl -s "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/query?ca=TOKEN_ADDRESS&chain=sol" \
-H "Authorization: Bearer $XXYY_API_KEY"
# List Wallets
curl -s "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/wallets?chain=sol" \
-H "Authorization: Bearer $XXYY_API_KEY"
# Wallet Info
curl -s "${XXYY_API_BASE_URL:-https://www.xxyy.io}/api/trade/open/api/wallet/info?walletAddress=YOUR_WALLET&chain=sol" \
-H "Authorization: Bearer $XXYY_API_KEY"