MoneySignals Documentation
Use market context, source records and dated model outcomes to inform your own research. Inspect the published event-signal record, including losses and missing outcomes, through our REST API or MCP server. Daily accuracy and historical studies do not establish profitable weekly or monthly portfolios.
🤖 Building an AI agent?
Jump to Connect via MCP to inspect sources, dates, coverage and measured outcomes.
⚙️ Writing code?
Jump to the REST API — clean JSON over HTTPS, or the interactive API reference.
Overview
Public data tools are available through two interfaces:
- REST API —
https://api.moneysignals.us. JSON over HTTPS, one API key. - MCP server — a thin Model Context Protocol wrapper over that API, so Claude Desktop, Claude Code, or any MCP client can call it as tools.
Our focus is research evidence for independent decisions. The daily brief provides context and aggregate diagnostics. Longer-horizon research asks whether a frozen basket earns a positive return after costs and improves on buying and holding the market or comparable random baskets. Qualified 5–10/20–60-session findings are not yet established in this research product. See Evidence & holding periods for what the existing records can support.
Quick start
1. Inspect the track record — no key needed
The event-signal record is public. Check its dates, counts and limitations before interpreting its rates:
# live win rate, avg return, resolved-call count for the event signals
curl https://api.moneysignals.us/track-record
2. Get a free API key — it comes with the free email signup
Join the free daily email and confirm your address — your API key arrives in the
welcome email, no card required. It unlocks the ML predictions and every market-context endpoint.
Pass it as the X-API-Key header (or Authorization: Bearer <key>, whichever your client prefers):
curl -H "X-API-Key: at_sk_your_key" \
https://api.moneysignals.us/api/v1/market/regime
Paid plans (from $29/mo) add the aggregate research brief and recorded event diagnostics plus alt-data and higher limits — every paid plan includes both the daily email and API access.
3. Or connect an agent in one command — hosted MCP, nothing to install
claude mcp add --transport http moneysignals https://api.moneysignals.us/mcp \
--header "X-API-Key: at_sk_your_key"
Then ask your agent: “What’s the market regime, and how accurate were MoneySignals’ recent predictions?” — see Connect via MCP.
Authentication, tiers & limits
- Header:
X-API-Key: at_sk_…— orAuthorization: Bearer at_sk_…— on every request except the public ones below. - Public (no key):
GET /track-recordandGET /demo/snapshot— so you can connect and verify immediately. - Free key: included with the free email signup — confirm your email and the key is in the welcome email. Lost it? Sign up again with the same address and confirm: the old key is revoked and a fresh one is emailed to you.
- Your key’s status:
GET /api/v1/account/meworks on every key and returns your tier, rate limits, and total usage. (Detailed 30-day analytics viaGET /api/v1/account/usageis API Pro.) Every response carriesX-RateLimit-RemainingandX-RateLimit-Resetheaders (plus…-Dayvariants) so you can pace yourself; a429addsRetry-Afterand means slow down or upgrade. - Errors come back as JSON —
{"detail": "…", "code": "…"}. Thedetailis a sentence written for you and gets reworded;codeis stable, so branch on that:missing_api_key,invalid_api_key,api_key_deactivated,api_key_expired,tier_required, andrate_limited_minutevsrate_limited_day— pause a moment, or come back tomorrow. The401and403messages point you to pricing; the closed list is theErrorCodeenum in the OpenAPI spec.
| Tier | Price | Unlocks | Limits |
|---|---|---|---|
| Free | $0 — email signup | ML predictions + realized accuracy, market regime, economic calendar, anomalies, fear/greed, put/call, OHLCV bars | 5/min · 100/day |
| Premium key tier: api_starter | $29/mo | Everything in Free + research and event diagnostics (aggregate brief, recorded outcomes, congress trades) + alt-data (lobbying, hearings, experimental possible-signal feeds) + the Premium daily email | 10/min · 500/day |
| Professional key tier: api_pro | $99/mo | Everything in Premium + social sentiment/trending + batch predictions + usage analytics + the Professional daily email | 30/min · 1,000/day |
Keys report their internal tier name (api_starter / api_pro) in
GET /api/v1/account/me — existing API Starter ($49) and API Pro ($199) keys keep working unchanged
and map to Premium and Professional.
Connect an AI agent (MCP)
MCP clients (Claude Code, Claude Desktop, your own agent) can access the documented data tools — no SDK to learn, no endpoints to wire up. Two ways to connect to the available tools: the hosted server (recommended — one command, nothing to install) or a downloadable one-file stdio server.
Hosted — one command, nothing to install
claude mcp add --transport http moneysignals https://api.moneysignals.us/mcp \
--header "X-API-Key: at_sk_your_key"
No Python, no download, always the latest tools. Your key rides on the connection as an HTTP header —
leave the --header off to connect keyless and try get_track_record first.
Any client that speaks MCP Streamable HTTP works the same way: point it at
https://api.moneysignals.us/mcp and send X-API-Key (or
Authorization: Bearer) on each request. Building your own agent? It’s plain JSON-RPC:
curl -X POST https://api.moneysignals.us/mcp \
-H "Content-Type: application/json" -H "X-API-Key: at_sk_your_key" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_market_regime","arguments":{}}}'
Or run it locally (stdio)
Prefer a local process — or your client can’t send custom headers (Claude Desktop’s config, for one)? Download the one-file server:
pip install "mcp>=1.2" httpx
# download the one-file server (always the latest)
curl -O https://api.moneysignals.us/mcp/server.py
Claude Code — local stdio variant
claude mcp add moneysignals \
--env MONEYSIGNALS_API_KEY=at_sk_your_key \
-- python /path/to/server.py
Claude Desktop — config
Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"moneysignals": {
"command": "python",
"args": ["/path/to/server.py"],
"env": { "MONEYSIGNALS_API_KEY": "at_sk_your_key" }
}
}
}
Restart the client. Without a key, only get_track_record works — enough to confirm the connection.
The free key unlocks predictions, market context and the ETF pullback signal; paid keys add the event signals.
Override the base URL with MONEYSIGNALS_API_BASE if needed.
Available tools
Use MCP tools/list for the current tool inventory and schemas.
Open the intelligence workspace for the human view. Agent evidence tools read the same global observations; they cannot access private portfolios. Source configuration does not imply collected coverage: check status, source clocks and stale flags.
no key public. free key works with the free key from the email signup. premium / professional need a paid plan (from $29/mo — email + API together).
| Tool | Returns | |
|---|---|---|
get_track_record | no key | Recorded event-signal win rate, average signed return and resolved count. Inspect dates and missing outcomes; this is not an account return. |
get_latest_predictions | free key | Latest stored daily ML predictions and recorded direction accuracy; inspect freshness. |
get_ticker_prediction | free key | Latest prediction for one ticker. |
get_prediction_accuracy | free key | Recorded direction accuracy with timeframe and coverage labels; not holding-period returns. |
get_market_regime | free key | RISK_ON/OFF, VIX, SPY vs 200MA, position multiplier — the risk gate. |
get_economic_calendar | free key | Upcoming US economic events (FOMC/CPI/NFP), impact-rated. |
get_anomalies | free key | Today’s statistical outliers (≥σ daily moves) + reversal context. |
get_market_character | free key | Dispersion gauge comparing single-stock moves with historical years; inspect observation dates. |
get_world_evidence | free key | Original-source observations with revisions, source links, separate clocks, coverage and stale/retracted flags. Filter source/category, 1–50 records, and reuse the opaque pagination cursor unchanged. |
get_economic_conditions | Free | Treasury curve, housing and labor observations, units, period changes, collection health and detected revisions. Latest revised history; release times unavailable. LISEP's True Rate of Unemployment is headline only: latest month, monthly change and the official rate for the same month, with no history or revisions. |
get_world_briefing | Free | Important developments by topic, related source reports, reviewed advisories and M7+ observations. Grouping does not establish independent confirmation. |
get_intelligence_sources | free key | Source configuration, collection health and coverage. Reads stored status; does not activate providers or access private accounts. |
get_fear_greed | free key | Fear & Greed index. |
get_put_call_ratio | free key | Put/call ratio (with a freshness flag). |
get_ohlcv | free key | Recent daily OHLCV bars for a ticker. |
get_etf_pullback_signal | free key | Historical ETF pullback measurements for the full 13-ETF equity study universe, including screening failures. No active windows or entry instructions; not a qualified longer-horizon finding. |
get_youtube_scoreboard | free key | Finance-YouTube creator scoreboard: how the independent analysts we track have actually graded (Wilson-95 lower bound) — third-party forecasts, empty by design until their calls resolve. |
get_edge_ledger | free key | Historical research ledger with counts, base rates, uncertainty and retained failed studies. Version historical_research_ledger_v1 places legacy screening under historical_screening; all investment evidence remains not_qualified. |
get_crowd_consensus | free key | What the money-weighted crowd believes — Polymarket/Kalshi implied probabilities on Fed, inflation, geopolitics, crypto and elections, with 7d/30d drift. Sold as information, no edge claim; read coverage, which excludes rather than guesses at unreadable multi-market events. The documented Kalshi history has no priced observations, so it contributes no probabilities to that sample. Inspect per-venue coverage for current availability; a registered venue does not establish collected prices. |
get_consensus_shift | free key | What the crowd just changed its mind about — biggest 24h/7d/30d probability moves, volume-filtered. Markets unobserved at the start of the window are omitted, never counted as unchanged. |
get_forecaster_calibration | free key | Whether the crowd has actually been any good — every forecast scored against what the venue settled, by probability bucket and by lead time. Inspect sample dates, resolved counts, benchmark and missing records; forecast calibration does not establish tradeable returns. |
get_anti_signals | free key | Source inversion research with measured categories and denominators. Inspect current status and dates; below-50% accuracy alone does not establish profitable inversion. |
get_crowd_divergence | premium | Where Polymarket and Kalshi price the same contract differently — a row appears only when one venue’s price sits outside the other’s quoted bid–ask range, so a gap narrower than the spread you’d cross never shows up. Matching is exact-title only: fuzzy matching produced 822 pairs on real data, including a nomination race matched to that race’s voter-turnout market. coverage publishes the whole funnel and every drop reason. Sold as information — edge_status is not_measured. |
get_daily_brief | premium | Aggregate daily diagnostics, historical holding comparisons and prospective outcomes, with dates and limitations. |
get_best_signals | premium | Retired ranked-pick tool; returns an explicit error. Use get_daily_brief for aggregate evidence. |
get_trade_plan | premium | Retired trade-action tool; returns an explicit error, not buy/short instructions. |
get_signal_performance | premium | Per-event-type historical win rates and sample counts; inspect uncertainty and dates. |
get_event_signals | premium | All live event signals, each with its measured type win-rate. |
get_congress_trades | premium | Congressional disclosures (raw — has underperformed in our sample, but not a confirmed anti-signal; see get_anti_signals). |
get_social_sentiment | professional | Reddit mention/upvote volume for a ticker. |
get_social_trending | professional | Tickers trending on social (finance-filtered). |
get_account_usage | professional | Your key’s usage / rate-limit status. |
Research workflow
Start with source dates and coverage, then inspect the complete measured record and its benchmark. Separate a model's direction score from a portfolio's attainable return. An event date alone does not establish a profitable exit or re-entry rule.
Example agent prompt: “Review market context and upcoming economic events. Cite the sources and observation dates. Summarize all available graded outcomes, including losses, pending and missing records. Distinguish daily accuracy from holding-period returns, and explain which comparisons are unavailable.”
Ranked actions are retired. get_best_signals and
get_trade_plan return explicit retirement errors. This is not a claim that a screen found zero opportunities.
get_daily_brief now returns aggregate_research_brief_v1: dated aggregate panels
rather than signals, sizing guidance or trade actions. Update clients to read each panel's status and source clock.
Missing outcomes are not zero returns, and no qualified holding-period investment edge is established.
REST API reference
Base URL https://api.moneysignals.us. All endpoints below are prefixed /api/v1 unless
noted, return JSON, and need the X-API-Key header. Try them live in the interactive
API reference (or ReDoc).
Signals
Premium and up (key tier api_starter) — except /track-record (public) and /signals/etf-pullback + /signals/youtube-scoreboard (free key).
| Method & path | What it does |
|---|---|
GET /signals/brief | Versioned aggregate research brief; each panel has source dates and ready, pending or unavailable evidence. |
GET /signals/etf-pullback free key | ETF pullback rule status and historical comparison; see the selection limitations below. |
GET /signals/youtube-scoreboard free key | Finance-YouTube creator scoreboard: per-creator graded accuracy (Wilson-95 LB) + calls pending resolution. Third-party forecasts, tracked and attributed. |
GET /signals/best | Retired: HTTP 410 with a link to the aggregate research brief. Not an empty successful screen. |
GET /signals/performance | Per-(event_type, second_order) realized win rates, labeled strong→anti-signal. |
GET /signals/events | All live event signals + each one’s historical type win-rate. |
GET /signals/congress-trades | Congressional disclosures (raw; has underperformed, but not a confirmed anti-signal). |
GET /track-record free | Recorded event-signal outcomes, not cumulative account returns (no /api/v1 prefix). |
Predictions
Works with the free key (/predictions/batch is Professional).
| Method & path | What it does |
|---|---|
GET /predictions/latest | Latest daily ML predictions + top-level realized_accuracy. |
GET /predictions/{ticker} | Latest predictions for one ticker, across timeframes. |
GET /predictions/accuracy | Recorded direction accuracy by timeframe, not portfolio returns. Rows carry status: live (daily) or archived_sample (weekly/monthly — pipelines discontinued 2026-03-23; a closed Jan–Mar 2026 sample, not a live metric). |
GET /predictions/batch | Predictions for many tickers in one call (Professional). |
Market context
Works with the free key.
Global evidence is also available at GET /intelligence/events and
GET /intelligence/status under the same /api/v1 prefix.
Event filters: source=usgs|eia|worldmonitor|osiris,
category=earthquake|energy_inventory, limit=1..50 (default 20),
and the returned cursor (maximum 1,000 characters).
A registered provider may be unavailable or not configured. Unknown coverage is not a quiet-world conclusion.
| Method & path | What it does |
|---|---|
GET /market/regime | Risk regime: VIX, SPY vs 200MA, position multiplier. |
GET /market/economic-calendar | Upcoming US economic events, impact-rated (?impact=high). |
GET /market/economy | Saved yield curve, housing and labor conditions: 14 series with units, observation periods, collection health, changes and detected revisions. Latest revised history; actual release timestamps and consensus surprises are unavailable. The True Rate of Unemployment from the Ludwig Institute for Shared Economic Prosperity (LISEP) is headline only: the latest month, its monthly change and the official rate for the same month, with no history or revisions. |
GET /market/calendar | Merged trading calendar — FOMC decisions + minutes, triple witching, OPEX, holidays, rebalancing, tax + tariff dates, plus CPI/jobs/GDP/PCE releases (pinned from BLS/BEA schedules, enriched live) (?days=30&category=witching). Browsable at /calendar. |
GET /market/anomalies | Today’s ≥σ daily-move outliers + next-day reversal stats. |
GET /market/character | Market-character/dispersion gauge vs 2015–2025 full-year references (?window= trading days). |
GET /market/ohlcv/{ticker} | Recent daily/weekly/monthly bars. |
GET /market/fear-greed | Fear & Greed index history. |
GET /market/pcr | Market put/call ratio (carries a stale flag). |
Social, alt-data & account
Social is Professional; alternative data is Premium and up. /account/me works on
any key (/account/usage is Professional).
| Method & path | What it does |
|---|---|
GET /social/trending | Trending tickers (finance-filtered; ?platform= for raw feeds). |
GET /social/sentiment?ticker= | Reddit mention/upvote volume for a ticker. |
GET /alternative/flights | DC-area corporate-jet activity — an experimental “possible signal” feed, collected on request rather than continuously; currently sparse, and the response says so rather than papering over it. |
GET /alternative/lobbying · /hearings | Lobbying filings & congressional hearings by ticker. |
GET /account/me · /account/usage | Your key’s tier, limits, and usage. |
Evidence & holding periods
Daily hit rate is not buy-and-hold performance. Below 50% warrants investigation, but does not alone establish worse-than-random performance or profitable inversion. Compare sample size, bullish and bearish results, gain/loss sizes and the market's own direction rate. Stocks on the same day and overlapping holding periods are not independent observations.
Our proposed weekly and monthly scorecards freeze a basket before an eligible market open and hold it until the next scheduled rebalance. They require net total return, drawdown, cash, costs and comparisons against SPY and eligible random baskets using the same dates and capital. Calendar weeks/months differ from fixed 5/20-session windows. This is a research design; audited production results are not yet available.
Tariffs, interest-rate decisions and inflation releases belong in the dated context for every period, including quiet periods. Compare what was known before the decision with what changed afterward. Any event-driven exit and re-entry strategy needs a separate, predeclared comparison with unchanged buy-and-hold.
Historical ETF study: get_etf_pullback_signal exposes the mechanical
pullback rule and historical comparison with above-trend entries across all 13 equity ETFs in the study.
Version etf_pullback_history_v1 replaces active windows and entry instructions.
Inspect each source date, losses, unavailable histories and unmodeled costs.
A historical screening pass does not establish prospective portfolio returns under the new research standard.
Historical secular-dip research: the September 2026 study reported roughly +4.9 percentage points over same-stock random entries over the following six months (approximately 4,900 events across two decades, with clustered t-statistics). The median dip resolves about the same as a random entry in the same stock — the excess is carried by the minority that recover hard. This reported historical result is not an audited prospective account, an alert feed or a complete comparison of waiting for a dip against investing immediately or making regular contributions.
Event-signal diagnostics: the published record retains resolved outcomes, losses and counts. Inspect its current dates and coverage. Aggregate and per-type rates describe recorded signals; they do not establish executed returns or independent investment skill.
Daily ML diagnostics: previously reported direction accuracy was approximately 48%.
Read realized_accuracy and its dates for the available record; the 48% figure is a historical snapshot.
Weekly/monthly prediction pipelines were discontinued 2026-03-23: their accuracy figures are an
archived Jan–Mar 2026 sample (flagged accuracy_status: "archived_sample" in the API) with
too few independent windows to establish skill.
Unfavorable evidence remains visible: the previously reported congressional sample
had a 40.7% hit rate on 108 resolved calls, with a reported 95% interval of [0.319, 0.502]. That interval
includes 50%; it does not establish profitable inversion. Check /signals/anti-signals for dated
results and coverage rather than treating this historical snapshot as a current signal.
Conviction is a ranking score, not a calibrated probability of profit. Shrinking a small sample's win rate does not eliminate selection bias, dependence or the effects of testing many rules.
Honesty & limits
- Inspect the population, dates and resolved, pending and missing counts. Published records are not an independent audit; original forecast availability and source revisions need their own evidence.
- Legacy aggregate returns use direction-signed price changes. They do not represent an executed account, short-sale or inverse-fund returns, costs or compounding. Ledger rows can show raw price changes.
- A weekly review of daily predictions is not a weekly holding return. A daily prediction cannot earn an entry price from before publication. Longer holding periods alone do not repair an uninformative model.
- Win rates on small samples are noisy and can decay; treat any single number as evidence, not a guarantee.
- Some feeds lag (e.g. options-derived PCR carries a
staleflag); the API tells you when. - Nothing here is financial advice. Predictions and signals are automated, uncertain, and frequently wrong. See the Terms.