Yield Enhancement Strategy API - Best Covered Call / Cash-Secured Put - FlashAlpha Lab API
Lab API Yield Enhancement

Yield Enhancement Strategy API

Income overlay selection: finds the best covered call or cash-secured put on the chain at a target delta, with annualized yield, assignment probability, breakeven, roll candidate, and an earnings filter.

Endpoint

GET /v1/strategies/yield-enhancement/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Growth plan+

Parameters

Name In Required Default Description
symbolpathyes - Underlying symbol.
expiryquerynonearest upcoming expiryyyyy-MM-dd. Restricts selection to a single expiry.
targetDeltaqueryno0.25Target delta for the short option.
minOpenInterestqueryno250Minimum OI a candidate must have.
structurequerynocovered_callcovered_call or cash_secured_put.
excludeEarningsBeforeExpiryquerynotrueWhen true, penalises/flags picks whose expiry spans an earnings event.
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/strategies/yield-enhancement/SPY?structure=cash_secured_put&targetDelta=0.20"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/strategies/yield-enhancement/SPY",
    params={"structure": "cash_secured_put", "targetDelta": 0.20},
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"{data['decision']} ({data['regime']}) score={data['score']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/strategies/yield-enhancement/SPY?structure=cash_secured_put&targetDelta=0.20",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`${data.decision} (${data.regime}) score=${data.score}`);

Response

Returns the standard strategy decision envelope. Every Strategy Signals endpoint returns this same shape; only metrics and regime change per strategy.

{
  "strategy": "yield_enhancement",
  "symbol": "SPY",
  "timestamp": "2026-06-05T14:32:11Z",
  "decision": "candidate",
  "score": 72,
  "confidence": 0.83,
  "regime": "cash_secured_put_income",
  "best_structures": [
    {
      "rank": 1,
      "structure": "cash_secured_put",
      "expiry": "2026-06-19",
      "legs": [
        { "action": "sell", "type": "put", "strike": 580, "delta": -0.20, "premium": 3.10, "quantity": 1 }
      ],
      "credit": 3.10,
      "debit": null,
      "max_profit": 3.10,
      "max_loss": 576.90,
      "breakevens": [576.90],
      "edge_score": 72,
      "liquidity_score": 0.91
    }
  ],
  "metrics": {
    "structure": "cash_secured_put",
    "strike": 580,
    "delta": -0.20,
    "premium": 3.10,
    "annualized_yield_pct": 14.2,
    "assignment_probability": 0.20,
    "underlying_price": 589.12
  },
  "risk_flags": [],
  "why": ["20-delta cash-secured put yields 14.2% annualized with 20% assignment risk."],
  "avoid_if": ["You are unwilling to be assigned at the strike."],
  "data_quality": { "score": 92, "warnings": [] }
}

Strategy-specific fields

Notable metrics keys (in addition to the always-present underlying_price):

Metric
structure
strike
delta
premium
annualized_yield_pct
assignment_probability
upside_surrender_pct
dte
earnings_before_expiry
ex_dividend_risk
breakeven_price
iv_rank_30d
roll_candidate
next_earnings_date
days_to_next_earnings
underlying_price

regime values: covered_call_income, cash_secured_put_income, no_yield_candidate.

Errors

Status error When
400invalid_structurestructure is not covered_call or cash_secured_put.
400invalid_expiryexpiry is present but not yyyy-MM-dd.
403tier_restrictedCaller is below the Growth plan.
404symbol_not_foundNo market data for the symbol.

About

This strategy scores income overlays on the chain. Given a target delta and structure (covered call or cash-secured put), it picks the best candidate and reports annualized yield, assignment probability, breakeven, and a roll candidate, while filtering or flagging picks whose expiry spans an earnings event.

It returns the standard strategy decision envelope shared by all Strategy Signals endpoints, so the score, decision, and best_structures shape match every other strategy. The yield-specific detail lives in metrics, and risk flags such as EARNINGS_BEFORE_EXPIRY and EX_DIVIDEND_RISK_NOT_MODELED appear in risk_flags where applicable.

Common Use Cases

  • Drop in the proposed overlay - pull best_structures[] for a covered-call or cash-secured-put at a fixed target delta
  • Trade only clean signals - act when decision is candidate and skip no_setup reads where the yield is thin
  • Rank income across a watchlist - sort by score to surface the richest overlays for the risk taken
  • Screen out event risk - drop picks where risk_flags[] flags an earnings event inside the tenor
  • Size on conviction - scale the overlay by score and confidence rather than a fixed contract count
  • Respect the guardrails - require a clean data_quality and read regime before writing premium, and surface a roll candidate as expiry approaches

Related reading

Complementary endpoints

Ready to build?

Get your free API key and start pulling live options data in 30 seconds.