metengine-data-agent

MetEngine Data Agent API

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "metengine-data-agent" with this command: npx skills add sendaifun/skills/sendaifun-skills-metengine-data-agent

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 -->

// &#x3C;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)**

GET https://agent.metengine.xyz/health

**Step 2: Make a paid request**

GET https://agent.metengine.xyz/api/v1/markets/trending?timeframe=24h&#x26;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`.

---

## 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 ------>|                             |
|&#x3C;-- 402 + PaymentRequired -----|                             |
|                               |                             |
|   [sign payment locally]      |                             |
|                               |                             |
|-- GET + PAYMENT-SIGNATURE --->|                             |
|                               |-- verify ------------------>|
|                               |&#x3C;-- valid -------------------|
|                               |                             |
|                               |   [execute query]           |
|                               |                             |
|                               |-- settle ------------------>|
|                               |&#x3C;-- tx hash -----------------|
|&#x3C;-- 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&#x3C;string, unknown> },
): Promise&#x3C;{ 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&#x3C;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&#x26;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

Special rules:

- 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

Hard caps:

- /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": &#x3C;payload> }

All error responses use: { "error": "&#x3C;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

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"
    }
  ]
}

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

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"
    }
  ]
}

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

Response schema:

{
  "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

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"
  }
}

5. POST /api/v1/markets/intelligence

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": {
        "&#x3C;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

Response schema:

{
  "data": {
    "condition_id": "string",
    "question": "string",
    "category": "string",
    "candles_by_outcome": {
      "&#x3C;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.

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"
  }
}

8. POST /api/v1/markets/participants

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"
  }
}

9. POST /api/v1/markets/insiders

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"
  }
}

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

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"]
      }
    ]
  }
}

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

Response schema:

{
  "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

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"
    }
  ]
}

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

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"
    }
  ]
}

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

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"
  }
}

15. GET /api/v1/trades/whales

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
.

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

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"
  }
}

17. POST /api/v1/wallets/profile

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.

18. POST /api/v1/wallets/activity

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"
  }
}

19. POST /api/v1/wallets/pnl-breakdown

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"
  }
}

20. POST /api/v1/wallets/compare

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
.

21. POST /api/v1/wallets/copy-traders

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"
    }
  ]
}

22. GET /api/v1/wallets/top-performers

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.

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

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"]
    }
  ]
}

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

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"
    }
  ]
}

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

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"
    }
  ]
}

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

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"
  }
}

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

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"
  }
}

HYPERLIQUID

28. GET /api/v1/hl/platform/stats

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"
  }
}

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

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.

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

Response schema:

{
  "data": [
    {
      "coin": "string",
      "volume_usd": "number",
      "trade_count": "number",
      "unique_traders": "number"
    }
  ]
}

31. GET /api/v1/hl/coins/volume-heatmap

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"
    }
  ]
}

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

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"
    }
  ]
}

33. POST /api/v1/hl/traders/profile

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.

34. POST /api/v1/hl/traders/compare

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
.

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

Response schema:

{
  "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.

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.

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

Response schema:

{
  "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

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"
    }
  ]
}

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

Response schema:

{
  "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

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.

41. GET /api/v1/hl/smart-wallets/list

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"
    }
  ]
}

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

Response schema:

{
  "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

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.

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

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"
      }
    ]
  }
}

45. GET /api/v1/hl/pressure/summary

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"
      }
    ]
  }
}

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

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
.

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

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"
    }
  ]
}

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

Response schema:

{
  "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

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"
  }
}

50. GET /api/v1/meteora/pools/volume-history

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"
    }
  ]
}

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

Response schema:

{
  "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

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"
  }
}

53. GET /api/v1/meteora/lps/top

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.

54. POST /api/v1/meteora/lps/profile

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"
  }
}

55. GET /api/v1/meteora/lps/whales

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"
    }
  ]
}

56. POST /api/v1/meteora/lps/compare

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
.

57. GET /api/v1/meteora/positions/active

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"
    }
  ]
}

58. GET /api/v1/meteora/positions/history

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"
      }
    ]
  }
}

59. GET /api/v1/meteora/platform/stats

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"
  }
}

60. GET /api/v1/meteora/platform/volume-heatmap

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"
    }
  ]
}

61. GET /api/v1/meteora/platform/metengine-share

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",
    "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

Response schema:

{
  "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: failed

Query 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
&#x3C; 40
New or losing traders

Smart money threshold: score >= 60. Dumb money threshold: score &#x3C; 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.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

solana-agent-kit

No summary provided by upstream source.

Repository SourceNeeds Review
General

solana-kit

No summary provided by upstream source.

Repository SourceNeeds Review
General

helius

No summary provided by upstream source.

Repository SourceNeeds Review