Developers

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.

Base: /api/v1Auth: x-api-keyVersion: v1Alerts Bot

Quick Start

  1. Issue a key below using Phantom wallet signature.
  2. Send the key in x-api-key.
  3. Filter epochs by run_id or run_name. If both are provided, run_id wins.
  4. Use limit+cursor for feeds and page+per_page for table resources.
  5. Use fields=... to return only the columns you need, and include_count=true for exact totals on table endpoints.
  6. Use bulk exact filters (*_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'

Get API Key

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.

No wallet connected
Free
For humans, dashboards, and light scripts.
Price: -
Limits: -
-
Wallet challenge only.

Subscription: none

Key: none

Pro
For bots and automation that polls frequently.
Price: -
Limits: -
-
Billing off: challenge flow only.

Subscription: none

Key: none

Platinum
For heavy automation and high-throughput ingestion.
Price: -
Limits: -
-
Billing off: challenge flow only.

Subscription: none

Key: none

Billing enforced: -

Pricing mode: -

Plan duration: -

Treasury wallet: not set

Tier Limits

Limits are enforced server-side by API key tier. Free is designed to be usable for normal workflows.

TierReq/MinReq/DayRows/DayBytes/Day
Free9010,000300,000150 MB
Pro30050,0003,000,0001.5 GB
Platinum1,200200,00020,000,0008 GB

Endpoint Reference

GET/api/v1/health

Service 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
GET/api/v1/summary

Run-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'
GET/api/v1/events

Event 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'
GET/api/v1/pools

Latest 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'
GET/api/v1/farms

Latest 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'
GET/api/v1/tokens

Latest 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'
GET/api/v1/positions

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

Envelope and Errors

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

JavaScript Example

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

Changelog

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.