sendaifun/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.
npx skills add https://github.com/sendaifun/skills --skill metengine-data-agent
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:
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.
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:
@x402/core, @x402/svm, @solana/kit are already installed and whereCreate 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 -->
// <paste the one-time setup + paidFetch function that worked>
## Endpoint History
<!-- Append after each session. Keep the last 10 entries. -->
| Date | Endpoint | Status | Latency | USDC Cost | Notes |
|------|----------|--------|---------|-----------|-------|
## Fallbacks Learned
<!-- Record which fallbacks were needed -->
| Endpoint | Issue | Fallback Used |
|----------|-------|---------------|
## Quirks Encountered
<!-- Record runtime surprises so future sessions avoid them -->
Agents MUST update the memory file:
Last Updated timestamp| 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 |
If ~/.claude/agents/metengine-memory.md exists:
1. Read memory file
2. 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
3. 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.
Bun.file(path).text() or fs.readFileSync(path) -- pipe directly into the signer, never into a variable that gets loggedTwo steps from zero to data:
Step 1: Verify service is live (free)
GET https://agent.metengine.xyz/health
Step 2: Make a paid request
GET https://agent.metengine.xyz/api/v1/markets/trending?timeframe=24h&limit=5
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.
Every paid endpoint uses a two-step handshake. No API keys. No accounts. Payment IS authentication.
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) | |
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.
| 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 |
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 };
}
// 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 },
});
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.
| 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 |
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 |
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.
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.
| # | 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 |
| # | 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 |
| # | 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 |
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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| include_stats | boolean | true | true, false | no |
| timeframe | string | 24h | 24h, 7d | no |
Response schema:
{
"data": [
{
"name": "string",
"active_markets": "number",
"period_volume": "number",
"period_trades": "number",
"unique_traders": "number"
}
]
}
Platform-wide aggregate stats.
Parameters (query string):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| timeframe | string | 24h | 24h, 7d, 30d | no |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| condition_id | string | - | - | yes |
| top_n_wallets | integer | 10 | 1-50 | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| condition_id | string | - | - | yes |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| condition_id | string | - | - | yes |
| limit | integer | 25 | 1-100 | no |
| min_score | integer | 20 | 0-100 | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| condition_id | string | - | - | yes |
| limit | integer | 10 | 1-50 | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"data": {
"wallet": "string",
"wallet_score": "number",
"wallet_tags": ["string"],
"period_summary": "object",
"trades": "array"
}
}
Per-market PnL breakdown.
Request body (JSON):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| wallet | string | - | lowercase address | yes |
| timeframe | string | 90d | 7d, 30d, 90d, all | no |
| limit | integer | 50 | 1-200 | no |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| wallets | string[] | - | 2-5 lowercase addresses | yes |
| include_shared_positions | boolean | true | true, false | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"data": [
{
"wallet": "string",
"overlap_trades": "number",
"avg_lag_seconds": "number",
"copied_tokens": "array",
"wallet_score": "number"
}
]
}
Leaderboard.
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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| timeframe | string | 24h | 1h, 4h, 12h, 24h, 7d | no |
| limit | integer | 20 | 1-100 | no |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| limit | integer | 100 | 1-500 | no |
Response schema:
{
"data": [
{
"coin": "string",
"volume_usd": "number",
"trade_count": "number",
"unique_traders": "number"
}
]
}
Volume by coin and hour.
Parameters (query string):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| timeframe | string | 24h | 24h, 7d | no |
| limit | integer | 20 | 1-50 | no |
Response schema:
{
"data": [
{
"coin": "string",
"bucket": "string",
"volume_usd": "number",
"trade_count": "number",
"smart_volume_usd": "number"
}
]
}
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 |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| trader | string | - | 0x address | yes |
| days | integer | 30 | 1-365 | no |
| trades_limit | integer | 50 | 1-500 | no |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| traders | string[] | - | 2-5 0x addresses | yes |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| trader | string | - | 0x address | yes |
| days | integer | 30 | 1-365 | no |
Response schema:
{
"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):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| trader | string | - | 0x address | yes |
| days | integer | 90 | 1-365 | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| coin | string | - | uppercase symbol | yes |
| limit | integer | 100 | 1-500 | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| sort_by | string | score | score, pnl, volume | no |
| limit | integer | 50 | 1-200 | no |
Response schema:
{
"data": [
{
"trader": "string",
"score": "number",
"total_pnl": "number",
"total_volume": "number",
"total_trades": "number",
"win_rate": "number"
}
]
}
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 |
Response schema:
{
"data": {
"period_summary": "object",
"trades": "array"
}
}
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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| coins | string | - | comma-separated (defaults to top 10) | no |
| trades_limit | integer | 20 | 1-100 | no |
Response schema:
{
"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:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| pool_address | string | - | Solana pubkey | yes |
| pool_type | string | - | dlmm, damm_v2 (auto-detected if omitted) | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"data": [
{
"bucket": "string",
"volume_usd": "number",
"event_count": "number",
"action_breakdown": "object"
}
]
}
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 |
Response schema:
{
"data": [
{
"owner": "string",
"pool_address": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
Fee claiming 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 |
Response schema:
{
"data": {
"pool_address": "string",
"total_fees_claimed": "number",
"unique_claimers": "number",
"time_series": "array",
"top_claimers": "array"
}
}
Top LPs leaderboard.
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 |
Response schema:
{
"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):
| 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 |
Response schema:
{
"data": {
"owner": "string",
"summary": "object",
"pool_breakdown": "array",
"recent_events": "array"
}
}
Large LP events.
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 |
Response schema:
{
"data": [
{
"owner": "string",
"pool_address": "string",
"pool_type": "string",
"event_type": "string",
"usd_total": "number",
"timestamp": "string"
}
]
}
Compare 2-5 LPs.
Request body (JSON):
| Field | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| owners | string[] | - | 2-5 Solana pubkeys | yes |
| pool_type | string | all | dlmm, damm_v2, all | no |
Response schema:
{
"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):
| 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 |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| position_address | string | - | - | yes |
Response schema:
{
"data": {
"position_address": "string",
"events": [
{
"event_type": "string",
"usd_total": "number",
"timestamp": "string",
"tx_id": "string"
}
]
}
}
Platform-wide stats.
Parameters (query string):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| pool_type | string | all | dlmm, damm_v2, all | no |
Response schema:
{
"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):
| Param | Type | Default | Values | Required |
|-------|------|---------|--------|----------|
| pool_type | string | all | dlmm, damm_v2, all | no |
| timeframe | string | 24h | 24h, 7d | no |
Response schema:
{
"data": [
{
"action": "string",
"bucket": "string",
"pool_type": "string",
"volume_usd": "number",
"event_count": "number"
}
]
}
MetEngine routing 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 |
Response schema:
{
"data": {
"total_events": "number",
Take sendaifun/metengine-data-agent from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.