5-Minute Quickstart
From zero to your first OptionsPlay API call
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?
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
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
{
"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
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
{
"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
{
"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
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: