Install
$ agentstack add skill-arraysdata-arrays-skills-arrays-data-api-options ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Arrays Data API — Options
Contract specifications and historical OHLCV/VWAP kline data for stock options.
Base URL and auth
- Base:
ARRAYS_API_BASE_URLenv var (defaulthttps://data-tools.prd.space.id) - Auth: Send
X-API-Key:header on every request. Read the key from envARRAYS_API_KEYor.envfile.
Important notes
- OCC ticker format: Options tickers follow the OCC format with
O:prefix, e.g.O:AAPL260410C00200000. The format isO:{SYMBOL}{YYMMDD}{C|P}{STRIKE*1000}. Contracts endpoint returns tickers in theoptions_tickerfield. - Real-time data workflow: When a user asks for real-time or current options data by underlying symbol (e.g. "AAPL options"), the kline endpoint requires a specific
options_ticker, not just the underlying symbol. You must do a two-step lookup:
- Call
/api/v1/options/contractswithsymbolto discover available contracts and theiroptions_tickervalues. - Call
/api/v1/options/klinewith the specificoptions_tickerto get OHLCV/VWAP data.
- Pagination:
contractsuses cursor-based pagination. Checkpagination.has_more; iftrue, pass thepagination.cursorvalue ascursorin the next request. - Timestamps use Eastern Time: Options endpoints use US Eastern Time. Always use
zoneinfo.ZoneInfo("America/New_York")for timestamp computation, not UTC.
from datetime import datetime
from zoneinfo import ZoneInfo
ET = ZoneInfo("America/New_York")
ts = int(datetime(2026, 4, 10, tzinfo=ET).timestamp())
Endpoints
- Prefix:
/api/v1/options/
| Method | Path | File | Description | |--------|------|------|-------------| | GET | contracts | contracts | Option contract specifications and metadata | | GET | kline | kline | Historical OHLCV and VWAP data for a specific option contract |
> For detailed parameters, response fields, and examples for a specific endpoint, read references/.md in this skill directory.
Response format
Contracts uses a paginated wrapper:
{
"success": true,
"data": [ ... ],
"pagination": { "limit": 0, "cursor": "...", "has_more": true },
"request_id": "..."
}
Kline returns a flat data array (no pagination):
{
"success": true,
"data": [ ... ],
"request_id": "..."
}
Error:
{ "success": false, "data": null, "error": { "code": "VALIDATION_ERROR", "message": "..." }, "request_id": "..." }
Always check success before reading data.
Python examples
import requests, os
from datetime import datetime
from zoneinfo import ZoneInfo
base = os.environ["ARRAYS_API_BASE_URL"]
key = os.environ["ARRAYS_API_KEY"]
ET = ZoneInfo("America/New_York")
def to_ts(y, m, d):
return int(datetime(y, m, d, tzinfo=ET).timestamp())
# Option contracts — list AAPL puts
resp = requests.get(f"{base}/api/v1/options/contracts",
params={"symbol": "AAPL", "contract_type": "put", "limit": 5},
headers={"X-API-Key": key})
body = resp.json()
if body.get("success") and body.get("data"):
for c in body["data"]:
print(f"{c['options_ticker']} strike={c['strike_price']} exp={c['expiration_date']} "
f"style={c['exercise_style']}")
# Two-step workflow: underlying symbol → OHLCV/VWAP
# Step 1: Discover contracts
resp = requests.get(f"{base}/api/v1/options/contracts",
params={"symbol": "AAPL", "contract_type": "call",
"expiration_date_min": "2026-04-10", "limit": 5},
headers={"X-API-Key": key})
body = resp.json()
if body.get("success") and body.get("data"):
ticker = body["data"][0]["options_ticker"] # e.g. "O:AAPL260410C00200000"
# Step 2: Fetch kline for that contract
resp = requests.get(f"{base}/api/v1/options/kline",
params={"symbol": "AAPL", "options_ticker": ticker,
"interval": "1d", "start_time": to_ts(2026, 4, 1),
"end_time": to_ts(2026, 4, 10), "limit": 20},
headers={"X-API-Key": key})
kline = resp.json()
if kline.get("success") and kline.get("data"):
for bar in kline["data"]:
print(f"Close: {bar['price_close']}, Vol: {bar['volume_traded']}, VWAP: {bar['vwap']}")
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ArraysData
- Source: ArraysData/arrays-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.