Sponsored by Deepsite.site

Polyvision

Created By
mysticriverxa month ago
Analyze Polymarket prediction market wallets — get copy trading scores (1-10), P&L, win rate, risk metrics (Sharpe ratio, Sortino ratio, max drawdown), red flags, position sizing, market category performance, recent performance (7d/30d/90d), and streak analysis. Connects via MCP server or REST API. Use when evaluating whether to copy trade a Polymarket trader, comparing multiple wallets side-by-side, screening for elite prediction market performers, checking if a wallet has bot-like trading patterns or hidden losses, or researching a trader's risk profile before following their positions. Free API key, no daily limits, 6-hour result caching.
Content
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://polyvisionx.com/docs.html">
<meta property="og:title" content="Polyvision | Developer Docs">
<meta property="og:description" content="Polyvision developer documentation — REST API, MCP server, and AI agent integration for Polymarket wallet analysis.">
<meta property="og:image" content="https://polyvisionx.com/polyvision-logo.jpg">
<meta property="og:site_name" content="Polyvision">

<!-- Twitter Card -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Polyvision | Developer Docs">
<meta name="twitter:description" content="Polyvision developer documentation — REST API, MCP server, and AI agent integration for Polymarket wallet analysis.">
<meta name="twitter:image" content="https://polyvisionx.com/polyvision-logo.jpg">

<link rel="canonical" href="https://polyvisionx.com/docs.html">

<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Space+Grotesk:wght@500;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">

<link rel="preconnect" href="https://unpkg.com" crossorigin>
<script src="https://unpkg.com/lucide@0.563.0" defer></script>

<style>
    /* --- RESET & BASE VARIABLES (shared with index.html) --- */
    :root {
        --bg-dark: #050505;
        --bg-card: #111216;
        --text-main: #FFFFFF;
        --text-muted: #9CA3AF;
        --accent: #3B82F6;
        --accent-glow: rgba(59, 130, 246, 0.5);
        --success: #10B981;
        --border: #1F2937;
        --font-heading: 'Space Grotesk', sans-serif;
        --font-body: 'Inter', sans-serif;
        --font-mono: 'JetBrains Mono', monospace;
    }

    * { box-sizing: border-box; margin: 0; padding: 0; }

    body {
        background-color: var(--bg-dark);
        color: var(--text-main);
        font-family: var(--font-body);
        line-height: 1.6;
        overflow-x: hidden;
        -webkit-font-smoothing: antialiased;
    }

    h1, h2, h3, h4 {
        font-family: var(--font-heading);
        font-weight: 700;
        line-height: 1.1;
    }
    h1 { font-size: 3.5rem; letter-spacing: -0.02em; }
    h2 { font-size: 2.25rem; letter-spacing: -0.01em; margin-bottom: 1rem; }
    h3 { font-size: 1.5rem; margin-bottom: 0.5rem; }
    p { color: var(--text-muted); font-size: 1.125rem; margin-bottom: 1.5rem; }

    .gradient-text {
        background: linear-gradient(135deg, #60A5FA 0%, #3B82F6 50%, #2563EB 100%);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        background-clip: text;
    }

    /* --- LAYOUT --- */
    .container { max-width: 1200px; margin: 0 auto; padding: 0 24px; position: relative; z-index: 2; }
    .section { padding: 80px 0; position: relative; z-index: 2; }
    .section + .section { border-top: 1px solid var(--border); }
    .grid { display: grid; gap: 2rem; }
    .grid-2 { grid-template-columns: 1fr 1fr; }
    .grid-3 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
    .grid-4 { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }

    /* --- BUTTONS --- */
    .btn {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        padding: 14px 28px;
        border-radius: 8px;
        font-weight: 600;
        font-size: 1rem;
        text-decoration: none;
        transition: all 0.2s ease;
        gap: 10px;
        cursor: pointer;
        border: none;
    }
    .btn-primary {
        background-color: var(--text-main);
        color: var(--bg-dark);
        box-shadow: 0 0 20px rgba(255,255,255,0.1);
    }
    .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 0 35px rgba(59,130,246,0.4); }
    .btn-secondary {
        background-color: rgba(255,255,255,0.05);
        color: var(--text-main);
        border: 1px solid var(--border);
    }
    .btn-secondary:hover { background-color: rgba(255,255,255,0.1); border-color: #fff; }

    /* --- HEADER --- */
    header {
        padding: 20px 0;
        position: fixed;
        width: 100%;
        top: 0;
        z-index: 50;
        background: rgba(5,5,5,0.7);
        backdrop-filter: blur(12px);
        border-bottom: 1px solid rgba(255,255,255,0.05);
    }
    .nav-content { display: flex; justify-content: space-between; align-items: center; }
    .logo {
        font-family: var(--font-heading);
        font-weight: 700;
        font-size: 1.5rem;
        display: flex;
        align-items: center;
        gap: 10px;
        color: white;
    }
    .nav-link {
        color: var(--text-muted);
        text-decoration: none;
        font-size: 0.95rem;
        font-weight: 500;
        transition: color 0.2s ease;
    }
    .nav-link:hover, .nav-link.active { color: var(--text-main); }

    /* --- FOOTER --- */
    footer { border-top: 1px solid var(--border); padding: 60px 0; text-align: center; background: #08090C; }
    .disclaimer { font-size: 0.8rem; color: #4B5563; max-width: 600px; margin: 24px auto 0; line-height: 1.5; }

    /* --- DOCS HERO --- */
    .docs-hero {
        padding: 160px 0 80px;
        text-align: center;
        position: relative;
        overflow: hidden;
    }
    .docs-hero-glow {
        position: absolute;
        width: 600px;
        height: 600px;
        background: radial-gradient(circle, rgba(37,99,235,0.2) 0%, rgba(0,0,0,0) 70%);
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 0;
        filter: blur(60px);
        pointer-events: none;
    }
    .docs-hero .container { position: relative; z-index: 2; }
    .docs-hero h1 { margin-bottom: 16px; }
    .docs-hero p { max-width: 640px; margin: 0 auto 32px; }
    .hero-btns { display: flex; justify-content: center; gap: 16px; flex-wrap: wrap; }

    /* --- CODE BLOCKS --- */
    .code-block {
        background: #0D0E12;
        border: 1px solid var(--border);
        border-radius: 12px;
        padding: 20px 24px;
        overflow-x: auto;
        position: relative;
        font-family: var(--font-mono);
        font-size: 0.875rem;
        line-height: 1.7;
        color: #E2E8F0;
    }
    .code-block pre { margin: 0; white-space: pre; }
    .code-block .comment { color: #6B7280; }
    .code-block .string { color: #A5D6FF; }
    .code-block .flag { color: #D2A8FF; }

    .copy-btn {
        position: absolute;
        top: 12px;
        right: 12px;
        background: rgba(255,255,255,0.08);
        border: 1px solid var(--border);
        color: var(--text-muted);
        padding: 6px 12px;
        border-radius: 6px;
        font-size: 0.75rem;
        cursor: pointer;
        font-family: var(--font-body);
        transition: all 0.2s ease;
        display: flex;
        align-items: center;
        gap: 6px;
    }
    .copy-btn:hover { background: rgba(255,255,255,0.15); color: var(--text-main); }
    .copy-btn.copied { background: rgba(16,185,129,0.15); border-color: rgba(16,185,129,0.4); color: var(--success); }

    /* --- CARDS (shared) --- */
    .card {
        background: var(--bg-card);
        border: 1px solid var(--border);
        padding: 28px;
        border-radius: 16px;
        transition: all 0.3s ease;
    }
    .card:hover { transform: translateY(-4px); border-color: var(--accent); box-shadow: 0 10px 30px -10px rgba(0,0,0,0.5); }

    /* --- ENDPOINT CARDS --- */
    .endpoint-card {
        background: var(--bg-card);
        border: 1px solid var(--border);
        padding: 24px;
        border-radius: 12px;
        transition: all 0.3s ease;
    }
    .endpoint-card:hover { border-color: rgba(255,255,255,0.15); }
    .endpoint-card.is-new { border-color: rgba(139,92,246,0.3); }
    .endpoint-card.is-new:hover { border-color: rgba(139,92,246,0.5); }
    .endpoint-header { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
    .method-badge {
        font-family: var(--font-mono);
        font-weight: 600;
        font-size: 0.75rem;
        padding: 4px 10px;
        border-radius: 6px;
        text-transform: uppercase;
        letter-spacing: 0.05em;
    }
    .method-get { background: rgba(16,185,129,0.15); color: #10B981; }
    .method-post { background: rgba(59,130,246,0.15); color: #60A5FA; }
    .endpoint-path { font-family: var(--font-mono); font-size: 0.9rem; color: var(--text-main); }
    .endpoint-desc { color: var(--text-muted); font-size: 0.9rem; margin: 0; }
    .auth-indicator { display: flex; align-items: center; gap: 6px; font-size: 0.8rem; color: var(--text-muted); margin-top: 12px; }

    /* --- NEW BADGE --- */
    .new-badge {
        font-family: var(--font-body);
        font-weight: 600;
        font-size: 0.65rem;
        padding: 2px 8px;
        border-radius: 100px;
        text-transform: uppercase;
        letter-spacing: 0.08em;
        background: rgba(139,92,246,0.15);
        color: #A78BFA;
        border: 1px solid rgba(139,92,246,0.3);
        margin-left: auto;
        flex-shrink: 0;
    }

    /* --- TAB SWITCHER --- */
    .tabs { display: flex; gap: 0; margin-bottom: 0; }
    .tab-btn {
        padding: 10px 20px;
        background: transparent;
        border: 1px solid var(--border);
        border-bottom: none;
        color: var(--text-muted);
        font-family: var(--font-body);
        font-size: 0.875rem;
        font-weight: 500;
        cursor: pointer;
        transition: all 0.2s ease;
        border-radius: 8px 8px 0 0;
    }
    .tab-btn:first-child { border-right: none; }
    .tab-btn.active { background: #0D0E12; color: var(--text-main); border-color: var(--border); }
    .tab-content { display: none; }
    .tab-content.active { display: block; }
    .tab-content .code-block { border-radius: 0 12px 12px 12px; }

    /* --- TOOL CARDS --- */
    .tool-card {
        background: var(--bg-card);
        border: 1px solid var(--border);
        padding: 24px;
        border-radius: 12px;
    }
    .tool-card.is-new { border-color: rgba(139,92,246,0.3); }
    .tool-card .tool-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
    .tool-card h4 { font-family: var(--font-mono); font-size: 0.95rem; margin-bottom: 0; color: var(--accent); }
    .tool-card:not(:has(.tool-header)) h4 { margin-bottom: 8px; }
    .tool-card p { font-size: 0.9rem; margin: 0; }

    /* --- TIER CARDS --- */
    .tier-card {
        background: var(--bg-card);
        border: 1px solid var(--border);
        border-left: 4px solid;
        padding: 24px;
        border-radius: 4px 12px 12px 4px;
    }
    .tier-green { border-left-color: #10B981; }
    .tier-yellow { border-left-color: #F59E0B; }
    .tier-orange { border-left-color: #F97316; }
    .tier-red { border-left-color: #EF4444; }
    .tier-card .tier-score { font-family: var(--font-mono); font-size: 1.1rem; font-weight: 700; margin-bottom: 4px; }
    .tier-card .tier-name { font-family: var(--font-heading); font-size: 1.25rem; margin-bottom: 8px; }
    .tier-card .tier-desc { color: var(--text-muted); font-size: 0.9rem; margin: 0; }
    .tier-green .tier-score { color: #10B981; }
    .tier-yellow .tier-score { color: #F59E0B; }
    .tier-orange .tier-score { color: #F97316; }
    .tier-red .tier-score { color: #EF4444; }

    /* --- SECTION HEADERS --- */
    .section-header { margin-bottom: 48px; }
    .section-header p { max-width: 640px; }
    .section-tag {
        display: inline-block;
        padding: 4px 12px;
        background: rgba(59,130,246,0.1);
        border: 1px solid rgba(59,130,246,0.2);
        color: #60A5FA;
        border-radius: 100px;
        font-size: 0.8rem;
        font-weight: 500;
        margin-bottom: 16px;
        text-transform: uppercase;
        letter-spacing: 0.05em;
    }

    /* --- QUICKSTART NOTE --- */
    .note {
        display: flex;
        align-items: center;
        gap: 10px;
        background: rgba(16,185,129,0.08);
        border: 1px solid rgba(16,185,129,0.2);
        padding: 14px 20px;
        border-radius: 10px;
        font-size: 0.95rem;
        color: var(--success);
        margin-top: 24px;
    }

    /* --- EXTERNAL LINKS --- */
    .external-links {
        display: flex;
        gap: 16px;
        margin-top: 32px;
        flex-wrap: wrap;
    }
    .external-link {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        color: var(--accent);
        text-decoration: none;
        font-size: 0.95rem;
        font-weight: 500;
        padding: 10px 18px;
        background: rgba(59,130,246,0.08);
        border: 1px solid rgba(59,130,246,0.2);
        border-radius: 8px;
        transition: all 0.2s ease;
    }
    .external-link:hover { background: rgba(59,130,246,0.15); border-color: var(--accent); }

    /* --- ANIMATIONS --- */
    @keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
    .animate { animation: fadeUp 0.6s ease forwards; opacity: 0; }
    .delay-1 { animation-delay: 0.1s; }
    .delay-2 { animation-delay: 0.2s; }
    .delay-3 { animation-delay: 0.3s; }

    /* --- RESPONSIVE --- */
    @media (max-width: 768px) {
        h1 { font-size: 2.2rem; }
        h2 { font-size: 1.75rem; }
        h3 { font-size: 1.25rem; }
        p { font-size: 1rem; }

        header { padding: 14px 0; }
        .nav-content { gap: 12px; }
        header nav { gap: 16px !important; }
        .logo { font-size: 1.25rem; }
        .logo img { height: 28px !important; }
        .nav-link { font-size: 0.85rem; }

        .docs-hero { padding: 120px 0 48px; }
        .docs-hero p { font-size: 0.95rem; }
        .section { padding: 60px 0; }
        header .btn-secondary { white-space: nowrap; }
        .section-header { margin-bottom: 32px; }

        .grid { gap: 1.5rem; }
        .grid-2 { grid-template-columns: 1fr; }
        .grid-3 { grid-template-columns: 1fr; }
        .grid-4 { grid-template-columns: 1fr 1fr; }

        .hero-btns { flex-direction: column; align-items: center; }
        .hero-btns .btn { width: 100%; max-width: 320px; }

        .code-block { font-size: 0.8rem; padding: 14px; }
        .copy-btn { top: 8px; right: 8px; padding: 4px 8px; font-size: 0.7rem; }

        .card { padding: 24px; }
        .endpoint-card { padding: 20px; }
        .tool-card { padding: 20px; }
        .tier-card { padding: 20px; }

        .tab-btn { padding: 8px 14px; font-size: 0.8rem; }

        footer { padding: 40px 0; }
    }

    @media (max-width: 480px) {
        h1 { font-size: 1.85rem; }
        h2 { font-size: 1.5rem; }

        .container { padding: 0 16px; }

        header nav { gap: 12px !important; }
        header .btn-secondary { padding: 8px 14px !important; font-size: 0.8rem !important; }

        .docs-hero { padding: 100px 0 40px; }
        .section { padding: 48px 0; }

        .grid-4 { grid-template-columns: 1fr; }

        .code-block { font-size: 0.75rem; padding: 12px; }

        .endpoint-card { padding: 16px; }
        .tool-card { padding: 16px; }
        .tier-card { padding: 16px; }

        footer { padding: 32px 0; }
        .disclaimer { font-size: 0.75rem; }
    }
</style>
<!-- HEADER -->
<header>
    <div class="container nav-content">
        <a class='logo' href='/' style='text-decoration:none;color:white;'>
            <img src="polyvision-logo.jpg" alt="Polyvision" style="height:36px;border-radius:6px;">
            Polyvision
        </a>
        <nav style="display:flex;align-items:center;gap:24px;">
            <a class='nav-link active' href='/docs'>Docs</a>
            <a class='nav-link' href='/help'>Help</a>
            <a class='nav-link' href='/about'>About</a>
            <a href="https://t.me/PolyVisionBot?start=ref_7312880989" class="btn btn-secondary" style="padding:10px 20px;font-size:0.9rem;">
                Open App
            </a>
        </nav>
    </div>
</header>

<!-- HERO -->
<section class="docs-hero">
    <div class="docs-hero-glow"></div>
    <div class="container">
        <h1 class="animate">Build on <span class="gradient-text">Polyvision</span></h1>
        <p class="animate delay-1">
            Most users analyze wallets straight from our <a href="https://t.me/PolyVisionBot?start=ref_7312880989" style="color:var(--accent);text-decoration:underline;" target="_blank" rel="noopener">Telegram bot</a> — no setup needed. These docs are for developers who want to integrate Polyvision into their own tools via REST API, MCP server, or AI agent skills. Free, no daily limits, no credit card.
        </p>
        <div class="hero-btns animate delay-2">
            <a href="#quickstart" class="btn btn-primary">
                <i data-lucide="key" style="width:18px;height:18px;"></i> Get Free API Key
            </a>
            <a href="https://api.polyvisionx.com/docs" class="btn btn-secondary" target="_blank" rel="noopener">
                <i data-lucide="book-open" style="width:18px;height:18px;"></i> Interactive API Docs
            </a>
        </div>
        <a href="https://clawhub.ai/mysticriverx/polyvision" target="_blank" rel="noopener" class="animate delay-3" style="display:inline-flex;align-items:center;gap:8px;margin-top:20px;padding:6px 16px;background:rgba(59,130,246,0.08);border:1px solid rgba(59,130,246,0.2);border-radius:100px;color:#60A5FA;font-size:0.85rem;font-weight:500;text-decoration:none;transition:all 0.2s ease;" onmouseover="this.style.background='rgba(59,130,246,0.15)';this.style.borderColor='var(--accent)'" onmouseout="this.style.background='rgba(59,130,246,0.08)';this.style.borderColor='rgba(59,130,246,0.2)'">
            <i data-lucide="shield-check" style="width:14px;height:14px;"></i> Listed on ClawHub
            <i data-lucide="external-link" style="width:12px;height:12px;opacity:0.6;"></i>
        </a>
    </div>
</section>

<!-- QUICKSTART -->
<section class="section" id="quickstart">
    <div class="container">
        <div class="section-header">
            <div class="section-tag">Quickstart</div>
            <h2>Get Started in 30 Seconds</h2>
            <p>Register for a free API key, then analyze any Polymarket wallet. Two commands. That's it.</p>
        </div>

        <div class="grid grid-2">
            <div>
                <h3 style="font-size:1.1rem;margin-bottom:12px;color:var(--text-muted);font-weight:500;">1. Register for an API key</h3>
                <div class="code-block">
                    <button class="copy-btn" data-code="register">
                        <i data-lucide="copy" style="width:14px;height:14px;"></i> Copy
                    </button>
curl -X POST https://api.polyvisionx.com/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "name": "My App"}'
                </div>
            </div>
            <div>
                <h3 style="font-size:1.1rem;margin-bottom:12px;color:var(--text-muted);font-weight:500;">2. Analyze a wallet</h3>
                <div class="code-block">
                    <button class="copy-btn" data-code="analyze">
                        <i data-lucide="copy" style="width:14px;height:14px;"></i> Copy
                    </button>
curl -s https://api.polyvisionx.com/v1/analyze/0x1234...abcd \
  -H "Authorization: Bearer $POLYVISION_API_KEY" \
  | jq .
                </div>
            </div>
        </div>

        <div class="note">
            <i data-lucide="infinity" style="width:20px;height:20px;flex-shrink:0;"></i>
            No daily limits. No credit card. Free.
        </div>
    </div>
</section>

<!-- REST API -->
<section class="section" id="api">
    <div class="container">
        <div class="section-header">
            <div class="section-tag">REST API</div>
            <h2>API Endpoints</h2>
            <p>Twelve endpoints covering auth, analysis, scoring, trades, discovery, strategy, and health. All responses are JSON.</p>
        </div>

        <div class="grid grid-3">
            <!-- POST /v1/auth/register -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-post">POST</span>
                    <span class="endpoint-path">/v1/auth/register</span>
                </div>
                <p class="endpoint-desc">Register and get a free API key</p>
                <div class="auth-indicator">
                    <i data-lucide="unlock" style="width:14px;height:14px;"></i> No auth required
                </div>
            </div>

            <!-- GET /v1/auth/me -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/auth/me</span>
                </div>
                <p class="endpoint-desc">Get current user info and usage stats</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- POST /v1/auth/regenerate -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-post">POST</span>
                    <span class="endpoint-path">/v1/auth/regenerate</span>
                </div>
                <p class="endpoint-desc">Regenerate your API key (old key invalidated)</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- POST /v1/auth/deactivate -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-post">POST</span>
                    <span class="endpoint-path">/v1/auth/deactivate</span>
                </div>
                <p class="endpoint-desc">Permanently deactivate your API key</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/analyze/{wallet} -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/analyze/{wallet}</span>
                </div>
                <p class="endpoint-desc">Full wallet analysis — P&L, risk, score, red flags</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/score/{wallet} -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/score/{wallet}</span>
                </div>
                <p class="endpoint-desc">Compact copy-trading score (1-10) with red flags</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/trades/{wallet} -->
            <div class="endpoint-card is-new">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/trades/{wallet}</span>
                    <span class="new-badge">New</span>
                </div>
                <p class="endpoint-desc">Recent trade history — side, size, price, market, timestamps. Filter by since timestamp.</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/leaderboard -->
            <div class="endpoint-card is-new">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/leaderboard</span>
                    <span class="new-badge">New</span>
                </div>
                <p class="endpoint-desc">Daily top-10 traders with P&L, risk metrics, and copy score</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/discover -->
            <div class="endpoint-card is-new">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/discover</span>
                    <span class="new-badge">New</span>
                </div>
                <p class="endpoint-desc">Random elite trader from a curated pool of 250+ wallets</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/hot-bets -->
            <div class="endpoint-card is-new">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/hot-bets</span>
                    <span class="new-badge">New</span>
                </div>
                <p class="endpoint-desc">Today's profitable open positions from top traders (paginated)</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /v1/strategy -->
            <div class="endpoint-card is-new">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/v1/strategy</span>
                    <span class="new-badge">New</span>
                </div>
                <p class="endpoint-desc">Backtested copy trading strategy profiles (conservative, moderate, aggressive)</p>
                <div class="auth-indicator">
                    <i data-lucide="lock" style="width:14px;height:14px;"></i> Bearer token
                </div>
            </div>

            <!-- GET /health -->
            <div class="endpoint-card">
                <div class="endpoint-header">
                    <span class="method-badge method-get">GET</span>
                    <span class="endpoint-path">/health</span>
                </div>
                <p class="endpoint-desc">System health check</p>
                <div class="auth-indicator">
                    <i data-lucide="unlock" style="width:14px;height:14px;"></i> No auth required
                </div>
            </div>
        </div>

        <div class="external-links">
            <a href="https://api.polyvisionx.com/docs" class="external-link" target="_blank" rel="noopener">
                <i data-lucide="external-link" style="width:16px;height:16px;"></i> Swagger UI
            </a>
            <a href="https://api.polyvisionx.com/openapi.json" class="external-link" target="_blank" rel="noopener">
                <i data-lucide="file-json" style="width:16px;height:16px;"></i> OpenAPI JSON
            </a>
        </div>
    </div>
</section>

<!-- MCP SERVER -->
<section class="section" id="mcp">
    <div class="container">
        <div class="section-header">
            <div class="section-tag">MCP Server</div>
            <h2>Connect Your AI Agent</h2>
            <p>The Model Context Protocol (MCP) lets AI assistants like Claude, Cursor, and Windsurf call Polyvision tools directly. Add one config block and your agent gains wallet analysis superpowers.</p>
        </div>

        <!-- Tabbed config -->
        <div style="margin-bottom:48px;">
            <div class="tabs">
                <button class="tab-btn active" data-tab="http">Streamable HTTP</button>
                <button class="tab-btn" data-tab="stdio">stdio (local)</button>
            </div>

            <div class="tab-content active" id="tab-http">
                <div class="code-block">
                    <button class="copy-btn" data-code="mcp-http">
                        <i data-lucide="copy" style="width:14px;height:14px;"></i> Copy
                    </button>
{
  "mcpServers": {
    "polyvision": {
      "type": "streamable-http",
      "url": "https://api.polyvisionx.com/mcp",
      "headers": {
        "Authorization": "Bearer ${POLYVISION_API_KEY}"
      }
    }
  }
}
                </div>
            </div>

            <div class="tab-content" id="tab-stdio">
                <div class="code-block">
                    <button class="copy-btn" data-code="mcp-stdio">
                        <i data-lucide="copy" style="width:14px;height:14px;"></i> Copy
                    </button>
{
  "mcpServers": {
    "polyvision": {
      "command": "polyvision-mcp",
      "env": {
        "POLYVISION_API_KEY": "pv_live_...",
        "DATABASE_URL": "postgresql://..."
      }
    }
  }
}
                </div>
            </div>
        </div>

        <!-- Tool grid -->
        <h3 style="margin-bottom:24px;">Available Tools</h3>
        <div class="grid grid-3">
            <div class="tool-card">
                <h4>analyze_wallet</h4>
                <p>Run a comprehensive Polymarket wallet analysis — P&L, win rate, risk metrics, categories, copy trading score, and red flags. Quick (~5s) or full (~30-60s) mode.</p>
            </div>
            <div class="tool-card">
                <h4>get_score</h4>
                <p>Get a compact copy-trading score (1-10) with recommendation, tier, key metrics, and red flags. Shares cache with analyze_wallet.</p>
            </div>
            <div class="tool-card is-new">
                <div class="tool-header"><h4>get_recent_trades</h4><span class="new-badge">New</span></div>
                <p>Get recent trades for a Polymarket wallet. Returns trade history with side, size, price, market title, and timestamps. Optionally filter to trades after a given timestamp.</p>
            </div>
            <div class="tool-card is-new">
                <div class="tool-header"><h4>get_leaderboard</h4><span class="new-badge">New</span></div>
                <p>Get the daily top-10 traders ranked by copy score. Returns P&L, win rate, risk metrics, categories, and red flags for each trader.</p>
            </div>
            <div class="tool-card is-new">
                <div class="tool-header"><h4>discover_wallet</h4><span class="new-badge">New</span></div>
                <p>Discover a random elite trader from a curated pool of 250+ wallets. Great for exploration — analyze the returned wallet for full details.</p>
            </div>
            <div class="tool-card is-new">
                <div class="tool-header"><h4>get_hot_bets</h4><span class="new-badge">New</span></div>
                <p>Get today's most profitable open positions from top traders. Shows entry price, current price, P&L, market details, and resolution dates.</p>
            </div>
            <div class="tool-card is-new">
                <div class="tool-header"><h4>get_strategy</h4><span class="new-badge">New</span></div>
                <p>Get pre-computed copy trading strategy profiles. Returns 3 risk profiles (conservative, moderate, aggressive) with backtested parameters, expected metrics (win rate, ROI, Sharpe, drawdown), and plain-English descriptions. Updated daily.</p>
            </div>
            <div class="tool-card">
                <h4>check_quota</h4>
                <p>Check your usage statistics. Does not consume quota. API/MCP access has no daily limits.</p>
            </div>
            <div class="tool-card">
                <h4>health</h4>
                <p>Check system health. Returns "ok" or "degraded" status.</p>
            </div>
            <div class="tool-card">
                <h4>regenerate_key</h4>
                <p>Regenerate your API key. The old key is immediately invalidated. New key shown only once.</p>
            </div>
            <div class="tool-card">
                <h4>deactivate_key</h4>
                <p>Permanently deactivate your API key. Irreversible — use regenerate_key instead if you need a replacement.</p>
            </div>
        </div>

        <div class="external-links">
            <a href="https://clawhub.ai/mysticriverx/polyvision" class="external-link" target="_blank" rel="noopener">
                <i data-lucide="shield-check" style="width:16px;height:16px;"></i> View on ClawHub
            </a>
        </div>
    </div>
</section>

<!-- SCORE SYSTEM -->
<section class="section" id="scoring">
    <div class="container">
        <div class="section-header">
            <div class="section-tag">Scoring</div>
            <h2>Copy Trading Score System</h2>
            <p>Every wallet gets a score from 0 to 10 based on win rate, P&L, risk metrics, trade frequency, and more. Here's what each tier means.</p>
        </div>

        <div class="grid grid-4">
            <div class="tier-card tier-green">
                <div class="tier-score">8.0 &ndash; 10.0</div>
                <div class="tier-name">Strong Copy</div>
                <p class="tier-desc">Consistently profitable, good risk management, strong track record.</p>
            </div>
            <div class="tier-card tier-yellow">
                <div class="tier-score">6.0 &ndash; 7.9</div>
                <div class="tier-name">Moderate Copy</div>
                <p class="tier-desc">Decent performance with some concerns — proceed with caution.</p>
            </div>
            <div class="tier-card tier-orange">
                <div class="tier-score">4.0 &ndash; 5.9</div>
                <div class="tier-name">Risky Copy</div>
                <p class="tier-desc">Mixed results, significant red flags, high risk.</p>
            </div>
            <div class="tier-card tier-red">
                <div class="tier-score">0.0 &ndash; 3.9</div>
                <div class="tier-name">Don't Copy</div>
                <p class="tier-desc">Poor performance, major red flags, likely to lose money.</p>
            </div>
        </div>
    </div>
</section>

<!-- FOOTER -->
<footer>
    <div class="container">
        <div class="logo" style="justify-content:center;margin-bottom:24px;color:var(--text-muted);">
            Polyvision
        </div>
        <p class="disclaimer">
            Disclaimer: Polyvision provides data analysis tools for informational purposes only. We do not provide financial advice. Trading on prediction markets involves risk, including the loss of principal. Past performance is not indicative of future results.
        </p>
        <div style="display:flex;justify-content:center;gap:24px;margin-top:20px;">
            <a href='/privacy' style='color:#6B7280;text-decoration:none;font-size:0.85rem;'>Privacy Policy</a>
            <a href='/terms' style='color:#6B7280;text-decoration:none;font-size:0.85rem;'>Terms of Service</a>
        </div>
        <p style="font-size:0.875rem;color:#4B5563;margin-top:24px;">&copy; 2026 Polyvision. All rights reserved.</p>
    </div>
</footer>

<script>
    if ('scrollRestoration' in history) history.scrollRestoration = 'manual';
    window.scrollTo(0, 0);

    document.addEventListener('DOMContentLoaded', function() {
        lucide.createIcons();

    // --- Copy to clipboard ---
    const codeSnippets = {
        register: `curl -X POST https://api.polyvisionx.com/v1/auth/register \\

-H "Content-Type: application/json" \ -d '{"email": "you@example.com", "name": "My App"}', analyze: curl -s https://api.polyvisionx.com/v1/analyze/0x1234...abcd \ -H "Authorization: Bearer $POLYVISION_API_KEY" \ | jq ., 'mcp-http': { "mcpServers": { "polyvision": { "type": "streamable-http", "url": "https://api.polyvisionx.com/mcp", "headers": { "Authorization": "Bearer ${POLYVISION_API_KEY}" } } } }, 'mcp-stdio': { "mcpServers": { "polyvision": { "command": "polyvision-mcp", "env": { "POLYVISION_API_KEY": "pv_live_...", "DATABASE_URL": "postgresql://..." } } } }` };

    document.querySelectorAll('.copy-btn').forEach(btn => {
        btn.addEventListener('click', async () => {
            const key = btn.dataset.code;
            const text = codeSnippets[key];
            if (!text) return;

            try {
                await navigator.clipboard.writeText(text);
                const original = btn.innerHTML;
                btn.classList.add('copied');
                btn.innerHTML = '<i data-lucide="check" style="width:14px;height:14px;"></i> Copied!';
                lucide.createIcons({ nodes: [btn] });
                setTimeout(() => {
                    btn.classList.remove('copied');
                    btn.innerHTML = original;
                    lucide.createIcons({ nodes: [btn] });
                }, 2000);
            } catch {
                // Fallback for older browsers
                const ta = document.createElement('textarea');
                ta.value = text;
                ta.style.position = 'fixed';
                ta.style.opacity = '0';
                document.body.appendChild(ta);
                ta.select();
                document.execCommand('copy');
                document.body.removeChild(ta);
            }
        });
    });

    // --- Tab switching ---
    document.querySelectorAll('.tab-btn').forEach(btn => {
        btn.addEventListener('click', () => {
            document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
            document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
            btn.classList.add('active');
            document.getElementById('tab-' + btn.dataset.tab).classList.add('active');
        });
    });

    // --- Smooth scroll for anchor links ---
    document.querySelectorAll('a[href^="#"]').forEach(link => {
        link.addEventListener('click', e => {
            const target = document.querySelector(link.getAttribute('href'));
            if (target) {
                e.preventDefault();
                target.scrollIntoView({ behavior: 'smooth', block: 'start' });
            }
        });
    });
    }); // end DOMContentLoaded
</script>

Server Config

{
  "mcpServers": {
    "polyvision": {
      "type": "streamable-http",
      "url": "https://api.polyvisionx.com/mcp",
      "headers": {
        "Authorization": "Bearer ${POLYVISION_API_KEY}"
      }
    }
  }
}
Recommend Servers
TraeBuild with Free GPT-4.1 & Claude 3.7. Fully MCP-Ready.
Playwright McpPlaywright MCP server
Howtocook Mcp基于Anduin2017 / HowToCook (程序员在家做饭指南)的mcp server,帮你推荐菜谱、规划膳食,解决“今天吃什么“的世纪难题; Based on Anduin2017/HowToCook (Programmer's Guide to Cooking at Home), MCP Server helps you recommend recipes, plan meals, and solve the century old problem of "what to eat today"
CursorThe AI Code Editor
Amap Maps高德地图官方 MCP Server
AiimagemultistyleA Model Context Protocol (MCP) server for image generation and manipulation using fal.ai's Stable Diffusion model.
EdgeOne Pages MCPAn MCP service designed for deploying HTML content to EdgeOne Pages and obtaining an accessible public URL.
Tavily Mcp
Serper MCP ServerA Serper MCP Server
Jina AI MCP ToolsA Model Context Protocol (MCP) server that integrates with Jina AI Search Foundation APIs.
Zhipu Web SearchZhipu Web Search MCP Server is a search engine specifically designed for large models. It integrates four search engines, allowing users to flexibly compare and switch between them. Building upon the web crawling and ranking capabilities of traditional search engines, it enhances intent recognition capabilities, returning results more suitable for large model processing (such as webpage titles, URLs, summaries, site names, site icons, etc.). This helps AI applications achieve "dynamic knowledge acquisition" and "precise scenario adaptation" capabilities.
WindsurfThe new purpose-built IDE to harness magic
MCP AdvisorMCP Advisor & Installation - Use the right MCP server for your needs
RedisA Model Context Protocol server that provides access to Redis databases. This server enables LLMs to interact with Redis key-value stores through a set of standardized tools.
MiniMax MCPOfficial MiniMax Model Context Protocol (MCP) server that enables interaction with powerful Text to Speech, image generation and video generation APIs.
Visual Studio Code - Open Source ("Code - OSS")Visual Studio Code
DeepChatYour AI Partner on Desktop
Y GuiA web-based graphical interface for AI chat interactions with support for multiple AI models and MCP (Model Context Protocol) servers.
ChatWiseThe second fastest AI chatbot™
Baidu Map百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
BlenderBlenderMCP connects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender. This integration enables prompt assisted 3D modeling, scene creation, and manipulation.