Open beta

Alert on the dealers, not the tape

Every other alerting product fires on price, volume, or an indicator. FlashAlpha fires on options positioning: gamma regime flips, 0DTE magnets, call and put walls, dealer flow risk, VRP richness, IV spikes, VIX regime. 94 addressable trigger fields, and 84 of them are computed nowhere else.

Alerts are open to every plan while the beta runs. Free and Basic accounts arm 2 rules on a 15-minute cadence, Growth 20 rules every 5 minutes, Alpha 100 rules on every evaluator tick. Evaluation runs on US trading days between 09:30 and 16:00 ET.

Fired events one trading day · illustrative
09:52QQQ price_above_call_wall588.40
10:04SPY regime = negative_gamma-1,420,338,006
11:18NVDA atm_iv >= 5558.7
14:36SPY within 0.3% of zero_dte_magnet656.01
edge-triggered fires once, then re-arms email + signed webhook

Same word, different product

Typical chart alerting tools watch the output of the market. FlashAlpha watches the positioning that shapes it. The comparison below is about what the two things can see, not about which is better software.

  FlashAlpha alerts Typical chart alerting tools
What you can trigger on 94 options-positioning fields: dealer gamma, delta, vanna and charm exposure, gamma flip, call and put walls, max pain, the 0DTE magnet, implied and realized vol, variance risk premium, strategy scores, earnings positioning, and 10 market-wide macro fields. Price, volume, and whatever indicators the charting library exposes. All of it derived from OHLCV.
Signed webhooks Every delivery carries X-FlashAlpha-Signature, the lowercase hex HMAC-SHA256 of the raw body keyed by a per-rule secret. Rotatable by replacing the URL. Unsigned POST where a webhook exists at all, so your endpoint has no way to prove the sender.
Scan scope One rule watches up to 20 named symbols. On Alpha, one rule watches the whole live universe, currently around 250 names, and tells you which ones crossed. One chart, one symbol, one alert. Watching 40 names means creating and maintaining 40 alerts.
Noise control Edge-triggered: fires once on the false-to-true transition per symbol, then goes quiet and re-arms when the symbol stops matching. Cooldown defaults to 60 minutes, and a rule that fires 5 times in one ET day auto-pauses. Usually a choice between firing once and firing on every bar. Keeping the middle ground is your job.
Delivery Email by default, plus an optional HTTPS webhook: 4 attempts with 1s, 5s and 25s backoff, a 5-second timeout per attempt, and auto-disable after 20 consecutive failures so a dead endpoint cannot silently rot. Email, push, or an on-screen popup. Retry behaviour is rarely documented.
History A fired-event API. Every fire is recorded whether or not delivery succeeded, with the field values captured at trigger time, so a look-up later shows what the rule actually saw. A notification log, if there is one, showing that something fired but not the state that caused it.
What we do not do
No charting UI. There is no chart to draw a line on. A rule is JSON, written from the API or built from a template in your profile.
US options market hours only. 09:30 to 16:00 ET on trading days. Nothing overnight, at weekends, or on exchange holidays.
5-minute checks on Growth. 15 minutes on Free and Basic during the beta. Every evaluator tick is an Alpha capability, and cadence is a target rather than a latency guarantee.
Stock-level and macro fields only. You cannot alert on a single contract or a single expiry. Alert on the aggregate, then query the chain when it fires.
No all-clear notification. Alerts tell you when something started, not when it stopped.
Cooldown drops, it does not queue. Edges inside the cooldown window are discarded, not delivered late. On a multi-symbol rule you learn about the first mover.

What you can alert on

94 addressable fields: 84 computed per symbol, plus 10 market-wide macro fields you can use as context gates. These are the same field names the Live Screener returns, so anything you can screen for, you can watch for.

Exposure

Signed dealer gamma, delta, vanna and charm, and the regime label that follows from them.

net_gexnet_dexnet_vexnet_chexregimegamma_flip
Levels

The strikes that actually matter into the close: walls, pain, and the same-day magnet.

call_wallput_wallmax_painzero_dte_magnethighest_oi_strikezero_dte_pct_of_total
Volatility

Implied against realized, the variance premium, and where it sits in its own history.

atm_ivrv_20dvrp_20dvrp_z_scoreskew_25dterm_state
Dealer and strategy Alpha

Scored positioning: how hostile the flow is, and which structure the surface currently pays for.

dealer_flow_risknet_harvest_scoreiron_condor_scoreshort_strangle_scorevrp_regime
Earnings Alpha

The event calendar, what the chain is pricing into it, and how much of that should evaporate.

days_to_earningsearnings_implied_move_pctexpected_iv_crush_pctnext_earnings_date
Macro

Market-wide values, identical for every symbol. Best used as a gate: alert on this name, but only when the tape looks like that.

vixvix_3mvix_term_slopevvixhy_spreaddgs10

Not the full list. Price and liquidity, OI concentration, GEX bucketed by days to expiry, directional VRP, and the GARCH volatility forecast are all addressable too. Definitions, units, and the tier each field needs are in the Screener Field Taxonomy.

Ten templates, no condition to write

Pick a template, name your symbols, and set a number. The server compiles the template into a stored condition and hands the compiled JSON straight back, so you can read exactly what your rule is watching. Every one of them is something you could have written yourself with the custom DSL.

Price crosses the call wall Free

Spot trades above the strike carrying the largest positive dealer gamma. No parameters.

price_above_call_wall
Price breaks the put wall Free

Spot trades below the strike carrying the largest negative dealer gamma. No parameters.

price_below_put_wall
Gamma regime flips negative Free

Dealers cross into short gamma, where hedging amplifies moves instead of damping them.

regime_flip_negative
Gamma regime flips positive Free

The other side of the same trade: dealers turn long gamma and start pinning.

regime_flip_positive
ATM IV above a level Basic

At-the-money implied vol crosses your threshold, in percentage points. Default 40.

iv_spikethreshold
VRP rich Basic

The 20-day variance risk premium rises above your level, in percentage points. Default 2.5.

vrp_richthreshold
0DTE magnet nearby Basic

Spot comes within X percent of the same-day expiry magnet strike. Default 0.5 percent.

zero_dte_magnet_nearpct
Put/call volume extreme Growth

The put/call volume ratio pushes above your level. Default 2.0.

pc_volume_extremeratio
VIX above a level Growth

A macro regime break. Because VIX is market-wide, every symbol in scope crosses on the same tick. Default 25.

vix_abovelevel
Earnings with a big implied move Alpha

A print is close and the chain is pricing a large move for it. Defaults 3 days and 5 percent.

earnings_movedaysmove_pct

Parameters are numeric and validated: an unrecognised name is a hard error, not a silent fallback to the default. Units follow the screener, so an IV threshold of 45 means 45 percentage points, not 0.45.

Five desks, five rules

Each of these is a complete request body. Post it and the rule is armed.

1

The 0DTE trader

You trade the SPY close and what you care about is the pin. You want a nudge when price starts orbiting the same-day magnet, not a running commentary while it sits there.

The rule: tell me when SPY comes within 0.3 percent of the 0DTE magnet, and do not tell me again for half an hour.

Template · every plan
{
  "name": "SPY inside 0.3% of the 0DTE magnet",
  "templateKey": "zero_dte_magnet_near",
  "templateParams": { "pct": 0.3 },
  "scope": { "type": "symbols", "symbols": ["SPY"] },
  "cooldownMinutes": 30
}
2

The dealer-flow watcher

A regime flip on its own is noisy. What you want is the flip with hostile flow behind it, on the index complex, and confirmed by a gamma flip level the model was actually able to solve.

The rule: the regime is negative gamma, dealer flow risk is at least 55, and there is a real gamma flip level.

Custom condition · Alpha field
{
  "name": "Short gamma flip, confirmed by flow",
  "condition": {
    "op": "and",
    "conditions": [
      { "field": "regime",           "operator": "eq",  "value": "negative_gamma" },
      { "field": "dealer_flow_risk", "operator": "gte", "value": 55 },
      { "field": "gamma_flip",       "operator": "is_not_null" }
    ]
  },
  "scope": { "type": "symbols", "symbols": ["SPY", "QQQ", "IWM"] },
  "cooldownMinutes": 90
}
3

The vol seller

You sell premium only when the variance premium is paying, dealers are long gamma so the tape is damped, and the chain is tight enough that you can actually get filled.

The rule: 20-day VRP at 4 or better, positive gamma regime, and an at-the-money spread inside 1.5 percent.

Custom condition · Growth
{
  "name": "Premium-selling window",
  "condition": {
    "op": "and",
    "conditions": [
      { "field": "vrp_20d",        "operator": "gte", "value": 4 },
      { "field": "regime",         "operator": "eq",  "value": "positive_gamma" },
      { "field": "atm_spread_pct", "operator": "lte", "value": 1.5 }
    ]
  },
  "scope": { "type": "symbols",
             "symbols": ["SPY", "QQQ", "IWM", "AAPL", "MSFT", "NVDA"] },
  "cooldownMinutes": 240
}
4

The earnings trader

You are hunting fat implied moves with a big expected crush behind them, anywhere in the market, without reading a calendar every morning.

The rule: the print is inside two days, the chain is pricing 7 percent or more, and the expected crush is 30 percent or more. Scan every name.

Custom condition · universe scan · Alpha
{
  "name": "Fat implied move with a big expected crush",
  "condition": {
    "op": "and",
    "conditions": [
      { "field": "days_to_earnings",          "operator": "lte", "value": 2 },
      { "field": "earnings_implied_move_pct", "operator": "gte", "value": 7 },
      { "field": "expected_iv_crush_pct",     "operator": "gte", "value": 30 }
    ]
  },
  "scope": { "type": "universe" },
  "cooldownMinutes": 1440
}
5

The risk manager

You are not trading the alert. You want the desk paged, once, when the volatility regime breaks, straight into the system you already run.

The rule: VIX above 25, evaluated across the whole universe, delivered to a signed webhook, at most twice a session.

Template · webhook · universe scope is Alpha
{
  "name": "VIX above 25",
  "templateKey": "vix_above",
  "templateParams": { "level": 25 },
  "scope": { "type": "universe" },
  "webhookUrl": "https://hooks.example.com/fa/vix-regime",
  "cooldownMinutes": 720
}

On Growth, swap the scope for {"type":"symbols","symbols":["SPY"]} to get the same signal with one symbol named.

Built for automation, not for a dashboard

Email is the default channel and needs no setup. The webhook is the one that matters if something downstream is going to act on the fire.

Signed, every time

Each POST carries X-FlashAlpha-Signature: the lowercase hex HMAC-SHA256 of the raw request body, keyed by the secret returned when you created the rule. Verify the raw bytes before parsing, and compare in constant time.

Retries with backoff

Four attempts per delivery with 1s, 5s and 25s backoff and a 5-second timeout each. Any 2xx is success, redirects are not followed. Delivery is at-least-once, so deduplicate on ruleId plus firedAt.

Fails loudly, not silently

After 20 consecutive failed deliveries the URL is cleared and the rule says why in its status reason. The rule stays active and keeps emailing. Send the URL again to re-enable it, which also rotates the signing secret.

The payload, in full
POST https://your-endpoint.example.com/fa-alerts
X-FlashAlpha-Signature: 4c1a9f0e7b2d...  (64 hex chars)

{
  "ruleId": "8f1c4d2e-3a77-4c19-9b0e-2d6f5a11c743",
  "name": "SPY / QQQ gamma flips negative",
  "firedAt": "2026-08-06T14:32:00.0000000Z",
  "symbols": ["SPY"],
  "snapshot": {
    "SPY": {
      "price": 656.01,
      "regime": "negative_gamma"
    }
  }
}

Five keys, nothing else. symbols holds only the newly matched names, and snapshot holds the values the rule was judged on, captured at trigger time.

Verifying it, in four lines
import hmac, hashlib

raw = request.get_data()                 # raw bytes, before parsing
sig = hmac.new(SECRET.encode(), raw, hashlib.sha256).hexdigest()
if not hmac.compare_digest(sig, request.headers["X-FlashAlpha-Signature"]):
    abort(401)

Read the body as bytes first. A framework that JSON-decodes and re-encodes will change whitespace or key order and the signature will stop matching. Worked examples in Python, Node and C# are in the API reference.

Works with whatever you already run

Your own bot, your OMS, Discord, Slack, Telegram, n8n, Make or Zapier. FlashAlpha posts its own schema with a signature header, so a chat platform needs a small relay in between: receive, verify, reshape, forward. One relay can serve every rule you own. If you would rather not run one at all, leave email on and point emailTo at a channel address, which most chat platforms can issue.

DirectYour bot or OMS consumes the payload as-is
RelayDiscord, Slack, Telegram, via a verify-and-reshape hop
No codeEmail to yourself or to a channel address

Free to try, right now

Alerts are in open beta, which means every plan can arm rules today rather than waiting for an upgrade to find out whether the signal is any good.

Open beta

Every plan, 2 rules, 15-minute cadence

Free and Basic accounts can arm 2 active rules, evaluated every 15 minutes against the Tier 1 symbol set, with email delivery and any template their tier allows. Paid capabilities are not part of the giveaway: the custom condition DSL and webhooks still need Growth, formulas and universe scans still need Alpha. When the beta ends the feature moves to Growth and above, and rules below that line are suspended with an upgrade message rather than deleted.

Growth $239/mo billed annually
  • 20 active rules, evaluated every 5 minutes
  • All 10 templates, plus the custom condition DSL with and/or/not nesting
  • HMAC-signed webhooks with retries and auto-disable
  • Up to 20 symbols per rule, from the Growth universe
Alpha $1,199/mo billed annually
  • 100 active rules, due on every evaluator tick
  • Formula expressions in conditions, for example atm_iv / rv_20d
  • Universe-wide scans: one rule across the whole live store, currently around 250 names
  • Alpha-only fields: dealer_flow_risk, vrp_regime, days_to_earnings and the rest
FAQ

Alerts, honestly answered

Does it fire after hours?

No. Rules are evaluated only on US trading days between 09:30 and 16:00 ET. Nothing runs overnight, at weekends, or on exchange holidays, and there is no pre-market or post-market evaluation, so a gap that opens and closes outside regular hours is never seen. That is a deliberate limit rather than an oversight: the dealer-positioning fields alerts trigger on are computed from a live options chain, and outside those hours there is no chain to compute them from.

Will it spam me?

Three mechanisms make that hard. Alerts are edge-triggered: a rule fires once per symbol on the transition from not matching to matching, then stays silent for as long as the condition holds and re-arms only when the symbol stops matching. A cooldown, 60 minutes by default and clamped to between 5 and 1,440, drops any further edges inside the window rather than queuing them. And a rule that fires 5 times in one ET day auto-pauses with a status reason telling you to widen the threshold. There is also no restart storm: the first evaluation after a rule is created, edited or resumed records the current matching set as a silent baseline, so a condition that was already true when watching began is treated as pre-existing state, not an event.

What happens when the beta ends?

The feature moves to Growth and above. Rules owned by an account below Growth at that point are not deleted: they move to a suspended status carrying a message that names the capability the plan is missing. Upgrading and resuming the rule brings it straight back with its configuration intact. The same applies to a downgrade at any time, so nothing you build during the beta is thrown away.

Do I need a server for Discord?

For a webhook, yes, a small relay. FlashAlpha posts its own JSON schema with a signature header, and Discord, Slack and Telegram each expect their own shape, so a chat incoming-webhook URL pasted straight into the rule would be rejected by their side and counted as a failed delivery. The relay is short: receive, verify the signature, reshape, forward, and one relay can serve every rule you own. A hosted automation tool such as n8n, Make or Zapier works as the relay too. If you would rather not run anything, leave email on and point emailTo at a channel email address, which most chat platforms can issue.

Is there an API?

Yes, alerts are API-first. Rules are created, listed, replaced, paused, resumed and deleted over REST at https://lab.flashalpha.com/v1/alerts, authenticated with the same X-Api-Key header as every other FlashAlpha endpoint. One endpoint lists the 10 templates with their parameters, defaults and minimum tier; another returns the fire history for a rule with the field snapshot captured at trigger time. Evaluation and delivery run server-side and do not consume your request quota, so a rule that fires all day costs nothing beyond the calls you made to create it. Full reference in the Alerts API docs.

Arm your first alert

Start with a template on the symbols you already watch. Move up to custom conditions, signed webhooks and universe scans when the signal has earned it.

Open to every plan while the beta runs. No card needed to try it.