# QuantOracle Options Spread Scanner

> QuantOracle Options Spread Scanner is a paid API for AI agents from api.quantoracle.dev, paid per call via x402, $0.05/call, status unknown (last checked 2026-09-14).

Scans options markets to identify and evaluate spread opportunities (e.g. vertical, calendar, diagonal spreads) given underlying assets and parameters

## Facts

- Endpoint: POST https://api.quantoracle.dev/v1/options/spread-scan
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/api-quantoracle-dev-38cc4ca2
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_OxahUCn1B3-HXe_Yh-Xll

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability api-quantoracle-dev-38cc4ca2 -d '<json body>'
```

Example prompt: Scan for bull call spread opportunities on TSLA expiring in the next 30-45 days, targeting a max risk of $500 per spread and at least a 1:2 risk-to-reward ratio, and rank them by probability of profit.

## When to prefer this

Use this endpoint when you need to systematically scan and rank options spread opportunities across an expiration range, rather than pricing a single known spread. Ideal for agents helping users find new trade ideas or screen for favorable risk/reward setups without knowing exact strikes upfront.

## Known failure modes

- Invalid or unrecognized ticker symbol returns a 400 error
- Options chain data unavailable for requested expiration window
- No spreads found matching the specified criteria — returns empty result set
- Market closed or data stale — may return outdated pricing
- Invalid spread type parameter causes 422 validation error

## How this service works

QuantOracle: /v1/options/spread-scan

## Output

Returns a ranked list of spread candidates including the two option legs (strikes, expirations, bid/ask), net debit or credit, maximum profit, maximum loss, probability of profit, and risk/reward ratio for each identified spread.

## Example request

```json
{
 "vol": 0.25,
 "spot": 150,
 "dte_years": 0.0822,
 "market_data": [
  {
   "strike": 145,
   "expiry_days": 30,
   "implied_vol": 0.25
  },
  {
   "strike": 150,
   "expiry_days": 30,
   "implied_vol": 0.24
  },
  {
   "strike": 155,
   "expiry_days": 30,
   "implied_vol": 0.26
  },
  {
   "strike": 145,
   "expiry_days": 60,
   "implied_vol": 0.23
  },
  {
   "strike": 150,
   "expiry_days": 60,
   "implied_vol": 0.22
  },
  {
   "strike": 155,
   "expiry_days": 60,
   "implied_vol": 0.24
  }
 ],
 "interpolation": "linear"
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method",
    "bodyType",
    "body"
   ],
   "properties": {
    "body": {
     "type": "object",
     "title": "SpreadScanIn",
     "required": [
      "spot",
      "vol",
      "dte_years"
     ],
     "properties": {
      "q": {
       "type": "number",
       "title": "Q",
       "default": 0,
       "description": "Dividend yield"
      },
      "r": {
       "type": "number",
       "title": "R",
       "default": 0.05,
       "description": "Risk-free rate"
      },
      "vol": {
       "type": "number",
       "title": "Vol",
       "description": "Implied volatility (annualized)",
       "exclusiveMinimum": 0
      },
      "spot": {
       "type": "number",
       "title": "Spot",
       "description": "Current spot price",
       "exclusiveMinimum": 0
      },
      "strategy": {
       "enum": [
        "bull_call_spread",
        "bear_put_spread",
        "bull_put_spread",
        "bear_call_spread"
       ],
       "type": "string",
       "title": "Strategy",
       "default": "bull_call_spread"
      },
      "dte_years": {
       "type": "number",
       "title": "Dte Years",
       "description": "Days to expiration in years",
       "exclusiveMinimum": 0
      },
      "num_candidates": {
       "type": "integer",
       "title": "Num Candidates",
       "default": 8,
       "maximum": 20,
       "minimum": 2,
       "description": "Number of spread candidates to evaluate"
      },
      "strike_range_pct": {
       "type": "number",
       "title": "Strike Range Pct",
       "default": 0.1,
       "maximum": 0.5,
       "description": "Strike range as fraction of spot",
       "exclusiveMinimum": 0
      }
     }
    },
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "POST",
      "PUT",
      "PATCH"
     ],
     "type": "string"
    },
    "bodyType": {
     "enum": [
      "json",
      "form-data",
      "text"
     ],
     "type": "string"
    }
   },
   "additionalProperties": false
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/api-quantoracle-dev-38cc4ca2/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.quantoracle.dev](https://www.zero.xyz/host/api.quantoracle.dev/llms.txt)
