5-Minute Quickstart

From zero to your first OptionsPlay API call

~ 5 minutes

This guide walks you through three API calls that tell a complete story: What stocks should I be looking at? Why is this one interesting? How do I trade it?

No OAuth Required

OptionsPlay uses a simple API key model. No token exchange, no refresh logic, no expiration handling. Just add one header to every request.

Step 1: Get Your API Key

You need a single credential: an OptionsPlay Subscription Key.

Request your key

Contact your OptionsPlay account representative or email support@optionsplay.com to receive your API subscription key.

Set your header

Every API call uses the same authentication pattern — a single HTTP header:

Op-Subscription-Key: YOUR_API_KEY
Base URL

All API requests go to https://apis.optionsplay.com

Step 2: Get Trade Ideas (the "What")

The /api/v1/platform/what/tradeideas endpoint is the starting point. Every night, OptionsPlay scans the market and curates a list of trade ideas based on technical signals, sentiment, and liquidity. No symbol needed — just ask "what should I be looking at?"

Make the request

curl -X GET "https://apis.optionsplay.com/api/v1/platform/what/tradeideas" \
  -H "Op-Subscription-Key: YOUR_API_KEY"
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://apis.optionsplay.com"

response = requests.get(
    f"{BASE_URL}/api/v1/platform/what/tradeideas",
    headers={"Op-Subscription-Key": API_KEY}
)

data = response.json()
for idea in data["tradeIdeas"][:5]:
    print(f"{idea['symbol']} ({idea['companyName']}) — "
          f"{idea['sentiment']} | "
          f"Tech Rank: {idea['technicalRank']} | "
          f"${idea['price']:.2f}")
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://apis.optionsplay.com';

const response = await fetch(
  `${BASE_URL}/api/v1/platform/what/tradeideas`,
  { headers: { 'Op-Subscription-Key': API_KEY } }
);

const data = await response.json();
data.tradeIdeas.slice(0, 5).forEach(idea => {
  console.log(`${idea.symbol} (${idea.companyName}) — ` +
    `${idea.sentiment} | Tech Rank: ${idea.technicalRank} | ` +
    `$${idea.price.toFixed(2)}`);
});
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Op-Subscription-Key", "YOUR_API_KEY");

var response = await client.GetAsync(
    "https://apis.optionsplay.com/api/v1/platform/what/tradeideas");
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

What you get back

200 OK Response (showing one trade idea)
{
  "tradeIdeas": [
    {
      "symbol": "AAPL",
      "companyName": "Apple Inc.",
      "dateOfScan": "2026-02-08T00:00:00Z",
      "sentiment": "Bullish",
      "price": 228.34,
      "technicalRank": 8,
      "impliedVolatilityRank": 45.2,
      "liquidityRank": 1,
      "liquidityExplanation": "Very Liquid",
      "sector": "Electronic Technology",
      "exchange": "XNAS",
      "region": "US",
      "marketCap": 3520000000000,
      "rules": [
        {
          "ruleMatch": "Bounce Off Support",
          "sentiment": "Bullish",
          "period": 30,
          "reason": "Price bounced off a key support level",
          "sentence": "AAPL is trading in a Bullish trend and is currently bouncing off support."
        }
      ]
    }
  ]
}

Key fields to look at:

  • tradeIdeas — Array of curated ideas from the overnight market scan
  • sentiment — Bullish or Bearish — the directional view
  • rules — The technical signals that triggered this idea, with plain-English explanations
  • technicalRank — Score from 1-10 summarizing the technical picture
  • liquidityRank — How easily you can trade options on this name (1 = Very Liquid, 2 = Somewhat Liquid, 3 = Not Liquid)
  • marketCap / sector — Useful for filtering or categorizing in your UI
No Parameters Needed

This endpoint requires no parameters — just your API key. It returns the latest batch of trade ideas generated by the overnight scan. Pick a symbol from the results and pass it to the Why and How endpoints below.

Step 3: Get Technical Analysis (the "Why")

You've got a symbol from the trade ideas. Now dig deeper. The /api/v1/platform/why/{symbol} endpoint returns the full technical picture: sentiment, support/resistance levels, trend data, and key quote information.

Make the request

curl -X GET "https://apis.optionsplay.com/api/v1/platform/why/AAPL" \
  -H "Op-Subscription-Key: YOUR_API_KEY"
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://apis.optionsplay.com"

response = requests.get(
    f"{BASE_URL}/api/v1/platform/why/AAPL",
    headers={"Op-Subscription-Key": API_KEY}
)

data = response.json()
print(f"Sentiment: {data['sentiment']}")
print(f"Technical Rank: {data['technicalRank']}")
print(f"Last Price: ${data['expandedQuote']['last']}")
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://apis.optionsplay.com';

const response = await fetch(
  `${BASE_URL}/api/v1/platform/why/AAPL`,
  { headers: { 'Op-Subscription-Key': API_KEY } }
);

const data = await response.json();
console.log(`Sentiment: ${data.sentiment}`);
console.log(`Technical Rank: ${data.technicalRank}`);
console.log(`Last Price: $${data.expandedQuote.last}`);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Op-Subscription-Key", "YOUR_API_KEY");

var response = await client.GetAsync(
    "https://apis.optionsplay.com/api/v1/platform/why/AAPL");
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

What you get back

200 OK Response (trimmed for clarity)
{
  "sentiment": "Bullish",
  "technicalRank": 8,
  "impliedVolatilityRank": 45.2,
  "liquidityRank": 1,
  "liquidityExplanation": "Very Liquid",
  "sentence": "AAPL is trading in a Bullish trend and is currently near support.",
  "supportAndResistance": {
    "support": [
      { "value": 217.50, "date": "2026-01-15T00:00:00Z" }
    ],
    "resistance": [
      { "value": 237.80, "date": "2026-01-28T00:00:00Z" }
    ]
  },
  "oneMonthTrend": {
    "value": 1,
    "sentimentInterpretation": "Bullish"
  },
  "sixMonthTrend": {
    "value": 1,
    "sentimentInterpretation": "Bullish"
  },
  "expandedQuote": {
    "last": 228.34,
    "change": 2.15,
    "percentageChange": 0.95,
    "volume": 48320150,
    "week52Low": 169.21,
    "week52High": 243.85,
    "eps": 6.75,
    "peRatio": 33.83,
    "companyName": "Apple Inc.",
    "sector": "Electronic Technology",
    "exchange": "XNAS"
  },
  "earningsDate": "2026-04-24T00:00:00Z",
  "earningsTime": "After Market",
  "messageType": "SUCCESS"
}

Key fields to look at:

  • sentiment — Overall technical outlook (Bullish, Bearish, or Neutral)
  • technicalRank — Score from 1-10 summarizing the technical picture
  • supportAndResistance — Price levels where the stock tends to bounce or stall
  • sentence — A plain-English summary you can display to end users
  • expandedQuote — Current price, volume, 52-week range, P/E, and fundamentals

Step 4: Get Income Strategies (the "How")

You know what to look at and why it's interesting. Now: how do you trade it? The /api/v1/platform/how/income/{symbol} endpoint returns covered call and short put recommendations with returns, probability of profit, and risk analysis.

Make the request

# Get optimal income strategies for AAPL
# Optional params: stockQuantity, costBasis, legtype, timeframe, riskprofile
curl -X GET "https://apis.optionsplay.com/api/v1/platform/how/income/AAPL?legtype=call&timeframe=medium&riskprofile=optimal" \
  -H "Op-Subscription-Key: YOUR_API_KEY"
response = requests.get(
    f"{BASE_URL}/api/v1/platform/how/income/AAPL",
    headers={"Op-Subscription-Key": API_KEY},
    params={
        "legtype": "call",
        "timeframe": "medium",
        "riskprofile": "optimal"
    }
)

data = response.json()
for option in data.get("callOptimals", []):
    print(f"Strike: ${option['strike']} | "
          f"Return: {option['return']:.1%} | "
          f"Probability: {option['probability']:.0%} | "
          f"Expiry: {option['expiry']}")
const params = new URLSearchParams({
  legtype: 'call',
  timeframe: 'medium',
  riskprofile: 'optimal'
});

const response = await fetch(
  `${BASE_URL}/api/v1/platform/how/income/AAPL?${params}`,
  { headers: { 'Op-Subscription-Key': API_KEY } }
);

const data = await response.json();
data.callOptimals?.forEach(option => {
  console.log(`Strike: $${option.strike} | ` +
    `Return: ${(option.return * 100).toFixed(1)}% | ` +
    `Prob: ${(option.probability * 100).toFixed(0)}%`);
});
var response = await client.GetAsync(
    "https://apis.optionsplay.com/api/v1/platform/how/income/AAPL" +
    "?legtype=call&timeframe=medium&riskprofile=optimal");
response.EnsureSuccessStatusCode();

var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

What you get back

200 OK Response (trimmed — showing one optimal call)
{
  "underlying": "AAPL",
  "sentiment": "Bullish",
  "stockPrice": 228.34,
  "callOptimals": [
    {
      "strike": 235.0,
      "return": 0.032,
      "annualizedReturn": 0.285,
      "premium": 4.20,
      "expiry": "2026-03-20T00:00:00Z",
      "legType": "Call",
      "probability": 0.68,
      "daysUntilExpiry": 40,
      "delta": -0.35,
      "breakeven": 224.14,
      "maxReward": 1090.0,
      "maxRisk": 22414.0,
      "optionsPlayScore": 82,
      "inPlainEnglish": "Sell the AAPL Mar 235 Call at $4.20",
      "checklist": [
        { "name": "Sentiment", "severity": "Good", "sentence": "Bullish sentiment supports covered call writing." },
        { "name": "Volatility", "severity": "Good", "sentence": "IV rank is moderate, providing adequate premium." },
        { "name": "Earnings", "severity": "Good", "sentence": "No earnings before expiration." }
      ]
    }
  ],
  "messageType": "SUCCESS"
}

Key fields to look at:

  • callOptimals — Array of up to 9 optimal covered call recommendations
  • return / annualizedReturn — Expected return as a decimal (0.032 = 3.2%)
  • probability — Probability of the option expiring worthless (you keep the premium)
  • inPlainEnglish — Human-readable description for display in your UI
  • checklist — Severity-rated items (Good/Neutral/Bad) explaining the trade rationale
  • optionsPlayScore — Proprietary formula that distills all the relevant data into a single score
Query Parameters

All parameters are optional. Use legtype (call or put), timeframe (short, medium, or long), and riskprofile (optimal, conservative, or aggressive) to narrow results. Add stockQuantity and costBasis for portfolio-aware recommendations.

API Summary

Endpoint Purpose Base URL
GET /api/v1/platform/what/tradeideas Curated trade ideas from overnight market scan apis.optionsplay.com
GET /api/v1/platform/why/{symbol} Technical analysis, sentiment, support/resistance apis.optionsplay.com
GET /api/v1/platform/how/income/{symbol} Income strategy recommendations apis.optionsplay.com

What's Next?

You've made your first API calls. Here's where to go from here: