MoneySignals

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:

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

TierPriceUnlocksLimits
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).

ToolReturns
get_track_recordno keyRecorded event-signal win rate, average signed return and resolved count. Inspect dates and missing outcomes; this is not an account return.
get_latest_predictionsfree keyLatest stored daily ML predictions and recorded direction accuracy; inspect freshness.
get_ticker_predictionfree keyLatest prediction for one ticker.
get_prediction_accuracyfree keyRecorded direction accuracy with timeframe and coverage labels; not holding-period returns.
get_market_regimefree keyRISK_ON/OFF, VIX, SPY vs 200MA, position multiplier — the risk gate.
get_economic_calendarfree keyUpcoming US economic events (FOMC/CPI/NFP), impact-rated.
get_anomaliesfree keyToday’s statistical outliers (≥σ daily moves) + reversal context.
get_market_characterfree keyDispersion gauge comparing single-stock moves with historical years; inspect observation dates.
get_world_evidencefree keyOriginal-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_conditionsFreeTreasury 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_briefingFreeImportant developments by topic, related source reports, reviewed advisories and M7+ observations. Grouping does not establish independent confirmation.
get_intelligence_sourcesfree keySource configuration, collection health and coverage. Reads stored status; does not activate providers or access private accounts.
get_fear_greedfree keyFear & Greed index.
get_put_call_ratiofree keyPut/call ratio (with a freshness flag).
get_ohlcvfree keyRecent daily OHLCV bars for a ticker.
get_etf_pullback_signalfree keyHistorical 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_scoreboardfree keyFinance-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_ledgerfree keyHistorical 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_consensusfree keyWhat 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_shiftfree keyWhat 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_calibrationfree keyWhether 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_signalsfree keySource inversion research with measured categories and denominators. Inspect current status and dates; below-50% accuracy alone does not establish profitable inversion.
get_crowd_divergencepremiumWhere 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_briefpremiumAggregate daily diagnostics, historical holding comparisons and prospective outcomes, with dates and limitations.
get_best_signalspremiumRetired ranked-pick tool; returns an explicit error. Use get_daily_brief for aggregate evidence.
get_trade_planpremiumRetired trade-action tool; returns an explicit error, not buy/short instructions.
get_signal_performancepremiumPer-event-type historical win rates and sample counts; inspect uncertainty and dates.
get_event_signalspremiumAll live event signals, each with its measured type win-rate.
get_congress_tradespremiumCongressional disclosures (raw — has underperformed in our sample, but not a confirmed anti-signal; see get_anti_signals).
get_social_sentimentprofessionalReddit mention/upvote volume for a ticker.
get_social_trendingprofessionalTickers trending on social (finance-filtered).
get_account_usageprofessionalYour 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 & pathWhat it does
GET /signals/briefVersioned aggregate research brief; each panel has source dates and ready, pending or unavailable evidence.
GET /signals/etf-pullback free keyETF pullback rule status and historical comparison; see the selection limitations below.
GET /signals/youtube-scoreboard free keyFinance-YouTube creator scoreboard: per-creator graded accuracy (Wilson-95 LB) + calls pending resolution. Third-party forecasts, tracked and attributed.
GET /signals/bestRetired: HTTP 410 with a link to the aggregate research brief. Not an empty successful screen.
GET /signals/performancePer-(event_type, second_order) realized win rates, labeled strong→anti-signal.
GET /signals/eventsAll live event signals + each one’s historical type win-rate.
GET /signals/congress-tradesCongressional disclosures (raw; has underperformed, but not a confirmed anti-signal).
GET /track-record freeRecorded event-signal outcomes, not cumulative account returns (no /api/v1 prefix).

Predictions

Works with the free key (/predictions/batch is Professional).

Method & pathWhat it does
GET /predictions/latestLatest daily ML predictions + top-level realized_accuracy.
GET /predictions/{ticker}Latest predictions for one ticker, across timeframes.
GET /predictions/accuracyRecorded 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/batchPredictions 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 & pathWhat it does
GET /market/regimeRisk regime: VIX, SPY vs 200MA, position multiplier.
GET /market/economic-calendarUpcoming US economic events, impact-rated (?impact=high).
GET /market/economySaved 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/calendarMerged 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/anomaliesToday’s ≥σ daily-move outliers + next-day reversal stats.
GET /market/characterMarket-character/dispersion gauge vs 2015–2025 full-year references (?window= trading days).
GET /market/ohlcv/{ticker}Recent daily/weekly/monthly bars.
GET /market/fear-greedFear & Greed index history.
GET /market/pcrMarket 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 & pathWhat it does
GET /social/trendingTrending tickers (finance-filtered; ?platform= for raw feeds).
GET /social/sentiment?ticker=Reddit mention/upvote volume for a ticker.
GET /alternative/flightsDC-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 · /hearingsLobbying filings & congressional hearings by ticker.
GET /account/me · /account/usageYour 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