API Documentation
Everything you need to integrate Synapse Discovery financial data into your applications.
Base URL
https://synapsediscovery.io/api/v1
10,000+ Securities
Stocks, ETFs, mutual funds, ADRs
30+ Years History
Daily prices back to 1990
AI-Native
Built for agents and LLMs
🔑 Authentication
All API requests require an API key. Include your key in the X-API-Key header.
X-API-Key: sd_live_your_api_key_here
curl -H "X-API-Key: sd_live_xxx" \
https://synapsediscovery.io/api/v1/entity/AAPL
Keep your API key secure
Never expose your API key in client-side code or public repositories.
🚀 Quick Start
import requests
# Set your API key
API_KEY = "sd_live_your_key"
BASE_URL = "https://synapsediscovery.io/api/v1"
headers = {"X-API-Key": API_KEY}
# Get Apple stock info
response = requests.get(f"{BASE_URL}/entity/AAPL", headers=headers)
data = response.json()
print(f"Company: {data['data']['name']}")
# Get historical prices
prices = requests.get(
f"{BASE_URL}/prices/AAPL",
headers=headers,
params={"start": "2024-01-01", "limit": 30}
).json()
for price in prices['data'][:5]:
print(f"{price['date']}: ${price['close']}")
const API_KEY = 'sd_live_your_key';
const BASE_URL = 'https://synapsediscovery.io/api/v1';
async function getStockData(ticker) {
const response = await fetch(`${BASE_URL}/entity/${ticker}`, {
headers: { 'X-API-Key': API_KEY }
});
return response.json();
}
// Get Apple data
const apple = await getStockData('AAPL');
console.log(apple.data.name); // "Apple Inc"
🏢 Entities
Entities represent securities in our universe. Each entity has a unique synapse_id that remains constant even when tickers change.
/entity/{identifier}
Get entity by ticker symbol, CIK, or synapse_id.
Parameters
| Name | Type | Description |
|---|---|---|
identifier |
path | Ticker (AAPL), CIK (0000320193), or synapse_id (UUID) |
{
"data": {
"synapse_id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Apple Inc",
"current_ticker": "AAPL",
"cik": "0000320193",
"security_type": "common_stock",
"status": "active",
"sector": "Technology",
"industry": "Consumer Electronics",
"exchange": "NASDAQ"
},
"provenance": {...},
"quality": {...},
"cost": {...}
}
/entities
List entities with optional filtering.
Query Parameters
| Name | Type | Description |
|---|---|---|
security_type |
string | common_stock, etf, mutual_fund, adr, reit, spac |
status |
string | active, delisted |
sector |
string | Technology, Healthcare, etc. |
search |
string | Search by name or ticker |
page |
integer | Page number (default: 1) |
limit |
integer | Results per page (max: 1000) |
📈 Prices
Historical OHLCV price data with multiple adjustment types.
/prices/{identifier}
Get historical prices for an entity.
Query Parameters
| Name | Type | Description |
|---|---|---|
start |
date | Start date (YYYY-MM-DD) |
end |
date | End date (YYYY-MM-DD) |
adjustment |
string | raw, split_adjusted (default), total_return |
limit |
integer | Max results (default: 1000, max: 10000) |
{
"data": [
{
"date": "2026-01-24",
"open": 195.50,
"high": 198.75,
"low": 194.20,
"close": 198.42,
"volume": 45892100
}
],
"provenance": {
"source": "yahoo_finance",
"adjustment_model": "split_adjusted"
}
}
Adjustment Types:
• raw - Unadjusted prices
• split_adjusted - Adjusted for stock splits only
• total_return - Adjusted for splits and reinvested dividends
📊 Fundamentals
Standardized financial statements parsed from SEC filings (10-K, 10-Q).
/fundamentals/{identifier}
Query Parameters
| Name | Type | Description |
|---|---|---|
periods |
integer | Number of periods (default: 8) |
period_type |
string | Q (quarterly) or FY (annual) |
as_of |
date | Point-in-time query date |
Available Fields
revenuenet_incomegross_profitoperating_incomeebitdaeps_basiceps_dilutedtotal_assetstotal_liabilitiestotal_equityfree_cash_flowoperating_cash_flow📋 Corporate Actions
/corporate-actions/{identifier}
Stock splits, dividends, and other corporate actions.
Query Parameters
action_type |
stock_split, cash_dividend, stock_dividend, spin_off |
start |
Start date filter |
end |
End date filter |
📦 Fund Holdings
/holdings/{identifier}
Get ETF or mutual fund holdings.
{
"data": [
{
"name": "Apple Inc",
"ticker": "AAPL",
"shares": 169547850,
"market_value": 33659841250,
"percentage": 7.12
}
],
"meta": {
"fund_ticker": "SPY",
"report_date": "2026-01-15"
}
}
🏦 13F Institutional Holdings
/institutional/{identifier}
Get institutional investors holding a security (from 13F filings).
{
"data": [
{
"institution": "Vanguard Group Inc",
"cik": "0000102909",
"shares": 1234567890,
"market_value": 245123456789,
"change": 1500000,
"change_pct": 0.12
}
]
}
⚖️ Compare Entities
/compare?tickers=AAPL,MSFT,GOOGL
Compare multiple entities on key metrics.
Parameters
tickers |
Comma-separated list (max 20) |
metrics |
Comma-separated metrics (default: revenue,net_income,eps_diluted) |
🏛️ Economic Series (FRED)
Access Federal Reserve economic data including interest rates, inflation, employment, and more.
/macro/series/{series_id}
Get data for an economic series.
Popular Series
fed_funds - Fed Funds Ratetreasury_10y - 10Y Treasurycpi - Consumer Price Indexunemployment - Unemployment Rategdp - GDPsp500 - S&P 500/macro/series
List all available economic series with optional category filter.
📉 Yield Curve
/macro/yield-curve
Treasury yield curve with spreads and inversion detection.
{
"data": {
"date": "2026-01-24",
"yields": {
"1M": 5.25, "3M": 5.30, "6M": 5.20,
"1Y": 5.00, "2Y": 4.50, "5Y": 4.20,
"10Y": 4.10, "30Y": 4.30
},
"spread_2_10": -40,
"is_inverted": true
}
}
🌍 Market Context
/macro/market-context?date=2026-01-24
Aggregated market indicators for a specific date. Perfect for backtesting context.
🔮 Flexible Query (POST /query)
The "thick" endpoint for querying multiple entities with mixed data types in a single request.
/query
{
"universe": {
"tickers": ["AAPL", "MSFT", "GOOGL"]
},
"fields": [
"close_split_adj",
"volume",
"revenue",
"eps_diluted"
],
"range": {
"start": "2024-01-01",
"end": "2025-12-31"
},
"point_in_time": true,
"asof": "2026-01-01T00:00:00Z"
}
Universe Options
- •
tickers- List of ticker symbols - •
synapse_ids- List of synapse IDs - •
exchange- Filter by exchange (NASDAQ, NYSE) - •
security_type- Filter by type - •
sector- Filter by sector
Pro Tip: Use /query/fields (no auth required) to see all available fields and example queries.
⏰ Point-in-Time Queries
Query data as it was known at a specific historical date—essential for backtesting without look-ahead bias.
# What fundamentals were available on Jan 1, 2020?
GET /fundamentals/AAPL?as_of=2020-01-01&periods=4
# Returns only data that was filed BEFORE Jan 1, 2020
# No Q4 2019 data (filed in early 2020) - prevents look-ahead bias
⚠️ Look-Ahead Bias: Without point-in-time queries, your backtest might use data that wasn't actually available at the time, leading to unrealistic results.
🗃️ Data Lake Sync
Download complete datasets in Parquet format for local querying. Requires Quant tier or higher.
GET /sync/status
Check current snapshot and available data.
GET /sync/changes
Get incremental changes since last sync.
GET /export/manifest
Complete file listing with checksums.
GET /export/signed-url
Get signed URL for file download.
# Install the sync client
pip install synapse-discovery
# Initialize with your API key
synapse-discovery init --api-key sd_live_xxx
# Sync prices and fundamentals locally
synapse-discovery sync --to ./data --datasets prices,fundamentals
# Query with DuckDB
duckdb -c "SELECT * FROM './data/prices/NASDAQ/AAPL/*.parquet'"
🤖 AI-First Design
Every response includes metadata for AI agents: provenance, quality metrics, and cost tracking.
{
"data": {...},
// Where did this data come from?
"provenance": {
"source": "yahoo_finance",
"collection_time": "2026-01-24T06:00:00Z",
"adjustment_model": "split_adjusted"
},
// How reliable is this data?
"quality": {
"completeness": 0.98,
"staleness_hours": 18
},
// Usage tracking
"cost": {
"units_consumed": 1,
"cache_hit": true
}
}
🔍 Discovery Endpoints
Self-describing endpoints for AI agents. No authentication required.
/meta
Platform capabilities—datasets, coverage, update schedules.
/schema
Field definitions, types, and JSON schema for all datasets.
/resolve?q=apple
Fuzzy search to resolve names/tickers to synapse_id with confidence scores.
/examples
Runnable example requests and expected responses.
/docs/ai
AI-readable documentation in structured JSON format.
🔌 MCP Protocol Integration
Native Model Context Protocol support for Cursor, Claude Desktop, and other MCP-compatible AI tools.
{
"mcpServers": {
"synapse-discovery": {
"url": "https://synapsediscovery.io/mcp",
"headers": {
"X-API-Key": "sd_live_your_key"
}
}
}
}
Available MCP Tools
get_financial_datacompare_companiesget_price_historyget_fund_holdingsget_institutional_holdersget_economic_seriesget_yield_curvesearch_entities⚠️ Error Handling
Errors include structured codes, messages, and suggestions for AI agents.
{
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "No entity found for identifier: APPL",
"suggestion": "Did you mean one of these?",
"similar": ["AAPL", "APL", "APLE"]
}
}
HTTP Status Codes
| Code | Description |
|---|---|
200 |
Success |
400 |
Bad request (invalid parameters) |
401 |
Authentication required or invalid API key |
403 |
Forbidden (feature not available on your tier) |
404 |
Resource not found |
429 |
Rate limit exceeded |
500 |
Internal server error |
⏱️ Rate Limits
| Tier | Daily Limit | Burst Rate | Bulk Download |
|---|---|---|---|
| Free | 100 calls/day | 10/min | ❌ |
| Developer | 10,000 calls/day | 100/min | ❌ |
| Quant | 100,000 calls/day | 500/min | ✅ |
| Enterprise | Unlimited | Custom | ✅ |
Rate Limit Headers
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9850
X-RateLimit-Reset: 1706140800
📦 SDKs & Libraries
🐍 Python
pip install synapse-discovery
from synapse_discovery import SynapseClient
client = SynapseClient("your-key")
aapl = client.get("AAPL")
prices = client.prices("AAPL")
💻 CLI (Data Lake)
pip install synapse-discovery
synapse-discovery init --api-key xxx
synapse-discovery sync --to ./data
synapse-discovery validate ./data
Need Help?
Can't find what you're looking for? Our team is here to help.