Issue your first request
curl https://www.oxfordledge.com/api/data?ticker=AAPL \
-H "X-API-Key: ol_your_api_key_here"
{
"ticker": "AAPL",
"price": { "current": 187.44, "changePct": 1.23 },
"metrics": { "pe": 28.5, "marketCap": "2.89T" }
}
Also available as 53 MCP tools for Claude, Cursor, and other AI assistants. Learn more →
API Documentation
Access Oxford Ledge's financial data programmatically. Stock quotes, fundamentals, SEC filings, screener, portfolio management, and more — all via a simple REST API.
Authentication
All API requests require authentication via an API key. Generate your key from Settings → API Keys in the platform.
Send your key as a Bearer token with every request (canonical;
the X-API-Key header is also accepted — both work, use one):
# Using curl curl -H "Authorization: Bearer ol_your_api_key_here" \ https://www.oxfordledge.com/api/data?ticker=AAPL
# Using Python requests import requests headers = {"Authorization": "Bearer ol_your_api_key_here"} r = requests.get("https://www.oxfordledge.com/api/data", params={"ticker": "AAPL"}, headers=headers) data = r.json()
Base URL
API versioning is supported: /api/v1/* routes to the same handlers
as /api/*. Both are interchangeable.
Rate Limits
Rate limits are applied per IP address. When exceeded, the API returns
429 Too Many Requests with a Retry-After header.
| Tier | Limit |
|---|---|
| Authenticated users | 300 req/min |
| Unauthenticated | 150 req/min |
| Burst window | 80 req / 5 sec |
| Bot / suspicious UA | 30 req/min |
Response Format
All responses are JSON. Successful responses return the data directly:
{
"ticker": "AAPL",
"price": {
"current": 189.84,
"change": 2.15,
"changePercent": 1.14
},
"fundamentals": { ... },
"fetchedAt": "2026-04-03T10:30:00"
}
Errors
Error responses include an error field with a human-readable message:
{
"error": "No ticker provided"
}
// HTTP 400, 401, 403, 404, or 429
Common error codes:
400— Missing or invalid parameter401— Authentication required (missing or invalid API key)403— Feature requires a higher subscription tier429— Rate limit exceeded or monthly budget reached500— Server error
Endpoints
Full ticker snapshot: price, fundamentals, profile, SEC filings, analyst ratings, and more. This is the primary data endpoint.
| Param | Type | Description |
|---|---|---|
| ticker | string required | Stock ticker symbol (e.g. AAPL, MSFT) |
| nocache | string optional | Set to 1 to force a fresh fetch |
| fields | string optional | Comma-separated field names for GraphQL-style field selection |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/data?ticker=AAPL"
Example response (abbreviated)
{
"ticker": "AAPL",
"price": {"current": 189.84, "change": 2.15, "changePercent": 1.14},
"fundamentals": {"marketCap": 2950000000000, "pe": 31.2, "eps": 6.08, ...},
"profile": {"name": "Apple Inc", "sector": "Technology", ...},
"filings": [{"form": "10-K", "filed": "2025-11-01", ...}],
"fetchedAt": "2026-04-03T10:30:00"
}
Search for tickers by company name or symbol. Returns matching tickers with company names.
| Param | Type | Description |
|---|---|---|
| q | string required | Search query (e.g. "apple", "MSFT", "bank") |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/ticker-search?q=apple"
Returns a random ticker from the universe. Useful for discovery and exploration.
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/random-ticker"
Point-in-time fundamental data snapshot. Returns financials as they were known on a given date, avoiding look-ahead bias for backtesting.
| Param | Type | Description |
|---|---|---|
| ticker | string required | Stock ticker symbol |
| date | string optional | Date in YYYY-MM-DD format (defaults to latest) |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/fundamentals-pit?ticker=AAPL&date=2025-06-30"
Related Endpoints
GET /api/fundamentals-history?ticker=AAPL&start=2024-01-01&end=2025-12-31— PIT time seriesGET /api/fundamentals-pit/universe?date=2025-06-30— All tickers with PIT data for a dateGET /api/fundamentals-pit/stats— Database statistics
Screen stocks by fundamental criteria. Filter by market cap, P/E, dividend yield, sector, and more. Returns matching tickers with key metrics.
| Param | Type | Description |
|---|---|---|
| min_mcap | number optional | Minimum market cap (e.g. 1000000000) |
| max_pe | number optional | Maximum P/E ratio |
| min_div | number optional | Minimum dividend yield (%) |
| sector | string optional | Filter by sector (e.g. "Technology") |
| sort | string optional | Sort field (e.g. "marketCap", "pe") |
| limit | integer optional | Max results (default 50) |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/screener?min_mcap=10000000000&max_pe=20§or=Technology"
Manage portfolio positions. Requires authentication. Supports multiple named portfolios.
| Param | Type | Description |
|---|---|---|
| portfolio_id | string optional | Portfolio name (default: "default") |
Get positions:
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/portfolio-positions"
Add a position:
curl -X POST -H "X-API-Key: $KEY" \ -H "Content-Type: application/json" \ -d '{"ticker": "AAPL", "shares": 100, "cost_basis": 150.00}' \ "https://www.oxfordledge.com/api/portfolio-positions"
Delete a position:
curl -X DELETE -H "X-API-Key: $KEY" \ -H "Content-Type: application/json" \ -d '{"ticker": "AAPL"}' \ "https://www.oxfordledge.com/api/portfolio-positions"
Related Endpoints
GET /api/portfolio-history?days=30— Portfolio value historyGET /api/portfolio/benchmark?period=1y— Benchmark comparison (S&P 500)
ETF profile, holdings, sector breakdown, and performance data.
| Param | Type | Description |
|---|---|---|
| symbol | string required | ETF ticker symbol (e.g. SPY, QQQ, VTI) |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/etf-data?symbol=SPY"
Related Endpoints
GET /api/etf-compare?symbols=SPY,QQQ,VTI— Compare multiple ETFsGET /api/etf-list— All tracked ETF tickers
Search the historical news archive. Full-text search with sentiment scores, auto-tagged industries, and ticker associations.
| Param | Type | Description |
|---|---|---|
| q | string optional | Full-text search query |
| ticker | string optional | Filter by ticker symbol |
| tag | string optional | Filter by industry tag |
| sentiment | string optional | Filter by sentiment: positive, negative, neutral |
| days | integer optional | Look back N days (default: 7) |
| limit | integer optional | Max results (default: 50) |
| offset | integer optional | Pagination offset |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/news/search?ticker=AAPL&days=30&limit=10"
Related Endpoints
GET /api/news/ticker?ticker=AAPL— Recent headlines for a specific tickerGET /api/news/stats— News database statistics
SEC 13F institutional holdings filings. See what hedge funds and asset managers hold. Data sourced directly from SEC EDGAR.
| Param | Type | Description |
|---|---|---|
| manager | string optional | Manager name search (e.g. "Berkshire", "Bridgewater") |
| ticker | string optional | Find managers holding this ticker |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/13f?manager=Berkshire"
Search corporate and government bonds by issuer, yield, duration, and rating.
| Param | Type | Description |
|---|---|---|
| q | string optional | Issuer name or CUSIP search |
| min_yield | number optional | Minimum yield (%) |
| max_yield | number optional | Maximum yield (%) |
| min_duration | number optional | Minimum duration (years) |
| max_duration | number optional | Maximum duration (years) |
| rating | string optional | Credit rating filter (e.g. "A", "BBB") |
curl -H "X-API-Key: $KEY" \ "https://www.oxfordledge.com/api/bond-search?q=Apple&min_yield=4&max_duration=10"
Python SDK
The Python SDK is not yet published to PyPI — until it ships, call the REST API directly (see Authentication; any HTTP client works). The snippet below shows the planned SDK interface:
Planned usage:
from oxfordledge import OxfordLedge client = OxfordLedge(api_key="ol_your_api_key_here") # Get full ticker data data = client.get_ticker("AAPL") print(data["price"]["current"]) # Search for tickers results = client.search("semiconductor") # Get portfolio positions portfolio = client.get_portfolio() # Screen stocks matches = client.screen(min_mcap=1e10, max_pe=20, sector="Technology") # Search news news = client.search_news(ticker="AAPL", days=30) # Point-in-time fundamentals pit = client.fundamentals_pit("MSFT", date="2025-06-30")
MCP Tools
Oxford Ledge exposes 53 tools via the
Model Context Protocol (MCP),
allowing Claude Desktop and other MCP clients to query financial data directly.
Public-data tools work without a key; tier-gated tools need an API key
(mint one under YOUR API KEYS on the dashboard — keys look like ol_live_…).
Claude Desktop Configuration
Install the package (pip install oxford-ledge-mcp), then add
the following to your claude_desktop_config.json:
{
"mcpServers": {
"oxford-ledge": {
"command": "oxford-ledge-mcp",
"env": {
"OXFORD_LEDGE_URL": "https://www.oxfordledge.com",
"OXFORD_LEDGE_API_KEY": "ol_live_YOUR_KEY_HERE"
}
}
}
}
OXFORD_LEDGE_URL is required for the
authenticated tools — without it the server runs keyless-standalone and your key is
silently ignored. On Windows, use the full path to
oxford-ledge-mcp.exe as command (Claude Desktop does not
inherit your shell PATH), and note the Microsoft-Store build of Claude Desktop reads
its config from %LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\.
Do not use python -m oxford_ledge_mcp. After editing the config, fully
quit Claude Desktop from the system tray and relaunch.
Tool Catalog
The hosted catalog carries 53 tools; the pip package
(oxford-ledge-mcp) dispatches a 13-tool subset (2 keyless
SEC-EDGAR tools + 2 FRED-keyed macro tools + 9 API-key tools). The full,
always-current list is machine-readable at
/api/mcp/tools.json and browsable at
/mcp — plan tool calls from that live list, not from a
static table. Highlights (verified against the live registry 2026-08-10):
| Tool | Description | Where |
|---|---|---|
get_fundamentals | 10-year XBRL annual statements from SEC EDGAR (deduped, newest-first) | pip + hosted |
get_sec_filings | Recent 10-K / 10-Q / 8-K / DEF 14A filings with direct links | pip + hosted |
get_yield_curve | Treasury yield curve 1M–30Y (needs your free FRED_API_KEY in the pip package) | pip + hosted |
get_insider_trades | Form 4 insider buys/sells for a ticker | pip + hosted |
get_bdc_list | All tracked BDCs with AUM, holding counts, filing dates | pip + hosted |
search_bdc_borrower | Which BDCs hold a borrower, at what fair value | hosted (pip fix queued) |
ol_bdc_credit_quality | BDC non-accrual / credit-deterioration signal | hosted |
ol_insider_recent_buys | Recent open-market insider purchases across the whole market | hosted |
ol_13f_filer_analytics | Institutional-filer behavior from 13F holdings | hosted |
ol_intrinsic_value | DCF / EPV / Graham per-share value from SEC XBRL | hosted |
ol_peer_fundamentals | Side-by-side latest-fiscal-year fundamentals for a peer set | hosted |
ol_fdic_bank | FDIC-insured institution lookup and financials | hosted |
ol_federal_contracts | Federal-contract obligation history (forward-revenue signal) | hosted |
Example: Peer Comparison
Ask Claude Desktop to compare multiple tickers in a single request:
// Claude Desktop prompt: "Compare latest-fiscal-year fundamentals for AAPL, MSFT, GOOG, and AMZN" // Claude will call ol_peer_fundamentals with: { "tickers": ["AAPL", "MSFT", "GOOG", "AMZN"] }
Bulk Data Export
Export fundamentals, profiles, and historical prices for multiple tickers at once. Available to Investor tier and above.
Bulk Fundamentals
| Endpoint | Description | Latency |
|---|---|---|
GET /api/data/bulk | Fundamentals + profile for up to 100 tickers | 3-15s |
GET /api/data/bulk-history | OHLCV price history for up to 50 tickers | 5-30s |
Examples
// Bulk fundamentals for multiple tickers (JSON) GET /api/data/bulk?tickers=AAPL,MSFT,GOOG&fields=fundamentals // Bulk fundamentals as CSV GET /api/data/bulk?tickers=AAPL,MSFT&fields=fundamentals&format=csv // Historical price data with date range GET /api/data/bulk-history?tickers=AAPL&start=2020-01-01 // Multiple tickers with date range GET /api/data/bulk-history?tickers=AAPL,MSFT,GOOG&start=2024-01-01&end=2024-12-31
Parameters
| Parameter | Endpoint | Description |
|---|---|---|
tickers | Both | Comma-separated ticker symbols (required) |
fields | /api/data/bulk | Data fields: fundamentals, profile, all |
format | Both | json (default) or csv |
start | /api/data/bulk-history | Start date (YYYY-MM-DD) |
end | /api/data/bulk-history | End date (YYYY-MM-DD, default: today) |
Additional Resources
- Machine-readable endpoint schema — JSON list of all endpoints with params
- Health check — Server status and uptime
- Data coverage — See which data sources are available for a ticker
- Pricing — Tier comparison (Learner, Researcher, Investor, Power User)