Loading...
Loading...
Compare original and translation side by side
https://web3.okx.com/api/v6/dex/marketOK-ACCESS-KEYOK-ACCESS-SIGNOK-ACCESS-PASSPHRASEOK-ACCESS-TIMESTAMPhttps://web3.okx.com/api/v6/dex/marketOK-ACCESS-KEYOK-ACCESS-SIGNOK-ACCESS-PASSPHRASEOK-ACCESS-TIMESTAMPOKX_API_KEYOKX_SECRET_KEYOKX_PASSPHRASEimport crypto from 'crypto';
const BASE = 'https://web3.okx.com';
// Signature rule:
// GET → body = "", requestPath includes query string (e.g., "/api/v6/dex/market/token/search?chains=1&search=PEPE")
// POST → body = JSON string of request body, requestPath is path only (e.g., "/api/v6/dex/market/price-info")
async function okxFetch(method: 'GET' | 'POST', path: string, body?: object) {
const timestamp = new Date().toISOString();
const bodyStr = body ? JSON.stringify(body) : '';
const sign = crypto
.createHmac('sha256', process.env.OKX_SECRET_KEY!)
.update(timestamp + method + path + bodyStr)
.digest('base64');
const headers: Record<string, string> = {
'OK-ACCESS-KEY': process.env.OKX_API_KEY!,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-PASSPHRASE': process.env.OKX_PASSPHRASE!,
'OK-ACCESS-TIMESTAMP': timestamp,
'Content-Type': 'application/json',
};
const res = await fetch(`${BASE}${path}`, {
method,
headers,
...(body && { body: bodyStr }),
});
if (res.status === 429) throw { code: 'RATE_LIMITED', msg: 'Rate limited — retry with backoff', retryable: true };
if (res.status >= 500) throw { code: `HTTP_${res.status}`, msg: 'Server error', retryable: true };
const json = await res.json();
if (json.code !== '0') throw { code: json.code, msg: json.msg || 'API error', retryable: false };
return json.data;
}{ "code": "0", "data": [...], "msg": "" }code"0"OKX_API_KEYOKX_SECRET_KEYOKX_PASSPHRASEimport crypto from 'crypto';
const BASE = 'https://web3.okx.com';
// 签名规则:
// GET 请求 → body 为空字符串,requestPath 包含查询参数(例如:"/api/v6/dex/market/token/search?chains=1&search=PEPE")
// POST 请求 → body 为请求体的JSON字符串,requestPath 仅包含路径(例如:"/api/v6/dex/market/price-info")
async function okxFetch(method: 'GET' | 'POST', path: string, body?: object) {
const timestamp = new Date().toISOString();
const bodyStr = body ? JSON.stringify(body) : '';
const sign = crypto
.createHmac('sha256', process.env.OKX_SECRET_KEY!)
.update(timestamp + method + path + bodyStr)
.digest('base64');
const headers: Record<string, string> = {
'OK-ACCESS-KEY': process.env.OKX_API_KEY!,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-PASSPHRASE': process.env.OKX_PASSPHRASE!,
'OK-ACCESS-TIMESTAMP': timestamp,
'Content-Type': 'application/json',
};
const res = await fetch(`${BASE}${path}`, {
method,
headers,
...(body && { body: bodyStr }),
});
if (res.status === 429) throw { code: 'RATE_LIMITED', msg: '请求频率超限 — 请延迟后重试', retryable: true };
if (res.status >= 500) throw { code: `HTTP_${res.status}`, msg: '服务器错误', retryable: true };
const json = await res.json();
if (json.code !== '0') throw { code: json.code, msg: json.msg || 'API错误', retryable: false };
return json.data;
}{ "code": "0", "data": [...], "msg": "" }code"0"// Search token (GET)
const tokens = await okxFetch('GET', '/api/v6/dex/market/token/search?' + new URLSearchParams({
chains: '1,501', search: 'PEPE',
}));
// → tokens[].tokenContractAddress, price, communityRecognized
// Get detailed price info (POST — body is JSON array)
const path = '/api/v6/dex/market/price-info';
const prices = await okxFetch('POST', path, [
{ chainIndex: '1', tokenContractAddress: '0x6982508145454ce325ddbe47a25d4ec3d2311933' },
]);
// → prices[].price, marketCap, liquidity, volume24H, priceChange24H// 搜索代币(GET请求)
const tokens = await okxFetch('GET', '/api/v6/dex/market/token/search?' + new URLSearchParams({
chains: '1,501', search: 'PEPE',
}));
// → tokens[].tokenContractAddress, price, communityRecognized
// 获取详细价格信息(POST请求 — 请求体为JSON数组)
const path = '/api/v6/dex/market/price-info';
const prices = await okxFetch('POST', path, [
{ chainIndex: '1', tokenContractAddress: '0x6982508145454ce325ddbe47a25d4ec3d2311933' },
]);
// → prices[].price, marketCap, liquidity, volume24H, priceChange24H| Chain | chainIndex | Chain | chainIndex |
|---|---|---|---|
| Ethereum | | Arbitrum | |
| BSC | | Base | |
| Polygon | | Solana | |
| 链名称 | chainIndex | 链名称 | chainIndex |
|---|---|---|---|
| Ethereum | | Arbitrum | |
| BSC | | Base | |
| Polygon | | Solana | |
| # | Method | Path | Docs |
|---|---|---|---|
| 1 | GET | | market-token-search |
| 2 | POST | | market-token-basic-info |
| 3 | POST | | market-token-price-info |
| 4 | GET | | market-token-ranking |
| 5 | GET | | market-token-holder |
| 序号 | 请求方法 | 路径 | 文档 |
|---|---|---|---|
| 1 | GET | | market-token-search |
| 2 | POST | | market-token-basic-info |
| 3 | POST | | market-token-price-info |
| 4 | GET | | market-token-ranking |
| 5 | GET | | market-token-holder |
| Need | Use this skill ( | Use |
|---|---|---|
| Search token by name/symbol | | - |
| Token metadata (decimals, logo) | | - |
| Price + market cap + liquidity + multi-timeframe change | | - |
| Token ranking (trending) | | - |
| Holder distribution | | - |
| Raw real-time price (single value) | - | |
| K-line / candlestick chart | - | |
| Trade history (buy/sell log) | - | |
| Index price (multi-source aggregate) | - | |
okx-dex-tokenokx-dex-market| 需求 | 使用本技能( | 改用 |
|---|---|---|
| 按名称/符号搜索代币 | | - |
| 代币元数据(小数位数、Logo) | | - |
| 价格 + 市值 + 流动性 + 多时间段涨跌幅 | | - |
| 代币排名(热门) | | - |
| 持有者分布 | | - |
| 实时 raw 价格(单一数值) | - | |
| K线/蜡烛图 | - | |
| 交易历史(买卖记录) | - | |
| 指数价格(多源聚合) | - | |
okx-dex-tokenokx-dex-marketUser: "Find BONK token, analyze it, then buy some"
1. okx-dex-token /market/token/search?search=BONK&chains=501 → get tokenContractAddress, chainIndex, price, communityRecognized
↓ tokenContractAddress + chainIndex
2. okx-dex-token /market/price-info → market cap, liquidity, volume24H, priceChange24H, holders
3. okx-dex-token /market/token/holder → top 20 holders distribution
4. okx-dex-market /market/candles?bar=1H → hourly price chart
↓ user decides to buy
5. okx-wallet-portfolio /balance/all-token-balances-by-address → verify wallet has enough SOL
6. okx-dex-swap /aggregator/quote → /aggregator/swap-instruction → executetokenContractAddresschainIndexdecimal/market/token/basic-info用户:“找到BONK代币,分析它,然后买一些”
1. okx-dex-token /market/token/search?search=BONK&chains=501 → 获取tokenContractAddress、chainIndex、价格、communityRecognized
↓ tokenContractAddress + chainIndex
2. okx-dex-token /market/price-info → 市值、流动性、24小时交易量、24小时涨跌幅、持有者数量
3. okx-dex-token /market/token/holder → 前20名持有者分布
4. okx-dex-market /market/candles?bar=1H → 小时级价格图表
↓ 用户决定购买
5. okx-wallet-portfolio /balance/all-token-balances-by-address → 验证钱包中有足够的SOL
6. okx-dex-swap /aggregator/quote → /aggregator/swap-instruction → 执行兑换tokenContractAddresschainIndex/market/token/basic-infodecimalUser: "What's trending on Solana?"
1. okx-dex-token /market/token/toplist?chains=501&sortBy=5&timeFrame=4 → top tokens by 24h volume
↓ user picks a token
2. okx-dex-token /market/price-info → detailed analytics
3. okx-dex-token /market/token/holder → check if whale-dominated
4. okx-dex-market /market/candles → K-line for visual trend
↓ user decides to trade
5. okx-dex-swap → execute用户:“Solana上当前热门的代币有哪些?”
1. okx-dex-token /market/token/toplist?chains=501&sortBy=5&timeFrame=4 → 按24小时交易量排序的顶级代币
↓ 用户选择某个代币
2. okx-dex-token /market/price-info → 详细分析数据
3. okx-dex-token /market/token/holder → 检查是否由巨鲸主导
4. okx-dex-market /market/candles → K线图查看趋势
↓ 用户决定交易
5. okx-dex-swap → 执行交易1. okx-dex-token /market/token/search → find token
2. Check communityRecognized:
- true → proceed with normal caution
- false → warn user about risk
3. okx-dex-token /market/price-info → check liquidity:
- liquidity < $10K → warn about high slippage risk
- liquidity < $1K → strongly discourage trade
4. okx-dex-swap /aggregator/quote → check isHoneyPot and taxRate
5. If all checks pass → proceed to swap1. okx-dex-token /market/token/search → 查找代币
2. 检查communityRecognized:
- true → 正常谨慎操作
- false → 警告用户存在风险
3. okx-dex-token /market/price-info → 检查流动性:
- 流动性 < 1万美元 → 警告滑点风险高
- 流动性 < 1千美元 → 强烈不建议交易
4. okx-dex-swap /aggregator/quote → 检查isHoneyPot和taxRate
5. 所有检查通过 → 执行兑换GET /market/token/searchPOST /market/token/basic-infoPOST /market/price-infoGET /market/token/toplistGET /market/token/holderGET /market/token/searchPOST /market/token/basic-infoPOST /market/price-infoGET /market/token/toplistGET /market/token/holderchainIndex/market/token/search/market/token/basic-info/market/price-infochainIndex/market/token/search/market/token/basic-info/market/price-infocommunityRecognizedcommunityRecognized| Just called | Suggest |
|---|---|
| 1. View detailed analytics (market cap, liquidity) → |
| 1. View price and market data → |
| 1. View K-line chart → |
| 1. View details for a specific token → |
| 1. View price trend → |
| 刚调用的端点 | 建议操作 |
|---|---|
| 1. 查看详细分析数据(市值、流动性)→ |
| 1. 查看价格和市场数据 → |
| 1. 查看K线图表 → |
| 1. 查看特定代币的详细信息 → |
| 1. 查看价格趋势 → |
| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain IDs, comma-separated (e.g., |
| String | Yes | Keyword: token name, symbol, or contract address |
tokenContractAddresstokenSymboltokenNametokenLogoUrlchainIndexdecimalpricechangemarketCapliquidityholdersexplorerUrltagList.communityRecognized| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 链ID,逗号分隔(例如: |
| 字符串 | 是 | 关键词:代币名称、符号或合约地址 |
tokenContractAddresstokenSymboltokenNametokenLogoUrlchainIndexdecimalpricechangemarketCapliquidityholdersexplorerUrltagList.communityRecognized| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| String | Yes | Token address |
tokenNametokenSymboltokenLogoUrldecimaltokenContractAddresstagList.communityRecognized{
"code": "0",
"data": [{ "chainIndex": "501", "decimal": "6", "tokenName": "michi", "tokenSymbol": "$michi",
"tokenContractAddress": "5mbK36SZ...", "tagList": { "communityRecognized": true } }],
"msg": ""
}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 链ID |
| 字符串 | 是 | 代币合约地址 |
tokenNametokenSymboltokenLogoUrldecimaltokenContractAddresstagList.communityRecognized{
"code": "0",
"data": [{ "chainIndex": "501", "decimal": "6", "tokenName": "michi", "tokenSymbol": "$michi",
"tokenContractAddress": "5mbK36SZ...", "tagList": { "communityRecognized": true } }],
"msg": ""
}| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| String | Yes | Token address |
pricetimemarketCapliquiditycircSupplyholderstradeNumpriceChange5M1H4H24Hvolume5M1H4H24Htxs5M1H4H24HmaxPriceminPrice| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 链ID |
| 字符串 | 是 | 代币合约地址 |
pricetimemarketCapliquiditycircSupplyholderstradeNumpriceChange5M1H4H24Hvolume5M1H4H24Htxs5M1H4H24HmaxPriceminPrice| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain IDs, comma-separated |
| String | Yes | Sort: |
| String | Yes | Window: |
tokenSymboltokenContractAddresstokenLogoUrlchainIndexpricechangevolumemarketCapliquidityholdersuniqueTraderstxsBuytxsSelltxsfirstTradeTime| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 链ID,逗号分隔 |
| 字符串 | 是 | 排序方式: |
| 字符串 | 是 | 统计窗口: |
tokenSymboltokenContractAddresstokenLogoUrlchainIndexpricechangevolumemarketCapliquidityholdersuniqueTraderstxsBuytxsSelltxsfirstTradeTime| Param | Type | Required | Description |
|---|---|---|---|
| String | Yes | Chain ID |
| String | Yes | Token address |
| Field | Type | Description |
|---|---|---|
| String | Token amount held |
| String | Holder wallet address |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 字符串 | 是 | 链ID |
| 字符串 | 是 | 代币合约地址 |
| 字段 | 类型 | 说明 |
|---|---|---|
| 字符串 | 持有代币数量 |
| 字符串 | 持有者钱包地址 |
GET /api/v6/dex/market/token/search?chains=1&search=PEPE
-> Display:
PEPE (0x6982...) - Ethereum
Price: $0.0000XX | 24h: +X% | Market Cap: $X.XB | Liquidity: $XXM
Community Recognized: YesPOST /api/v6/dex/market/token/basic-info
Body: [
{ "chainIndex": "1", "tokenContractAddress": "0xaaa..." },
{ "chainIndex": "1", "tokenContractAddress": "0xbbb..." },
{ "chainIndex": "56", "tokenContractAddress": "0xccc..." }
]
-> Returns name, symbol, decimals, community status for eachGET /api/v6/dex/market/token/toplist?chains=501&sortBy=5&timeFrame=4
-> Display top tokens sorted by 24h volume:
#1 SOL - Vol: $1.2B | Change: +3.5% | MC: $80B
#2 BONK - Vol: $450M | Change: +12.8% | MC: $1.5B
...GET /api/v6/dex/market/token/search?chains=1&search=PEPE
-> 展示:
PEPE (0x6982...) - Ethereum
价格:$0.0000XX | 24小时:+X% | 市值:$X.XB | 流动性:$XXM
社区认证:是POST /api/v6/dex/market/token/basic-info
请求体:[
{ "chainIndex": "1", "tokenContractAddress": "0xaaa..." },
{ "chainIndex": "1", "tokenContractAddress": "0xbbb..." },
{ "chainIndex": "56", "tokenContractAddress": "0xccc..." }
]
-> 返回每个代币的名称、符号、小数位数、社区认证状态GET /api/v6/dex/market/token/toplist?chains=501&sortBy=5&timeFrame=4
-> 展示按24小时交易量排序的顶级代币:
#1 SOL - 交易量:$12亿 | 涨跌幅:+3.5% | 市值:$800亿
#2 BONK - 交易量:$4.5亿 | 涨跌幅:+12.8% | 市值:$15亿
...communityRecognized = false50011communityRecognized = false50011communityRecognized = true/basic-info/price-info/basic-info/price-infookx-dex-marketokx-wallet-portfoliookx-dex-swapcommunityRecognized = true/basic-info/price-info/basic-info/price-infookx-dex-marketokx-wallet-portfoliookx-dex-swap