Type-safe, async-native, webhook-aware. Stop curl-piping JSON into jq. The same alpha you read on the scanner — embeddable into any Python or Node app, with a CLI bundled, in under 60 seconds.
Each example shows Python and Node side-by-side. Copy any block and run.
from catalyst_edge import Client c = Client(api_key="ce_live_...") picks = c.dcf.top(grade="A") print(picks[:5]) # [DcfPick(ticker='META', upside=104.2, grade='A', wacc=0.09), ...]
import { Client } from '@catalyst-edge/sdk'; const c = new Client({ apiKey: 'ce_live_...' }); const picks = await c.dcf.top({ grade: 'A' }); console.log(picks.slice(0, 5)); // [{ ticker: 'META', upside: 104.2, grade: 'A', wacc: 0.09 }, ...]
from catalyst_edge import Client c = Client(api_key="ce_live_...") tape = c.tape.list(country="ALL", kind="earnings", limit=50) for evt in tape: print(f"{evt.ts} {evt.flag} {evt.ticker:6} {evt.headline}")
import { Client } from '@catalyst-edge/sdk'; const c = new Client({ apiKey: 'ce_live_...' }); const tape = await c.tape.list({ country: 'ALL', kind: 'earnings', limit: 50 }); for (const evt of tape) { console.log(`${evt.ts} ${evt.flag} ${evt.ticker} ${evt.headline}`); }
from catalyst_edge import Client c = Client(api_key="ce_live_...") setups = c.crossborder.strong() for s in setups: print(f"{s.adr} ↔ {s.home} | gap={s.gap_pct:+.2f}% | score={s.score}") # BABA ↔ 9988.HK | gap=+2.40% | score=4
import { Client } from '@catalyst-edge/sdk'; const c = new Client({ apiKey: 'ce_live_...' }); const setups = await c.crossborder.strong(); for (const s of setups) { console.log(`${s.adr} ↔ ${s.home} | gap=${s.gapPct.toFixed(2)}% | score=${s.score}`); }
import asyncio from catalyst_edge import AsyncClient async def main(): c = AsyncClient(api_key="ce_live_...") async for a in c.alerts.live(severity="urgent"): print(f"[{a.severity}] {a.ticker} → {a.message}") asyncio.run(main())
import { Client } from '@catalyst-edge/sdk'; const c = new Client({ apiKey: 'ce_live_...' }); for await (const a of c.alerts.live({ severity: 'urgent' })) { console.log(`[${a.severity}] ${a.ticker} → ${a.message}`); }
Six things every modern API client should ship — and most don't.
Exponential backoff on 429/5xx. Respects Retry-After. Configurable max attempts. You don't write retry loops anymore.
TypeScript types and Pydantic models generated from the OpenAPI spec. Autocomplete in your IDE for every field, every endpoint.
Express + FastAPI middleware verifies HMAC signatures and decodes events. Drop into your handler, ship.
npx @catalyst-edge/cli scan --grade A prints results. Pipe to jq, awk, or your shell. No SDK code required.
Both SDKs ship sync and async clients. Stream live alerts via async iterator. No callback pyramids.
Every endpoint has unit + integration tests. We dogfood the SDK on the production scanner. CI runs against the real API.
Public commitments. We ship daily — see changelog.
One email when v0.1 lands. No drip campaign, no upsell sequence. Drop your address — we'll send a single message with install instructions and your starter API key.
You are one page deep in a scanner that grades its own picks in public, wins and losses alike.
Tier 1 setups touched +2% intraday 49.5% of the time across 329 tracked calls. Baseline for everything else: 40.8%. That is a +8.7 point edge, measured from the NEXT OPEN — the first price you could actually pay, not the prior close. We publish the misses too: https://catalystedgescanner.com/trust/
29 of 30 founding seats left. The price goes up when they are gone.
Become a Founding Member — $99 onceOne payment. Lifetime access. The free daily picks stay free — this is for people who want the full console. Not buying today? Get tomorrow's ranked list free →