Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developer.alterscope.org/llms.txt

Use this file to discover all available pages before exploring further.

You want a public dashboard or internal review tool that ranks vault curators by realized risk-adjusted return, not by self-reported APY.

What you build

A small scheduled job that hits the curator endpoints, joins them by address, and writes the result to your database.

1. List curator addresses you care about

A curator profile is keyed by the manager address. You can either supply a list (your watchlist) or page over GET /v2/curators if your tier permits.

2. Pull each profile + track record

from alterscope import AlterscopeClient

client = AlterscopeClient(api_key="sk_live_...")
addresses = ["0xabc...", "0xdef...", "0x123..."]

rows = []
for addr in addresses:
    profile = client.curators.get(addr)
    track = client.curators.track_record(addr)
    rows.append({
        "address": addr,
        "name": profile.display_name,
        "tenure_days": profile.tenure_days,
        "tvl_managed_usd": profile.tvl_managed_usd,
        "realized_sharpe_1y": track.realized_sharpe_1y,
        "max_drawdown_1y_bps": track.max_drawdown_1y_bps,
    })

rows.sort(key=lambda r: r["realized_sharpe_1y"], reverse=True)
for r in rows:
    print(r)

3. Refresh policy

Curator data updates on cap changes, fee changes, and at most once per hour for performance metrics. Polling every 15 minutes is wasteful; an hourly job is enough. For change-driven updates, subscribe to curator.cap.changed and curator.fee.changed via webhooks.

4. Troubleshooting

  • Sparse track record: a curator with tenure_days < 90 has too little data for a meaningful Sharpe. Hide them or annotate “insufficient history”.
  • Address mismatch: addresses are case-insensitive but checksum-formatted in the API response. Compare with addr.lower().