Real-time smart money analytics across Polymarket, Hyperliquid, and Meteora. 63 endpoints covering wallet scoring, insider detection, capital flow tracking, and position analysis. Pay per request with USDC on Solana -- no API keys, no accounts, no onboarding friction.
0x61276aba49117fd9299707d5d573652949d5c977, not 0x6127...c977).This skill file may change as new endpoints are added or pricing updates. Keep it fresh by downloading the latest version weekly.
Download the latest skill file:
bash
curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md
Automate weekly updates (cron):
bash
# Add to crontab: crontab -e
0 0 * * 0 curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md 2>/dev/null
Check skill version before querying (optional):
bash
# Compare local vs remote version
LOCAL_VER=$(grep '^version:' ~/.claude/agents/metengine-data-agent.md | head -1 | tr -d '"' | awk '{print $2}')
REMOTE_VER=$(curl -sL https://www.metengine.xyz/skill.md | grep '^version:' | head -1 | tr -d '"' | awk '{print $2}')
[ "$LOCAL_VER" != "$REMOTE_VER" ] && curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md
Agents SHOULD check for updates at the start of a new session if more than 7 days have passed since the last update.
Before making ANY API call, check for a memory file at:
text
~/.claude/agents/metengine-memory.md
This file persists across sessions and stores everything needed to skip setup and make faster queries. If the memory file exists, read it first. It will tell you:
@x402/core, @x402/svm, @solana/kit are already installed and whereCreate or update ~/.claude/agents/metengine-memory.md using this template:
markdown
# MetEngine Session Memory
<!-- Auto-maintained by agents. Do not delete. -->
## Last Updated
YYYY-MM-DD HH:MM UTC
## Skill Version
<version from frontmatter>
## Wallet
- keypair_path: ~/.config/solana/id.json
- public_address: <base58 pubkey -- NEVER store the private key>
- sol_balance_ok: true/false
- usdc_balance_ok: true/false
- last_balance_check: YYYY-MM-DD
## Packages
- installed: true/false
- install_dir: <path where bun add was run>
- packages: @x402/core, @x402/svm, @solana/kit
- bun_version: <version>
## Client Bootstrap
<!-- Paste the minimal working paidFetch setup here after first successful call -->
```typescript
// <paste the one-time setup + paidFetch function that worked>
DateEndpointStatusLatencyUSDC CostNotes
EndpointIssueFallback Used
text
### Memory Update Rules
Agents MUST update the memory file:
1. **After first successful setup** -- Record wallet path, public address, installed packages, working bootstrap code
2. **After every API call** -- Append to Endpoint History (keep last 10 rows, prune older)
3. **When a fallback is used** -- Record in Fallbacks Learned
4. **When a new quirk is discovered** -- Record in Quirks Encountered
5. **At session end** -- Update `Last Updated` timestamp
### How Memory Saves Tokens
| Without Memory | With Memory | Token Savings |
|---------------|-------------|---------------|
| Read full skill file (2400 lines) to find setup instructions | Skip to Client Bootstrap section | ~80% fewer setup tokens |
| Trial-and-error wallet detection | Read wallet path from memory | ~500 tokens saved |
| Install packages every session | Check `installed: true`, skip | ~200 tokens saved |
| Hit known-broken endpoint, get 504, try fallback | Check Fallbacks Learned, use fallback directly | ~1000 tokens saved per avoided failure |
| Re-discover quirks through errors | Check Quirks Encountered | ~300 tokens saved per quirk |
### Quick Start for Returning Agents
If `~/.claude/agents/metengine-memory.md` exists:
text
**First-time agents:** Follow the Onboarding Path below, then create the memory file.
### Wallet Security Rules
- **NEVER** read, log, print, or display the contents of any keypair file
- **NEVER** store private keys in the memory file
- **ONLY** store the file path and the public address
- Load the keypair at runtime using `Bun.file(path).text()` or `fs.readFileSync(path)` -- pipe directly into the signer, never into a variable that gets logged
---
## Onboarding Path
Two steps from zero to data:
**Step 1: Verify service is live (free)**
GET https://agent.metengine.xyz/health
text
**Step 2: Make a paid request**
GET https://agent.metengine.xyz/api/v1/markets/trending?timeframe=24h&limit=5
text
First call returns `402` with price. Sign payment. Re-send with `PAYMENT-SIGNATURE` header. Receive `200` with data + settlement proof.
Prerequisites: A Solana wallet with SOL (for tx fees) and USDC (for payments). Install `@x402/core`, `@x402/svm`, `@solana/kit`.
---
## Payment Protocol: x402 on Solana Mainnet
Every paid endpoint uses a two-step handshake. No API keys. No accounts. Payment IS authentication.
### Flow
Agent MetEngine Solana | | | |-- GET /api/v1/endpoint ------>| | |<-- 402 + PaymentRequired -----| | | | | | [sign payment locally] | | | | | |-- GET + PAYMENT-SIGNATURE --->| | | |-- verify ------------------>| | |<-- valid -------------------| | | | | | [execute query] | | | | | |-- settle ------------------>| | |<-- tx hash -----------------| |<-- 200 + data + PAYMENT- -----| | | RESPONSE (settlement) | |
text
### Important: Settle-After-Execute
If the query fails (timeout, server error), no payment is settled. The agent keeps their funds. This is enforced server-side. Only successful `2xx` responses trigger settlement.
### Headers
| Header | Direction | Description |
|--------|-----------|-------------|
| `PAYMENT-REQUIRED` | Response (402) | Encoded payment requirements |
| `X-PAYMENT-REQUIRED` | Response (402) | Duplicate of above for compatibility |
| `PAYMENT-SIGNATURE` | Request | Signed payment payload |
| `X-PAYMENT` | Request | Alternate payment header name |
| `PAYMENT-RESPONSE` | Response (200) | Settlement proof with tx hash |
| `X-PAYMENT-RESPONSE` | Response (200) | Duplicate of above for compatibility |
### Client Implementation (TypeScript/Bun)
```typescript
import { x402Client, x402HTTPClient } from "@x402/core/client";
import { registerExactSvmScheme } from "@x402/svm/exact/client";
import { toClientSvmSigner } from "@x402/svm";
import { getBase58Encoder, createKeyPairSignerFromBytes } from "@solana/kit";
import type { PaymentRequired, SettleResponse } from "@x402/core/types";
// --- One-time setup ---
const bytes = getBase58Encoder().encode(process.env.SOLANA_PRIVATE_KEY!);
const signer = await createKeyPairSignerFromBytes(bytes);
const client = new x402Client();
registerExactSvmScheme(client, { signer: toClientSvmSigner(signer) });
const httpClient = new x402HTTPClient(client);
// --- Reusable paid fetch ---
const BASE_URL = "https://agent.metengine.xyz";
async function paidFetch(
path: string,
options?: { method?: string; body?: Record<string, unknown> },
): Promise<{ data: unknown; settlement: SettleResponse; price: number }> {
const method = options?.method ?? "GET";
const url = `${BASE_URL}${path}`;
const fetchOpts: RequestInit = { method };
if (options?.body) {
fetchOpts.headers = { "Content-Type": "application/json" };
fetchOpts.body = JSON.stringify(options.body);
}
// Step 1: Get 402 with price
const initial = await fetch(url, fetchOpts);
if (initial.status !== 402) throw new Error(`Expected 402, got ${initial.status}`);
const body = await initial.json();
// Step 2: Parse payment requirements
const paymentRequired: PaymentRequired = httpClient.getPaymentRequiredResponse(
(name) => initial.headers.get(name), body,
);
const price = Number(paymentRequired.accepts[0]!.amount);
// Step 3: Sign payment
const paymentPayload = await httpClient.createPaymentPayload(paymentRequired);
const paymentHeaders = httpClient.encodePaymentSignatureHeader(paymentPayload);
// Step 4: Re-send with payment
const paid = await fetch(url, {
...fetchOpts,
headers: { ...fetchOpts.headers as Record<string, string>, ...paymentHeaders },
});
if (paid.status !== 200) {
const err = await paid.json();
throw new Error(`Payment failed (${paid.status}): ${JSON.stringify(err)}`);
}
const paidBody = (await paid.json()) as { data: unknown };
// Step 5: Extract settlement proof
const settlement = httpClient.getPaymentSettleResponse(
(name) => paid.headers.get(name),
);
return { data: paidBody.data, settlement, price };
}
typescript
// GET endpoint
const { data, price } = await paidFetch("/api/v1/markets/trending?timeframe=24h&limit=5");
console.log(`Paid $${price} USDC. Got ${(data as any[]).length} markets.`);
// POST endpoint
const { data: intel } = await paidFetch("/api/v1/markets/intelligence", {
method: "POST",
body: { condition_id: "0xabc123...", top_n_wallets: 10 },
});
bash
bun add @x402/core @x402/svm @solana/kit
All prices are in USDC on Solana Mainnet. Pricing is dynamic based on endpoint tier, timeframe, limit, and filter usage.
TierBase Cost (USDC)Descriptionlight$0.01Simple lookups, searches, feedsmedium$0.02Aggregated analytics, trending dataheavy$0.05Computed intelligence, leaderboards, scoringwhale$0.08Multi-entity comparisons, complex scans
Timeframe multiplier (applied to base cost):
TimeframeMultiplier1h0.5x4h0.7x12h0.9x24h / today1.0x7d2.0x30d3.0x90d4.0x365d / all5.0x
Limit multiplier: price *= max(1, requested_limit / default_limit)
Filter discounts (reduce scan cost):
FilterDiscountApplicable Endpointscategory0.7xtrending, top-performers, whales, capital-flow, high-conviction, opportunitiescondition_id0.5xwhales, sentiment, participants, wallet activitysmart_money_only=true0.7xwhales, capital-flow, volume-heatmap (Polymarket + HL)coin/coins0.7xHL whales, long-short-ratio, pressure/pairspool_type (not "all")0.7xAll Meteora endpoints with pool_type parampool_address0.5xpool detail, volume-history, events, fee-analysis, positions/active
Special rules:
wallets/compare: price *= wallets.length / 2hl/traders/compare: price *= traders.length / 2meteora/lps/compare: price *= owners.length / 2wallets/profile: both includes=1.0x, one include=0.7x, neither=0.4xwallets/top-performers without category: 2.0x penaltyHard caps:
/api/v1/markets/opportunities: max $0.15/api/v1/wallets/copy-traders: max $0.12Global bounds: Floor $0.01, Ceiling $0.20 per request.
text
GET https://agent.metengine.xyz/api/v1/pricing
Returns the full pricing schedule as JSON including all tiers, routes, multipliers, discounts, and special rules. Free endpoint. No payment required.
#MethodPathTierDescription1GET/api/v1/markets/trendingmediumTrending markets with volume spikes2GET/api/v1/markets/searchlightSearch markets by keyword, category, status, or Polymarket URL3GET/api/v1/markets/categorieslightAll categories with activity stats4GET/api/v1/platform/statslightPlatform-wide aggregate stats5POST/api/v1/markets/intelligenceheavyFull smart money intelligence report for a market6GET/api/v1/markets/price-historylightOHLCV price/probability time series7POST/api/v1/markets/sentimentmediumSentiment time series with smart money overlay8POST/api/v1/markets/participantsmediumParticipant summary by scoring tier9POST/api/v1/markets/insidersheavyInsider pattern detection (7-signal behavioral scoring)10GET/api/v1/markets/tradeslightChronological trade feed for a market11GET/api/v1/markets/similarwhaleRelated markets by wallet overlap12GET/api/v1/markets/opportunitieswhaleMarkets where smart money disagrees with price13GET/api/v1/markets/high-convictionheavyHigh-conviction smart money bets14GET/api/v1/markets/capital-flowmediumCapital flow by category (sector rotation)15GET/api/v1/trades/whalesmediumLarge whale trades16GET/api/v1/markets/volume-heatmapmediumVolume distribution across categories/hours/days17POST/api/v1/wallets/profileheavyFull wallet dossier with score, positions, trades18POST/api/v1/wallets/activitymediumRecent trading activity for a wallet19POST/api/v1/wallets/pnl-breakdownmediumPer-market PnL breakdown20POST/api/v1/wallets/comparewhaleCompare 2-5 wallets side-by-side21POST/api/v1/wallets/copy-traderswhaleDetect wallets copying a target wallet22GET/api/v1/wallets/top-performersheavyLeaderboard by PnL, ROI, Sharpe, win rate, volume23GET/api/v1/wallets/niche-expertsheavyTop wallets in a specific category24GET/api/v1/markets/resolutionslightResolved markets with smart money accuracy25GET/api/v1/wallets/alpha-callersheavyWallets that trade early on later-trending markets26GET/api/v1/markets/dumb-moneymediumLow-score trader positions (contrarian indicator)27GET/api/v1/wallets/insidersheavyGlobal insider candidates by behavioral score
#MethodPathTierDescription28GET/api/v1/hl/platform/statslightPlatform aggregate stats29GET/api/v1/hl/coins/trendingmediumTrending coins by activity30GET/api/v1/hl/coins/listlightAll traded coins with 7d stats31GET/api/v1/hl/coins/volume-heatmapmediumVolume by coin and hour32GET/api/v1/hl/traders/leaderboardheavyRanked trader leaderboard33POST/api/v1/hl/traders/profileheavyFull trader dossier34POST/api/v1/hl/traders/comparewhaleCompare 2-5 traders35GET/api/v1/hl/traders/daily-pnlmediumDaily PnL time series with streaks36POST/api/v1/hl/traders/pnl-by-coinmediumPer-coin PnL breakdown (closed PnL only)37GET/api/v1/hl/traders/fresh-whalesheavyNew high-volume wallets38GET/api/v1/hl/trades/whalesmediumLarge trades39GET/api/v1/hl/trades/feedlightChronological trade feed for a coin40GET/api/v1/hl/trades/long-short-ratiomediumLong/short volume ratio time series41GET/api/v1/hl/smart-wallets/listlightSmart wallet list with scores42GET/api/v1/hl/smart-wallets/activitymediumSmart wallet recent trades43GET/api/v1/hl/smart-wallets/signalsheavyAggregated directional signals by coin44GET/api/v1/hl/pressure/pairsheavyLong/short pressure with smart positions45GET/api/v1/hl/pressure/summarymediumPressure summary across all coins
#MethodPathTierDescription46GET/api/v1/meteora/pools/trendingmediumTrending pools by volume spike47GET/api/v1/meteora/pools/topmediumTop pools by volume, fees, or LP count48GET/api/v1/meteora/pools/searchlightSearch pools by address or token name49GET/api/v1/meteora/pools/detailmediumFull pool detail50GET/api/v1/meteora/pools/volume-historylightVolume time series51GET/api/v1/meteora/pools/eventslightChronological event feed52GET/api/v1/meteora/pools/fee-analysismediumFee claiming analysis53GET/api/v1/meteora/lps/topheavyTop LPs leaderboard54POST/api/v1/meteora/lps/profileheavyFull LP dossier55GET/api/v1/meteora/lps/whalesmediumLarge LP events56POST/api/v1/meteora/lps/comparewhaleCompare 2-5 LPs57GET/api/v1/meteora/positions/activemediumActive LP positions58GET/api/v1/meteora/positions/historylightPosition event history (DLMM only)59GET/api/v1/meteora/platform/statslightPlatform-wide stats60GET/api/v1/meteora/platform/volume-heatmapmediumVolume by action/hour61GET/api/v1/meteora/platform/metengine-sharelightMetEngine routing share62GET/api/v1/meteora/dca/pressuremediumDCA accumulation pressure by token63GET/api/v1/meteora/pools/smart-walletheavyPools with highest smart wallet LP activity
All 200 responses use the format: { "data": <payload> }
All error responses use: { "error": "<message>" } with optional "reason" field.
Trending markets with volume spikes.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h1h, 4h, 12h, 24h, 7dnocategorystring-any valid categorynosort_bystringvolume_spikevolume_spike, trade_count, smart_money_inflownolimitinteger201-100no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"period_volume_usdc": "number",
"period_trade_count": "number",
"volume_spike_multiplier": "number",
"smart_money_wallets_active": "number",
"smart_money_net_direction": "string",
"buy_sell_ratio": "number",
"leader_price": "number"
}
]
}
Search markets by keyword, category, status. Accepts Polymarket URLs as the query param.
Parameters (query string):
ParamTypeDefaultValuesRequiredquerystring-keyword or Polymarket URLnocategorystring-any valid categorynostatusstringactiveactive, closing_soon, resolvednohas_smart_money_signalboolean-true, falsenosort_bystringrelevanceend_date, volume, relevancenolimitinteger201-100no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"end_date": "string (ISO 8601)",
"status": "string",
"total_volume_usdc": "number",
"smart_money_outcome": "string | null",
"smart_money_wallets": "number",
"has_contrarian_signal": "boolean",
"leader_price": "number"
}
]
}
List all categories with activity stats.
Parameters (query string):
ParamTypeDefaultValuesRequiredinclude_statsbooleantruetrue, falsenotimeframestring24h24h, 7dno
Response schema:
json
{
"data": [
{
"name": "string",
"active_markets": "number",
"period_volume": "number",
"period_trades": "number",
"unique_traders": "number"
}
]
}
Platform-wide aggregate stats.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h24h, 7d, 30dno
Response schema:
json
{
"data": {
"timeframe": "string",
"total_volume_usdc": "number",
"total_trades": "number",
"active_traders": "number",
"active_markets": "number",
"resolved_markets": "number",
"smart_wallet_count": "number",
"avg_trade_size_usdc": "number"
}
}
Full smart money intelligence report on a specific market.
Request body (JSON):
FieldTypeDefaultValuesRequiredcondition_idstring--yestop_n_walletsinteger101-50no
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"end_date": "string",
"outcomes": "object",
"smart_money": {
"consensus_outcome": "string",
"consensus_strength": "number",
"by_outcome": {
"<outcome_name>": {
"wallet_count": "number",
"total_usdc": "number",
"percentage": "number",
"top_wallets": [
{
"wallet": "string",
"score": "number",
"tags": ["string"],
"usdc_invested": "number",
"net_position": "number",
"avg_buy_price": "number"
}
]
}
}
},
"dumb_money": {
"consensus_outcome": "string",
"contrarian_to_smart": "boolean",
"by_outcome": "object"
},
"signal_analysis": {
"smart_vs_price_aligned": "boolean",
"contrarian_signal": "boolean",
"signal_summary": "string"
},
"recent_activity": {
"volume_24h": "number",
"trade_count_24h": "number",
"buy_sell_ratio": "number",
"volume_trend": "string"
}
}
}
OHLCV price/probability time series.
Parameters (query string):
ParamTypeDefaultValuesRequiredcondition_idstring--yestimeframestring7d1h, 4h, 12h, 24h, 7d, 30dnobucket_sizestring1h5m, 15m, 1h, 4h, 12h, 1dno
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"candles_by_outcome": {
"<outcome_name>": [
{
"bucket": "string (ISO 8601)",
"token_id": "string",
"outcome": "string",
"open": "number",
"high": "number",
"low": "number",
"close": "number",
"volume": "number",
"trade_count": "number",
"vwap": "number"
}
]
}
}
}
Sentiment time series with smart money overlay.
Request body (JSON):
FieldTypeDefaultValuesRequiredcondition_idstring--yestimeframestring7d24h, 7d, 30dnobucket_sizestring4h1h, 4h, 12h, 1dno
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"overall_sentiment": "object",
"by_outcome": "object",
"time_series": "array",
"momentum": "object"
}
}
Participant summary by scoring tier.
Request body (JSON):
FieldTypeDefaultValuesRequiredcondition_idstring--yes
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"total_wallets": "number",
"total_usdc": "number",
"by_outcome": "object",
"tier_distribution": "object"
}
}
Insider pattern detection using 7-signal behavioral scoring.
Request body (JSON):
FieldTypeDefaultValuesRequiredcondition_idstring--yeslimitinteger251-100nomin_scoreinteger200-100no
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"insiders": [
{
"wallet": "string",
"insider_score": "number",
"signals": "object",
"outcome": "string",
"net_shares": "number",
"buy_usdc": "number",
"wallet_age_days": "number",
"first_trade_timestamp": "string"
}
],
"summary": "object"
}
}
Chronological trade feed for a market.
Parameters (query string):
ParamTypeDefaultValuesRequiredcondition_idstring--yestimeframestring24h1h, 4h, 12h, 24h, 7d, 30dnosidestring-BUY, SELLnomin_usdcnumber0>= 0nosmart_money_onlybooleanfalsetrue, falsenolimitinteger1001-500no
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"trade_count": "number",
"total_volume": "number",
"trades": [
{
"tx_hash": "string",
"wallet": "string",
"token_id": "string",
"outcome": "string",
"side": "string",
"price": "number",
"size": "number",
"usdc_size": "number",
"timestamp": "string",
"wallet_score": "number",
"wallet_tags": ["string"]
}
]
}
}
Related markets by wallet overlap.
Parameters (query string):
ParamTypeDefaultValuesRequiredcondition_idstring--yeslimitinteger101-50no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"shared_wallet_count": "number",
"wallet_overlap_pct": "number",
"total_volume_usdc": "number"
}
]
}
Markets where smart money disagrees with price.
Parameters (query string):
ParamTypeDefaultValuesRequiredmin_signal_strengthstringmoderateweak, moderate, strongnocategorystring-any valid categorynoclosing_within_hoursinteger-max 720nomin_smart_walletsinteger3>= 1nolimitinteger201-100no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"smart_money_favors": "string",
"smart_money_percentage": "number",
"smart_wallet_count": "number",
"avg_smart_score": "number",
"price_signal_gap": "number",
"signal_direction": "string",
"signal_strength": "string",
"leader_price": "number",
"time_until_close": "string"
}
]
}
High-conviction smart money bets.
Parameters (query string):
ParamTypeDefaultValuesRequiredcategorystring-any valid categorynomin_smart_walletsinteger5>= 1nomin_avg_scoreinteger650-100nolimitinteger201-100no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"smart_wallet_count": "number",
"avg_smart_score": "number",
"total_smart_usdc": "number",
"conviction_score": "number",
"favored_outcome": "string",
"favored_outcome_percentage": "number",
"entry_vs_current_gap": "number"
}
]
}
Capital flow by category (sector rotation).
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring7d24h, 7d, 30dnosmart_money_onlybooleanfalsetrue, falsenotop_n_categoriesinteger201-50no
Response schema:
json
{
"data": {
"timeframe": "string",
"total_net_flow": "number",
"categories": [
{
"category": "string",
"current_buy_volume": "number",
"current_sell_volume": "number",
"current_net_flow": "number",
"previous_buy_volume": "number",
"previous_sell_volume": "number",
"previous_net_flow": "number",
"net_flow_change": "number",
"flow_trend": "string"
}
],
"biggest_inflow": "string",
"biggest_outflow": "string"
}
}
Large whale trades.
Parameters (query string):
ParamTypeDefaultValuesRequiredmin_usdcnumber10000>= 1notimeframestring24h1h, 4h, 12h, 24h, 7d, 30dnocondition_idstring--nocategorystring-any valid categorynosidestring-BUY, SELLnosmart_money_onlybooleanfalsetrue, falsenolimitinteger501-200no
Response schema:
json
{
"data": [
{
"tx_hash": "string",
"wallet": "string",
"condition_id": "string",
"token_id": "string",
"question": "string",
"outcome": "string",
"category": "string",
"side": "string",
"price": "number",
"size": "number",
"usdc_size": "number",
"timestamp": "string",
"wallet_score": "number",
"win_rate": "number",
"wallet_tags": ["string"]
}
]
}
Note: This endpoint returns REDEEM trades (resolved market payouts) alongside real trades. Filter by side=BUY or side=SELL to exclude them. REDEEMs have price=1.00 and side=REDEEM.
Volume distribution across categories, hours, or days.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h24h, 7d, 30dnogroup_bystringcategorycategory, hour_of_day, day_of_weeknosmart_money_onlybooleanfalsetrue, falseno
Response schema:
json
{
"data": {
"total_volume": "number",
"total_trades": "number",
"breakdown": [
{
"label": "string",
"volume": "number",
"trade_count": "number",
"pct_of_total": "number",
"volume_change_pct": "number",
"trend": "string"
}
],
"biggest_gainer": "string",
"biggest_loser": "string"
}
}
Full wallet dossier.
Request body (JSON):
FieldTypeDefaultValuesRequiredwalletstring-lowercase addressyesinclude_positionsbooleantruetrue, falsenoinclude_tradesbooleantruetrue, falsenotrades_limitinteger501-500no
Response schema:
json
{
"data": {
"wallet": "string",
"profile": {
"score": "number",
"sharpe": "number",
"win_rate": "number",
"total_pnl": "number",
"total_volume": "number",
"resolved_positions": "number",
"tags": ["string"],
"tier": "string",
"primary_category": "string",
"is_specialist": "boolean"
},
"category_breakdown": "array",
"active_positions": "array",
"recent_trades": "array"
}
}
Note: Wallet addresses MUST be lowercase.
Recent trading activity for a wallet.
Request body (JSON):
FieldTypeDefaultValuesRequiredwalletstring-lowercase addressyestimeframestring24h1h, 4h, 24h, 7d, 30dnocategorystring-any valid categorynomin_usdcnumber0>= 0nolimitinteger1001-500no
Response schema:
json
{
"data": {
"wallet": "string",
"wallet_score": "number",
"wallet_tags": ["string"],
"period_summary": "object",
"trades": "array"
}
}
Per-market PnL breakdown.
Request body (JSON):
FieldTypeDefaultValuesRequiredwalletstring-lowercase addressyestimeframestring90d7d, 30d, 90d, allnolimitinteger501-200no
Response schema:
json
{
"data": {
"wallet": "string",
"total_realized_pnl": "number",
"total_positions": "number",
"winning_positions": "number",
"losing_positions": "number",
"best_trade": "object",
"worst_trade": "object",
"positions": "array"
}
}
Compare 2-5 wallets side-by-side.
Request body (JSON):
FieldTypeDefaultValuesRequiredwalletsstring[]-2-5 lowercase addressesyesinclude_shared_positionsbooleantruetrue, falseno
Response schema:
json
{
"data": {
"wallets": "array of wallet profiles",
"comparison_winners": "object",
"category_overlap": "object",
"shared_positions": "array"
}
}
Pricing note: Cost scales with wallet count: base * wallets.length / 2.
Detect wallets copying a target wallet.
Request body (JSON):
FieldTypeDefaultValuesRequiredwalletstring-lowercase addressyesmax_lag_minutesinteger601-1440notimeframestring7d24h, 7d, 30dnomin_overlap_tradesinteger3>= 1nolimitinteger201-100no
Response schema:
json
{
"data": [
{
"wallet": "string",
"overlap_trades": "number",
"avg_lag_seconds": "number",
"copied_tokens": "array",
"wallet_score": "number"
}
]
}
Leaderboard.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring7dtoday, 24h, 7d, 30d, 90d, 365dnocategorystring-any valid categorynometricstringpnlpnl, roi, sharpe, win_rate, volumenomin_tradesinteger5>= 1nolimitinteger251-100no
Response schema:
json
{
"data": [
{
"rank": "number",
"wallet": "string",
"period_pnl_usdc": "number",
"period_roi_percent": "number",
"period_trades": "number",
"period_win_rate": "number",
"overall_score": "number",
"sharpe_ratio": "number",
"primary_category": "string",
"tags": ["string"],
"active_positions_count": "number"
}
]
}
Pricing note: Queries without a category filter cost 2x due to full-table scan.
Top wallets in a specific category.
Parameters (query string):
ParamTypeDefaultValuesRequiredcategorystring-any valid categoryyesmin_category_tradesinteger10>= 1nosort_bystringcategory_sharpecategory_sharpe, category_pnl, category_volumenolimitinteger251-100no
Response schema:
json
{
"data": [
{
"wallet": "string",
"category_sharpe": "number",
"category_win_rate": "number",
"category_volume": "number",
"category_pnl": "number",
"category_positions": "number",
"is_specialist": "boolean",
"volume_concentration": "number",
"overall_score": "number",
"tags": ["string"]
}
]
}
Resolved markets with smart money accuracy.
Parameters (query string):
ParamTypeDefaultValuesRequiredcategorystring-any valid categorynoquerystring-keywordnosort_bystringresolved_recentlyresolved_recently, volume, smart_money_accuracynolimitinteger251-100no
Response schema:
json
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"winning_outcome": "string",
"end_date": "string",
"total_volume_usdc": "number",
"smart_money_correct": "number",
"smart_money_wrong": "number",
"smart_money_accuracy": "number"
}
]
}
Wallets that trade early on later-trending markets.
Parameters (query string):
ParamTypeDefaultValuesRequireddays_backinteger301-90nomin_days_earlyinteger71-60nomin_bet_usdcnumber100>= 0nolimitinteger251-100no
Response schema:
json
{
"data": [
{
"wallet": "string",
"market_question": "string",
"condition_id": "string",
"entry_date": "string",
"days_before_resolution": "number",
"bet_size_usdc": "number",
"winning_outcome": "string",
"wallet_score": "number",
"win_rate": "number"
}
]
}
Low-score trader positions on a market (contrarian indicator).
Parameters (query string):
ParamTypeDefaultValuesRequiredcondition_idstring--yesmax_scoreinteger300-100nomin_tradesinteger5>= 1nolimitinteger501-200no
Response schema:
json
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"summary": {
"total_wallets": "number",
"total_usdc": "number",
"avg_score": "number",
"consensus_outcome": "string"
},
"positions": "array"
}
}
Global insider candidates by behavioral score.
Parameters (query string):
ParamTypeDefaultValuesRequiredlimitinteger501-200nomin_scoreinteger500-100nomax_wallet_age_daysinteger601-90no
Response schema:
json
{
"data": {
"candidates": [
{
"wallet": "string",
"insider_score": "number",
"wallet_age_days": "number",
"first_trade": "string",
"markets_traded": "number",
"total_buy_usdc": "number",
"category_count": "number",
"categories": ["string"],
"win_count": "number",
"total_resolved": "number",
"win_rate": "number",
"signals": "object"
}
],
"total_candidates": "number"
}
}
Platform aggregate stats. No parameters.
Response schema:
json
{
"data": {
"total_volume_usd": "number",
"total_trades": "number",
"active_traders": "number",
"smart_wallet_count": "number",
"unique_coins": "number"
}
}
Trending coins by activity.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h1h, 4h, 12h, 24h, 7dnolimitinteger201-100no
Response schema:
json
{
"data": [
{
"coin": "string",
"volume_usd": "number",
"trade_count": "number",
"unique_traders": "number",
"long_short_ratio": "number",
"smart_wallet_count": "number",
"volume_change_pct": "number"
}
]
}
Known issue: timeframe=24h often returns empty. Use timeframe=7d as fallback.
All traded coins with 7d stats.
Parameters (query string):
ParamTypeDefaultValuesRequiredlimitinteger1001-500no
Response schema:
json
{
"data": [
{
"coin": "string",
"volume_usd": "number",
"trade_count": "number",
"unique_traders": "number"
}
]
}
Volume by coin and hour.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h24h, 7dnolimitinteger201-50no
Response schema:
json
{
"data": [
{
"coin": "string",
"bucket": "string",
"volume_usd": "number",
"trade_count": "number",
"smart_volume_usd": "number"
}
]
}
Ranked trader leaderboard.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestringall1d, 7d, 30d, allnosort_bystringpnlpnl, roi, win_rate, volumenosort_orderstringdescdesc, ascnomin_tradesinteger10>= 1nolimitinteger251-100no
Response schema:
json
{
"data": [
{
"trader": "string",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"winning_trades": "number",
"win_rate": "number",
"roi_pct": "number",
"smart_score": "number"
}
]
}
Full trader dossier.
Request body (JSON):
FieldTypeDefaultValuesRequiredtraderstring-0x addressyesdaysinteger301-365notrades_limitinteger501-500no
Response schema:
json
{
"data": {
"trader": "string",
"stats": "object",
"coin_breakdown": "array",
"daily_pnl": "array",
"recent_trades": "array"
}
}
Known issue: Intermittent 500 errors. Fallback: use leaderboard + pnl-by-coin.
Compare 2-5 traders.
Request body (JSON):
FieldTypeDefaultValuesRequiredtradersstring[]-2-5 0x addressesyes
Response schema:
json
{
"data": {
"traders": "array of trader profiles",
"shared_coins": "array",
"comparison_winners": "object"
}
}
Pricing note: Cost scales with trader count: base * traders.length / 2.
Daily PnL time series with streaks.
Parameters (query string):
ParamTypeDefaultValuesRequiredtraderstring-0x addressyesdaysinteger301-365no
Response schema:
json
{
"data": [
{
"date": "string",
"pnl": "number",
"volume": "number",
"trades": "number",
"cumulative_pnl": "number",
"streak": "number"
}
]
}
Per-coin PnL breakdown. Shows realized (closed) PnL only.
Request body (JSON):
FieldTypeDefaultValuesRequiredtraderstring-0x addressyesdaysinteger901-365no
Response schema:
json
{
"data": [
{
"coin": "string",
"pnl": "number",
"volume": "number",
"trades": "number",
"winning_trades": "number",
"win_rate": "number"
}
]
}
Note: Only realized (closed) PnL. Unrealized PnL from open positions is not available.
New high-volume wallets (experienced traders creating new accounts, institutional desks, or insiders).
Parameters (query string):
ParamTypeDefaultValuesRequiredmax_wallet_age_daysinteger141-90nomin_volumenumber100000>= 0nomin_pnlnumber0anynolimitinteger251-100no
Response schema:
json
{
"data": [
{
"trader": "string",
"first_trade": "string",
"wallet_age_days": "number",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"winning_trades": "number"
}
]
}
Large trades.
Parameters (query string):
ParamTypeDefaultValuesRequiredmin_usdnumber50000>= 1notimeframestring24h1h, 4h, 12h, 24h, 7dnocoinstring-uppercase symbol (e.g. BTC)nosidestring-Open Long, Open Short, Close Long, Close Shortnodirectionstring-Long, Shortnosmart_money_onlybooleanfalsetrue, falsenolimitinteger501-200no
Response schema:
json
{
"data": [
{
"trader": "string",
"coin": "string",
"side": "string",
"direction": "string",
"price": "number",
"size": "number",
"usd_value": "number",
"closed_pnl": "number",
"timestamp": "string",
"smart_score": "number"
}
]
}
Chronological trade feed for a coin.
Parameters (query string):
ParamTypeDefaultValuesRequiredcoinstring-uppercase symbolyeslimitinteger1001-500no
Response schema:
json
{
"data": [
{
"trader": "string",
"coin": "string",
"side": "string",
"direction": "string",
"price": "number",
"size": "number",
"usd_value": "number",
"closed_pnl": "number",
"timestamp": "string"
}
]
}
Long/short volume ratio time series.
Parameters (query string):
ParamTypeDefaultValuesRequiredcoinstring-uppercase symbolyestimeframestring7d24h, 7d, 30dnobucket_sizestring4h1h, 4h, 12h, 1dno
Response schema:
json
{
"data": [
{
"bucket": "string",
"long_volume": "number",
"short_volume": "number",
"long_short_ratio": "number",
"smart_long_volume": "number",
"smart_short_volume": "number",
"smart_long_short_ratio": "number"
}
]
}
Known issue: May return all zeros. Fallback: reconstruct from /hl/trades/whales by counting long vs short volume.
Smart wallet list.
Parameters (query string):
ParamTypeDefaultValuesRequiredsort_bystringscorescore, pnl, volumenolimitinteger501-200no
Response schema:
json
{
"data": [
{
"trader": "string",
"score": "number",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"win_rate": "number"
}
]
}
Smart wallet recent trades.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h1h, 4h, 12h, 24h, 7dnomin_scoreinteger600-100nolimitinteger1001-500no
Response schema:
json
{
"data": {
"period_summary": "object",
"trades": "array"
}
}
Aggregated directional signals by coin.
Parameters (query string):
ParamTypeDefaultValuesRequiredtimeframestring24h6h, 12h, 24h, 7dnomin_scoreinteger600-100nolimitinteger201-50no
Response schema:
json
{
"data": [
{
"coin": "string",
"direction": "string",
"smart_wallet_count": "number",
"total_volume": "number",
"avg_score": "number",
"top_traders": "array"
}
]
}
Known issue: timeframe=24h often returns empty. Use timeframe=7d as fallback.
Long/short pressure with smart positions.
Parameters (query string):
ParamTypeDefaultValuesRequiredcoinsstring-comma-separated (defaults to top 10)notrades_limitinteger201-100no
Response schema:
json
{
"data": {
"coins": [
{
"coin": "string",
"long_pressure": "number",
"short_pressure": "number",
"long_avg_entry": "number",
"short_avg_entry": "number",
"long_smart_count": "number",
"short_smart_count": "number",
"smart_positions": "array"
}
]
}
}
Pressure summary across all coins. No parameters.
Response schema:
json
{
"data": {
"coins": [
{
"coin": "string",
"long_pressure": "number",
"short_pressure": "number",
"long_percent": "number",
"short_percent": "number",
"long_avg_entry": "number",
"short_avg_entry": "number"
}
]
}
}
Trending pools by volume spike.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnotimeframestring24h24h, 7dnolimitinteger201-100no
Response schema:
json
{
"data": [
{
"pool_address": "string",
"pool_type": "string",
"token_x": "string",
"token_y": "string",
"volume_usd": "number",
"event_count": "number",
"unique_lps": "number",
"volume_change_pct": "number"
}
]
}
Known issue: May contain duplicate entries. Deduplicate by pool_address.
Top pools by volume, fees, or LP count.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnosort_bystringvolumevolume, lp_count, events, feesnotimeframestring7d24h, 7d, 30dnolimitinteger201-100no
Response schema:
json
{
"data": [
{
"pool_address": "string",
"pool_type": "string",
"token_x": "string",
"token_y": "string",
"volume_usd": "number",
"event_count": "number",
"unique_lps": "number",
"total_fees_usd": "number"
}
]
}
Search pools by address or token name.
Parameters (query string):
ParamTypeDefaultValuesRequiredquerystring-pool address or token nameyespool_typestringalldlmm, damm_v2, allnolimitinteger101-50no
Response schema:
json
{
"data": [
{
"pool_address": "string",
"pool_type": "string",
"token_x": "string",
"token_y": "string",
"volume_usd": "number",
"event_count": "number",
"unique_lps": "number"
}
]
}
Full pool detail.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_addressstring-Solana pubkeyyespool_typestring-dlmm, damm_v2 (auto-detected if omitted)no
Response schema:
json
{
"data": {
"pool_address": "string",
"pool_type": "string",
"token_x": "string",
"token_y": "string",
"total_volume_usd": "number",
"total_events": "number",
"unique_lps": "number",
"volume_by_action": "object",
"net_liquidity_usd": "number"
}
}
Volume time series.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_addressstring-Solana pubkeyyespool_typestring-dlmm, damm_v2 (auto-detected if omitted)notimeframestring7d24h, 7d, 30dnobucket_sizestring4h1h, 4h, 1dno
Response schema:
json
{
"data": [
{
"bucket": "string",
"volume_usd": "number",
"event_count": "number",
"action_breakdown": "object"
}
]
}
Chronological event feed.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_addressstring-Solana pubkeyyespool_typestring-dlmm, damm_v2 (auto-detected if omitted)nolimitinteger1001-500no
Response schema:
json
{
"data": [
{
"owner": "string",
"pool_address": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
Fee claiming analysis.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_addressstring-Solana pubkeyyespool_typestring-dlmm, damm_v2 (auto-detected if omitted)notimeframestring7d24h, 7d, 30dno
Response schema:
json
{
"data": {
"pool_address": "string",
"total_fees_claimed": "number",
"unique_claimers": "number",
"time_series": "array",
"top_claimers": "array"
}
}
Top LPs leaderboard.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnosort_bystringvolumevolume, pool_count, eventsnotimeframestring30d7d, 30dnolimitinteger251-100no
Response schema:
json
{
"data": [
{
"owner": "string",
"total_volume_usd": "number",
"pool_count": "number",
"event_count": "number",
"pool_types": ["string"]
}
]
}
Known issue: sort_by=fees may return 500. Use sort_by=volume as fallback.
Full LP dossier.
Request body (JSON):
FieldTypeDefaultValuesRequiredownerstring-Solana pubkeyyespool_typestringalldlmm, damm_v2, allnoevents_limitinteger501-500no
Response schema:
json
{
"data": {
"owner": "string",
"summary": "object",
"pool_breakdown": "array",
"recent_events": "array"
}
}
Large LP events.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnomin_usdnumber10000>= 1notimeframestring24h24h, 7d, 30dnolimitinteger501-200no
Response schema:
json
{
"data": [
{
"owner": "string",
"pool_address": "string",
"pool_type": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string"
}
]
}
Compare 2-5 LPs.
Request body (JSON):
FieldTypeDefaultValuesRequiredownersstring[]-2-5 Solana pubkeysyespool_typestringalldlmm, damm_v2, allno
Response schema:
json
{
"data": {
"lps": "array of LP profiles",
"shared_pools": "array",
"comparison_winners": "object"
}
}
Pricing note: Cost scales with LP count: base * owners.length / 2.
Active LP positions.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_addressstring-Solana pubkeynoownerstring-Solana pubkeynopool_typestringalldlmm, damm_v2, allnolimitinteger501-200no
Response schema:
json
{
"data": [
{
"owner": "string",
"pool_address": "string",
"pool_type": "string",
"position_address": "string",
"deposited_usd": "number",
"withdrawn_usd": "number",
"net_value_usd": "number",
"event_count": "number"
}
]
}
Position event history (DLMM only).
Parameters (query string):
ParamTypeDefaultValuesRequiredposition_addressstring--yes
Response schema:
json
{
"data": {
"position_address": "string",
"events": [
{
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
}
Platform-wide stats.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allno
Response schema:
json
{
"data": {
"total_volume_usd": "number",
"total_events": "number",
"active_lps": "number",
"active_pools": "number",
"by_pool_type": "object"
}
}
Volume by action/hour.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnotimeframestring24h24h, 7dno
Response schema:
json
{
"data": [
{
"action": "string",
"bucket": "string",
"pool_type": "string",
"volume_usd": "number",
"event_count": "number"
}
]
}
MetEngine routing share.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnotimeframestring7d24h, 7d, 30dno
Response schema:
json
{
"data": {
"total_events": "number",
"metengine_events": "number",
"metengine_share_pct": "number",
"total_volume_usd": "number",
"metengine_volume_usd": "number"
}
}
DCA accumulation pressure by token.
Parameters (query string):
ParamTypeDefaultValuesRequiredtokenstring-specific mint addressnotimeframestring1h1m, 5m, 30m, 1h, 6h, 24hno
Response schema (single token):
json
{
"data": {
"tokenMint": "string",
"timeframe": "string",
"buyVolume": "number",
"sellVolume": "number",
"netPressure": "number",
"score": "number"
}
}
Response schema (all tokens, when token omitted):
json
{
"data": {
"timeframe": "string",
"tokens": "array",
"lastUpdated": "string"
}
}
Pools with highest smart wallet LP activity.
Parameters (query string):
ParamTypeDefaultValuesRequiredpool_typestringalldlmm, damm_v2, allnolimitinteger201-100notimeframestring7d24h, 7d, 30dno
Response schema:
json
{
"data": {
"pools": [
{
"pool_address": "string",
"pool_type": "string",
"token_a": "string",
"token_b": "string",
"smart_lp_count": "number",
"total_volume_usd": "number",
"smart_volume_usd": "number",
"smart_share_pct": "number"
}
]
}
}
1. Proprietary scored dataset. MetEngine maintains wallet scoring models across all three platforms (Polymarket 0-100 composite score, Hyperliquid 0-100 smart score, Meteora LP smart score). These scores are computed from billions of historical trades, resolved positions, and behavioral patterns. An agent would need to: (a) index 574M+ Polymarket trades, (b) build and maintain a scoring pipeline, (c) store and update scores for millions of wallets. Self-computation cost: weeks of engineering + ongoing infrastructure.
2. Pre-aggregated materialized views. Queries that would require scanning 574M+ trade rows (capital flow by category, top performers, insider detection) run against pre-aggregated SummingMergeTree tables. A raw ClickHouse scan of the trades table would take 30-60 seconds and cost $0.50-2.00 in compute. The API returns results in 1-5 seconds for $0.01-0.08.
3. Cross-platform intelligence. Insider detection uses a 7-signal behavioral scoring system. Smart money consensus compares scored wallets against market prices. Capital flow tracks sector rotation across all categories. Building this from raw on-chain data requires indexing multiple chains, maintaining market metadata, and running continuous scoring pipelines.
4. Real-time on-chain data. The API indexes Polymarket (Polygon), Hyperliquid (L1), and Meteora (Solana) trade data with sub-minute latency. An agent would need RPC nodes on 3 chains, event parsing, and database infrastructure.
Cost comparison for a typical workflow (analyze a Polymarket market):
StepSelf-ComputationMetEngine APIFind marketScrape Polymarket frontendGET /markets/search ($0.01)Get smart money consensusIndex all trades, score wallets, aggregatePOST /markets/intelligence ($0.05)Get price historyParse on-chain events, build OHLCVGET /markets/price-history ($0.01)Find insider patternsBuild 7-signal detection pipelinePOST /markets/insiders ($0.05)TotalHours of compute + infra$0.12, ~10 seconds
MetricValuep50 latency800msp95 latency3sp99 latency8sHandler timeout60s (no payment charged on timeout)Max concurrent paid requests50Payment verification timeout5sRate limit (unpaid 402 requests)IP-based, generous
PlatformFreshnessPolymarket tradesSub-minute (continuous indexing)Polymarket wallet scoresDaily recomputeHyperliquid tradesSub-minuteHyperliquid smart scoresContinuous (formula-based)Meteora eventsSub-minuteMeteora LP scoresDaily recompute
CodeMeaningAgent Action200Success. Data in { "data": ... }. Settlement proof in PAYMENT-RESPONSE header.Process data400Bad request (invalid params, malformed payment header)Fix request params402Payment required (first request) or payment verification failedSign and re-send with payment, or check payment validity404Endpoint not foundVerify endpoint path against this document429Rate limit exceededBack off and retry500Internal server errorRetry once, then try fallback endpoint502Payment verification failed (facilitator error)Retry503Server at capacity or payment service unavailableCheck Retry-After header, retry after delay504Query execution timeout. No payment charged.Retry with narrower params or use fallback endpoint
json
{
"error": "Human-readable error message",
"reason": "Optional machine-readable reason (on 402 verification failures)"
}
HeaderMeaningX-Payment-Settlement: failedQuery succeeded but settlement failed. Data returned, no charge. Rare edge case.No PAYMENT-RESPONSE header on 200Settlement was not attempted (should not happen in normal flow).
When an endpoint fails, use these alternatives:
Failed EndpointFallback/markets/opportunities (504)/markets/high-conviction/wallets/top-performers (503 on 7d)Try timeframe=24h/markets/insiders (timeout)/markets/trades with market filter/hl/coins/trending (empty on 24h)Use timeframe=7d/hl/smart-wallets/signals (empty on 24h)Use timeframe=7d/hl/trades/long-short-ratio (all zeros)Reconstruct from /hl/trades/whales by side/hl/traders/profile (500)/hl/traders/leaderboard + /hl/traders/pnl-by-coin/meteora/lps/top?sort_by=fees (500)Use sort_by=volume/meteora/lps/profile (500)/meteora/pools/fee-analysis for claimer data
text
GET https://agent.metengine.xyz/health
Free. No payment required. Returns:
json
{
"status": "ok | degraded",
"service": "data-agent",
"auth_mode": "x402",
"clickhouse": { "status": "ok | down" },
"postgres": { "status": "ok | down" },
"redis": { "status": "ok | down" },
"semaphore": {
"active": "number",
"waiting": "number",
"max": 250,
"timeouts_1m": "number"
},
"queries_1m": "object",
"cache_1m": "object",
"top_errors": "object",
"facilitator": "boolean",
"network": "mainnet"
}
status: "ok" means all backends are healthy.status: "degraded" means at least one backend is down. Check individual component statuses.facilitator: true means x402 payment processing is operational.semaphore.active near semaphore.max means server is under heavy load (expect 503s).What this API does NOT do:
/markets/opportunities frequently times out (504) under load. Use /markets/high-conviction as fallback./wallets/top-performers?timeframe=7d may 503. Try timeframe=24h but note the narrower window./trades/whales returns REDEEM trades (resolved market payouts) alongside real trades. Filter by side=BUY or side=SELL to exclude. REDEEMs have price=1.00, side=REDEEM./markets/insiders sometimes times out. Use /markets/trades filtered to the market as fallback.condition_id identifies a market. One condition_id maps to multiple token_id values (one per outcome)./hl/coins/trending?timeframe=24h and /hl/smart-wallets/signals?timeframe=24h often return empty arrays. Default to timeframe=7d./hl/trades/long-short-ratio may return all zeros. Reconstruct directional bias from /hl/trades/whales./hl/traders/profile intermittently 500s. Use leaderboard + pnl-by-coin as fallback./hl/traders/pnl-by-coin shows realized (closed) PnL only. Unrealized PnL is not available.BTC, not BTC-USDC.closed_pnl is only non-zero on closing trades. Opening trades always have closed_pnl = 0./meteora/pools/trending may have duplicate entries. Deduplicate by pool_address./meteora/lps/top?sort_by=fees may 500. Use sort_by=volume as fallback.token_x/ token_y and PascalCase event types ( AddLiquidity, RemoveLiquidity, Swap, ClaimFee).token_a/ token_b and snake_case event types ( add_liquidity, remove_liquidity, swap, claim_fee).PlatformFormatCase SensitivityPolymarket0x hex (Polygon)Must be lowercaseHyperliquid0x hexCase-insensitiveMeteoraBase58 (Solana pubkey)Case-sensitive
TierScoreMeaningElite>= 80Top-tier historically profitableSmart60-79Consistently profitable, signal-worthyAverage40-59Mixed track recordNovice< 40New or losing traders
Smart money threshold: score >= 60. Dumb money threshold: score < 30.
text
score = min(log2(trade_count + 1) * 4, 40) // Activity (max 40)
+ (winning_trades / max(closing_trades, 1)) * 40 // Win rate (max 40)
+ min(if(pnl > 0, log10(pnl + 1) * 4, 0), 20) // Profitability (max 20)
Smart threshold: score >= 85.
text
win_ratio (0-35 pts) + volume (0-25 pts, log10-scaled) + avg_pnl% (0-30 pts) + experience (0-10 pts)
Minimum 3 closed positions required.