← LeaderboardThe Skill Leaderboard

metengine

Skill file vendored/sendaifun/metengine/SKILL.md in internet-court/internet-court-skill. Read the publisher’s upstream source.

Description awaits a fresh source check.

Published by internet-court ↗internet-court/internet-court-skill

Try your first task

metengine-data-agent

Start a fresh conversation.

Use metengine-data-agent to retrieve the MetEngine API’s current full pricing schedule and summarize the available route tiers, multipliers, discounts, and special rules.

    User-approved starter prompt based on a pinned source version; check current skill requirements before running. Task evidence ↗

    SKILL.md

    name: metengine-data-agentversion: "1.0.0"description: "Real-time smart money analytics API for Polymarket prediction markets, Hyperliquid perpetual futures, and Meteora Solana LP/AMM pools. 63 endpoints. Pay-per-request via x402 on Solana Mainnet USDC. No API keys."base_url: "https://agent.metengine.xyz"payment_protocol: "x402"payment_network: "solana-mainnet"payment_currency: "USDC"auth: "none (payment IS auth)"free_endpoints:   - "GET /health"  - "GET /api/v1/pricing"health_check: "https://agent.metengine.xyz/health"pricing_endpoint: "https://agent.metengine.xyz/api/v1/pricing"total_endpoints: 63platforms:   - name: "Polymarket"    url: "https://polymarket.com"    endpoints: 27    domain: "prediction markets"  - name: "Hyperliquid"    url: "https://hyperliquid.xyz"    endpoints: 18    domain: "perpetual futures"  - name: "Meteora"    url: "https://meteora.ag"    endpoints: 18    domain: "Solana LP/AMM"

    MetEngine Data Agent API

    Real-time smart money analytics across Polymarket, Hyperliquid, and Meteora. 63 endpoints covering wallet scoring, insider detection, capital flow tracking, and position analysis. Pay per request with USDC on Solana -- no API keys, no accounts, no onboarding friction.


    Display Rules

    • NEVER truncate or trim wallet/contract addresses. Always show full addresses (e.g. 0x61276aba49117fd9299707d5d573652949d5c977, not 0x6127...c977).
    • This applies to all Polymarket (0x hex), Hyperliquid (0x hex), Meteora (base58), condition_ids, token_ids, pool addresses, position addresses, and transaction hashes.

    Skill Auto-Update

    This skill file may change as new endpoints are added or pricing updates. Keep it fresh by downloading the latest version weekly.

    Download the latest skill file:

    curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md
    

    Automate weekly updates (cron):

    # Add to crontab: crontab -e
    0 0 * * 0 curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md 2>/dev/null
    

    Check skill version before querying (optional):

    # Compare local vs remote version
    LOCAL_VER=$(grep '^version:' ~/.claude/agents/metengine-data-agent.md | head -1 | tr -d '"' | awk '{print $2}')
    REMOTE_VER=$(curl -sL https://www.metengine.xyz/skill.md | grep '^version:' | head -1 | tr -d '"' | awk '{print $2}')
    [ "$LOCAL_VER" != "$REMOTE_VER" ] && curl -sL https://www.metengine.xyz/skill.md -o ~/.claude/agents/metengine-data-agent.md
    

    Agents SHOULD check for updates at the start of a new session if more than 7 days have passed since the last update.


    Session Memory (CRITICAL -- Read This First)

    Before making ANY API call, check for a memory file at:

    ~/.claude/agents/metengine-memory.md
    

    This file persists across sessions and stores everything needed to skip setup and make faster queries. If the memory file exists, read it first. It will tell you:

    1. Wallet configuration -- path to the Solana keypair, public address, whether SOL/USDC balances were verified
    2. Package status -- whether @x402/core, @x402/svm, @solana/kit are already installed and where
    3. Client bootstrap -- a working code snippet from the last successful query (copy-paste ready)
    4. Endpoint learnings -- which endpoints worked, which timed out, which fallbacks were used
    5. Pricing cache -- last-fetched pricing schedule (avoids re-reading the full pricing section)

    Memory File Format

    Create or update ~/.claude/agents/metengine-memory.md using this template:

    # MetEngine Session Memory
    <!-- Auto-maintained by agents. Do not delete. -->
    
    ## Last Updated
    YYYY-MM-DD HH:MM UTC
    
    ## Skill Version
    <version from frontmatter>
    
    ## Wallet
    - keypair_path: ~/.config/solana/id.json
    - public_address: <base58 pubkey -- NEVER store the private key>
    - sol_balance_ok: true/false
    - usdc_balance_ok: true/false
    - last_balance_check: YYYY-MM-DD
    
    ## Packages
    - installed: true/false
    - install_dir: <path where bun add was run>
    - packages: @x402/core, @x402/svm, @solana/kit
    - bun_version: <version>
    
    ## Client Bootstrap
    <!-- Paste the minimal working paidFetch setup here after first successful call -->
    ```typescript
    // <paste the one-time setup + paidFetch function that worked>
    

    Endpoint History

    DateEndpointStatusLatencyUSDC CostNotes

    Fallbacks Learned

    EndpointIssueFallback 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:
    
    
    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.
    
    ### 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&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 ------>| | |<-- 402 + PaymentRequired -----| | | | | | [sign payment locally] | | | | | |-- GET + PAYMENT-SIGNATURE --->| | | |-- verify ------------------>| | |<-- valid -------------------| | | | | | [execute query] | | | | | |-- settle ------------------>| | |<-- tx hash -----------------| |<-- 200 + data + PAYMENT- -----| | | RESPONSE (settlement) | |

    
    ### Important: Settle-After-Execute
    
    If the query fails (timeout, server error), no payment is settled. The agent keeps their funds. This is enforced server-side. Only successful `2xx` responses trigger settlement.
    
    ### Headers
    
    | Header | Direction | Description |
    |--------|-----------|-------------|
    | `PAYMENT-REQUIRED` | Response (402) | Encoded payment requirements |
    | `X-PAYMENT-REQUIRED` | Response (402) | Duplicate of above for compatibility |
    | `PAYMENT-SIGNATURE` | Request | Signed payment payload |
    | `X-PAYMENT` | Request | Alternate payment header name |
    | `PAYMENT-RESPONSE` | Response (200) | Settlement proof with tx hash |
    | `X-PAYMENT-RESPONSE` | Response (200) | Duplicate of above for compatibility |
    
    ### Client Implementation (TypeScript/Bun)
    
    ```typescript
    import { x402Client, x402HTTPClient } from "@x402/core/client";
    import { registerExactSvmScheme } from "@x402/svm/exact/client";
    import { toClientSvmSigner } from "@x402/svm";
    import { getBase58Encoder, createKeyPairSignerFromBytes } from "@solana/kit";
    import type { PaymentRequired, SettleResponse } from "@x402/core/types";
    
    // --- One-time setup ---
    const bytes = getBase58Encoder().encode(process.env.SOLANA_PRIVATE_KEY!);
    const signer = await createKeyPairSignerFromBytes(bytes);
    const client = new x402Client();
    registerExactSvmScheme(client, { signer: toClientSvmSigner(signer) });
    const httpClient = new x402HTTPClient(client);
    
    // --- Reusable paid fetch ---
    const BASE_URL = "https://agent.metengine.xyz";
    
    async function paidFetch(
      path: string,
      options?: { method?: string; body?: Record<string, unknown> },
    ): Promise<{ data: unknown; settlement: SettleResponse; price: number }> {
      const method = options?.method ?? "GET";
      const url = `${BASE_URL}${path}`;
      const fetchOpts: RequestInit = { method };
      if (options?.body) {
        fetchOpts.headers = { "Content-Type": "application/json" };
        fetchOpts.body = JSON.stringify(options.body);
      }
    
      // Step 1: Get 402 with price
      const initial = await fetch(url, fetchOpts);
      if (initial.status !== 402) throw new Error(`Expected 402, got ${initial.status}`);
      const body = await initial.json();
    
      // Step 2: Parse payment requirements
      const paymentRequired: PaymentRequired = httpClient.getPaymentRequiredResponse(
        (name) => initial.headers.get(name), body,
      );
      const price = Number(paymentRequired.accepts[0]!.amount);
    
      // Step 3: Sign payment
      const paymentPayload = await httpClient.createPaymentPayload(paymentRequired);
      const paymentHeaders = httpClient.encodePaymentSignatureHeader(paymentPayload);
    
      // Step 4: Re-send with payment
      const paid = await fetch(url, {
        ...fetchOpts,
        headers: { ...fetchOpts.headers as Record<string, string>, ...paymentHeaders },
      });
      if (paid.status !== 200) {
        const err = await paid.json();
        throw new Error(`Payment failed (${paid.status}): ${JSON.stringify(err)}`);
      }
      const paidBody = (await paid.json()) as { data: unknown };
    
      // Step 5: Extract settlement proof
      const settlement = httpClient.getPaymentSettleResponse(
        (name) => paid.headers.get(name),
      );
    
      return { data: paidBody.data, settlement, price };
    }
    

    Usage Examples

    // GET endpoint
    const { data, price } = await paidFetch("/api/v1/markets/trending?timeframe=24h&limit=5");
    console.log(`Paid $${price} USDC. Got ${(data as any[]).length} markets.`);
    
    // POST endpoint
    const { data: intel } = await paidFetch("/api/v1/markets/intelligence", {
      method: "POST",
      body: { condition_id: "0xabc123...", top_n_wallets: 10 },
    });
    

    NPM Dependencies

    bun add @x402/core @x402/svm @solana/kit
    

    Pricing

    All prices are in USDC on Solana Mainnet. Pricing is dynamic based on endpoint tier, timeframe, limit, and filter usage.

    Tier Base Costs

    TierBase Cost (USDC)Description
    light$0.01Simple lookups, searches, feeds
    medium$0.02Aggregated analytics, trending data
    heavy$0.05Computed intelligence, leaderboards, scoring
    whale$0.08Multi-entity comparisons, complex scans

    Price Modifiers

    Timeframe multiplier (applied to base cost):

    TimeframeMultiplier
    1h0.5x
    4h0.7x
    12h0.9x
    24h / today1.0x
    7d2.0x
    30d3.0x
    90d4.0x
    365d / all5.0x

    Limit multiplier: price *= max(1, requested_limit / default_limit)

    Filter discounts (reduce scan cost):

    FilterDiscountApplicable Endpoints
    category0.7xtrending, top-performers, whales, capital-flow, high-conviction, opportunities
    condition_id0.5xwhales, sentiment, participants, wallet activity
    smart_money_only=true0.7xwhales, capital-flow, volume-heatmap (Polymarket + HL)
    coin/coins0.7xHL whales, long-short-ratio, pressure/pairs
    pool_type (not "all")0.7xAll Meteora endpoints with pool_type param
    pool_address0.5xpool 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)

    #MethodPathTierDescription
    1GET/api/v1/markets/trendingmediumTrending markets with volume spikes
    2GET/api/v1/markets/searchlightSearch markets by keyword, category, status, or Polymarket URL
    3GET/api/v1/markets/categorieslightAll categories with activity stats
    4GET/api/v1/platform/statslightPlatform-wide aggregate stats
    5POST/api/v1/markets/intelligenceheavyFull smart money intelligence report for a market
    6GET/api/v1/markets/price-historylightOHLCV price/probability time series
    7POST/api/v1/markets/sentimentmediumSentiment time series with smart money overlay
    8POST/api/v1/markets/participantsmediumParticipant summary by scoring tier
    9POST/api/v1/markets/insidersheavyInsider pattern detection (7-signal behavioral scoring)
    10GET/api/v1/markets/tradeslightChronological trade feed for a market
    11GET/api/v1/markets/similarwhaleRelated markets by wallet overlap
    12GET/api/v1/markets/opportunitieswhaleMarkets where smart money disagrees with price
    13GET/api/v1/markets/high-convictionheavyHigh-conviction smart money bets
    14GET/api/v1/markets/capital-flowmediumCapital flow by category (sector rotation)
    15GET/api/v1/trades/whalesmediumLarge whale trades
    16GET/api/v1/markets/volume-heatmapmediumVolume distribution across categories/hours/days
    17POST/api/v1/wallets/profileheavyFull wallet dossier with score, positions, trades
    18POST/api/v1/wallets/activitymediumRecent trading activity for a wallet
    19POST/api/v1/wallets/pnl-breakdownmediumPer-market PnL breakdown
    20POST/api/v1/wallets/comparewhaleCompare 2-5 wallets side-by-side
    21POST/api/v1/wallets/copy-traderswhaleDetect wallets copying a target wallet
    22GET/api/v1/wallets/top-performersheavyLeaderboard by PnL, ROI, Sharpe, win rate, volume
    23GET/api/v1/wallets/niche-expertsheavyTop wallets in a specific category
    24GET/api/v1/markets/resolutionslightResolved markets with smart money accuracy
    25GET/api/v1/wallets/alpha-callersheavyWallets that trade early on later-trending markets
    26GET/api/v1/markets/dumb-moneymediumLow-score trader positions (contrarian indicator)
    27GET/api/v1/wallets/insidersheavyGlobal insider candidates by behavioral score

    Hyperliquid (18 endpoints)

    #MethodPathTierDescription
    28GET/api/v1/hl/platform/statslightPlatform aggregate stats
    29GET/api/v1/hl/coins/trendingmediumTrending coins by activity
    30GET/api/v1/hl/coins/listlightAll traded coins with 7d stats
    31GET/api/v1/hl/coins/volume-heatmapmediumVolume by coin and hour
    32GET/api/v1/hl/traders/leaderboardheavyRanked trader leaderboard
    33POST/api/v1/hl/traders/profileheavyFull trader dossier
    34POST/api/v1/hl/traders/comparewhaleCompare 2-5 traders
    35GET/api/v1/hl/traders/daily-pnlmediumDaily PnL time series with streaks
    36POST/api/v1/hl/traders/pnl-by-coinmediumPer-coin PnL breakdown (closed PnL only)
    37GET/api/v1/hl/traders/fresh-whalesheavyNew high-volume wallets
    38GET/api/v1/hl/trades/whalesmediumLarge trades
    39GET/api/v1/hl/trades/feedlightChronological trade feed for a coin
    40GET/api/v1/hl/trades/long-short-ratiomediumLong/short volume ratio time series
    41GET/api/v1/hl/smart-wallets/listlightSmart wallet list with scores
    42GET/api/v1/hl/smart-wallets/activitymediumSmart wallet recent trades
    43GET/api/v1/hl/smart-wallets/signalsheavyAggregated directional signals by coin
    44GET/api/v1/hl/pressure/pairsheavyLong/short pressure with smart positions
    45GET/api/v1/hl/pressure/summarymediumPressure summary across all coins

    Meteora (18 endpoints)

    #MethodPathTierDescription
    46GET/api/v1/meteora/pools/trendingmediumTrending pools by volume spike
    47GET/api/v1/meteora/pools/topmediumTop pools by volume, fees, or LP count
    48GET/api/v1/meteora/pools/searchlightSearch pools by address or token name
    49GET/api/v1/meteora/pools/detailmediumFull pool detail
    50GET/api/v1/meteora/pools/volume-historylightVolume time series
    51GET/api/v1/meteora/pools/eventslightChronological event feed
    52GET/api/v1/meteora/pools/fee-analysismediumFee claiming analysis
    53GET/api/v1/meteora/lps/topheavyTop LPs leaderboard
    54POST/api/v1/meteora/lps/profileheavyFull LP dossier
    55GET/api/v1/meteora/lps/whalesmediumLarge LP events
    56POST/api/v1/meteora/lps/comparewhaleCompare 2-5 LPs
    57GET/api/v1/meteora/positions/activemediumActive LP positions
    58GET/api/v1/meteora/positions/historylightPosition event history (DLMM only)
    59GET/api/v1/meteora/platform/statslightPlatform-wide stats
    60GET/api/v1/meteora/platform/volume-heatmapmediumVolume by action/hour
    61GET/api/v1/meteora/platform/metengine-sharelightMetEngine routing share
    62GET/api/v1/meteora/dca/pressuremediumDCA accumulation pressure by token
    63GET/api/v1/meteora/pools/smart-walletheavyPools with highest smart wallet LP activity

    Complete Endpoint Reference

    Response Envelope

    All 200 responses use the format: { "data": <payload> }

    All error responses use: { "error": "<message>" } with optional "reason" field.


    POLYMARKET

    1. GET /api/v1/markets/trending

    Trending markets with volume spikes.

    Parameters (query string):

    ParamTypeDefaultValuesRequired
    timeframestring24h1h, 4h, 12h, 24h, 7dno
    categorystring-any valid categoryno
    sort_bystringvolume_spikevolume_spike, trade_count, smart_money_inflowno
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    querystring-keyword or Polymarket URLno
    categorystring-any valid categoryno
    statusstringactiveactive, closing_soon, resolvedno
    has_smart_money_signalboolean-true, falseno
    sort_bystringrelevanceend_date, volume, relevanceno
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    include_statsbooleantruetrue, falseno
    timeframestring24h24h, 7dno

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

    ParamTypeDefaultValuesRequired
    timeframestring24h24h, 7d, 30dno

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

    FieldTypeDefaultValuesRequired
    condition_idstring--yes
    top_n_walletsinteger101-50no

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

    6. GET /api/v1/markets/price-history

    OHLCV price/probability time series.

    Parameters (query string):

    ParamTypeDefaultValuesRequired
    condition_idstring--yes
    timeframestring7d1h, 4h, 12h, 24h, 7d, 30dno
    bucket_sizestring1h5m, 15m, 1h, 4h, 12h, 1dno

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

    7. POST /api/v1/markets/sentiment

    Sentiment time series with smart money overlay.

    Request body (JSON):

    FieldTypeDefaultValuesRequired
    condition_idstring--yes
    timeframestring7d24h, 7d, 30dno
    bucket_sizestring4h1h, 4h, 12h, 1dno

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

    FieldTypeDefaultValuesRequired
    condition_idstring--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):

    FieldTypeDefaultValuesRequired
    condition_idstring--yes
    limitinteger251-100no
    min_scoreinteger200-100no

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

    ParamTypeDefaultValuesRequired
    condition_idstring--yes
    timeframestring24h1h, 4h, 12h, 24h, 7d, 30dno
    sidestring-BUY, SELLno
    min_usdcnumber0>= 0no
    smart_money_onlybooleanfalsetrue, falseno
    limitinteger1001-500no

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

    ParamTypeDefaultValuesRequired
    condition_idstring--yes
    limitinteger101-50no

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

    ParamTypeDefaultValuesRequired
    min_signal_strengthstringmoderateweak, moderate, strongno
    categorystring-any valid categoryno
    closing_within_hoursinteger-max 720no
    min_smart_walletsinteger3>= 1no
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    categorystring-any valid categoryno
    min_smart_walletsinteger5>= 1no
    min_avg_scoreinteger650-100no
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    timeframestring7d24h, 7d, 30dno
    smart_money_onlybooleanfalsetrue, falseno
    top_n_categoriesinteger201-50no

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

    ParamTypeDefaultValuesRequired
    min_usdcnumber10000>= 1no
    timeframestring24h1h, 4h, 12h, 24h, 7d, 30dno
    condition_idstring--no
    categorystring-any valid categoryno
    sidestring-BUY, SELLno
    smart_money_onlybooleanfalsetrue, falseno
    limitinteger501-200no

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

    ParamTypeDefaultValuesRequired
    timeframestring24h24h, 7d, 30dno
    group_bystringcategorycategory, hour_of_day, day_of_weekno
    smart_money_onlybooleanfalsetrue, falseno

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

    FieldTypeDefaultValuesRequired
    walletstring-lowercase addressyes
    include_positionsbooleantruetrue, falseno
    include_tradesbooleantruetrue, falseno
    trades_limitinteger501-500no

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

    FieldTypeDefaultValuesRequired
    walletstring-lowercase addressyes
    timeframestring24h1h, 4h, 24h, 7d, 30dno
    categorystring-any valid categoryno
    min_usdcnumber0>= 0no
    limitinteger1001-500no

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

    FieldTypeDefaultValuesRequired
    walletstring-lowercase addressyes
    timeframestring90d7d, 30d, 90d, allno
    limitinteger501-200no

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

    FieldTypeDefaultValuesRequired
    walletsstring[]-2-5 lowercase addressesyes
    include_shared_positionsbooleantruetrue, falseno

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

    FieldTypeDefaultValuesRequired
    walletstring-lowercase addressyes
    max_lag_minutesinteger601-1440no
    timeframestring7d24h, 7d, 30dno
    min_overlap_tradesinteger3>= 1no
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    timeframestring7dtoday, 24h, 7d, 30d, 90d, 365dno
    categorystring-any valid categoryno
    metricstringpnlpnl, roi, sharpe, win_rate, volumeno
    min_tradesinteger5>= 1no
    limitinteger251-100no

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

    ParamTypeDefaultValuesRequired
    categorystring-any valid categoryyes
    min_category_tradesinteger10>= 1no
    sort_bystringcategory_sharpecategory_sharpe, category_pnl, category_volumeno
    limitinteger251-100no

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

    ParamTypeDefaultValuesRequired
    categorystring-any valid categoryno
    querystring-keywordno
    sort_bystringresolved_recentlyresolved_recently, volume, smart_money_accuracyno
    limitinteger251-100no

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

    ParamTypeDefaultValuesRequired
    days_backinteger301-90no
    min_days_earlyinteger71-60no
    min_bet_usdcnumber100>= 0no
    limitinteger251-100no

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

    ParamTypeDefaultValuesRequired
    condition_idstring--yes
    max_scoreinteger300-100no
    min_tradesinteger5>= 1no
    limitinteger501-200no

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

    ParamTypeDefaultValuesRequired
    limitinteger501-200no
    min_scoreinteger500-100no
    max_wallet_age_daysinteger601-90no

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

    ParamTypeDefaultValuesRequired
    timeframestring24h1h, 4h, 12h, 24h, 7dno
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    limitinteger1001-500no

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

    ParamTypeDefaultValuesRequired
    timeframestring24h24h, 7dno
    limitinteger201-50no

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

    ParamTypeDefaultValuesRequired
    timeframestringall1d, 7d, 30d, allno
    sort_bystringpnlpnl, roi, win_rate, volumeno
    sort_orderstringdescdesc, ascno
    min_tradesinteger10>= 1no
    limitinteger251-100no

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

    FieldTypeDefaultValuesRequired
    traderstring-0x addressyes
    daysinteger301-365no
    trades_limitinteger501-500no

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

    FieldTypeDefaultValuesRequired
    tradersstring[]-2-5 0x addressesyes

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

    ParamTypeDefaultValuesRequired
    traderstring-0x addressyes
    daysinteger301-365no

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

    FieldTypeDefaultValuesRequired
    traderstring-0x addressyes
    daysinteger901-365no

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

    ParamTypeDefaultValuesRequired
    max_wallet_age_daysinteger141-90no
    min_volumenumber100000>= 0no
    min_pnlnumber0anyno
    limitinteger251-100no

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

    ParamTypeDefaultValuesRequired
    min_usdnumber50000>= 1no
    timeframestring24h1h, 4h, 12h, 24h, 7dno
    coinstring-uppercase symbol (e.g. BTC)no
    sidestring-Open Long, Open Short, Close Long, Close Shortno
    directionstring-Long, Shortno
    smart_money_onlybooleanfalsetrue, falseno
    limitinteger501-200no

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

    ParamTypeDefaultValuesRequired
    coinstring-uppercase symbolyes
    limitinteger1001-500no

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

    ParamTypeDefaultValuesRequired
    coinstring-uppercase symbolyes
    timeframestring7d24h, 7d, 30dno
    bucket_sizestring4h1h, 4h, 12h, 1dno

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

    ParamTypeDefaultValuesRequired
    sort_bystringscorescore, pnl, volumeno
    limitinteger501-200no

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

    ParamTypeDefaultValuesRequired
    timeframestring24h1h, 4h, 12h, 24h, 7dno
    min_scoreinteger600-100no
    limitinteger1001-500no

    Response schema:

    {
      "data": {
        "period_summary": "object",
        "trades": "array"
      }
    }
    

    43. GET /api/v1/hl/smart-wallets/signals

    Aggregated directional signals by coin.

    Parameters (query string):

    ParamTypeDefaultValuesRequired
    timeframestring24h6h, 12h, 24h, 7dno
    min_scoreinteger600-100no
    limitinteger201-50no

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

    ParamTypeDefaultValuesRequired
    coinsstring-comma-separated (defaults to top 10)no
    trades_limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    timeframestring24h24h, 7dno
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    sort_bystringvolumevolume, lp_count, events, feesno
    timeframestring7d24h, 7d, 30dno
    limitinteger201-100no

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

    ParamTypeDefaultValuesRequired
    querystring-pool address or token nameyes
    pool_typestringalldlmm, damm_v2, allno
    limitinteger101-50no

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

    ParamTypeDefaultValuesRequired
    pool_addressstring-Solana pubkeyyes
    pool_typestring-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):

    ParamTypeDefaultValuesRequired
    pool_addressstring-Solana pubkeyyes
    pool_typestring-dlmm, damm_v2 (auto-detected if omitted)no
    timeframestring7d24h, 7d, 30dno
    bucket_sizestring4h1h, 4h, 1dno

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

    ParamTypeDefaultValuesRequired
    pool_addressstring-Solana pubkeyyes
    pool_typestring-dlmm, damm_v2 (auto-detected if omitted)no
    limitinteger1001-500no

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

    ParamTypeDefaultValuesRequired
    pool_addressstring-Solana pubkeyyes
    pool_typestring-dlmm, damm_v2 (auto-detected if omitted)no
    timeframestring7d24h, 7d, 30dno

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    sort_bystringvolumevolume, pool_count, eventsno
    timeframestring30d7d, 30dno
    limitinteger251-100no

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

    FieldTypeDefaultValuesRequired
    ownerstring-Solana pubkeyyes
    pool_typestringalldlmm, damm_v2, allno
    events_limitinteger501-500no

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    min_usdnumber10000>= 1no
    timeframestring24h24h, 7d, 30dno
    limitinteger501-200no

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

    FieldTypeDefaultValuesRequired
    ownersstring[]-2-5 Solana pubkeysyes
    pool_typestringalldlmm, damm_v2, allno

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

    ParamTypeDefaultValuesRequired
    pool_addressstring-Solana pubkeyno
    ownerstring-Solana pubkeyno
    pool_typestringalldlmm, damm_v2, allno
    limitinteger501-200no

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

    ParamTypeDefaultValuesRequired
    position_addressstring--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):

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    timeframestring24h24h, 7dno

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    timeframestring7d24h, 7d, 30dno

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

    ParamTypeDefaultValuesRequired
    tokenstring-specific mint addressno
    timeframestring1h1m, 5m, 30m, 1h, 6h, 24hno

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

    ParamTypeDefaultValuesRequired
    pool_typestringalldlmm, damm_v2, allno
    limitinteger201-100no
    timeframestring7d24h, 7d, 30dno

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

    StepSelf-ComputationMetEngine API
    Find marketScrape Polymarket frontendGET /markets/search ($0.01)
    Get smart money consensusIndex all trades, score wallets, aggregatePOST /markets/intelligence ($0.05)
    Get price historyParse on-chain events, build OHLCVGET /markets/price-history ($0.01)
    Find insider patternsBuild 7-signal detection pipelinePOST /markets/insiders ($0.05)
    TotalHours of compute + infra$0.12, ~10 seconds

    Performance

    MetricValue
    p50 latency800ms
    p95 latency3s
    p99 latency8s
    Handler timeout60s (no payment charged on timeout)
    Max concurrent paid requests50
    Payment verification timeout5s
    Rate limit (unpaid 402 requests)IP-based, generous

    Data Freshness

    PlatformFreshness
    Polymarket tradesSub-minute (continuous indexing)
    Polymarket wallet scoresDaily recompute
    Hyperliquid tradesSub-minute
    Hyperliquid smart scoresContinuous (formula-based)
    Meteora eventsSub-minute
    Meteora LP scoresDaily recompute

    Error Handling

    HTTP Status Codes

    CodeMeaningAgent Action
    200Success. Data in { "data": ... }. Settlement proof in PAYMENT-RESPONSE header.Process data
    400Bad request (invalid params, malformed payment header)Fix request params
    402Payment required (first request) or payment verification failedSign and re-send with payment, or check payment validity
    404Endpoint not foundVerify endpoint path against this document
    429Rate limit exceededBack off and retry
    500Internal server errorRetry once, then try fallback endpoint
    502Payment verification failed (facilitator error)Retry
    503Server at capacity or payment service unavailableCheck Retry-After header, retry after delay
    504Query 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

    HeaderMeaning
    X-Payment-Settlement: failedQuery succeeded but settlement failed. Data returned, no charge. Rare edge case.
    No PAYMENT-RESPONSE header on 200Settlement was not attempted (should not happen in normal flow).

    Fallback Strategies

    When an endpoint fails, use these alternatives:

    Failed EndpointFallback
    /markets/opportunities (504)/markets/high-conviction
    /wallets/top-performers (503 on 7d)Try timeframe=24h
    /markets/insiders (timeout)/markets/trades with market filter
    /hl/coins/trending (empty on 24h)Use timeframe=7d
    /hl/smart-wallets/signals (empty on 24h)Use timeframe=7d
    /hl/trades/long-short-ratio (all zeros)Reconstruct from /hl/trades/whales by side
    /hl/traders/profile (500)/hl/traders/leaderboard + /hl/traders/pnl-by-coin
    /meteora/lps/top?sort_by=fees (500)Use sort_by=volume
    /meteora/lps/profile (500)/meteora/pools/fee-analysis for claimer data

    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:

    1. No trade execution. Read-only analytics. Cannot place orders on any platform.
    2. No real-time streaming. Request/response only. No WebSocket feeds.
    3. No historical backfill on demand. Data starts from when MetEngine began indexing each platform.
    4. No unrealized PnL for Hyperliquid. Only closed (realized) PnL is available.
    5. No mark-to-market for Meteora positions. Net value is deposits minus withdrawals, not current market value.
    6. No Polymarket order book data. Trades only, not open orders or liquidity depth.
    7. No custom scoring models. Wallet scores use MetEngine's proprietary models. Cannot be customized per agent.
    8. 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.
    9. No token price feeds. This is not a price oracle. Market prices on Polymarket are implied probabilities (0-1).
    10. 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

    PlatformFormatCase Sensitivity
    Polymarket0x hex (Polygon)Must be lowercase
    Hyperliquid0x hexCase-insensitive
    MeteoraBase58 (Solana pubkey)Case-sensitive

    Scoring Systems

    Polymarket Wallet Scores (0-100)

    TierScoreMeaning
    Elite>= 80Top-tier historically profitable
    Smart60-79Consistently profitable, signal-worthy
    Average40-59Mixed track record
    Novice< 40New or losing traders

    Smart money threshold: score >= 60. Dumb money threshold: score < 30.

    Hyperliquid Smart Scores (0-100)

    score = min(log2(trade_count + 1) * 4, 40)             // Activity (max 40)
          + (winning_trades / max(closing_trades, 1)) * 40  // Win rate (max 40)
          + min(if(pnl > 0, log10(pnl + 1) * 4, 0), 20)    // Profitability (max 20)
    

    Smart threshold: score >= 85.

    Meteora LP Smart Scores (0-100)

    win_ratio (0-35 pts) + volume (0-25 pts, log10-scaled) + avg_pnl% (0-30 pts) + experience (0-10 pts)
    

    Minimum 3 closed positions required.

    metengine by internet-court · The Skill Leaderboard