Get started in 30 seconds
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 36 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.
Include your API key in the X-API-Key header with every request:
# Using curl curl -H "X-API-Key: ol_your_api_key_here" \ https://oxfordledge.com/api/data?ticker=AAPL
# Using Python requests import requests headers = {"X-API-Key": "ol_your_api_key_here"} r = requests.get("https://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://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://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://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://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://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://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://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://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://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://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://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://oxfordledge.com/api/bond-search?q=Apple&min_yield=4&max_duration=10"
Python SDK
Install the Oxford Ledge Python SDK for convenient access to all endpoints:
pip install oxfordledge
Basic 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 38 tools via the Model Context Protocol (MCP), allowing Claude Desktop and other MCP clients to query financial data directly. Tools are read-only and require no API key when run locally.
Claude Desktop Configuration
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"oxford-ledge": {
"command": "python",
"args": ["/path/to/oxford-ledge/mcp_server.py"]
}
}
}
Market Data
| Tool | Description | Latency |
|---|---|---|
get_company_data | Price, valuation multiples, market cap, 52-week range for a ticker | <500ms |
get_market_indicators | S&P 500, Dow, NASDAQ, VIX, Treasury yields, gold, oil, bitcoin | <500ms |
get_price_history | OHLCV price history from local DB | <500ms |
get_index_movers | Top gainers and losers for SPY, QQQ, DIA, IWM | <500ms |
get_short_interest | Short percent of float, short ratio, shares short | <500ms |
get_yield_curve | Treasury yield curve (1M-30Y) with optional historical comparison | <500ms |
get_fred_data | FRED economic data series (GDP, UNRATE, CPIAUCSL, etc.) | 500ms-2s |
get_options_chain | Options chain with Greeks (delta, gamma, theta, vega) | 500ms-2s |
get_anomaly_flags | 15 automated anomaly checks (Z-Score, leverage, FCF, insider selling) | 500ms-2s |
get_valuation_history | Historical P/E, EV/EBITDA, P/B, P/S over 1-5 years | 500ms-2s |
Company Analysis
| Tool | Description | Latency |
|---|---|---|
search_company | Fuzzy search by name, ticker, or industry | <500ms |
get_company_profile | CEO, founding year, HQ, employees, sector, industry | <500ms |
get_corporate_events | M&A, exec changes, restructurings, dividend changes | <500ms |
get_fundamentals | 10-year XBRL financials from SEC EDGAR | 500ms-2s |
get_debt_maturities | Year-by-year debt maturity schedule from 10-K footnotes | 500ms-2s |
get_capital_allocation | 10-year buybacks, dividends, debt, acquisitions scorecard | 500ms-2s |
get_peer_comparison | Side-by-side P/E, margins, growth vs peers | 500ms-2s |
calculate_intrinsic_value | DCF, EPV, and Graham fair value estimates | 500ms-2s |
get_analyst_estimates | Consensus EPS, revenue, and growth forecasts | 500ms-2s |
get_estimate_revisions | Recent analyst upgrades, downgrades, estimate changes | 500ms-2s |
get_insider_activity | Form 4 insider buys/sells with amounts and titles | 500ms-2s |
get_13f_holdings | Top institutional holdings from SEC 13F filings (heavy) | 3-15s |
get_business_description | SEC EDGAR 10-K business and MD&A text | <500ms |
Fixed Income & Credit
| Tool | Description | Latency |
|---|---|---|
search_bonds | Search bond issuers via FINRA TRACE (CUSIP, coupon, maturity) | 500ms-2s |
get_bond_data | Look up a specific bond by CUSIP (price, yield, volume) | 500ms-2s |
search_bdc_borrower | Search BDC portfolio holdings by borrower name | <500ms |
get_bdc_list | All tracked BDCs with AUM, holding counts, filing dates | <500ms |
News & Calendar
| Tool | Description | Latency |
|---|---|---|
get_news | Search news archive with sentiment scores and ticker filtering | 500ms-2s |
search_news_archive | Full-text search across 17,000+ archived articles | 500ms-2s |
get_calendar | Upcoming earnings dates and economic events | <500ms |
get_economic_calendar | FOMC, jobs, CPI, GDP data releases | <500ms |
Portfolio
| Tool | Description | Latency |
|---|---|---|
get_portfolio_positions | Holdings, shares, cost basis, gain/loss | <500ms |
get_portfolio_analytics | Volatility, Sharpe, beta, drawdown, correlation (heavy) | 3-15s |
get_sector_breakdown | GICS sector allocation percentages | <500ms |
Education
| Tool | Description | Latency |
|---|---|---|
get_value_investing_fact | Buffett, Graham, Munger quotes and principles with citations | <500ms |
get_ai_question | AI-generated analysis question to prompt deeper research | <500ms |
Screening & Batch
| Tool | Description | Latency |
|---|---|---|
run_screener | Screen by P/E, ROE, market cap, dividend yield, sector (heavy) | 3-15s |
bulk_get_fundamentals | Fundamentals for up to 50 tickers from local DB (heavy) | 3-15s |
batch_get_ticker_data | Price, metrics, profile for up to 20 tickers from local DB (heavy) | 500ms-2s |
Example: Batch Tool Usage
Ask Claude Desktop to compare multiple tickers in a single request:
// Claude Desktop prompt: "Compare the valuation metrics for AAPL, MSFT, GOOG, and AMZN" // Claude will call batch_get_ticker_data with: { "tickers": ["AAPL", "MSFT", "GOOG", "AMZN"], "fields": "price,metrics" }
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)