Get Option Chain
curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/options/chain \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/options/chain"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://data-tools.prd.arrays.org/api/v1/options/chain', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-tools.prd.arrays.org/api/v1/options/chain",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-tools.prd.arrays.org/api/v1/options/chain"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-tools.prd.arrays.org/api/v1/options/chain")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/options/chain")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"cursor": "<string>",
"results": [
{
"break_even_price": 123,
"daily_data": {
"change": 123,
"change_percent": 123,
"close": 123,
"high": 123,
"last_updated": 123,
"low": 123,
"open": 123,
"previous_close": 123
},
"details": {
"contract_type": "<string>",
"exercise_style": "<string>",
"expiration_date": "<string>",
"shares_per_contract": 123,
"strike_price": 123,
"symbol": "<string>"
},
"fmv": 123,
"greeks": {
"delta": 123,
"gamma": 123,
"theta": 123,
"vega": 123
},
"implied_volatility": 123,
"open_interest": 123,
"underlying_asset": {
"change_to_break_even": 123,
"last_updated": 123,
"price": 123,
"symbol": "<string>",
"timeframe": "<string>"
}
}
]
}
],
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}Options
Get Option Chain
**Feature Overview**
[OpenAPI JSON Spec](/docs/output/v1_options_chain_get.json)
Retrieve option chain data including pricing, Greeks, implied volatility, and underlying asset info. Supports filtering by stock ticker, option ticker, expiration date range, contract type, and strike price range.
**Supported Filter Parameters**
| Parameter | Type | Description | Example |
|-----------|------|-------------|---------|
| symbol | string | Stock ticker symbol (required) | "AAPL" |
| option_ticker | string | Option ticker symbol (optional) | "AAPL240315C00150000" |
| start_expiration_date | int64 | Start expiration date (Unix timestamp) | 1704067200 |
| end_expiration_date | int64 | End expiration date (Unix timestamp) | 1706745600 |
| contract_type | string | Contract type filter | "call" or "put" |
| min_strike_price | float64 | Minimum strike price | 100.0 |
| max_strike_price | float64 | Maximum strike price | 200.0 |
| cursor | string | Pagination cursor | "eyJleHBpcmF0aW9uX2RhdGUiOiI..." |
| limit | int64 | Maximum number of results (1-1000) | 50 |
**Response Data Structure**
Each option contract includes:
- **Contract Details**: ticker, contract type, exercise style, expiration date, shares per contract, strike price
- **Pricing Data**: break even price, fair market value (FMV), implied volatility
- **Greeks**: delta, gamma, theta, vega
- **Market Data**: open interest, daily price changes
- **Underlying Asset**: current price, change to break even, last updated
**Common Query Examples**
1. **All AAPL options**:
`?symbol=AAPL&limit=50`
2. **AAPL call options expiring in March 2024**:
`?symbol=AAPL&contract_type=call&start_expiration_date=1704067200&end_expiration_date=1706745600&limit=100`
3. **AAPL options with strike price between $150-$200**:
`?symbol=AAPL&min_strike_price=150&max_strike_price=200&limit=50`
4. **Specific option contract**:
`?symbol=AAPL&option_ticker=AAPL240315C00150000&limit=1`
**Pagination**
The API supports cursor-based pagination:
- Use the `cursor` field from the response to get the next page
- Set `limit` to control the number of results per page
- When no more results are available, the `cursor` field will be empty
**Important Notes**
- **Expired options are not included** in the response. If the specified expiration window is entirely in the past, the response will be an empty list
- All filter parameters are optional; if not provided, no filter is applied
- Date parameters use Unix timestamp in seconds
- Strike prices are in the same currency as the underlying stock
- Greeks and implied volatility are calculated using standard options pricing models
- Data is real-time or near real-time depending on market conditions
- min_strike_price must be <= max_strike_price when both are provided
GET
/
v1
/
options
/
chain
Get Option Chain
curl --request GET \
--url https://data-tools.prd.arrays.org/api/v1/options/chain \
--header 'X-API-Key: <api-key>'import requests
url = "https://data-tools.prd.arrays.org/api/v1/options/chain"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://data-tools.prd.arrays.org/api/v1/options/chain', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-tools.prd.arrays.org/api/v1/options/chain",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-tools.prd.arrays.org/api/v1/options/chain"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-tools.prd.arrays.org/api/v1/options/chain")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-tools.prd.arrays.org/api/v1/options/chain")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"cursor": "<string>",
"results": [
{
"break_even_price": 123,
"daily_data": {
"change": 123,
"change_percent": 123,
"close": 123,
"high": 123,
"last_updated": 123,
"low": 123,
"open": 123,
"previous_close": 123
},
"details": {
"contract_type": "<string>",
"exercise_style": "<string>",
"expiration_date": "<string>",
"shares_per_contract": 123,
"strike_price": 123,
"symbol": "<string>"
},
"fmv": 123,
"greeks": {
"delta": 123,
"gamma": 123,
"theta": 123,
"vega": 123
},
"implied_volatility": 123,
"open_interest": 123,
"underlying_asset": {
"change_to_break_even": 123,
"last_updated": 123,
"price": 123,
"symbol": "<string>",
"timeframe": "<string>"
}
}
]
}
],
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}{
"data": "<unknown>",
"error": {
"code": "RESOURCE_NOT_FOUND",
"details": [
{
"field": "<string>",
"got": "<string>",
"reason": "<string>"
}
],
"docs_url": "<string>",
"examples": [
"<string>"
],
"hint": "<string>",
"message": "The requested resource was not found.",
"suggestions": [
"<string>"
]
},
"metadata": "<unknown>",
"pagination": "<unknown>",
"request_id": "<string>",
"success": true
}Authorizations
API Key authentication. Example: "your-api-key-here"
Query Parameters
Stock ticker symbol (uppercase)
Option ticker symbol (uppercase)
Start expiration date (Unix timestamp in seconds)
End expiration date (Unix timestamp in seconds)
Contract type filter
Available options:
put, call Minimum strike price
Maximum strike price
Pagination cursor
Maximum number of results (1-1000)

