{"openapi": "3.1.0", "info": {"title": "Market Signal API", "summary": "The denoised, entity-resolved market-fact layer for AI agents.", "description": "Typed, deduplicated market facts with one canonical ID per company and coin across BOTH equities and crypto, dated canonical events, a knowledge graph, and a crypto hype-velocity detector. The ETL an AI agent would otherwise build itself - structured, entity-resolved and ready to consume, so your agent reasons over clean facts instead of a raw-headline firehose. Every fact is dated and traceable to its source; 91% of generic noise is dropped at ingestion. Convenience and provenance, not investment advice - no claimed price edge.\n\nAll data is informational market intelligence provided by SCAFA INVESTMENTS LLC. It is NOT investment advice, NOT a recommendation to buy or sell any security, and carries no warranty of accuracy or completeness. You act at your own risk.", "version": "1.0.0", "termsOfService": "https://marketsignalapi.com/impressum", "contact": {"name": "SCAFA INVESTMENTS LLC", "email": "info@scafa-investments.com", "url": "https://marketsignalapi.com"}, "x-operator": "SCAFA INVESTMENTS LLC"}, "servers": [{"url": "https://api.marketsignalapi.com", "description": "Production (auth-free vhost)"}], "security": [{"ApiKeyAuth": []}], "tags": [{"name": "public", "description": "No key required - discovery & self-description."}, {"name": "free", "description": "Free tier: see the full scope in one call."}, {"name": "signal", "description": "Signal tier ($19/mo): honest track record, canonical events, dated evidence, money-flow rails, typed facts, entity resolution."}, {"name": "intelligence", "description": "Intelligence tier ($99/mo): the full knowledge graph, fundamentals, world-compass, regime & risk - the agent/quant tier."}], "components": {"securitySchemes": {"ApiKeyAuth": {"type": "apiKey", "in": "header", "name": "X-API-Key", "description": "Send your moc_ key in the X-API-Key header - never in the URL (query params leak into proxy logs). Get one at https://marketsignalapi.com/pricing"}}}, "paths": {"/api/docs": {"get": {"operationId": "getDocs", "summary": "This document.", "description": "This document. Machine-readable API self-description.", "tags": ["public"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}}}}, "/api/graphnet": {"get": {"operationId": "getGraphnet", "summary": "The full knowledge graph: nodes (assets, actors, sectors, canonical events, world-compass scenarios, discovery names, research theses) and typed edges (threads).", "description": "The full knowledge graph: nodes (assets, actors, sectors, canonical events, world-compass scenarios, discovery names, research theses) and typed edges (threads). Node fields include sig_count (signal activity) and has_chart.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/graphnode": {"get": {"operationId": "getGraphnode", "summary": "Dossier for one node: live price chart points, latest posts/news, forecasts with outcomes, paper-bot trades, world-compass roles, council verdicts, fundamentals, connected threads.", "description": "Dossier for one node: live price chart points, latest posts/news, forecasts with outcomes, paper-bot trades, world-compass roles, council verdicts, fundamentals, connected threads.", "tags": ["intelligence"], "parameters": [{"name": "id", "in": "query", "required": false, "description": "node id from /api/graphnet", "schema": {"type": "string"}}], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/knowledge": {"get": {"operationId": "getKnowledge", "summary": "Aggregated knowledge layer (the 'brain'): entities with learned relevance.", "description": "Aggregated knowledge layer (the 'brain'): entities with learned relevance.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/weltkompass": {"get": {"operationId": "getWeltkompass", "summary": "World-compass scenarios: macro/geopolitical scenario tree with affected companies, winners, losers, safe havens.", "description": "World-compass scenarios: macro/geopolitical scenario tree with affected companies, winners, losers, safe havens.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/canonik": {"get": {"operationId": "getCanonik", "summary": "Canonical-event ranking: which current events the council grades as structurally important (early-warning layer), with p_canonical scores.", "description": "Canonical-event ranking: which current events the council grades as structurally important (early-warning layer), with p_canonical scores.", "tags": ["signal"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/alliances": {"get": {"operationId": "getAlliances", "summary": "Actor-alliance graph: which actors move together, learned from signals.", "description": "Actor-alliance graph: which actors move together, learned from signals.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/industrymap": {"get": {"operationId": "getIndustrymap", "summary": "Industry map: sectors, their assets and current signal pressure.", "description": "Industry map: sectors, their assets and current signal pressure.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/fundamentals": {"get": {"operationId": "getFundamentals", "summary": "Point-in-time fundamentals from SEC XBRL: TTM revenue/income, YoY growth, margins, EPS, plus optional peer comparison.", "description": "Point-in-time fundamentals from SEC XBRL: TTM revenue/income, YoY growth, margins, EPS, plus optional peer comparison.", "tags": ["intelligence"], "parameters": [{"name": "ticker", "in": "query", "required": false, "description": "US ticker, e.g. NVDA (alias: symbol)", "schema": {"type": "string"}}, {"name": "xbrl", "in": "query", "required": false, "description": "1 = include SEC-XBRL brief", "schema": {"type": "string"}}, {"name": "peers", "in": "query", "required": false, "description": "1 = include SIC peer table", "schema": {"type": "string"}}], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/track": {"get": {"operationId": "getTrack", "summary": "Honest aggregate track record of all forward predictions: hit-rate, Brier score, confidence-bucket calibration and discrimination (high- vs low-confidence), split by horizon (short <7d vs canonical 14d) plus council-verdict record.", "description": "Honest aggregate track record of all forward predictions: hit-rate, Brier score, confidence-bucket calibration and discrimination (high- vs low-confidence), split by horizon (short <7d vs canonical 14d) plus council-verdict record. Forward-only, no backtest; control-group calls are reported separately, plus a parallel directional section (excluded-counters, signed ret_pct).", "tags": ["signal"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/govawards": {"get": {"operationId": "getGovawards", "summary": "Dated US federal contract awards (source: USAspending.gov) resolved to public tickers: who receives government money, when, how much, which agency.", "description": "Dated US federal contract awards (source: USAspending.gov) resolved to public tickers: who receives government money, when, how much, which agency. Intelligence/monitoring, NOT a trading signal or price edge.", "tags": ["signal"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/facts": {"get": {"operationId": "getFacts", "summary": "Typed, entity-resolved, deduplicated facts distilled from the raw text stream (financial news + tracked-actor posts).", "description": "Typed, entity-resolved, deduplicated facts distilled from the raw text stream (financial news + tracked-actor posts). Each fact carries an event_type, resolved subject ticker(s), a USD magnitude where present, a direction hint, and a source URL. Generic headlines are dropped at the source. This is the ETL an agent would otherwise build itself - structured, queryable, ready to consume. Rule-derived types; direction_hint is a hint, NOT a graded call.", "tags": ["signal"], "parameters": [{"name": "type", "in": "query", "required": false, "description": "filter by event_type (whale_transfer|regulation|ma_deal|macro_policy|earnings|partnership|upgrade|hack_exploit|listing|sanction|etf_flow)", "schema": {"type": "string"}}, {"name": "subject", "in": "query", "required": false, "description": "filter by resolved ticker/coin symbol, e.g. NVDA or BTC", "schema": {"type": "string"}}, {"name": "limit", "in": "query", "required": false, "description": "max facts to return (default 100)", "schema": {"type": "string"}}], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/resolve": {"get": {"operationId": "getResolve", "summary": "One canonical identity per company/coin: resolves a raw name, @handle or $cashtag to a single ticker (NVDA/Nvidia/@nvidia/$NVDA -> NVDA), so an agent can deduplicate entities across the feed.", "description": "One canonical identity per company/coin: resolves a raw name, @handle or $cashtag to a single ticker (NVDA/Nvidia/@nvidia/$NVDA -> NVDA), so an agent can deduplicate entities across the feed. Precision over recall - returns null rather than a wrong merge.", "tags": ["signal"], "parameters": [{"name": "name", "in": "query", "required": false, "description": "raw company/coin name, handle or cashtag to canonicalize, e.g. 'Nvidia', '@nvidia' or '$NVDA'. Omit to list canonical coverage.", "schema": {"type": "string"}}], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/narrative": {"get": {"operationId": "getNarrative", "summary": "Research-narrative momentum from arXiv: preprint rate per strategic theme, recent (30d) vs baseline (180d), with a rising-flag.", "description": "Research-narrative momentum from arXiv: preprint rate per strategic theme, recent (30d) vs baseline (180d), with a rising-flag. Early indicator of accelerating research themes before consensus. Theme radar, NOT a ticker signal or price edge.", "tags": ["signal"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/dossier": {"get": {"operationId": "getDossier", "summary": "The product pack: honest forward track record (hit-rate, Brier, control-group calibration) PLUS dated, source-traceable evidence grouped per ticker (who received federal money/when) PLUS an explicit 'what this is / is NOT' framing (intelligence & transparency, NOT a claimed price edge; global FDR disclosed).", "description": "The product pack: honest forward track record (hit-rate, Brier, control-group calibration) PLUS dated, source-traceable evidence grouped per ticker (who received federal money/when) PLUS an explicit 'what this is / is NOT' framing (intelligence & transparency, NOT a claimed price edge; global FDR disclosed). One call, honest by design.", "tags": ["signal"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/brainfork": {"get": {"operationId": "getBrainfork", "summary": "Read-only view of the isolated brain_fork experiment (Phase 1 dataset): a point-in-time feature/target table (per graded forward-call, which signal types preceded it vs.", "description": "Read-only view of the isolated brain_fork experiment (Phase 1 dataset): a point-in-time feature/target table (per graded forward-call, which signal types preceded it vs. hit/miss). Display only - NOT wired into any live decision; disclosed as an experiment, not a signal.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/scope": {"get": {"operationId": "getScope", "summary": "The full breadth in ONE call: how many datapoints, live sources, tracked market actors, intelligence rails, knowledge-graph theses and dated forward-calls the system carries, with per-category breakdown and freshness.", "description": "The full breadth in ONE call: how many datapoints, live sources, tracked market actors, intelligence rails, knowledge-graph theses and dated forward-calls the system carries, with per-category breakdown and freshness. Machine-readable scale overview for agents.", "tags": ["free"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/regime": {"get": {"operationId": "getRegime", "summary": "Current market-regime classification (vol/trend state) used by the risk layer.", "description": "Current market-regime classification (vol/trend state) used by the risk layer.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}, "/api/risk": {"get": {"operationId": "getRisk", "summary": "Portfolio risk snapshot of the paper books: correlated VaR/CVaR, stress scenarios, kill-switch state.", "description": "Portfolio risk snapshot of the paper books: correlated VaR/CVaR, stress scenarios, kill-switch state.", "tags": ["intelligence"], "parameters": [], "responses": {"200": {"description": "Success - JSON payload.", "content": {"application/json": {"schema": {"type": "object"}}}}, "401": {"description": "Missing, unknown or revoked API key."}, "403": {"description": "Endpoint above your tier's scope."}, "429": {"description": "Rate limit exceeded - honor the Retry-After header."}}, "security": [{"ApiKeyAuth": []}]}}}}