Developers · REST reference

Developer API

REST JSON over HTTPS. Reads the same live artifacts as the Discord scanner. Traders using Cursor / Claude / VS Code want Confluence Pro MCP ($99/mo) — not this REST doc.

Base URL: https://api.0dteconfluence.com

Auth: every /v1/* route requires an API key.

X-API-Key: cfl_your_key_here

Or:

Authorization: Bearer cfl_your_key_here

Rate limit: 120 requests/minute per key (configurable on the server).

Endpoints

GET /health

No auth. Service + market status.

GET /v1/levels/spy · GET /v1/rails/spy · …/qqq · …/spx

Gamma Rails — live 0DTE dealer map from the Tradier chain. Symbols: SPY always; QQQ when CONFLUENCE_QQQ=1 (default on); SPX when CONFLUENCE_SPX=1 (on in production) and gex_tradier.py --symbol SPX has written artifacts. API symbol is SPX (Tradier root) — not SPXW. Tape stays SPY-only.

{
  "product": "Gamma Rails",
  "symbol": "SPY",
  "underlying_price": 621.45,
  "regime": "negative_gamma",
  "gamma_flip": 622.0,
  "call_wall": 625.0,
  "put_wall": 618.0,
  "max_pain": 620.0,
  "magnet": 620.0,
  "net_gex": -1.2e9,
  "net_dex": -450000000
}

GET /v1/gex/spy/profile

Gamma Rails / Desk Bundle / Pro / Developer. Self-computed per-strike GEX/DEX/IV histogram (Tradier chain + ORATS greeks) — the Decision Desk GEX map. Strikes banded ±2.5% of spot.

{
  "product": "Gamma Rails",
  "symbol": "SPY",
  "underlying_price": 621.45,
  "regime": "neg_gamma",
  "gamma_flip": 622.0,
  "call_wall": 625.0,
  "put_wall": 618.0,
  "net_gex": -12.4,
  "net_dex": -450.2,
  "band_pct": 0.025,
  "strike_count": 32,
  "strikes": [
    { "strike": 615, "net_gex": -1.2e8, "net_dex": -2.1e7, "call_iv": 0.18, "put_iv": 0.22 }
  ]
}

GET /v1/dex/spy/profile

Self-computed per-strike dealer delta (DEX) from ORATS delta × OI. Labeled as a dealer-delta proxy — not SqueezeMetrics DPI.

GET /v1/vex/spy/profile · GET /v1/chex/spy/profile

Self-computed vanna (VEX) and charm (CHEX) profiles via Black–Scholes from chain IV (Tradier does not publish vanna/charm). Method bs_vanna_charm_v1.

GET /v1/pin/spy

Local pin probability (heuristic_v1) — OI concentration + proximity to magnet/max-pain + time-of-day lock-in.

{
  "pin": 0.62,
  "state": "locking",
  "magnet": 620.0,
  "breakdown": { "oi_top3_pct": 0.41, "proximity": 0.88, "time_mult": 0.9 }
}

GET /v1/exposure/spy/sheet

One-shot sheet: walls/flip + net GEX/DEX/VEX/CHEX + pin + top GEX peaks. FA-style category, your math.

GET /v1/skew/spy

Same chain source — call vs put mid-IV strip near spot (skew proxy). Used by the Decision Desk IV panel.

{
  "symbol": "SPY",
  "underlying_price": 621.45,
  "atm": { "strike": 621, "call_iv": 0.17, "put_iv": 0.19, "skew_25d_proxy": 0.02 },
  "points": [{ "strike": 618, "call_iv": 0.18, "put_iv": 0.21, "skew_25d_proxy": 0.03 }]
}

GET /v1/tape/spy

Confluence Tape — live classified options flow (5-minute slope + session cumulative). Plain-English field guide: How to read Confluence Tape.

{
  "product": "Confluence Tape",
  "tape_product": "Confluence Tape",
  "confluence_tape": -1250000,
  "tape_5m": -340000,
  "quadrant": "bearish (call- / put+)",
  "ofi": -0.18,
  "ofi_5m": -0.31,
  "stale": false,
  "updated_at": "2026-07-13 10:15:02 ET"
}

We do not expose third-party proprietary flow names in the public API.

GET /v1/stream/desk?symbol=SPY&key=…

SSE push (Phase 2). Server-Sent Events for desk clients. Emits hello, rails, tape (SPY), alert (SPY), and ping every ~5s when fingerprints change. EventSource cannot set headers — pass the API key as ?key= (stream routes only). Connection auto-closes after ~30 minutes; reconnect from the client.

const es = new EventSource(
  "https://api.0dteconfluence.com/v1/stream/desk?symbol=SPY&key=cfl_…"
);
es.addEventListener("rails", (e) => console.log(JSON.parse(e.data)));

GET /v1/replay/today?limit=40&min_score=6

Alert replay (Phase 2). Chronological graded candidates from scan_candidates.jsonl — self-serve timeline, not a rented backtest. When scan_bars.json is present, rows include forward underlying MFE/MAE (30-min horizon) for context. Bundle / Pro / Developer.

{
  "kind": "alert_replay",
  "symbol": "SPY",
  "count": 3,
  "excursion_source": "scan_bars.json",
  "events": [
    {
      "ts": "…",
      "grade": "A+",
      "score": 7,
      "direction": "PUT",
      "setup": "fade at call_wall",
      "spot": 621.2,
      "mfe_pts": 1.45,
      "mae_pts": -0.62
    }
  ],
  "disclaimer": "Self-serve replay … not a third-party backtest."
}

JavaScript SDK

Zero-build browser helper: sdk/confluence-client.js (ESM). Same routes as the Python MCP client — pass your key, call fetch-wrapped methods.

import { ConfluenceClient } from "./sdk/confluence-client.js";

const api = new ConfluenceClient("cfl_your_key_here");
const health = await api.health();
const rails = await api.getRails("SPY");
const pin = await api.getPin("SPY");
const replay = await api.getReplayToday(40, 6);

// SSE (key in query — EventSource cannot set headers)
const es = new EventSource(api.streamDeskUrl("SPY"));
es.addEventListener("rails", (e) => console.log(JSON.parse(e.data)));

POST /v1/webhooks/rails · DELETE /v1/webhooks/rails

Gamma Rails ($19), Desk Bundle ($79), or Developer ($99) keys. Register your HTTPS endpoint to receive push JSON (no polling).

curl -s -X POST https://api.0dteconfluence.com/v1/webhooks/rails \
  -H "X-API-Key: cfl_your_rails_key" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your-server.com/rails","secret":"optional_hmac","events":["morning","refresh"]}'

Outbound events

EventWhenHeader
morning~9:00 ET after morning desk refreshX-Confluence-Event: morning
refreshWall/flip/magnet changes, or every 15m in RTHX-Confluence-Event: refresh

Body matches GET /v1/rails/spy plus "event" and "ts". If you set secret, verify X-Confluence-Signature: sha256=<hmac> (HMAC-SHA256 of raw JSON body).

Remove: DELETE /v1/webhooks/rails with the same API key.

POST /v1/webhooks/alerts · DELETE /v1/webhooks/alerts

Developer only. Push graded A+/B JSON when the scanner posts. Polling /v1/alerts/* always works on Developer.

curl -s -X POST https://api.0dteconfluence.com/v1/webhooks/alerts \
  -H "X-API-Key: cfl_…" -H "Content-Type: application/json" \
  -d '{"url":"https://your.app/hooks/alerts"}'

GET /v1/enrich/spy?direction=PUT&strike=625&setup=fade_call_wall

Positioning context at a rail — DEX lean, pin score, OI build, GEX shift since open.

ParamRequiredValues
directionyesCALL or PUT
strikeyesWall strike (e.g. 625)
setupnoSetup tag from grader
level_namenoe.g. call_wall

GET /v1/alerts/latest

Last graded A+/B candidate from the live scanner (same payload shape as Discord, minus embed formatting). Developer + Pro.

GET /v1/alerts/history?limit=20&min_score=6

Session alert log — A+/B only, newest first.

ParamDefaultNotes
limit20Max 100
min_score6Confluence score floor (0–8)
{
  "count": 2,
  "min_score": 6,
  "alerts": [ { "grade": "A+", "direction": "PUT", "score": 7, "spot": 621.2 } ]
}

GET /v1/market/clock

Session state — open/half-day, force-flat, lane ends, event-day flag. Developer + Pro.

{
  "status": "open",
  "date": "2026-07-18",
  "force_flat": "15:45",
  "last_entry": "15:15",
  "lane1_aplus_end": "11:10",
  "lane2_auto_end": "14:00",
  "event_day": false,
  "half_day": false
}

GET /v1/morning/desk

Today’s morning-desk card (same content as Discord #morning-desk) after the ~9:00 ET refresh. Returns morning_desk_unavailable if nothing posted yet. Developer + Pro.

{
  "date": "2026-07-18",
  "posted_at": "2026-07-18T09:00:12-04:00",
  "card": "…markdown card…",
  "one_line": "neg-gamma · fade 625 / support 618 · …",
  "rails": { "gamma_flip": 622, "call_wall": 625, "put_wall": 618 },
  "iv_rank": 34,
  "regime": "negative_gamma"
}

Key tiers (Stripe products)

These are not the same as Discord alert membership ($49). See developers.html.

Stripe productPriceAPI key tierAccess
Gamma Rails$19/morails/v1/rails/spy, GEX/DEX/VEX/CHEX/pin/exposure + skew + morning/refresh webhooks
Confluence Tape$29/motape/v1/tape/spy only (+ Discord #tape — not via REST)
Desk Bundle$79/mobundleRails + GEX profile + skew + tape + clock + morning. Powers the Decision Desk
Robinhood Pro MCP$99/moproAlerts + rails + GEX/skew + tape + enrich + clock + morning — MCP + Decision Desk
Developer API$99/modeveloperAll /v1/* including enrich, alerts history, market clock, morning desk

Buying Developer ($99) includes rails + tape + enrich — you do not need the $19 and $29 plans.

Robinhood Pro ($99) is a different product at the same price: MCP + Discord + desk with live Alert strip for traders — not a substitute for the Developer REST key. Same backend tier pro; see home.

Your API key is issued at checkout (shown once on the success page). Auth with X-API-Key or Authorization: Bearer.

Subscribe

Get an API key on the Developers page. Checkout maps to the Developer API plan ($99/mo).

0DTE Confluence — Data, levels, confluence, edge.