Explore public discover data on Polyhub without API key auth, including tags, trader rankings, trader detail stats, and market tag lookup.
Version: v0.3.8
Use this skill when the user asks about:
curl must be available in the runtime environmentPOLYHUB_API_BASE_URL is fixed to https://polyhub.skill-test.bedev.hubble-rpc.xyz.
This skill does not require POLYHUB_API_KEY.
ALL-HUBBLE as an internal tag name. When presenting results to the user, always display it as All Markets (or 全部市场 in Chinese context). Never show the raw ALL-HUBBLE string to the user.Use the bash tool to call the API with curl.
For common intents, map user requests like this:
GET /api/v1/markets/tagsGET /api/v1/traders-v2/?tag=...GET /api/v1/traders-v2/?tag=CROSS-TAGGET /api/v1/traders/by-address?user_id=...GET /api/v1/markets/by-condition-ids?ids=...BASE="https://polyhub.skill-test.bedev.hubble-rpc.xyz"
GET /api/v1/markets/tagscurl -sS --fail-with-body "$BASE/api/v1/markets/tags"
Use this when the user wants the discover page tag list or wants to browse available niches first.
GET /api/v1/traders-v2/Core query params:
tag — requiredtime_range — required: all or 30dlimit — optional, default 10, max 100offset — optional, default 0filterBots — optional: 0 or 1sort_by — optional: volume, pnl, roi, avg_adt, trade_count_30, ev_per_bought, timing_scoresort_direction — optional: asc or descRange filter params:
pnl_min, pnl_maxvolume_min, volume_maxroi_min, roi_maxavg_adt_min, avg_adt_maxtrade_count_30_min, trade_count_30_maxev_per_bought_min, ev_per_bought_maxtiming_score_min, timing_score_maxValidation:
tag is requiredtime_range must be all or 30dlimit should be between 1 and 100offset should be 0 or greaterfilterBots should be 0 or 1Example: standard discover query
curl -sS --fail-with-body \
"$BASE/api/v1/traders-v2/?tag=Politics&time_range=all&limit=10&offset=0"
Example: cross-tag query
curl -sS --fail-with-body \
"$BASE/api/v1/traders-v2/?tag=CROSS-TAG&time_range=30d&limit=20&offset=0"
Example: filtered and sorted query
curl -sS --fail-with-body \
"$BASE/api/v1/traders-v2/?tag=Sports&time_range=30d&filterBots=1&pnl_min=1000&trade_count_30_min=30&sort_by=ev_per_bought&sort_direction=desc"
Guidance:
tag=CROSS-TAG when the user wants discover results across all tags.time_range=30d when the user asks for recent performance.filterBots=1 when the user explicitly wants bot filtering.sort_direction=desc unless the user explicitly wants ascending order.GET /api/v1/traders/by-addressRequired query params:
user_id — trader wallet addressOptional query params:
time_range — if supported by caller flowcurl -sS --fail-with-body \
"$BASE/api/v1/traders/by-address?user_id=0x1234..."
Use this when the user clicks into a trader from discover and wants stats across tags.
GET /api/v1/markets/by-condition-idsRequired query params:
ids — comma-separated condition ID listValidation:
ids must not be empty200 IDs per requestcurl -sS --fail-with-body \
"$BASE/api/v1/markets/by-condition-ids?ids=0xabc,0xdef"
Use this when the user wants to map market condition IDs back to discover tags.
When the user asks to find traders worth copying (e.g. "帮我找值得跟单的地址", "find me smart money", "谁在赚钱"), follow this multi-step process:
Choose the scope based on user intent:
tag=CROSS-TAGtime_range=30d unless user asks for all-timeDefault filters (user can override any):
filterBots=1 (exclude bots)pnl_min=5000 (minimum $5K profit in 30 days)timing_score_min=52 (at least slightly positive alpha)trade_count_30_min=30 (enough trades for statistical significance)sort_by=ev_per_bought, sort_direction=desc (rank by expected return per dollar)limit=15curl -sS --fail-with-body \
"$BASE/api/v1/traders-v2/?tag=Sports&time_range=30d&filterBots=1&pnl_min=5000&timing_score_min=52&trade_count_30_min=30&sort_by=ev_per_bought&sort_direction=desc&limit=15"
From Step 1 results, note which tags appear frequently in top results. Common valuable sub-tags under Sports: Soccer, Premier League, UCL, NBA, NHL, Liga MX, Argentina Primera División.
Then query those specific sub-tags with the same filters to find specialists:
curl -sS --fail-with-body \
"$BASE/api/v1/traders-v2/?tag=Soccer&time_range=30d&filterBots=1&pnl_min=5000&timing_score_min=52&trade_count_30_min=10&sort_by=ev_per_bought&sort_direction=desc&limit=10"
For top 3-5 candidates, call by-address to see their performance across ALL tags:
curl -sS --fail-with-body \
"$BASE/api/v1/traders/by-address?user_id=0x..."
Evaluation criteria (prioritized):
Disqualify if:
Present ranked results in this format:
🏆 推荐跟单地址
1. 0x{address}
📊 Sports 30D: PnL ${pnl}, EV/Bought {ev}, Alpha {alpha}
📈 强势子标签: {subtag1} (EV {ev1}), {subtag2} (EV {ev2})
🔗 详情: https://polyhub.hubble.xyz/trader/{address}
想跟单哪个?
A) 我直接帮你创建跟单任务(通过 polyhub_copy skill,需要 API key)
B) 打开网页操作: https://polyhub.hubble.xyz/discover?copy={address}&tag={tag}
pnl_min=10000trade_count_30_min=100timing_score_min=60filterBots=0time_range=allIf a query returns zero results, progressively loosen filters:
pnl_min to 1000trade_count_30_min to 10timing_score_mintag=CROSS-TAG if using a niche sub-tagAfter the user selects an address to copy:
POLYHUB_API_KEY is configured, use polyhub_copy skill's "Quick Copy from Discover" flow:
GET /api/v1/portfolio/statsPOST /api/v1/copy-tasks with targetTrader and optional filteredByTaghttps://polyhub.hubble.xyz/copy-history?action=deposithttps://polyhub.hubble.xyz/discover?copy={address}&tag={tag}https://polyhub.hubble.xyz/trader/{address}Note: Depositing funds is only possible via the web UI, not through any skill or API.
400: Invalid query parameters such as missing tag, invalid time_range, or empty ids500: Backend query failed or service unavailable