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.

The API exposes the same monitoring model used across the product. If you want the conceptual framing behind the signals, read what yield forensics means.

Base: /api/v1Auth: x-api-keyVersion: v1MethodologyAlerts 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.

New to the vocabulary? The shortest conceptual entry point is the yield-forensics methodology page.

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.