Skip to main content Home Creators internet-court internet-court-skill metengine-data-agent
metengine-data-agent Real-time smart money analytics API for Polymarket prediction markets, Hyperliquid perpetual futures, and Meteora Solana LP/AMM pools. 63 endpoints. Pay-per-request via x402 on Solana Mainnet USDC. No API keys.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/internet-court/internet-court-skill --skill metengine-data-agentThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... More from this repository
Entry point for Internet Court — the trust layer for agent-to-agent commerce. Use whenever an agent needs to transact with another agent or a paid service, or a user mentions agent payments, paid APIs (HTTP 402/x402), wallet custody or trust concerns, spending mandates, delegated permissions (ERC-7710/7715), escrow, agent identity or reputation (ERC-8004), negotiation between agents (A2A), agent jobs (ERC-8183), machine payments (MPP, AP2), supervision of agent behavior, revocation, verification, or dispute resolution (GenLayer) — even if they never say "Internet Court". Routes to the vendored protocol skills and connector skills in this package.
Connect coding agents, AI SDKs, and LLM tools to the AntSeed buyer proxy. Use when configuring Claude Code, Codex, OpenCode, Pi, OpenClaw, Hermes, GenLayer Studio, Vercel AI SDK, LangChain, or raw HTTP to route inference through AntSeed at localhost:8377.
Related occupations SOC
Based on SOC occupation classification
name metengine-data-agent version 1.0.0 description Real-time smart money analytics API for Polymarket prediction markets, Hyperliquid perpetual futures, and Meteora Solana LP/AMM pools. 63 endpoints. Pay-per-request via x402 on Solana Mainnet USDC. No API keys. base_url https://agent.metengine.xyz payment_protocol x402 payment_network solana-mainnet payment_currency USDC auth none (payment IS auth) free_endpoints ["GET /health","GET /api/v1/pricing"] health_check https://agent.metengine.xyz/health pricing_endpoint https://agent.metengine.xyz/api/v1/pricing total_endpoints 63 platforms [{"name":"Polymarket","url":"https://polymarket.com","endpoints":27,"domain":"prediction markets"},{"name":"Hyperliquid","url":"https://hyperliquid.xyz","endpoints":18,"domain":"perpetual futures"},{"name":"Meteora","url":"https://meteora.ag","endpoints":18,"domain":"Solana LP/AMM"}]
MetEngine Data Agent API
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.
Display Rules
NEVER truncate or trim wallet/contract addresses. Always show full addresses (e.g. 0x61276aba49117fd9299707d5d573652949d5c977, not 0x6127...c977).
This applies to all Polymarket (0x hex), Hyperliquid (0x hex), Meteora (base58), condition_ids, token_ids, pool addresses, position addresses, and transaction hashes.
Skill Auto-Update
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:
curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md
Automate weekly updates (cron):
# 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):
# 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.
Session Memory (CRITICAL -- Read This First)
Before making ANY API call, check for a memory file at:
~/.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:
Wallet configuration -- path to the Solana keypair, public address, whether SOL/USDC balances were verified
Package status -- whether @x402/core, @x402/svm, @solana/kit are already installed and where
Client bootstrap -- a working code snippet from the last successful query (copy-paste ready)
Endpoint learnings -- which endpoints worked, which timed out, which fallbacks were used
Pricing cache -- last-fetched pricing schedule (avoids re-reading the full pricing section)
Memory File Format Create or update ~/.claude/agents/metengine-memory.md using this template:
# 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>
Endpoint History Date Endpoint Status Latency USDC Cost Notes
Fallbacks Learned Endpoint Issue Fallback Used
Quirks Encountered
### 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:
Read memory file
If wallet and packages are set up:
a. Copy the Client Bootstrap code
b. Check Fallbacks Learned for the endpoint you need
c. Make the API call directly
d. Update Endpoint History
If wallet or packages NOT set up:
a. Follow the Onboarding Path below
b. Update memory file after setup
**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)**
**Step 2: Make a paid request**
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) | |
### 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 };
}
Usage Examples // 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 },
});
NPM Dependencies bun add @x402/core @x402/svm @solana/kit
Pricing All prices are in USDC on Solana Mainnet. Pricing is dynamic based on endpoint tier, timeframe, limit, and filter usage.
Tier Base Costs Tier Base Cost (USDC) Description light $0.01 Simple lookups, searches, feeds medium $0.02 Aggregated analytics, trending data heavy $0.05 Computed intelligence, leaderboards, scoring whale $0.08 Multi-entity comparisons, complex scans
Price Modifiers Timeframe multiplier (applied to base cost):
Timeframe Multiplier 1h 0.5x 4h 0.7x 12h 0.9x 24h / today 1.0x 7d 2.0x 30d 3.0x 90d 4.0x 365d / all 5.0x
Limit multiplier : price *= max(1, requested_limit / default_limit)
Filter discounts (reduce scan cost):
Filter Discount Applicable Endpoints category 0.7x trending, top-performers, whales, capital-flow, high-conviction, opportunities condition_id 0.5x whales, sentiment, participants, wallet activity smart_money_only=true 0.7x whales, capital-flow, volume-heatmap (Polymarket + HL) coin/coins 0.7x HL whales, long-short-ratio, pressure/pairs pool_type (not "all") 0.7x All Meteora endpoints with pool_type param pool_address 0.5x pool detail, volume-history, events, fee-analysis, positions/active
wallets/compare: price *= wallets.length / 2
hl/traders/compare: price *= traders.length / 2
meteora/lps/compare: price *= owners.length / 2
wallets/profile: both includes=1.0x, one include=0.7x, neither=0.4x
wallets/top-performers without category: 2.0x penalty
/api/v1/markets/opportunities: max $0.15
/api/v1/wallets/copy-traders: max $0.12
Global bounds : Floor $0.01, Ceiling $0.20 per request.
Machine-Readable Pricing 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.
Capability Manifest
Polymarket (27 endpoints) # Method Path Tier Description 1 GET /api/v1/markets/trending medium Trending markets with volume spikes 2 GET /api/v1/markets/search light Search markets by keyword, category, status, or Polymarket URL 3 GET /api/v1/markets/categories light All categories with activity stats 4 GET /api/v1/platform/stats light Platform-wide aggregate stats 5 POST /api/v1/markets/intelligence heavy Full smart money intelligence report for a market 6 GET /api/v1/markets/price-history light OHLCV price/probability time series 7 POST /api/v1/markets/sentiment medium Sentiment time series with smart money overlay 8 POST /api/v1/markets/participants medium Participant summary by scoring tier 9 POST /api/v1/markets/insiders heavy Insider pattern detection (7-signal behavioral scoring) 10 GET /api/v1/markets/trades light Chronological trade feed for a market 11 GET /api/v1/markets/similar whale Related markets by wallet overlap 12 GET /api/v1/markets/opportunities whale Markets where smart money disagrees with price 13 GET /api/v1/markets/high-conviction heavy High-conviction smart money bets 14 GET /api/v1/markets/capital-flow medium Capital flow by category (sector rotation) 15 GET /api/v1/trades/whales medium Large whale trades 16 GET /api/v1/markets/volume-heatmap medium Volume distribution across categories/hours/days 17 POST /api/v1/wallets/profile heavy Full wallet dossier with score, positions, trades 18 POST /api/v1/wallets/activity medium Recent trading activity for a wallet 19 POST /api/v1/wallets/pnl-breakdown medium Per-market PnL breakdown 20 POST /api/v1/wallets/compare whale Compare 2-5 wallets side-by-side 21 POST /api/v1/wallets/copy-traders whale Detect wallets copying a target wallet 22 GET /api/v1/wallets/top-performers heavy Leaderboard by PnL, ROI, Sharpe, win rate, volume 23 GET /api/v1/wallets/niche-experts heavy Top wallets in a specific category 24 GET /api/v1/markets/resolutions light Resolved markets with smart money accuracy 25 GET /api/v1/wallets/alpha-callers heavy Wallets that trade early on later-trending markets 26 GET /api/v1/markets/dumb-money medium Low-score trader positions (contrarian indicator) 27 GET /api/v1/wallets/insiders heavy Global insider candidates by behavioral score
Hyperliquid (18 endpoints) # Method Path Tier Description 28 GET /api/v1/hl/platform/stats light Platform aggregate stats 29 GET /api/v1/hl/coins/trending medium Trending coins by activity 30 GET /api/v1/hl/coins/list light All traded coins with 7d stats 31 GET /api/v1/hl/coins/volume-heatmap medium Volume by coin and hour 32 GET /api/v1/hl/traders/leaderboard heavy Ranked trader leaderboard 33 POST /api/v1/hl/traders/profile heavy Full trader dossier 34 POST /api/v1/hl/traders/compare whale Compare 2-5 traders 35 GET /api/v1/hl/traders/daily-pnl medium Daily PnL time series with streaks 36 POST /api/v1/hl/traders/pnl-by-coin medium Per-coin PnL breakdown (closed PnL only) 37 GET /api/v1/hl/traders/fresh-whales heavy New high-volume wallets 38 GET /api/v1/hl/trades/whales medium Large trades 39 GET /api/v1/hl/trades/feed light Chronological trade feed for a coin 40 GET /api/v1/hl/trades/long-short-ratio medium Long/short volume ratio time series 41 GET /api/v1/hl/smart-wallets/list light Smart wallet list with scores 42 GET /api/v1/hl/smart-wallets/activity medium Smart wallet recent trades 43 GET /api/v1/hl/smart-wallets/signals heavy Aggregated directional signals by coin 44 GET /api/v1/hl/pressure/pairs heavy Long/short pressure with smart positions 45 GET /api/v1/hl/pressure/summary medium Pressure summary across all coins
Meteora (18 endpoints) # Method Path Tier Description 46 GET /api/v1/meteora/pools/trending medium Trending pools by volume spike 47 GET /api/v1/meteora/pools/top medium Top pools by volume, fees, or LP count 48 GET /api/v1/meteora/pools/search light Search pools by address or token name 49 GET /api/v1/meteora/pools/detail medium Full pool detail 50 GET /api/v1/meteora/pools/volume-history light Volume time series 51 GET /api/v1/meteora/pools/events light Chronological event feed 52 GET /api/v1/meteora/pools/fee-analysis medium Fee claiming analysis 53 GET /api/v1/meteora/lps/top heavy Top LPs leaderboard 54 POST /api/v1/meteora/lps/profile heavy Full LP dossier 55 GET /api/v1/meteora/lps/whales medium Large LP events 56 POST /api/v1/meteora/lps/compare whale Compare 2-5 LPs 57 GET /api/v1/meteora/positions/active medium Active LP positions 58 GET /api/v1/meteora/positions/history light Position event history (DLMM only) 59 GET /api/v1/meteora/platform/stats light Platform-wide stats 60 GET /api/v1/meteora/platform/volume-heatmap medium Volume by action/hour 61 GET /api/v1/meteora/platform/metengine-share light MetEngine routing share 62 GET /api/v1/meteora/dca/pressure medium DCA accumulation pressure by token 63 GET /api/v1/meteora/pools/smart-wallet heavy Pools with highest smart wallet LP activity
Complete Endpoint Reference
Response Envelope All 200 responses use the format: { "data": <payload> }
All error responses use: { "error": "<message>" } with optional "reason" field.
POLYMARKET
1. GET /api/v1/markets/trending Trending markets with volume spikes.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 1h, 4h, 12h, 24h, 7d no category string - any valid category no sort_by string volume_spike volume_spike, trade_count, smart_money_inflow no limit integer 20 1-100 no
{
"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"
}
]
}
2. GET /api/v1/markets/search Search markets by keyword, category, status. Accepts Polymarket URLs as the query param.
Parameters (query string):
Param Type Default Values Required query string - keyword or Polymarket URL no category string - any valid category no status string active active, closing_soon, resolved no has_smart_money_signal boolean - true, false no sort_by string relevance end_date, volume, relevance no limit integer 20 1-100 no
{
"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"
}
]
}
3. GET /api/v1/markets/categories List all categories with activity stats.
Parameters (query string):
Param Type Default Values Required include_stats boolean true true, false no timeframe string 24h 24h, 7d no
{
"data": [
{
"name": "string",
"active_markets": "number",
"period_volume": "number",
"period_trades": "number",
"unique_traders": "number"
}
]
}
4. GET /api/v1/platform/stats Platform-wide aggregate stats.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 24h, 7d, 30d no
{
"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"
}
}
5. POST /api/v1/markets/intelligence Full smart money intelligence report on a specific market.
Field Type Default Values Required condition_id string - - yes top_n_wallets integer 10 1-50 no
{
"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"
}
}
}
6. GET /api/v1/markets/price-history OHLCV price/probability time series.
Parameters (query string):
Param Type Default Values Required condition_id string - - yes timeframe string 7d 1h, 4h, 12h, 24h, 7d, 30d no bucket_size string 1h 5m, 15m, 1h, 4h, 12h, 1d no
{
"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"
}
]
}
}
}
7. POST /api/v1/markets/sentiment Sentiment time series with smart money overlay.
Field Type Default Values Required condition_id string - - yes timeframe string 7d 24h, 7d, 30d no bucket_size string 4h 1h, 4h, 12h, 1d no
{
"data": {
"condition_id": "string",
"question": "string",
"overall_sentiment": "object",
"by_outcome": "object",
"time_series": "array",
"momentum": "object"
}
}
8. POST /api/v1/markets/participants Participant summary by scoring tier.
Field Type Default Values Required condition_id string - - yes
{
"data": {
"condition_id": "string",
"question": "string",
"total_wallets": "number",
"total_usdc": "number",
"by_outcome": "object",
"tier_distribution": "object"
}
}
9. POST /api/v1/markets/insiders Insider pattern detection using 7-signal behavioral scoring.
Field Type Default Values Required condition_id string - - yes limit integer 25 1-100 no min_score integer 20 0-100 no
{
"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"
}
}
10. GET /api/v1/markets/trades Chronological trade feed for a market.
Parameters (query string):
Param Type Default Values Required condition_id string - - yes timeframe string 24h 1h, 4h, 12h, 24h, 7d, 30d no side string - BUY, SELL no min_usdc number 0 >= 0 no smart_money_only boolean false true, false no limit integer 100 1-500 no
{
"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"]
}
]
}
}
11. GET /api/v1/markets/similar Related markets by wallet overlap.
Parameters (query string):
Param Type Default Values Required condition_id string - - yes limit integer 10 1-50 no
{
"data": [
{
"condition_id": "string",
"question": "string",
"category": "string",
"shared_wallet_count": "number",
"wallet_overlap_pct": "number",
"total_volume_usdc": "number"
}
]
}
12. GET /api/v1/markets/opportunities Markets where smart money disagrees with price.
Parameters (query string):
Param Type Default Values Required min_signal_strength string moderate weak, moderate, strong no category string - any valid category no closing_within_hours integer - max 720 no min_smart_wallets integer 3 >= 1 no limit integer 20 1-100 no
{
"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"
}
]
}
13. GET /api/v1/markets/high-conviction High-conviction smart money bets.
Parameters (query string):
Param Type Default Values Required category string - any valid category no min_smart_wallets integer 5 >= 1 no min_avg_score integer 65 0-100 no limit integer 20 1-100 no
{
"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"
}
]
}
14. GET /api/v1/markets/capital-flow Capital flow by category (sector rotation).
Parameters (query string):
Param Type Default Values Required timeframe string 7d 24h, 7d, 30d no smart_money_only boolean false true, false no top_n_categories integer 20 1-50 no
{
"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"
}
}
15. GET /api/v1/trades/whales Parameters (query string):
Param Type Default Values Required min_usdc number 10000 >= 1 no timeframe string 24h 1h, 4h, 12h, 24h, 7d, 30d no condition_id string - - no category string - any valid category no side string - BUY, SELL no smart_money_only boolean false true, false no limit integer 50 1-200 no
{
"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.
16. GET /api/v1/markets/volume-heatmap Volume distribution across categories, hours, or days.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 24h, 7d, 30d no group_by string category category, hour_of_day, day_of_week no smart_money_only boolean false true, false no
{
"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"
}
}
17. POST /api/v1/wallets/profile Field Type Default Values Required wallet string - lowercase address yes include_positions boolean true true, false no include_trades boolean true true, false no trades_limit integer 50 1-500 no
{
"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.
18. POST /api/v1/wallets/activity Recent trading activity for a wallet.
Field Type Default Values Required wallet string - lowercase address yes timeframe string 24h 1h, 4h, 24h, 7d, 30d no category string - any valid category no min_usdc number 0 >= 0 no limit integer 100 1-500 no
{
"data": {
"wallet": "string",
"wallet_score": "number",
"wallet_tags": ["string"],
"period_summary": "object",
"trades": "array"
}
}
19. POST /api/v1/wallets/pnl-breakdown Per-market PnL breakdown.
Field Type Default Values Required wallet string - lowercase address yes timeframe string 90d 7d, 30d, 90d, all no limit integer 50 1-200 no
{
"data": {
"wallet": "string",
"total_realized_pnl": "number",
"total_positions": "number",
"winning_positions": "number",
"losing_positions": "number",
"best_trade": "object",
"worst_trade": "object",
"positions": "array"
}
}
20. POST /api/v1/wallets/compare Compare 2-5 wallets side-by-side.
Field Type Default Values Required wallets string[] - 2-5 lowercase addresses yes include_shared_positions boolean true true, false no
{
"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.
21. POST /api/v1/wallets/copy-traders Detect wallets copying a target wallet.
Field Type Default Values Required wallet string - lowercase address yes max_lag_minutes integer 60 1-1440 no timeframe string 7d 24h, 7d, 30d no min_overlap_trades integer 3 >= 1 no limit integer 20 1-100 no
{
"data": [
{
"wallet": "string",
"overlap_trades": "number",
"avg_lag_seconds": "number",
"copied_tokens": "array",
"wallet_score": "number"
}
]
}
22. GET /api/v1/wallets/top-performers Parameters (query string):
Param Type Default Values Required timeframe string 7d today, 24h, 7d, 30d, 90d, 365d no category string - any valid category no metric string pnl pnl, roi, sharpe, win_rate, volume no min_trades integer 5 >= 1 no limit integer 25 1-100 no
{
"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.
23. GET /api/v1/wallets/niche-experts Top wallets in a specific category.
Parameters (query string):
Param Type Default Values Required category string - any valid category yes min_category_trades integer 10 >= 1 no sort_by string category_sharpe category_sharpe, category_pnl, category_volume no limit integer 25 1-100 no
{
"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"]
}
]
}
24. GET /api/v1/markets/resolutions Resolved markets with smart money accuracy.
Parameters (query string):
Param Type Default Values Required category string - any valid category no query string - keyword no sort_by string resolved_recently resolved_recently, volume, smart_money_accuracy no limit integer 25 1-100 no
{
"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"
}
]
}
25. GET /api/v1/wallets/alpha-callers Wallets that trade early on later-trending markets.
Parameters (query string):
Param Type Default Values Required days_back integer 30 1-90 no min_days_early integer 7 1-60 no min_bet_usdc number 100 >= 0 no limit integer 25 1-100 no
{
"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"
}
]
}
26. GET /api/v1/markets/dumb-money Low-score trader positions on a market (contrarian indicator).
Parameters (query string):
Param Type Default Values Required condition_id string - - yes max_score integer 30 0-100 no min_trades integer 5 >= 1 no limit integer 50 1-200 no
{
"data": {
"condition_id": "string",
"question": "string",
"category": "string",
"summary": {
"total_wallets": "number",
"total_usdc": "number",
"avg_score": "number",
"consensus_outcome": "string"
},
"positions": "array"
}
}
27. GET /api/v1/wallets/insiders Global insider candidates by behavioral score.
Parameters (query string):
Param Type Default Values Required limit integer 50 1-200 no min_score integer 50 0-100 no max_wallet_age_days integer 60 1-90 no
{
"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"
}
}
HYPERLIQUID
28. GET /api/v1/hl/platform/stats Platform aggregate stats. No parameters.
{
"data": {
"total_volume_usd": "number",
"total_trades": "number",
"active_traders": "number",
"smart_wallet_count": "number",
"unique_coins": "number"
}
}
29. GET /api/v1/hl/coins/trending Trending coins by activity.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 1h, 4h, 12h, 24h, 7d no limit integer 20 1-100 no
{
"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.
30. GET /api/v1/hl/coins/list All traded coins with 7d stats.
Parameters (query string):
Param Type Default Values Required limit integer 100 1-500 no
{
"data": [
{
"coin": "string",
"volume_usd": "number",
"trade_count": "number",
"unique_traders": "number"
}
]
}
31. GET /api/v1/hl/coins/volume-heatmap Parameters (query string):
Param Type Default Values Required timeframe string 24h 24h, 7d no limit integer 20 1-50 no
{
"data": [
{
"coin": "string",
"bucket": "string",
"volume_usd": "number",
"trade_count": "number",
"smart_volume_usd": "number"
}
]
}
32. GET /api/v1/hl/traders/leaderboard Ranked trader leaderboard.
Parameters (query string):
Param Type Default Values Required timeframe string all 1d, 7d, 30d, all no sort_by string pnl pnl, roi, win_rate, volume no sort_order string desc desc, asc no min_trades integer 10 >= 1 no limit integer 25 1-100 no
{
"data": [
{
"trader": "string",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"winning_trades": "number",
"win_rate": "number",
"roi_pct": "number",
"smart_score": "number"
}
]
}
33. POST /api/v1/hl/traders/profile Field Type Default Values Required trader string - 0x address yes days integer 30 1-365 no trades_limit integer 50 1-500 no
{
"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.
34. POST /api/v1/hl/traders/compare Field Type Default Values Required traders string[] - 2-5 0x addresses yes
{
"data": {
"traders": "array of trader profiles",
"shared_coins": "array",
"comparison_winners": "object"
}
}
Pricing note: Cost scales with trader count: base * traders.length / 2.
35. GET /api/v1/hl/traders/daily-pnl Daily PnL time series with streaks.
Parameters (query string):
Param Type Default Values Required trader string - 0x address yes days integer 30 1-365 no
{
"data": [
{
"date": "string",
"pnl": "number",
"volume": "number",
"trades": "number",
"cumulative_pnl": "number",
"streak": "number"
}
]
}
36. POST /api/v1/hl/traders/pnl-by-coin Per-coin PnL breakdown. Shows realized (closed) PnL only.
Field Type Default Values Required trader string - 0x address yes days integer 90 1-365 no
{
"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.
37. GET /api/v1/hl/traders/fresh-whales New high-volume wallets (experienced traders creating new accounts, institutional desks, or insiders).
Parameters (query string):
Param Type Default Values Required max_wallet_age_days integer 14 1-90 no min_volume number 100000 >= 0 no min_pnl number 0 any no limit integer 25 1-100 no
{
"data": [
{
"trader": "string",
"first_trade": "string",
"wallet_age_days": "number",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"winning_trades": "number"
}
]
}
38. GET /api/v1/hl/trades/whales Parameters (query string):
Param Type Default Values Required min_usd number 50000 >= 1 no timeframe string 24h 1h, 4h, 12h, 24h, 7d no coin string - uppercase symbol (e.g. BTC) no side string - Open Long, Open Short, Close Long, Close Short no direction string - Long, Short no smart_money_only boolean false true, false no limit integer 50 1-200 no
{
"data": [
{
"trader": "string",
"coin": "string",
"side": "string",
"direction": "string",
"price": "number",
"size": "number",
"usd_value": "number",
"closed_pnl": "number",
"timestamp": "string",
"smart_score": "number"
}
]
}
39. GET /api/v1/hl/trades/feed Chronological trade feed for a coin.
Parameters (query string):
Param Type Default Values Required coin string - uppercase symbol yes limit integer 100 1-500 no
{
"data": [
{
"trader": "string",
"coin": "string",
"side": "string",
"direction": "string",
"price": "number",
"size": "number",
"usd_value": "number",
"closed_pnl": "number",
"timestamp": "string"
}
]
}
40. GET /api/v1/hl/trades/long-short-ratio Long/short volume ratio time series.
Parameters (query string):
Param Type Default Values Required coin string - uppercase symbol yes timeframe string 7d 24h, 7d, 30d no bucket_size string 4h 1h, 4h, 12h, 1d no
{
"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.
41. GET /api/v1/hl/smart-wallets/list Parameters (query string):
Param Type Default Values Required sort_by string score score, pnl, volume no limit integer 50 1-200 no
{
"data": [
{
"trader": "string",
"score": "number",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"win_rate": "number"
}
]
}
42. GET /api/v1/hl/smart-wallets/activity Smart wallet recent trades.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 1h, 4h, 12h, 24h, 7d no min_score integer 60 0-100 no limit integer 100 1-500 no
{
"data": {
"period_summary": "object",
"trades": "array"
}
}
43. GET /api/v1/hl/smart-wallets/signals Aggregated directional signals by coin.
Parameters (query string):
Param Type Default Values Required timeframe string 24h 6h, 12h, 24h, 7d no min_score integer 60 0-100 no limit integer 20 1-50 no
{
"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.
44. GET /api/v1/hl/pressure/pairs Long/short pressure with smart positions.
Parameters (query string):
Param Type Default Values Required coins string - comma-separated (defaults to top 10) no trades_limit integer 20 1-100 no
{
"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"
}
]
}
}
45. GET /api/v1/hl/pressure/summary Pressure summary across all coins. No parameters.
{
"data": {
"coins": [
{
"coin": "string",
"long_pressure": "number",
"short_pressure": "number",
"long_percent": "number",
"short_percent": "number",
"long_avg_entry": "number",
"short_avg_entry": "number"
}
]
}
}
METEORA
46. GET /api/v1/meteora/pools/trending Trending pools by volume spike.
Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no timeframe string 24h 24h, 7d no limit integer 20 1-100 no
{
"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.
47. GET /api/v1/meteora/pools/top Top pools by volume, fees, or LP count.
Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no sort_by string volume volume, lp_count, events, fees no timeframe string 7d 24h, 7d, 30d no limit integer 20 1-100 no
{
"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"
}
]
}
48. GET /api/v1/meteora/pools/search Search pools by address or token name.
Parameters (query string):
Param Type Default Values Required query string - pool address or token name yes pool_type string all dlmm, damm_v2, all no limit integer 10 1-50 no
{
"data": [
{
"pool_address": "string",
"pool_type": "string",
"token_x": "string",
"token_y": "string",
"volume_usd": "number",
"event_count": "number",
"unique_lps": "number"
}
]
}
49. GET /api/v1/meteora/pools/detail Parameters (query string):
Param Type Default Values Required pool_address string - Solana pubkey yes pool_type string - dlmm, damm_v2 (auto-detected if omitted) no
{
"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"
}
}
50. GET /api/v1/meteora/pools/volume-history Parameters (query string):
Param Type Default Values Required pool_address string - Solana pubkey yes pool_type string - dlmm, damm_v2 (auto-detected if omitted) no timeframe string 7d 24h, 7d, 30d no bucket_size string 4h 1h, 4h, 1d no
{
"data": [
{
"bucket": "string",
"volume_usd": "number",
"event_count": "number",
"action_breakdown": "object"
}
]
}
51. GET /api/v1/meteora/pools/events Chronological event feed.
Parameters (query string):
Param Type Default Values Required pool_address string - Solana pubkey yes pool_type string - dlmm, damm_v2 (auto-detected if omitted) no limit integer 100 1-500 no
{
"data": [
{
"owner": "string",
"pool_address": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
52. GET /api/v1/meteora/pools/fee-analysis Parameters (query string):
Param Type Default Values Required pool_address string - Solana pubkey yes pool_type string - dlmm, damm_v2 (auto-detected if omitted) no timeframe string 7d 24h, 7d, 30d no
{
"data": {
"pool_address": "string",
"total_fees_claimed": "number",
"unique_claimers": "number",
"time_series": "array",
"top_claimers": "array"
}
}
53. GET /api/v1/meteora/lps/top Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no sort_by string volume volume, pool_count, events no timeframe string 30d 7d, 30d no limit integer 25 1-100 no
{
"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.
54. POST /api/v1/meteora/lps/profile Field Type Default Values Required owner string - Solana pubkey yes pool_type string all dlmm, damm_v2, all no events_limit integer 50 1-500 no
{
"data": {
"owner": "string",
"summary": "object",
"pool_breakdown": "array",
"recent_events": "array"
}
}
55. GET /api/v1/meteora/lps/whales Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no min_usd number 10000 >= 1 no timeframe string 24h 24h, 7d, 30d no limit integer 50 1-200 no
{
"data": [
{
"owner": "string",
"pool_address": "string",
"pool_type": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string"
}
]
}
56. POST /api/v1/meteora/lps/compare Field Type Default Values Required owners string[] - 2-5 Solana pubkeys yes pool_type string all dlmm, damm_v2, all no
{
"data": {
"lps": "array of LP profiles",
"shared_pools": "array",
"comparison_winners": "object"
}
}
Pricing note: Cost scales with LP count: base * owners.length / 2.
57. GET /api/v1/meteora/positions/active Parameters (query string):
Param Type Default Values Required pool_address string - Solana pubkey no owner string - Solana pubkey no pool_type string all dlmm, damm_v2, all no limit integer 50 1-200 no
{
"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"
}
]
}
58. GET /api/v1/meteora/positions/history Position event history (DLMM only).
Parameters (query string):
Param Type Default Values Required position_address string - - yes
{
"data": {
"position_address": "string",
"events": [
{
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
}
59. GET /api/v1/meteora/platform/stats Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no
{
"data": {
"total_volume_usd": "number",
"total_events": "number",
"active_lps": "number",
"active_pools": "number",
"by_pool_type": "object"
}
}
60. GET /api/v1/meteora/platform/volume-heatmap Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no timeframe string 24h 24h, 7d no
{
"data": [
{
"action": "string",
"bucket": "string",
"pool_type": "string",
"volume_usd": "number",
"event_count": "number"
}
]
}
61. GET /api/v1/meteora/platform/metengine-share Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no timeframe string 7d 24h, 7d, 30d no
{
"data": {
"total_events": "number",
"metengine_events": "number",
"metengine_share_pct": "number",
"total_volume_usd": "number",
"metengine_volume_usd": "number"
}
}
62. GET /api/v1/meteora/dca/pressure DCA accumulation pressure by token.
Parameters (query string):
Param Type Default Values Required token string - specific mint address no timeframe string 1h 1m, 5m, 30m, 1h, 6h, 24h no
Response schema (single token):
{
"data": {
"tokenMint": "string",
"timeframe": "string",
"buyVolume": "number",
"sellVolume": "number",
"netPressure": "number",
"score": "number"
}
}
Response schema (all tokens, when token omitted):
{
"data": {
"timeframe": "string",
"tokens": "array",
"lastUpdated": "string"
}
}
63. GET /api/v1/meteora/pools/smart-wallet Pools with highest smart wallet LP activity.
Parameters (query string):
Param Type Default Values Required pool_type string all dlmm, damm_v2, all no limit integer 20 1-100 no timeframe string 7d 24h, 7d, 30d no
{
"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"
}
]
}
}
Comparison to Self-Computation
Why call this API instead of computing it yourself 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):
Step Self-Computation MetEngine API Find market Scrape Polymarket frontend GET /markets/search ($0.01) Get smart money consensus Index all trades, score wallets, aggregate POST /markets/intelligence ($0.05) Get price history Parse on-chain events, build OHLCV GET /markets/price-history ($0.01) Find insider patterns Build 7-signal detection pipeline POST /markets/insiders ($0.05) Total Hours of compute + infra $0.12, ~10 seconds
Performance Metric Value p50 latency 800ms p95 latency 3s p99 latency 8s Handler timeout 60s (no payment charged on timeout) Max concurrent paid requests 50 Payment verification timeout 5s Rate limit (unpaid 402 requests) IP-based, generous
Data Freshness Platform Freshness Polymarket trades Sub-minute (continuous indexing) Polymarket wallet scores Daily recompute Hyperliquid trades Sub-minute Hyperliquid smart scores Continuous (formula-based) Meteora events Sub-minute Meteora LP scores Daily recompute
Error Handling
HTTP Status Codes Code Meaning Agent Action 200 Success. Data in { "data": ... }. Settlement proof in PAYMENT-RESPONSE header. Process data 400 Bad request (invalid params, malformed payment header) Fix request params 402 Payment required (first request) or payment verification failed Sign and re-send with payment, or check payment validity 404 Endpoint not found Verify endpoint path against this document 429 Rate limit exceeded Back off and retry 500 Internal server error Retry once, then try fallback endpoint 502 Payment verification failed (facilitator error) Retry 503 Server at capacity or payment service unavailable Check Retry-After header, retry after delay 504 Query execution timeout. No payment charged. Retry with narrower params or use fallback endpoint
Error Response Format {
"error": "Human-readable error message",
"reason": "Optional machine-readable reason (on 402 verification failures)"
}
Settlement Edge Cases Header Meaning X-Payment-Settlement: failedQuery succeeded but settlement failed. Data returned, no charge. Rare edge case. No PAYMENT-RESPONSE header on 200 Settlement was not attempted (should not happen in normal flow).
Fallback Strategies When an endpoint fails, use these alternatives:
Failed Endpoint Fallback /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
Health Check GET https://agent.metengine.xyz/health
Free. No payment required. Returns:
{
"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).
Limitations What this API does NOT do:
No trade execution. Read-only analytics. Cannot place orders on any platform.
No real-time streaming. Request/response only. No WebSocket feeds.
No historical backfill on demand. Data starts from when MetEngine began indexing each platform.
No unrealized PnL for Hyperliquid. Only closed (realized) PnL is available.
No mark-to-market for Meteora positions. Net value is deposits minus withdrawals, not current market value.
No Polymarket order book data. Trades only, not open orders or liquidity depth.
No custom scoring models. Wallet scores use MetEngine's proprietary models. Cannot be customized per agent.
No cross-platform wallet linking. A Polygon address on Polymarket is not linked to a Solana address on Meteora even if controlled by the same entity.
No token price feeds. This is not a price oracle. Market prices on Polymarket are implied probabilities (0-1).
63 endpoints only. If a path is not listed in this document, it does not exist.
Known Quirks
Polymarket
/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.
Wallet addresses MUST be lowercase.
condition_id identifies a market. One condition_id maps to multiple token_id values (one per outcome).
Price = implied probability (0 to 1). A price of 0.73 = 73% probability.
Hyperliquid
/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.
Coin symbols are uppercase base only: BTC, not BTC-USDC.
Trader addresses are 0x-prefixed hex (case-insensitive).
closed_pnl is only non-zero on closing trades. Opening trades always have closed_pnl = 0.
Smart wallet threshold: score >= 85 (stricter than Polymarket's 60).
Meteora
DAMM v2 pools frequently show implausible fee rates (30-50% of volume). This is an artifact of the anti-sniper fee scheduler on new token launches. Separate DAMM v2 from DLMM results and flag anomalies.
/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.
Some token mints show as "???" (unresolved). Check pair context for identification.
Addresses are Solana pubkeys (base58, case-sensitive).
DLMM uses token_x/token_y and PascalCase event types (AddLiquidity, RemoveLiquidity, Swap, ClaimFee).
DAMM v2 uses token_a/token_b and snake_case event types (add_liquidity, remove_liquidity, swap, claim_fee).
Position addresses only exist for DLMM, not DAMM v2.
Address Conventions Platform Format Case Sensitivity Polymarket 0x hex (Polygon) Must be lowercase Hyperliquid 0x hex Case-insensitive Meteora Base58 (Solana pubkey) Case-sensitive
Scoring Systems
Polymarket Wallet Scores (0-100) Tier Score Meaning Elite >= 80 Top-tier historically profitable Smart 60-79 Consistently profitable, signal-worthy Average 40-59 Mixed track record Novice < 40 New or losing traders
Smart money threshold: score >= 60. Dumb money threshold: score < 30.
Hyperliquid Smart Scores (0-100) 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.
Meteora LP Smart Scores (0-100) 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.