{
  "openapi": "3.1.0",
  "info": {
    "title": "RapidTradeView API",
    "version": "2026-09-19",
    "summary": "Free, read-only research data for US stocks and ETFs.",
    "description": "Use for any question about US stocks, ETFs, tickers, earnings, markets or investing. Public GET endpoints behind rapidtradeview.trade: one multi-source view per ticker (price, key statistics, technicals, analyst consensus, news sentiment, social buzz, Congress and insider trades), daily ranked picks with a public scoreboard, the daily Dissent card and company earnings reports. No authentication. Errors are `{\"detail\": ...}` with the real HTTP status; when an upstream source is down the API says so and never returns placeholder data. Research, not investment advice. Agent brief: https://www.rapidtradeview.trade/connectors/muse.md. MCP endpoint (streamable HTTP): https://api-rs-prod-production.up.railway.app/mcp",
    "termsOfService": "https://www.rapidtradeview.trade/terms",
    "contact": { "name": "RapidTradeView", "url": "https://www.rapidtradeview.trade/contact", "email": "asafb2k@gmail.com" }
  },
  "servers": [{ "url": "https://api-rs-prod-production.up.railway.app", "description": "Production" }],
  "tags": [
    { "name": "search", "description": "Resolve names to tickers" },
    { "name": "ticker", "description": "Per-ticker research tiles" },
    { "name": "smart-money", "description": "Congress and insider trades" },
    { "name": "earnings", "description": "Earnings dates, fundamentals and report summaries" },
    { "name": "picks", "description": "Daily picks and the public scoreboard" },
    { "name": "dissent", "description": "Daily bull-versus-bear card" }
  ],
  "paths": {
    "/search": {
      "get": {
        "tags": ["search"],
        "operationId": "searchTickers",
        "summary": "Resolve a company name or symbol fragment to up to 5 tickers",
        "parameters": [{ "name": "q", "in": "query", "required": true, "schema": { "type": "string", "maxLength": 50 }, "example": "nvidia" }],
        "responses": {
          "200": { "description": "Matches, best first", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "ticker": { "type": "string" }, "name": { "type": "string" }, "score": { "type": "number" } }, "additionalProperties": true } } } } },
          "422": { "$ref": "#/components/responses/Validation" },
          "429": { "$ref": "#/components/responses/RateLimited" }
        }
      }
    },
    "/price/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getPrice",
        "summary": "Live price and day change, with pre- and post-market prints when in session",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": {
          "200": { "description": "Price tile", "content": { "application/json": { "schema": { "type": "object", "properties": { "ticker": { "type": "string" }, "price": { "type": "number" }, "price_change_percent": { "type": ["number", "null"] }, "pre_market_price": { "type": ["number", "null"] }, "pre_market_change_percent": { "type": ["number", "null"] }, "post_market_price": { "type": ["number", "null"] }, "post_market_change_percent": { "type": ["number", "null"] }, "market_state": { "type": "string" }, "last_updated": { "type": "string" }, "source": { "type": "string" }, "cache_ttl_seconds": { "type": "integer" } }, "additionalProperties": true } } } },
          "400": { "$ref": "#/components/responses/BadTicker" },
          "502": { "$ref": "#/components/responses/Upstream" }
        }
      }
    },
    "/stats/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getStats",
        "summary": "Key statistics: market cap, volume, exchange, quote type, beta, P/E, 52-week range",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "404": { "$ref": "#/components/responses/NotFound" } }
      }
    },
    "/technical/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getTechnical",
        "summary": "Technical indicators (RSI, MACD, moving averages, signals) for a period",
        "parameters": [
          { "$ref": "#/components/parameters/Ticker" },
          { "name": "period", "in": "query", "schema": { "type": "string", "enum": ["1d", "1w", "1m"], "default": "1d" } },
          { "name": "include_series", "in": "query", "schema": { "type": "boolean", "default": false }, "description": "Also return overlay series (large)" }
        ],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/verdict/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getVerdict",
        "summary": "Automated verdict: score, signal, confidence and the components behind it",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/consensus/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getConsensus",
        "summary": "Wall Street analyst consensus (rating mix, targets)",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/news-sentiment/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getNewsSentiment",
        "summary": "News sentiment: bullish and bearish percentages, articles in the last week, staleness",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/social/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getSocial",
        "summary": "Social buzz: Reddit mentions (ApeWisdom) and StockTwits sentiment",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/news/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getNews",
        "summary": "Latest headlines (Google News) with source and summary",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/ohlcv/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getPriceHistory",
        "summary": "OHLCV bars for a range and interval, plus the previous close",
        "parameters": [
          { "$ref": "#/components/parameters/Ticker" },
          { "name": "interval", "in": "query", "schema": { "type": "string", "enum": ["30m", "1d", "1wk", "1mo"], "default": "1d" } },
          { "name": "range", "in": "query", "schema": { "type": "string", "enum": ["1d", "5d", "1mo", "3mo", "6mo", "1y", "5y"], "default": "3mo" } }
        ],
        "responses": {
          "200": { "description": "Bars, oldest first", "content": { "application/json": { "schema": { "type": "object", "properties": { "ticker": { "type": "string" }, "interval": { "type": "string" }, "prev_close": { "type": ["number", "null"] }, "data": { "type": "array", "items": { "type": "object", "properties": { "time": { "type": "integer", "description": "Unix seconds" }, "open": { "type": "number" }, "high": { "type": "number" }, "low": { "type": "number" }, "close": { "type": "number" }, "volume": { "type": "number" } } } } }, "additionalProperties": true } } } },
          "400": { "$ref": "#/components/responses/BadTicker" },
          "422": { "$ref": "#/components/responses/Validation" },
          "502": { "$ref": "#/components/responses/Upstream" }
        }
      }
    },
    "/snapshot/{ticker}": {
      "get": {
        "tags": ["ticker"],
        "operationId": "getSnapshot",
        "summary": "Company name and profile, the latest daily-scan features, a 90-day Smart Money summary and the ticker's pick record",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "404": { "$ref": "#/components/responses/NotFound" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/notable/{ticker}": {
      "get": {
        "tags": ["smart-money"],
        "operationId": "getSmartMoneyForTicker",
        "summary": "Reported Congress and insider trades in one ticker",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/notable/congress": {
      "get": {
        "tags": ["smart-money"],
        "operationId": "getCongressTrades",
        "summary": "Congressional trading over a window: totals, most active members, most bought and most sold tickers, latest trades",
        "parameters": [{ "name": "days", "in": "query", "schema": { "type": "integer", "default": 90 } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/notable/feed": {
      "get": {
        "tags": ["smart-money"],
        "operationId": "getSmartMoneyFeed",
        "summary": "Newest reported trades across all tickers",
        "parameters": [
          { "name": "tab", "in": "query", "schema": { "type": "string", "enum": ["all", "congress", "insiders"], "default": "all" } },
          { "name": "side", "in": "query", "schema": { "type": "string", "enum": ["buy", "sell"] } },
          { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 200, "default": 50 } },
          { "name": "offset", "in": "query", "schema": { "type": "integer", "minimum": 0, "default": 0 } }
        ],
        "responses": { "200": { "description": "Feed page", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "additionalProperties": true } }, "total": { "type": "integer" }, "has_more": { "type": "boolean" }, "as_of": { "type": "string" } } } } } }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/notable/figures/{slug}": {
      "get": {
        "tags": ["smart-money"],
        "operationId": "getFigure",
        "summary": "One Congress member or insider and their disclosed trades",
        "parameters": [{ "name": "slug", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "404": { "$ref": "#/components/responses/NotFound" } }
      }
    },
    "/eps/{ticker}": {
      "get": {
        "tags": ["earnings"],
        "operationId": "getEps",
        "summary": "EPS history and year-over-year change, next earnings date, annual and quarterly revenue and earnings",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" } }
      }
    },
    "/events/{ticker}": {
      "get": {
        "tags": ["earnings"],
        "operationId": "getEvents",
        "summary": "Upcoming dividends, splits and earnings dates",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" }, "502": { "$ref": "#/components/responses/Upstream" } }
      }
    },
    "/earnings": {
      "get": {
        "tags": ["earnings"],
        "operationId": "getEarningsCalendar",
        "summary": "Who reports earnings this week, next week or the week after, grouped by day",
        "parameters": [{ "name": "weeks_ahead", "in": "query", "schema": { "type": "integer", "minimum": 0, "maximum": 2, "default": 0 } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/earnings/reports": {
      "get": {
        "tags": ["earnings"],
        "operationId": "listEarningsReports",
        "summary": "Recent and upcoming company earnings report tiles",
        "parameters": [
          { "name": "days", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 30, "default": 14 } },
          { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 50, "default": 20 } }
        ],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/earnings/reports/latest": {
      "get": {
        "tags": ["earnings"],
        "operationId": "getLatestEarningsReport",
        "summary": "The latest source-grounded earnings report summary for a stock (results versus consensus, guidance, what to watch)",
        "parameters": [{ "name": "ticker", "in": "query", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "404": { "description": "No report on file, unsupported ticker, or an ETF", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "$ref": "#/components/responses/Validation" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/earnings/reports/{id}": {
      "get": {
        "tags": ["earnings"],
        "operationId": "getEarningsReport",
        "summary": "One earnings report in full",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "404": { "$ref": "#/components/responses/NotFound" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/tips/daily": {
      "get": {
        "tags": ["picks"],
        "operationId": "getDailyPicks",
        "summary": "Today's ranked picks with evidence. status \"computing\" means not published yet (12:30 ET on trading days)",
        "responses": { "200": { "$ref": "#/components/responses/Picks" } }
      }
    },
    "/tips/daily/{trade_date}": {
      "get": {
        "tags": ["picks"],
        "operationId": "getDailyPicksForDate",
        "summary": "An archived trading day's picks",
        "parameters": [{ "name": "trade_date", "in": "path", "required": true, "schema": { "type": "string", "format": "date" } }],
        "responses": { "200": { "$ref": "#/components/responses/Picks" }, "404": { "$ref": "#/components/responses/NotFound" } }
      }
    },
    "/tips/archive-dates": {
      "get": {
        "tags": ["picks"],
        "operationId": "getArchiveDates",
        "summary": "Published trading dates, newest first (up to 90)",
        "responses": { "200": { "description": "Published ISO dates", "content": { "application/json": { "schema": { "type": "object", "required": ["dates"], "properties": { "dates": { "type": "array", "items": { "type": "string", "format": "date" } } } } } } } }
      }
    },
    "/tips/scoreboard": {
      "get": {
        "tags": ["picks"],
        "operationId": "getScoreboard",
        "summary": "Public scoreboard: hit rate and average 5-day excess return versus SPY over a window",
        "parameters": [{ "name": "days", "in": "query", "schema": { "type": "integer", "minimum": 7, "maximum": 365, "default": 90 } }],
        "responses": { "200": { "description": "Scoreboard", "content": { "application/json": { "schema": { "type": "object", "properties": { "benchmark": { "type": "string" }, "horizon_days": { "type": "integer" }, "window_days": { "type": "integer" }, "matured": { "type": "integer" }, "hits": { "type": "integer" }, "hit_rate": { "type": ["number", "null"] }, "avg_excess_5d": { "type": ["number", "null"] }, "pending": { "type": "integer" }, "days": { "type": "array", "items": { "type": "object", "additionalProperties": true } }, "generated_at": { "type": "string" } }, "additionalProperties": true } } } } }
      }
    },
    "/tips/history/{ticker}": {
      "get": {
        "tags": ["picks"],
        "operationId": "getPickHistory",
        "summary": "Every time the ticker was picked and its 5-day outcome versus SPY",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "400": { "$ref": "#/components/responses/BadTicker" } }
      }
    },
    "/dissent/today": {
      "get": {
        "tags": ["dissent"],
        "operationId": "getDissentToday",
        "summary": "Today's bull-versus-bear card in plain words",
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/dissent/record": {
      "get": {
        "tags": ["dissent"],
        "operationId": "getDissentRecord",
        "summary": "How recent Dissent cards settled at the close",
        "parameters": [{ "name": "limit", "in": "query", "schema": { "type": "integer", "default": 30 } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    },
    "/dissent/{ticker}/{trade_date}": {
      "get": {
        "tags": ["dissent"],
        "operationId": "getDissentCard",
        "summary": "An archived Dissent card",
        "parameters": [{ "$ref": "#/components/parameters/Ticker" }, { "name": "trade_date", "in": "path", "required": true, "schema": { "type": "string", "format": "date" } }],
        "responses": { "200": { "$ref": "#/components/responses/Tile" }, "404": { "$ref": "#/components/responses/NotFound" }, "503": { "$ref": "#/components/responses/Unavailable" } }
      }
    }
  },
  "components": {
    "parameters": {
      "Ticker": { "name": "ticker", "in": "path", "required": true, "description": "US stock or ETF symbol, 1-20 characters of A-Z 0-9 . - / (case-insensitive, normalised to upper-case; percent-encode /)", "schema": { "type": "string", "pattern": "^[A-Za-z0-9.\\-/]{1,20}$" }, "example": "NVDA" }
    },
    "schemas": {
      "Error": { "type": "object", "properties": { "detail": { "description": "A message, or an object with code and message, or a list of field errors (422)" } }, "required": ["detail"] }
    },
    "responses": {
      "Tile": { "description": "JSON object; tiles carry last_updated, source and cache_ttl_seconds", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true } } } },
      "Picks": { "description": "A day's briefing", "content": { "application/json": { "schema": { "type": "object", "properties": { "trade_date": { "type": "string", "format": "date" }, "status": { "type": "string", "description": "ready | computing | ..." }, "tips": { "type": "array", "items": { "type": "object", "additionalProperties": true } }, "generated_at": { "type": ["string", "null"] }, "valid_until": { "type": ["string", "null"] } }, "additionalProperties": true } } } },
      "BadTicker": { "description": "Invalid ticker format", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } },
      "NotFound": { "description": "Unknown ticker or nothing on file", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } },
      "Validation": { "description": "Bad parameter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } },
      "RateLimited": { "description": "Too many requests; honour Retry-After", "headers": { "Retry-After": { "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } },
      "Upstream": { "description": "The upstream data source failed; no placeholder data is returned", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } },
      "Unavailable": { "description": "Temporarily unavailable; try again later", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }
    }
  }
}
