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_flowCorporate 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"
}
}
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_economic_seriesget_yield_curvesearch_entitiesError 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.