Anomaly Scope API v1
Wallet-first API access for pools, farms, tokens, positions, events, and run summaries. Keys are issued via signed Solana challenge. Billing can be toggled without code changes via environment config.
Wallet-first API access for pools, farms, tokens, positions, events, and run summaries. Keys are issued via signed Solana challenge. Billing can be toggled without code changes via environment config.
x-api-key.run_id or run_name. If both are provided, run_id wins.limit+cursor for feeds and page+per_page for table resources.fields=... to return only the columns you need, and include_count=true for exact totals on table endpoints.*_ids, *_addresses) and *_since timestamps for bot-style incremental sync.curl -s \ -H 'x-api-key: YOUR_KEY' \ 'https://your-domain.com/api/v1/pools?run_name=WEEK_2026_07&fields=pool_id,pair_label,tvl_usd,momentum_score&include_count=true&page=1&per_page=50'
Connect Phantom, then issue or renew a tier key. All tiers use the same API endpoints and data. Higher tiers increase throughput limits.
Raw API keys are shown only once at issuance/rotation. Existing keys can be validated by prefix/last4 but cannot be re-displayed from server hashes.
Subscription: none
Key: none
Subscription: none
Key: none
Subscription: none
Key: none
Billing enforced: -
Pricing mode: -
Plan duration: -
Treasury wallet: not set
Limits are enforced server-side by API key tier. Free is designed to be usable for normal workflows.
| Tier | Req/Min | Req/Day | Rows/Day | Bytes/Day |
|---|---|---|---|---|
| Free | 90 | 10,000 | 300,000 | 150 MB |
| Pro | 300 | 50,000 | 3,000,000 | 1.5 GB |
| Platinum | 1,200 | 200,000 | 20,000,000 | 8 GB |
/api/v1/healthService health, current tier, and quota ceilings resolved from your API key.
Params: none
curl -s -H 'x-api-key: YOUR_KEY' https://your-domain.com/api/v1/health
/api/v1/summaryRun-level summary from vw_dashboard_summary.
Params: run_id, run_name
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/summary?run_name=WEEK_2026_07'
/api/v1/eventsEvent feed from vw_event_feed with cursor pagination.
Params: run_id, run_name, limit, cursor, since, entity_type/entity_types, entity_ids, event_types, severity_min, severity_max, include_details, fields
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/events?run_id=UUID&limit=50&entity_types=farm,pool&event_types=launch,tvl_crash&fields=id,event_type,severity,event_at,entity_id'
/api/v1/poolsLatest pools from vw_pool_latest (table pagination + allowlisted sorting).
Params: run_id, run_name, page, per_page, sort, order, include_count, fields, pool_ids/pool_addresses, pair_labels, event_types, collected_since, search, min_tvl, max_tvl
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/pools?run_name=WEEK_2026_07&include_count=true&fields=pool_id,pair_label,tvl_usd,momentum_score,rugcheck_score&sort=momentum_score&order=desc'
/api/v1/farmsLatest farms from vw_farm_latest with APR/risk/search filters.
Params: run_id, run_name, page, per_page, sort, order, include_count, fields, farm_ids/farm_addresses, pool_addresses, reward_symbols, collected_since, dex_platform, meteora_product_type, min_apr, max_apr
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/farms?run_id=UUID&fields=farm_id,farm_label,approx_total_apr,tvl_usd,rugcheck_score&min_apr=100&max_farm_age_hours=48'
/api/v1/tokensLatest tokens from vw_token_latest. run_id/run_name are ignored in v1.
Params: page, per_page, sort, order, include_count, fields, token_ids/addresses/symbols, last_seen_since, asset_class, min_mcap, rug_only, mint_authority_enabled, freeze_authority_enabled
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/tokens?addresses=So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&fields=token_id,address,symbol,market_cap_usd,rugcheck_score'
/api/v1/positionsLatest positions from vw_position_latest with protocol/concentration filters.
Params: run_id, run_name, page, per_page, sort, order, include_count, fields, position_ids/position_mints, pool_addresses, collected_since, protocol, min_tvl, min_top5, max_top5, max_risk
curl -s -H 'x-api-key: YOUR_KEY' 'https://your-domain.com/api/v1/positions?run_name=WEEK_2026_07&fields=position_id,position_mint,pair_label,underlying_tvl_usd,risk_score&protocol=raydium'
{
"data": {},
"meta": {
"request_id": "uuid",
"run_id": "uuid-or-null",
"run_name": "string-or-null",
"generated_at": "iso8601",
"pagination": {}
},
"error": null
}Error codes: 400 invalid params, 401 missing/invalid key, 403 disabled/expired key,429 quota exceeded, 500 internal error.
const res = await fetch(
"https://your-domain.com/api/v1/pools?run_name=WEEK_2026_07&page=1&per_page=50",
{ headers: { "x-api-key": process.env.PULSE_API_KEY! } }
);
const payload = await res.json();
if (payload.error) throw new Error(payload.error.message);
console.log(payload.data, payload.meta);v1: 7 read endpoints, run filters (run_id/run_name), quota metering, wallet-sign key issuance, and billing toggle support.
Latest update: bulk ID filters, field-level projection, incremental *_since filters, and exact totals via include_count=true on table endpoints.
Planned: usage dashboard and dataset export endpoints.