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.

Request Header
X-API-Key: sd_live_your_api_key_here
cURL Example
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

Python
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']}")
JavaScript / Node.js
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.

GET /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)
Response
{
  "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": {...}
}
GET /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.

GET /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)
Response
{
  "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).

GET /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

revenue
net_income
gross_profit
operating_income
ebitda
eps_basic
eps_diluted
total_assets
total_liabilities
total_equity
free_cash_flow
operating_cash_flow

📋 Corporate Actions

GET /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

GET /holdings/{identifier}

Get ETF or mutual fund holdings.

Example: GET /holdings/SPY
{
  "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

GET /institutional/{identifier}

Get institutional investors holding a security (from 13F filings).

Example: GET /institutional/AAPL
{
  "data": [
    {
      "institution": "Vanguard Group Inc",
      "cik": "0000102909",
      "shares": 1234567890,
      "market_value": 245123456789,
      "change": 1500000,
      "change_pct": 0.12
    }
  ]
}

⚖️ Compare Entities

GET /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.

GET /macro/series/{series_id}

Get data for an economic series.

Popular Series

fed_funds - Fed Funds Rate
treasury_10y - 10Y Treasury
cpi - Consumer Price Index
unemployment - Unemployment Rate
gdp - GDP
sp500 - S&P 500
GET /macro/series

List all available economic series with optional category filter.

📉 Yield Curve

GET /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

GET /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.

POST /query
Request Body
{
  "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.

Point-in-Time Example
# 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.

CLI Sync Example
# 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.

AI-Friendly Response Structure
{
  "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.

GET /meta

Platform capabilities—datasets, coverage, update schedules.

GET /schema

Field definitions, types, and JSON schema for all datasets.

GET /resolve?q=apple

Fuzzy search to resolve names/tickers to synapse_id with confidence scores.

GET /examples

Runnable example requests and expected responses.

GET /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.

MCP Configuration (Claude Desktop / Cursor)
{
  "mcpServers": {
    "synapse-discovery": {
      "url": "https://synapsediscovery.io/mcp",
      "headers": {
        "X-API-Key": "sd_live_your_key"
      }
    }
  }
}

Available MCP Tools

get_financial_data
compare_companies
get_price_history
get_fund_holdings
get_institutional_holders
get_economic_series
get_yield_curve
search_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.