{"openapi":"3.1.0","info":{"title":"StockMarketScan API","description":"Stock screener, options flow, chart pattern, market breadth, and trend\ndata as JSON. Data only: nothing in this API is investment advice.\n\n## Authentication\n\n**Direct API key.** Generate at [Settings](https://stockmarketscan.com/settings)\n(Basic or Pro plan). Send it as `X-API-Key: sms_...` or as\n`Authorization: Bearer sms_...`. MCP connector tokens (`mct_...`) are\naccepted the same way and resolve to their owner's plan.\n\n**RapidAPI.** Subscribe via the RapidAPI marketplace and send the standard\n`X-RapidAPI-Key` and `X-RapidAPI-Host` headers. RapidAPI subscribers get\nPro-tier access.\n\n## Responses\n\nEvery successful JSON response is an envelope:\n`{ \"data\": <array or object>, \"meta\": { ... } }`. `meta.generated_at` is\nthe UTC time the response was produced, `meta.as_of` is the trading date\nof the underlying data (null when there is none), and `meta.parameters`\nshows the parameters that were applied after defaults. All fields are\nsnake_case. Numbers are JSON numbers, trading dates are `YYYY-MM-DD`,\ntimestamps are RFC 3339 UTC, and missing values are `null`, never `\"\"`.\n\n## Pagination\n\nList endpoints take `limit` and `cursor`. Follow\n`meta.pagination.next_cursor` (also sent as `Link: <...>; rel=\"next\"`)\nuntil it is null. The first page pins the data snapshot, so a data\nrefresh while you page does not mix snapshots. A malformed cursor, or one\nissued for other parameters, returns 400 `INVALID_CURSOR`.\n\n## Errors\n\nErrors are RFC 9457 `application/problem+json` documents with the\nextension members `code` (stable, machine-readable) and `request_id`\n(also sent as `X-Request-Id`). Parameter errors list each offending\nparameter in `errors`. You may send your own `X-Request-Id` (up to 128\ncharacters of `A-Z a-z 0-9 . _ -`) to correlate logs.\n\n## Rate limits\n\n| Plan     | Per minute | Per day | Per month |\n|----------|-----------:|--------:|----------:|\n| Free     |          - |       - |         - |\n| Basic    |         15 |     500 |    10,000 |\n| Pro      |         30 |   2,000 |    50,000 |\n| RapidAPI | RapidAPI plan | 10,000 safety cap | RapidAPI plan |\n\nAuthenticated responses carry `RateLimit-Policy` and `RateLimit` (IETF\nformat) plus the legacy `X-RateLimit-*` and `X-RateLimit-Monthly-*`\nheaders. A 429 always carries `Retry-After` in seconds. The monthly quota\nis shared by the REST API and the MCP server and resets on the 1st of each\nmonth, UTC: every API request counts once, and composite MCP tools make\nseveral requests. Only requests that end in 2xx or 5xx count; 400, 401,\n403, 404 and 304 responses do not. Public endpoints allow 30 requests per\nminute per IP without a key.\n\n## Caching\n\nData responses carry `Cache-Control: private, max-age=60`, a weak `ETag`\nand `Vary: Authorization, X-API-Key`. Send the ETag back as\n`If-None-Match`: an unchanged resource returns 304 with no body and does\nnot count against your quota.\n\nBreaking changes are announced at https://stockmarketscan.com/docs/changelog\nat least 14 days before they take effect.\n","version":"2.0.0","contact":{"name":"StockMarketScan Support","email":"contact@stockmarketscan.com","url":"https://stockmarketscan.com"},"license":{"name":"Proprietary","url":"https://stockmarketscan.com/terms"},"x-rate-limits":[{"plan":"Free","perMinute":null,"perDay":null,"perMonth":null,"note":"No API access"},{"plan":"Basic","perMinute":15,"perDay":500,"perMonth":10000},{"plan":"Pro","perMinute":30,"perDay":2000,"perMonth":50000},{"plan":"RapidAPI","perMinute":null,"perDay":10000,"perMonth":null,"note":"Per RapidAPI plan plus a 10,000/day backend safety cap"}]},"servers":[{"url":"https://stockmarketscan.com/api/v1","description":"Production"}],"security":[{"ApiKeyAuth":[]},{"BearerAuth":[]},{"RapidApiKey":[]}],"tags":[{"name":"Health","description":"Liveness and database probes. Public, no auth."},{"name":"Screeners","description":"24 curated screeners with full table data, column metadata, and tier requirements."},{"name":"Patterns","description":"Chart pattern detection per symbol or across screener cohorts."},{"name":"Options Flow","description":"Daily aggregated options flow per symbol, per-symbol timelines, ranked\ndaily flow records with subsequent price data, daily market-wide\ncall/put statistics, and unusual contract activity. Pro tier.\n"},{"name":"Trends","description":"AI-detected trending topics and cross-category connections. Pro tier."},{"name":"Market Breadth","description":"NYSE and NASDAQ advance/decline and new-highs/new-lows data."},{"name":"Stock Data","description":"Stock metadata and OHLCV candles for any supported symbol."},{"name":"Search","description":"Symbol and company-name search plus reverse screener lookup. Public with a per-IP limit; an API key lifts it."}],"x-success-headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"x-error-headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"paths":{"/ping":{"get":{"operationId":"ping","tags":["Health"],"summary":"Liveness probe","description":"Returns immediately without touching the database. No authentication, never cached.","security":[],"x-tier":"public","responses":{"200":{"description":"Service is up","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"object","required":["status"],"additionalProperties":false,"properties":{"status":{"type":"string","enum":["ok"]}}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"}],"unevaluatedProperties":false}}},"example":{"data":{"status":"ok"},"meta":{"generated_at":"2026-09-28T10:00:00Z"}}}}},"500":{"$ref":"#/components/responses/Error500"}}}},"/health":{"get":{"operationId":"getHealth","tags":["Health"],"summary":"Health check","description":"Service status and database reachability. No authentication, never cached.","security":[],"x-tier":"public","responses":{"200":{"description":"Service healthy","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Health"},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"}],"unevaluatedProperties":false}}},"example":{"data":{"status":"ok","version":"v1","db":{"reachable":true,"latency_ms":9}},"meta":{"generated_at":"2026-09-28T10:00:00Z"}}}}},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/screeners":{"get":{"operationId":"listScreeners","tags":["Screeners"],"summary":"List all screeners","description":"Metadata for all 24 screeners, including each row field with its JSON\n`value_type`, and the tier each screener requires. The API key is\noptional: without one only the free screeners report\n`accessible: true`. Not paginated.\n","security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]},{"RapidApiKey":[]}],"x-tier":"public","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Screener catalog","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Screener"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["caller_tier","total","accessible"],"properties":{"caller_tier":{"$ref":"#/components/schemas/Tier"},"total":{"type":"integer","description":"Number of screeners."},"accessible":{"type":"integer","description":"Screeners whose rows your plan can read."}}}],"unevaluatedProperties":false}}},"example":{"data":[{"slug":"golden-cross","name":"Golden Cross","description":"Stocks whose 50-day moving average just crossed above the 200-day moving average","category":"technical","tier":"basic","accessible":true,"columns":[{"key":"symbol","label":"Symbol","type":"text","value_type":"string"},{"key":"last_price","label":"Price","type":"price","value_type":"number"},{"key":"macd_50_to_200d_new_signal","label":"Signal","type":"signal","value_type":"string"}]}],"meta":{"generated_at":"2026-09-25T20:15:03Z","caller_tier":"pro","total":24,"accessible":24}}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/screeners/{slug}":{"get":{"operationId":"getScreenerRows","tags":["Screeners"],"summary":"Screener rows","description":"One row per symbol (per exchange for `market-momentum`) from a single\nscreener snapshot, ordered by that key ascending. The first page uses\nthe latest snapshot unless `date` is given; its cursor pins that\nsnapshot, so later pages never mix snapshots. The fields of each\nscreener are the `ScreenerRow<Slug>` schemas. The tier required\ndepends on the screener (see `tier` in the catalog).\n","x-tier":"basic","parameters":[{"name":"slug","in":"path","required":true,"description":"Screener slug from `GET /screeners`.","schema":{"$ref":"#/components/schemas/ScreenerSlug"},"example":"golden-cross"},{"name":"limit","in":"query","description":"Page size.","schema":{"type":"integer","default":50,"minimum":1,"maximum":500}},{"$ref":"#/components/parameters/Cursor"},{"name":"date","in":"query","description":"Snapshot date. Defaults to the latest snapshot.","schema":{"type":"string","format":"date"},"example":"2026-09-25"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Screener rows","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ScreenerRow"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","screener","pagination","parameters"],"properties":{"screener":{"type":"object","required":["slug","name","tier"],"additionalProperties":false,"properties":{"slug":{"$ref":"#/components/schemas/ScreenerSlug"},"name":{"type":"string"},"tier":{"$ref":"#/components/schemas/Tier"}}},"parameters":{"type":"object","required":["limit","date"],"additionalProperties":false,"properties":{"limit":{"type":"integer"},"date":{"type":["string","null"],"format":"date"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"NVDA","symbol_name":"NVIDIA Corp","last_price":181.85,"macd_50_to_200d_new_signal":"Buy","average_volume_20d":2069031,"exchange":"NASDAQ","industry":"Semiconductors","data_date":"2026-09-25"}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T20:15:03Z","screener":{"slug":"golden-cross","name":"Golden Cross","tier":"basic"},"pagination":{"limit":50,"next_cursor":"eyJ2IjoxLCJkIjoiMjAyNi0wOS0yNSIsImsiOlsiTlZEQSJdLCJmIjoiYWJjIn0","total":412},"parameters":{"limit":50,"date":null}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"404":{"$ref":"#/components/responses/Error404"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/patterns/{symbol}":{"get":{"operationId":"getSymbolPatterns","tags":["Patterns"],"summary":"Detected patterns for a symbol","description":"The most recent pattern computation for one symbol. When nothing has\nbeen computed, `patterns` is empty and `computed_at` is null.\n","x-tier":"basic","parameters":[{"$ref":"#/components/parameters/Symbol"},{"$ref":"#/components/parameters/Interval"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Pattern list","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/SymbolPatterns"},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of"]}],"unevaluatedProperties":false}}},"example":{"data":{"symbol":"NVDA","interval":"1d","computed_at":"2026-09-25T21:05:11Z","candle_count":250,"patterns":[{"id":"cup_handle","name":"Cup and Handle","type":"bullish","category":"continuation","confidence":72,"points":[{"index":180,"date":"2026-06-02","price":142.1,"label":"Left rim"},{"index":246,"date":"2026-09-19","price":176.9,"label":"Right rim"}],"lines":[{"points":[{"date":"2026-06-02","price":142.1},{"date":"2026-09-19","price":176.9}],"style":"dashed"}],"target_price":225.4,"last_structural_point":{"index":246,"date":"2026-09-19","price":176.9,"label":null}}]},"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/patterns":{"post":{"operationId":"searchPatterns","tags":["Patterns"],"summary":"Pattern search across screeners","description":"For each requested screener, takes the stocks on its latest snapshot\nand returns those with a recent pattern (computed within 3 days for\n`1d`, 14 days for `1wk`). Unknown slugs are 400 `SCREENER_NOT_FOUND`,\nscreeners above your plan are 403 `SCREENER_NOT_ACCESSIBLE`, unknown\npattern ids are 400 `INVALID_PARAMETER`. Grouped per screener and\ncapped by `limit` per group; not cursor-paginated. Not cached.\n","x-tier":"basic","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["screeners"],"properties":{"screeners":{"type":"array","items":{"$ref":"#/components/schemas/ScreenerSlug"},"minItems":1,"maxItems":24,"example":["hot-prospects","golden-cross"]},"patterns":{"type":"array","description":"Pattern ids to keep. Empty or omitted means any pattern.","items":{"$ref":"#/components/schemas/PatternId"},"example":["head_shoulders","cup_handle"]},"interval":{"type":"string","enum":["1d","1wk"],"default":"1d"},"limit":{"type":"integer","default":100,"minimum":1,"maximum":500,"description":"Max stocks per screener group."}}}}}},"responses":{"200":{"description":"Pattern search results","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PatternSearchGroup"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","total_unique_stocks","parameters"],"properties":{"total_unique_stocks":{"type":"integer","description":"Unique symbols matched across all groups, before truncation."},"parameters":{"type":"object","required":["screeners","patterns","interval","limit"],"additionalProperties":false,"properties":{"screeners":{"type":"array","items":{"type":"string"}},"patterns":{"type":"array","items":{"type":"string"}},"interval":{"type":"string","enum":["1d","1wk"]},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"screener_slug":"hot-prospects","screener_name":"Hot Prospects","count":1,"truncated":false,"stocks":[{"symbol":"NVDA","symbol_name":"NVIDIA Corp","exchange":"NASDAQ","industry":"Semiconductors","last_price":181.85,"volume":201345600,"data_date":"2026-09-25","matched_patterns":[{"id":"cup_handle","label":"Cup and Handle","direction":"bullish","strength":72,"forming_status":"forming"}]}]}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","total_unique_stocks":1,"parameters":{"screeners":["hot-prospects"],"patterns":["cup_handle"],"interval":"1d","limit":100}}}}}},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/options-flow":{"get":{"operationId":"getOptionsFlowDaily","tags":["Options Flow"],"summary":"Daily flow overview","description":"Aggregated unusual-options flow per symbol for one trading day, plus\nmarket-wide totals for that day in `meta.market_stats`. A date without\ndata returns an empty `data` array. Orders: `streak` =\nconsecutive_days desc, total_volume desc, symbol asc; `volume` =\ntotal_volume desc, symbol asc; `callput` = call/put volume ratio desc,\nsymbol asc; `premium` = call + put premium desc, symbol asc. Nulls sort\nlast. The cursor pins the trading day. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"date","in":"query","description":"Trading date. Defaults to the latest available day.","schema":{"type":"string","format":"date"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["streak","volume","callput","premium"],"default":"streak"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":500}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Options flow for one day","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsFlowDay"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","market_stats","available_dates","pagination","parameters"],"properties":{"market_stats":{"anyOf":[{"$ref":"#/components/schemas/OptionsFlowMarketStats"},{"type":"null"}]},"available_dates":{"type":"array","description":"Up to 60 most recent trading dates with data, newest first.","items":{"type":"string","format":"date"}},"parameters":{"type":"object","required":["date","sort","limit"],"additionalProperties":false,"properties":{"date":{"type":["string","null"],"format":"date"},"sort":{"type":"string","enum":["streak","volume","callput","premium"]},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"NVDA","data_date":"2026-09-25","stock_price":181.85,"call_contracts":41,"call_volume":912345,"call_open_interest":1543210,"call_avg_vol_oi":2.41,"call_avg_iv":48.2,"call_avg_delta":0.41,"call_total_premium":98234500,"put_contracts":12,"put_volume":301234,"put_open_interest":823456,"put_avg_vol_oi":1.8,"put_avg_iv":51.3,"put_avg_delta":0.37,"put_total_premium":21345000,"total_volume":1213579,"total_oi":2366666,"call_put_volume_ratio":3.03,"call_put_oi_ratio":1.87,"net_delta":0.21,"avg_days_to_expiry":17.4,"consecutive_days":6}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","market_stats":{"total_symbols":412,"total_market_volume":58123456,"total_call_volume":33456789,"total_put_volume":24666667,"market_call_put_ratio":1.36,"avg_streak":3.42,"max_streak":19},"available_dates":["2026-09-25","2026-09-24"],"pagination":{"limit":100,"next_cursor":null,"total":412},"parameters":{"date":null,"sort":"streak","limit":100}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/options-flow/{symbol}":{"get":{"operationId":"getOptionsFlowTimeline","tags":["Options Flow"],"summary":"Per-symbol timeline","description":"Daily flow rows for one symbol, newest first (data_date desc). Pro tier required.","x-tier":"pro","parameters":[{"$ref":"#/components/parameters/Symbol"},{"name":"limit","in":"query","description":"Trading days per page.","schema":{"type":"integer","default":60,"minimum":1,"maximum":365}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Timeline rows","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsFlowDay"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["symbol","limit"],"additionalProperties":false,"properties":{"symbol":{"type":"string"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"NVDA","data_date":"2026-09-25","stock_price":181.85,"call_contracts":41,"call_volume":912345,"call_open_interest":1543210,"call_avg_vol_oi":2.41,"call_avg_iv":48.2,"call_avg_delta":0.41,"call_total_premium":98234500,"put_contracts":12,"put_volume":301234,"put_open_interest":823456,"put_avg_vol_oi":1.8,"put_avg_iv":51.3,"put_avg_delta":0.37,"put_total_premium":21345000,"total_volume":1213579,"total_oi":2366666,"call_put_volume_ratio":3.03,"call_put_oi_ratio":1.87,"net_delta":0.21,"avg_days_to_expiry":17.4,"consecutive_days":6}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":60,"next_cursor":null},"parameters":{"symbol":"NVDA","limit":60}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/options-flow/signals":{"get":{"operationId":"getOptionsFlowRanked","tags":["Options Flow"],"summary":"Ranked daily flow records","description":"Stored flow records with screener confluence and subsequent price\ndata, ordered by signal_date desc, strength_score desc, symbol asc,\nsignal_type asc. `date_from` and `date_to` are inclusive and either\nmay be sent alone. Without both, the window starts 60 days before the\nlatest record day; the effective start is in\n`meta.parameters.date_from` and is pinned by the cursor. Data only,\nnot a recommendation. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"date_from","in":"query","schema":{"type":"string","format":"date"}},{"name":"date_to","in":"query","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","schema":{"type":"integer","default":500,"minimum":1,"maximum":2000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Flow records","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsFlowRecord"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["date_from","date_to","limit"],"additionalProperties":false,"properties":{"date_from":{"type":["string","null"],"format":"date"},"date_to":{"type":["string","null"],"format":"date"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"NVDA","signal_date":"2026-09-25","signal_type":"strong_bullish","side":"bullish","call_put_ratio":3.03,"call_put_oi_ratio":1.87,"near_earnings":false,"next_earnings_date":"2026-11-19","call_volume":912345,"put_volume":301234,"total_volume":1213579,"total_oi":2366666,"call_avg_iv":48.2,"put_avg_iv":51.3,"total_premium":119579500,"consecutive_days":6,"signal_price":181.85,"entry_price":null,"entry_date":null,"net_delta":0.21,"avg_days_to_expiry":17.4,"strength_score":11,"bullish_screener_hits":2,"bearish_screener_hits":0,"bullish_screener_list":["golden-cross","top-tech-stocks"],"bearish_screener_list":[],"market_breadth_score":61,"market_call_put_ratio":1.36,"market_context":"mixed","current_price":181.85,"high_since":null,"low_since":null,"price_change_pct":null,"max_gain_pct":null,"max_drawdown_pct":null,"max_high_date":null,"min_low_date":null}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":500,"next_cursor":null},"parameters":{"date_from":"2026-07-27","date_to":null,"limit":500}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/options-flow/sentiment":{"get":{"operationId":"getOptionsFlowSentiment","tags":["Options Flow"],"summary":"Daily market call/put statistics","description":"One row per trading day, newest first. `date_from` and `date_to` are\ninclusive and either may be sent alone; without both, the last 60 days\nbefore the latest day. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"date_from","in":"query","schema":{"type":"string","format":"date"}},{"name":"date_to","in":"query","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Daily statistics","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SentimentDay"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["date_from","date_to","limit"],"additionalProperties":false,"properties":{"date_from":{"type":["string","null"],"format":"date"},"date_to":{"type":["string","null"],"format":"date"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"date":"2026-09-25","market_breadth_score":61,"market_call_put_ratio":1.36,"context":"mixed","bullish_count":7,"bearish_count":2,"sentiment_score":86,"sentiment_label":"bullish"}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":100,"next_cursor":null},"parameters":{"date_from":"2026-07-27","date_to":null,"limit":100}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/options-flow/unusual":{"get":{"operationId":"getUnusualOptions","tags":["Options Flow"],"summary":"Unusual contract activity","description":"Individual option contracts from the latest trading day, ranked by\nvol/OI times ln(premium), descending (ties by contract id). All filters\napply before paging. Fixed floor: open interest at least 100. The cursor\npins the trading day. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"symbol","in":"query","description":"Only contracts on this underlying.","schema":{"type":"string","pattern":"^[A-Za-z0-9.^=\\-]{1,20}$"}},{"name":"side","in":"query","description":"Case-insensitive.","schema":{"type":"string","enum":["call","put","both"],"default":"both"}},{"name":"min_vol_oi","in":"query","schema":{"type":"number","minimum":0,"default":1.5}},{"name":"min_premium_usd","in":"query","schema":{"type":"number","minimum":0,"default":25000}},{"name":"max_dte","in":"query","description":"Maximum days to expiration. No filter when omitted.","schema":{"type":"integer","minimum":0,"maximum":3000}},{"name":"limit","in":"query","schema":{"type":"integer","default":300,"minimum":1,"maximum":1000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Unusual contracts","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UnusualContract"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["symbol","side","min_vol_oi","min_premium_usd","max_dte","limit"],"additionalProperties":false,"properties":{"symbol":{"type":["string","null"]},"side":{"type":"string","enum":["call","put","both"]},"min_vol_oi":{"type":"number"},"min_premium_usd":{"type":"number"},"max_dte":{"type":["integer","null"]},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"NVDA","option_symbol":"NVDA|20261016|190.00C","symbol_type":"Call","base_last_price":181.85,"strike_price":190,"expiration_date":"2026-10-16","days_to_expiration":21,"last_price":4.35,"bid_price":4.3,"midpoint":4.35,"ask_price":4.4,"volume":11025,"open_interest":3872,"volume_oi_ratio":2.85,"volatility":45.85,"delta":0.3672,"trade_time":"16:00 ET","data_date":"2026-09-25"}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":300,"next_cursor":null},"parameters":{"symbol":null,"side":"both","min_vol_oi":1.5,"min_premium_usd":25000,"max_dte":null,"limit":300}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/trends":{"get":{"operationId":"getTrends","tags":["Trends"],"summary":"AI-detected topics","description":"Trending topics of one category. Choose one window: `date` (one day),\n`latest=1` (the most recent day), or `days` (the last N days, the\ndefault with 10). Sending more than one is 400. Ordered by date desc,\nweight desc, topic asc. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"category","in":"query","schema":{"type":"string","enum":["techscience","patents","fundingevents"],"default":"techscience"}},{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"latest","in":"query","description":"`1` or `true` returns only the most recent day.","schema":{"type":"string","enum":["1","0","true","false"]}},{"name":"days","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":180}},{"name":"limit","in":"query","schema":{"type":"integer","default":500,"minimum":1,"maximum":1000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Topics","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TrendTopic"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["category","date","latest","days","limit"],"additionalProperties":false,"properties":{"category":{"type":"string","enum":["techscience","patents","fundingevents"]},"date":{"type":["string","null"],"format":"date"},"latest":{"type":"boolean"},"days":{"type":["integer","null"]},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"date":"2026-09-25","topic":"Solid-state batteries","weight":0.82},{"date":"2026-09-25","topic":"Photonic interconnects","weight":0.64}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":500,"next_cursor":null},"parameters":{"category":"techscience","date":null,"latest":true,"days":null,"limit":500}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/trend-connections":{"get":{"operationId":"getTrendConnections","tags":["Trends"],"summary":"Cross-category connections","description":"Model-validated links between topics of different categories. Choose\none window: `date`, `latest=1`, or `days` (default 14). Sending more\nthan one is 400. Ordered by date desc, strength desc. Pro tier required.\n","x-tier":"pro","parameters":[{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"latest","in":"query","schema":{"type":"string","enum":["1","0","true","false"]}},{"name":"days","in":"query","schema":{"type":"integer","default":14,"minimum":1,"maximum":90}},{"name":"limit","in":"query","schema":{"type":"integer","default":200,"minimum":1,"maximum":1000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Connections","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TrendConnection"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["date","latest","days","limit"],"additionalProperties":false,"properties":{"date":{"type":["string","null"],"format":"date"},"latest":{"type":"boolean"},"days":{"type":["integer","null"]},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"date":"2026-09-25","source_category":"techscience","source_topic":"Solid-state batteries","target_category":"fundingevents","target_topic":"Battery startup Series C rounds","strength":0.78,"rationale":"Both describe commercial scale-up of solid electrolyte cells."}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":200,"next_cursor":null},"parameters":{"date":null,"latest":true,"days":null,"limit":200}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/market-momentum":{"get":{"operationId":"getMarketMomentum","tags":["Market Breadth"],"summary":"NYSE/NASDAQ advance-decline data","description":"One row per exchange per trading day, ordered by data_date desc,\nexchange asc. Send `date` for one day, or `date_from` and/or `date_to`\nfor an inclusive range (either may be sent alone), but not both kinds.\nWithout dates: the last 7 trading days (the window is pinned by the\ncursor).\n","x-tier":"basic","parameters":[{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"date_from","in":"query","schema":{"type":"string","format":"date"}},{"name":"date_to","in":"query","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"minimum":1,"maximum":1000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Market breadth rows","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MarketMomentumRow"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["date","date_from","date_to","limit"],"additionalProperties":false,"properties":{"date":{"type":["string","null"],"format":"date"},"date_from":{"type":["string","null"],"format":"date"},"date_to":{"type":["string","null"],"format":"date"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"data_date":"2026-09-25","exchange":"NASDAQ","advancing_issues":1706,"declining_issues":1315,"unchanged_issues":110,"percent_advancing_issues":54,"percent_declining_issues":42,"percent_unchanged_issues":4,"new_highs":64,"new_lows":105},{"data_date":"2026-09-25","exchange":"NYSE","advancing_issues":1174,"declining_issues":658,"unchanged_issues":40,"percent_advancing_issues":63,"percent_declining_issues":35,"percent_unchanged_issues":2,"new_highs":63,"new_lows":29}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T21:10:00Z","pagination":{"limit":100,"next_cursor":null},"parameters":{"date":null,"date_from":"2026-09-17","date_to":null,"limit":100}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/search/symbols":{"get":{"operationId":"searchSymbols","tags":["Search"],"summary":"Symbol and company-name search","description":"Finds tickers by symbol prefix or company-name substring. Exact symbol\nprefix matches come first, then shorter symbols, then alphabetical.\nNo API key required (30 requests per minute per IP without one).\n","security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]},{"RapidApiKey":[]}],"x-tier":"public","parameters":[{"name":"q","in":"query","required":true,"description":"Search text (symbol prefix or part of the company name), 1 to 60 characters.","schema":{"type":"string","minLength":1,"maxLength":60},"example":"Apple"},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Matching symbols","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SymbolMatch"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["pagination","parameters"],"properties":{"parameters":{"type":"object","required":["q","limit"],"additionalProperties":false,"properties":{"q":{"type":"string"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"symbol":"AAPL","name":"Apple Inc."},{"symbol":"APLE","name":"Apple Hospitality REIT Inc."}],"meta":{"generated_at":"2026-09-25T20:15:03Z","pagination":{"limit":2,"next_cursor":"eyJ2IjoxLCJkIjpudWxsLCJrIjpbMSw0LCJBUExFIl0sImYiOiJ4In0"},"parameters":{"q":"Apple","limit":2}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/search/screeners":{"get":{"operationId":"searchScreenersBySymbol","tags":["Search"],"summary":"Reverse screener lookup","description":"Which screeners contain a symbol on their latest snapshot, limited to\nthe screeners your plan can access (the 3 free-tier screeners are\nalways included). Returns membership only, never rows. Not paginated\n(at most 23 screeners). No API key required (30 requests per minute\nper IP without one).\n","security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]},{"RapidApiKey":[]}],"x-tier":"public","parameters":[{"name":"symbol","in":"query","required":true,"description":"Ticker symbol, case-insensitive.","schema":{"type":"string","pattern":"^[A-Za-z0-9.^=\\-]{1,20}$"},"example":"NVDA"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Screeners containing the symbol","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ScreenerMembership"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["parameters"],"properties":{"parameters":{"type":"object","required":["symbol"],"additionalProperties":false,"properties":{"symbol":{"type":"string"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"slug":"golden-cross","name":"Golden Cross","category":"technical","tier":"basic"},{"slug":"top-tech-stocks","name":"Top Tech Stocks","category":"fundamental","tier":"free"}],"meta":{"generated_at":"2026-09-25T20:15:03Z","parameters":{"symbol":"NVDA"}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/stocks/{symbol}":{"get":{"operationId":"getStock","tags":["Stock Data"],"summary":"Stock metadata","description":"Name, exchange, industry, last price and daily percent change of one\nsymbol, taken from the newest screener snapshot that contains it\n(field by field), otherwise from the latest daily candle. Fields come\nonly from the screeners available on the caller's plan. No API key\nrequired (30 requests per minute per IP without one).\n","security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]},{"RapidApiKey":[]}],"x-tier":"public","parameters":[{"$ref":"#/components/parameters/Symbol"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Stock metadata","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/StockInfo"},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of"]}],"unevaluatedProperties":false}}},"example":{"data":{"symbol":"NVDA","symbol_name":"NVIDIA Corp","last_price":181.85,"percent_change":1.27,"exchange":"NASDAQ","industry":"Semiconductors"},"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T20:15:03Z"}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"404":{"$ref":"#/components/responses/Error404"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}},"/stocks/{symbol}/candles":{"get":{"operationId":"getCandles","tags":["Stock Data"],"summary":"OHLCV candles","description":"Daily or weekly candles, oldest first. `meta.pagination.total` counts\nall candles in the range.\n","x-tier":"basic","parameters":[{"$ref":"#/components/parameters/Symbol"},{"$ref":"#/components/parameters/Interval"},{"name":"range","in":"query","description":"`1d`, `5d`, `1y`, `2y`, `5y`, `max` (10 years), or `{N}mo` with N from 1 to 240.","schema":{"type":"string","default":"6mo"},"example":"1y"},{"name":"limit","in":"query","schema":{"type":"integer","default":1000,"minimum":1,"maximum":5000}},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Candles","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"Link":{"$ref":"#/components/headers/Link"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Candle"}},"meta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","required":["as_of","pagination","parameters"],"properties":{"parameters":{"type":"object","required":["symbol","interval","range","limit"],"additionalProperties":false,"properties":{"symbol":{"type":"string"},"interval":{"type":"string","enum":["1d","1wk"]},"range":{"type":"string"},"limit":{"type":"integer"}}}}}],"unevaluatedProperties":false}}},"example":{"data":[{"date":"2026-09-24","open":177.2,"high":180.1,"low":176.9,"close":179.56,"volume":188234500},{"date":"2026-09-25","open":179.9,"high":182.4,"low":179.1,"close":181.85,"volume":201345600}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T20:15:03Z","pagination":{"limit":1000,"next_cursor":null,"total":2},"parameters":{"symbol":"NVDA","interval":"1d","range":"5d","limit":1000}}}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/Error400"},"401":{"$ref":"#/components/responses/Error401"},"403":{"$ref":"#/components/responses/Error403"},"429":{"$ref":"#/components/responses/Error429"},"500":{"$ref":"#/components/responses/Error500"},"503":{"$ref":"#/components/responses/Error503"}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Generate at https://stockmarketscan.com/settings (Basic or Pro plan).\nFormat `sms_...`. MCP connector tokens (`mct_...`) are accepted too.\nAccounts with no active plan are rejected with 403 FREE_TIER_NOT_ALLOWED.\n"},"BearerAuth":{"type":"http","scheme":"bearer","description":"The same `sms_...` key or `mct_...` token as `Authorization: Bearer <key>`. `X-API-Key` wins if both are sent."},"RapidApiKey":{"type":"apiKey","in":"header","name":"X-RapidAPI-Key","description":"RapidAPI consumer key, issued by RapidAPI on subscription. Send\ntogether with `X-RapidAPI-Host: stockmarketscan.com`. Pro-tier access.\n"}},"parameters":{"Symbol":{"name":"symbol","in":"path","required":true,"description":"Ticker symbol, case-insensitive.","schema":{"type":"string","pattern":"^[A-Za-z0-9.^=\\-]{1,20}$"},"example":"AAPL"},"Interval":{"name":"interval","in":"query","description":"Candle interval.","schema":{"type":"string","enum":["1d","1wk"],"default":"1d"}},"Cursor":{"name":"cursor","in":"query","description":"Opaque cursor from `meta.pagination.next_cursor` of the previous page. Omit for the first page.","schema":{"type":"string"}},"IfNoneMatch":{"name":"If-None-Match","in":"header","description":"ETag of a previous response. An unchanged resource returns 304 without a body and without a quota charge.","schema":{"type":"string"}}},"headers":{"X-Request-Id":{"description":"Request id. Echoes a valid inbound `X-Request-Id`, otherwise a new UUID. Same value as `request_id` in errors.","schema":{"type":"string"}},"ETag":{"description":"Weak validator of the body (ignoring `meta.generated_at`). Send it back as `If-None-Match`.","schema":{"type":"string","example":"W/\"n2Qe0gQ1lQ3m9W1lM3yY7v0aQ5c\""}},"Cache-Control":{"description":"`private, max-age=60` on 2xx data responses; `no-store` on errors, `/ping`, `/health` and `POST /patterns`.","schema":{"type":"string"}},"Vary":{"description":"Always `Authorization, X-API-Key`.","schema":{"type":"string"}},"Link":{"description":"Present when there is a next page: `<absolute URL with cursor>; rel=\"next\"`.","schema":{"type":"string"}},"RateLimit":{"description":"Most constrained window, IETF format, e.g. `\"minute\";r=27;t=41` (r = remaining, t = seconds until reset). Absent on unauthenticated probes.","schema":{"type":"string"}},"RateLimit-Policy":{"description":"All windows of your plan, e.g. `\"minute\";q=30;w=60, \"day\";q=2000;w=86400, \"month\";q=50000;w=2592000`.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the exceeded window resets. Always present on 429.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Legacy. Limit of the per-minute window (per-day for RapidAPI), or of the exceeded window on 429.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Legacy. Requests left in that window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Legacy. Window reset as Unix seconds.","schema":{"type":"integer"}},"X-RateLimit-Monthly-Limit":{"description":"Legacy. Monthly quota of a direct key.","schema":{"type":"integer"}},"X-RateLimit-Monthly-Remaining":{"description":"Legacy. Requests left this month.","schema":{"type":"integer"}},"X-RateLimit-Monthly-Reset":{"description":"Legacy. Start of next month (UTC) as Unix seconds.","schema":{"type":"integer"}}},"responses":{"NotModified":{"description":"Not modified since the ETag in `If-None-Match`. No body; not counted against your quota.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}}},"Error400":{"description":"Invalid parameter, cursor or body. Not counted against your quota.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#invalid_parameter","title":"Invalid parameter","status":400,"detail":"limit must be an integer between 1 and 500.","instance":"/api/v1/screeners/golden-cross?limit=9000","code":"INVALID_PARAMETER","request_id":"3f2c9a1e-8b7d-4c61-9e0f-2a5b6c7d8e9f","errors":[{"parameter":"limit","detail":"must be an integer between 1 and 500"}]}}}},"Error401":{"description":"Missing or invalid credentials.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#missing_api_key","title":"Missing API key","status":401,"detail":"Missing credentials. Send an X-API-Key header or Authorization: Bearer <key>. Generate a key at /settings.","instance":"/api/v1/options-flow","code":"MISSING_API_KEY","request_id":"5b1d7c2e-0a4f-4e8b-9c3d-1f2e3a4b5c6d"}}}},"Error403":{"description":"Your plan does not include this endpoint or screener. Not counted against your quota.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#tier_upgrade_required","title":"Plan upgrade required","status":403,"detail":"Options Flow API requires a pro plan or higher. Your current plan: basic.","instance":"/api/v1/options-flow","code":"TIER_UPGRADE_REQUIRED","request_id":"7c9e1a2b-3d4e-4f50-8a6b-7c8d9e0f1a2b"}}}},"Error404":{"description":"Not found. Not counted against your quota.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#snapshot_not_found","title":"Snapshot not found","status":404,"detail":"No snapshot exists for 2026-09-20.","instance":"/api/v1/screeners/golden-cross?date=2026-09-20","code":"SNAPSHOT_NOT_FOUND","request_id":"9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"}}}},"Error429":{"description":"Rate limit or quota exceeded. `Retry-After` says when to retry.","headers":{"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#rate_limit_month","title":"Monthly quota exhausted","status":429,"detail":"Monthly quota exhausted. basic plan: 10,000 requests per month, shared by the REST API and the MCP server (every API request counts once; composite MCP tools make several). Quota resets on 2026-10-01.","instance":"/api/v1/screeners/golden-cross","code":"RATE_LIMIT_MONTH","request_id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"}}}},"Error500":{"description":"Unexpected server error. Quote `request_id` when reporting it.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#internal_error","title":"Internal server error","status":500,"detail":"Internal server error. Please try again later and quote request_id if it persists.","instance":"/api/v1/options-flow/signals","code":"INTERNAL_ERROR","request_id":"3f2c9a1e-8b7d-4c61-9e0f-2a5b6c7d8e9f"}}}},"Error503":{"description":"A dependency (database or key store) is unavailable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"},"Vary":{"$ref":"#/components/headers/Vary"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"X-RateLimit-Monthly-Limit":{"$ref":"#/components/headers/X-RateLimit-Monthly-Limit"},"X-RateLimit-Monthly-Remaining":{"$ref":"#/components/headers/X-RateLimit-Monthly-Remaining"},"X-RateLimit-Monthly-Reset":{"$ref":"#/components/headers/X-RateLimit-Monthly-Reset"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://stockmarketscan.com/docs/errors#auth_unavailable","title":"Authentication unavailable","status":503,"detail":"Authentication service unavailable. Please try again later.","instance":"/api/v1/trends","code":"AUTH_UNAVAILABLE","request_id":"2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e"}}}}},"examples":{"Envelope":{"summary":"A successful list response","value":{"data":[{"symbol":"NVDA","symbol_name":"NVIDIA Corp","last_price":181.85,"data_date":"2026-09-25"}],"meta":{"as_of":"2026-09-25","generated_at":"2026-09-25T20:15:03Z","pagination":{"limit":50,"next_cursor":"eyJ2IjoxLCJkIjoiMjAyNi0wOS0yNSIsImsiOlsiTlZEQSJdLCJmIjoiYWJjIn0","total":412},"parameters":{"limit":50,"date":null}}}},"Problem":{"summary":"A parameter error","value":{"type":"https://stockmarketscan.com/docs/errors#invalid_parameter","title":"Invalid parameter","status":400,"detail":"limit must be an integer between 1 and 500.","instance":"/api/v1/screeners/golden-cross?limit=9000","code":"INVALID_PARAMETER","request_id":"3f2c9a1e-8b7d-4c61-9e0f-2a5b6c7d8e9f","errors":[{"parameter":"limit","detail":"must be an integer between 1 and 500"}]}}},"schemas":{"Problem":{"type":"object","description":"RFC 9457 problem details. `code` and `request_id` are extension members.","required":["type","title","status","detail","instance","code","request_id"],"additionalProperties":false,"properties":{"type":{"type":"string","format":"uri","description":"https://stockmarketscan.com/docs/errors#<code in lower case>"},"title":{"type":"string","description":"Short summary of the error class."},"status":{"type":"integer","description":"HTTP status code."},"detail":{"type":"string","description":"Explanation of this occurrence."},"instance":{"type":"string","description":"Request path and query."},"code":{"$ref":"#/components/schemas/ErrorCode"},"request_id":{"type":"string","description":"Same value as the X-Request-Id header."},"errors":{"type":"array","description":"Present on parameter errors.","items":{"$ref":"#/components/schemas/ParameterError"}}}},"ParameterError":{"type":"object","required":["parameter","detail"],"additionalProperties":false,"properties":{"parameter":{"type":"string","example":"limit"},"detail":{"type":"string","example":"must be an integer between 1 and 500"}}},"ErrorCode":{"type":"string","description":"Stable machine-readable error code.","enum":["MISSING_API_KEY","INVALID_API_KEY_FORMAT","INVALID_API_KEY","INVALID_RAPIDAPI_PROXY_SECRET","FREE_TIER_NOT_ALLOWED","TIER_UPGRADE_REQUIRED","SCREENER_NOT_ACCESSIBLE","RATE_LIMIT_MINUTE","RATE_LIMIT_DAY","RATE_LIMIT_MONTH","RATE_LIMIT_ANONYMOUS","INVALID_PARAMETER","INVALID_CURSOR","INVALID_SYMBOL","INVALID_DATE","INVALID_DATE_FROM","INVALID_DATE_TO","INVALID_DATE_RANGE","INVALID_SORT","INVALID_SIDE","INVALID_INTERVAL","INVALID_RANGE","INVALID_CATEGORY","INVALID_QUERY","INVALID_JSON","INVALID_BODY","MISSING_SCREENERS","TOO_MANY_SCREENERS","INVALID_LIMIT","SCREENER_NOT_FOUND","SNAPSHOT_NOT_FOUND","STOCK_NOT_FOUND","AUTH_UNAVAILABLE","RAPIDAPI_NOT_CONFIGURED","DB_UNHEALTHY","STOCK_LOOKUP_FAILED","INTERNAL_ERROR"],"x-enumDescriptions":{"MISSING_API_KEY":"401. No `X-API-Key` or `Authorization: Bearer` header.","INVALID_API_KEY_FORMAT":"401. Key does not start with `sms_` or `mct_`, or is too short.","INVALID_API_KEY":"401. Key or connector token not found.","INVALID_RAPIDAPI_PROXY_SECRET":"401. Request did not come through the RapidAPI proxy.","FREE_TIER_NOT_ALLOWED":"403. The account has no active plan.","TIER_UPGRADE_REQUIRED":"403. The endpoint or screener needs a higher plan.","SCREENER_NOT_ACCESSIBLE":"403. `POST /patterns` names a screener above your plan.","RATE_LIMIT_MINUTE":"429. Per-minute limit reached (Basic 15, Pro 30). See `Retry-After`.","RATE_LIMIT_DAY":"429. Per-day limit reached (Basic 500, Pro 2,000, RapidAPI 10,000). See `Retry-After`.","RATE_LIMIT_MONTH":"429. Monthly quota reached (Basic 10,000, Pro 50,000; shared with MCP). See `Retry-After`.","RATE_LIMIT_ANONYMOUS":"429. More than 30 requests per minute per IP without a credential on a public endpoint.","INVALID_PARAMETER":"400. A query parameter or body field is malformed or out of range; `errors` names it.","INVALID_CURSOR":"400. `cursor` is malformed or was issued for other parameters. Restart without it.","INVALID_SYMBOL":"400. Symbol is not 1 to 20 characters of A-Z, 0-9, `.`, `^`, `=`, `-`.","INVALID_DATE":"400. `date` is not a real calendar date in YYYY-MM-DD format.","INVALID_DATE_FROM":"400. `date_from` is not a real calendar date in YYYY-MM-DD format.","INVALID_DATE_TO":"400. `date_to` is not a real calendar date in YYYY-MM-DD format.","INVALID_DATE_RANGE":"400. `date_from` is after `date_to`.","INVALID_SORT":"400. `sort` is not one of streak, volume, callput, premium.","INVALID_SIDE":"400. `side` is not one of call, put, both.","INVALID_INTERVAL":"400. `interval` is not 1d or 1wk.","INVALID_RANGE":"400. `range` is not an allowed value.","INVALID_CATEGORY":"400. `category` is not techscience, patents, or fundingevents.","INVALID_QUERY":"400. `q` is missing or longer than 60 characters.","INVALID_JSON":"400. Request body is not valid JSON.","INVALID_BODY":"400. Request body is not a JSON object.","MISSING_SCREENERS":"400. `screeners` is missing or empty.","TOO_MANY_SCREENERS":"400. More than 24 screeners requested.","INVALID_LIMIT":"400. `limit` in the `POST /patterns` body is not an integer from 1 to 500.","SCREENER_NOT_FOUND":"404 on `/screeners/{slug}`, 400 in the `POST /patterns` body. Unknown screener slug.","SNAPSHOT_NOT_FOUND":"404. The screener has no snapshot for the requested date or cursor.","STOCK_NOT_FOUND":"404. Symbol not found in any screener or candle data.","AUTH_UNAVAILABLE":"503. The key store could not be reached.","RAPIDAPI_NOT_CONFIGURED":"503. RapidAPI access is not configured on the server.","DB_UNHEALTHY":"503. Health probe could not reach the database.","STOCK_LOOKUP_FAILED":"503. Stock data sources could not be queried.","INTERNAL_ERROR":"500. Unexpected error. Quote `request_id` when reporting it."}},"Meta":{"type":"object","description":"Response metadata. Endpoint-specific keys are documented per operation.","required":["generated_at"],"properties":{"as_of":{"type":["string","null"],"format":"date","description":"Trading date of the underlying data. Null when there is no data."},"generated_at":{"type":"string","format":"date-time","description":"When this response was produced (RFC 3339 UTC)."},"pagination":{"$ref":"#/components/schemas/Pagination"},"parameters":{"type":"object","description":"Parameters applied after defaults."}}},"Health":{"type":"object","required":["status","version","db"],"additionalProperties":false,"properties":{"status":{"type":"string","enum":["ok"]},"version":{"type":"string","example":"v1"},"db":{"type":"object","required":["reachable","latency_ms"],"additionalProperties":false,"properties":{"reachable":{"type":"boolean"},"latency_ms":{"type":"integer","example":9}}}}},"Tier":{"type":"string","enum":["free","basic","pro"]},"ScreenerCategory":{"type":"string","enum":["technical","fundamental","momentum","dividend","special"]},"Screener":{"type":"object","required":["slug","name","description","category","tier","accessible","columns"],"additionalProperties":false,"properties":{"slug":{"$ref":"#/components/schemas/ScreenerSlug"},"name":{"type":"string","example":"Golden Cross"},"description":{"type":"string"},"category":{"$ref":"#/components/schemas/ScreenerCategory"},"tier":{"$ref":"#/components/schemas/Tier"},"accessible":{"type":"boolean","description":"Whether your plan can read this screener's rows."},"columns":{"type":"array","description":"Fields of each row. Every row also carries `data_date`.","items":{"$ref":"#/components/schemas/ScreenerColumn"}}}},"ScreenerColumn":{"type":"object","required":["key","label","type","value_type"],"additionalProperties":false,"properties":{"key":{"type":"string","example":"last_price"},"label":{"type":"string","example":"Price"},"type":{"type":"string","enum":["text","price","percent","volume","date","signal"],"description":"Display type on stockmarketscan.com."},"value_type":{"type":"string","enum":["number","string","date"],"description":"JSON type of the value in rows (`date` = YYYY-MM-DD). Any value may be null except the row key."}}},"ScreenerSlug":{"type":"string","enum":["strong-volume-gains","top-tech-stocks","income-and-growth","golden-cross","hot-prospects","rsi-oversold","rsi-overbought","fundamentally-fine","dividend-prospects","defensive-stocks","best-reits","top-penny-pops","trend-seeker","long-term-100-buy-signals","unusual-options","week-52-high-top-picks","j-pattern","upwards-base-consolidation","nearing-6-month-highs","day-3-bounce","death-cross","long-term-100-sell-signals","lateral-price-range","market-momentum"]},"ScreenerRow":{"description":"A row of any screener. The exact fields per slug are in ScreenerRow<Slug>.","anyOf":[{"$ref":"#/components/schemas/ScreenerRowStrongVolumeGains"},{"$ref":"#/components/schemas/ScreenerRowTopTechStocks"},{"$ref":"#/components/schemas/ScreenerRowIncomeAndGrowth"},{"$ref":"#/components/schemas/ScreenerRowGoldenCross"},{"$ref":"#/components/schemas/ScreenerRowHotProspects"},{"$ref":"#/components/schemas/ScreenerRowRsiOversold"},{"$ref":"#/components/schemas/ScreenerRowRsiOverbought"},{"$ref":"#/components/schemas/ScreenerRowFundamentallyFine"},{"$ref":"#/components/schemas/ScreenerRowDividendProspects"},{"$ref":"#/components/schemas/ScreenerRowDefensiveStocks"},{"$ref":"#/components/schemas/ScreenerRowBestReits"},{"$ref":"#/components/schemas/ScreenerRowTopPennyPops"},{"$ref":"#/components/schemas/ScreenerRowTrendSeeker"},{"$ref":"#/components/schemas/ScreenerRowLongTerm100BuySignals"},{"$ref":"#/components/schemas/ScreenerRowUnusualOptions"},{"$ref":"#/components/schemas/ScreenerRowWeek52HighTopPicks"},{"$ref":"#/components/schemas/ScreenerRowJPattern"},{"$ref":"#/components/schemas/ScreenerRowUpwardsBaseConsolidation"},{"$ref":"#/components/schemas/ScreenerRowNearing6MonthHighs"},{"$ref":"#/components/schemas/ScreenerRowDay3Bounce"},{"$ref":"#/components/schemas/ScreenerRowDeathCross"},{"$ref":"#/components/schemas/ScreenerRowLongTerm100SellSignals"},{"$ref":"#/components/schemas/ScreenerRowLateralPriceRange"},{"$ref":"#/components/schemas/ScreenerRowMarketMomentum"}]},"ScreenerRowStrongVolumeGains":{"type":"object","description":"One row of Strong Volume Gains (strong-volume-gains).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowTopTechStocks":{"type":"object","description":"One row of Top Tech Stocks (top-tech-stocks).","required":["symbol","symbol_name","last_price","market_cap","high_hits_6m","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"market_cap":{"type":["number","null"],"description":"Mkt Cap"},"high_hits_6m":{"type":["number","null"],"description":"Highs 6M"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowIncomeAndGrowth":{"type":"object","description":"One row of Income & Growth (income-and-growth).","required":["symbol","symbol_name","last_price","earnings_growth_5y","dividend_growth_5y","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"earnings_growth_5y":{"type":["number","null"],"description":"Earn 5Y"},"dividend_growth_5y":{"type":["number","null"],"description":"Div 5Y"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowGoldenCross":{"type":"object","description":"One row of Golden Cross (golden-cross).","required":["symbol","symbol_name","last_price","macd_50_to_200d_new_signal","average_volume_20d","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"macd_50_to_200d_new_signal":{"type":["string","null"],"description":"Signal"},"average_volume_20d":{"type":["number","null"],"description":"Avg Vol"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowHotProspects":{"type":"object","description":"One row of Hot Prospects (hot-prospects).","required":["symbol","symbol_name","last_price","percent_change","volume","percent_change_1m","percent_change_3m","opinion","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"percent_change_1m":{"type":["number","null"],"description":"1M"},"percent_change_3m":{"type":["number","null"],"description":"3M"},"opinion":{"type":["string","null"],"description":"Opinion"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowRsiOversold":{"type":"object","description":"One row of RSI Oversold (rsi-oversold).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowRsiOverbought":{"type":"object","description":"One row of RSI Overbought (rsi-overbought).","required":["symbol","symbol_name","last_price","relative_strength_20d","percent_change_5d","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"relative_strength_20d":{"type":["number","null"],"description":"RSI"},"percent_change_5d":{"type":["number","null"],"description":"5D"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowFundamentallyFine":{"type":"object","description":"One row of Solid Fundamentals (fundamentally-fine).","required":["symbol","symbol_name","last_price","revenue_growth_last_year","weighted_alpha","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"revenue_growth_last_year":{"type":["number","null"],"description":"Rev YoY"},"weighted_alpha":{"type":["number","null"],"description":"Alpha"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowDividendProspects":{"type":"object","description":"One row of Dividend Prospects (dividend-prospects).","required":["symbol","symbol_name","last_price","dividend_payout","dividend_growth_5y","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"dividend_payout":{"type":["number","null"],"description":"Payout"},"dividend_growth_5y":{"type":["number","null"],"description":"Div 5Y"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowDefensiveStocks":{"type":"object","description":"One row of Defensive Stocks (defensive-stocks).","required":["symbol","symbol_name","last_price","beta","pe_ratio","dividend","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"beta":{"type":["number","null"],"description":"Beta"},"pe_ratio":{"type":["number","null"],"description":"P/E"},"dividend":{"type":["number","null"],"description":"Dividend"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowBestReits":{"type":"object","description":"One row of Best REITs (best-reits).","required":["symbol","symbol_name","last_price","profit_margin","return_on_equity","average_recommendation","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"profit_margin":{"type":["number","null"],"description":"Margin"},"return_on_equity":{"type":["number","null"],"description":"ROE"},"average_recommendation":{"type":["number","null"],"description":"Rating"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowTopPennyPops":{"type":"object","description":"One row of Top Penny Pops (top-penny-pops).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowTrendSeeker":{"type":"object","description":"One row of Trend Watch (trend-seeker).","required":["symbol","symbol_name","last_price","percent_change","opinion","opinion_short_term","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"opinion":{"type":["string","null"],"description":"Opinion"},"opinion_short_term":{"type":["string","null"],"description":"Short Term"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowLongTerm100BuySignals":{"type":"object","description":"One row of Long Term Bullish Indicators (long-term-100-buy-signals).","required":["symbol","symbol_name","last_price","weighted_alpha","percent_change_1m","percent_change_3m","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"weighted_alpha":{"type":["number","null"],"description":"Alpha"},"percent_change_1m":{"type":["number","null"],"description":"1M"},"percent_change_3m":{"type":["number","null"],"description":"3M"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowUnusualOptions":{"type":"object","description":"One row of Unusual Options Activity (unusual-options).","required":["symbol","option_symbol","symbol_type","base_last_price","strike_price","expiration_date","days_to_expiration","last_price","bid_price","midpoint","ask_price","volume","open_interest","volume_oi_ratio","volatility","delta","trade_time","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"option_symbol":{"type":["string","null"],"description":"Contract"},"symbol_type":{"type":["string","null"],"description":"Type"},"base_last_price":{"type":["number","null"],"description":"Stock Price"},"strike_price":{"type":["number","null"],"description":"Strike"},"expiration_date":{"type":["string","null"],"format":"date","description":"Expiry"},"days_to_expiration":{"type":["number","null"],"description":"DTE"},"last_price":{"type":["number","null"],"description":"Price"},"bid_price":{"type":["number","null"],"description":"Bid"},"midpoint":{"type":["number","null"],"description":"Mid"},"ask_price":{"type":["number","null"],"description":"Ask"},"volume":{"type":["number","null"],"description":"Volume"},"open_interest":{"type":["number","null"],"description":"OI"},"volume_oi_ratio":{"type":["number","null"],"description":"Vol/OI"},"volatility":{"type":["number","null"],"description":"IV"},"delta":{"type":["number","null"],"description":"Delta"},"trade_time":{"type":["string","null"],"description":"Trade Time"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowWeek52HighTopPicks":{"type":"object","description":"One row of 52 Week High Picks (week-52-high-top-picks).","required":["symbol","symbol_name","last_price","weighted_alpha","percent_change_1m","percent_change_3m","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"weighted_alpha":{"type":["number","null"],"description":"Alpha"},"percent_change_1m":{"type":["number","null"],"description":"1M"},"percent_change_3m":{"type":["number","null"],"description":"3M"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowJPattern":{"type":"object","description":"One row of J Pattern (j-pattern).","required":["symbol","symbol_name","last_price","percent_change","gap_up","percent_change_5d","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"gap_up":{"type":["number","null"],"description":"Gap Up"},"percent_change_5d":{"type":["number","null"],"description":"5D"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowUpwardsBaseConsolidation":{"type":"object","description":"One row of Upward Consolidation (upwards-base-consolidation).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowNearing6MonthHighs":{"type":"object","description":"One row of 6 Month Highs (nearing-6-month-highs).","required":["symbol","symbol_name","last_price","high_percent_6m","historic_volatility_9d","exchange","industry","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"high_percent_6m":{"type":["number","null"],"description":"% to High"},"historic_volatility_9d":{"type":["number","null"],"description":"Vol 9D"},"exchange":{"type":["string","null"],"description":"Exchange"},"industry":{"type":["string","null"],"description":"Industry"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowDay3Bounce":{"type":"object","description":"One row of Day 3 Bounce (day-3-bounce).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowDeathCross":{"type":"object","description":"One row of Death Cross (death-cross).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowLongTerm100SellSignals":{"type":"object","description":"One row of Long Term Bearish Indicators (long-term-100-sell-signals).","required":["symbol","symbol_name","last_price","weighted_alpha","percent_change_1m","percent_change_3m","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"weighted_alpha":{"type":["number","null"],"description":"Alpha"},"percent_change_1m":{"type":["number","null"],"description":"1M"},"percent_change_3m":{"type":["number","null"],"description":"3M"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowLateralPriceRange":{"type":"object","description":"One row of Lateral Price Range (lateral-price-range).","required":["symbol","symbol_name","last_price","percent_change","volume","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","description":"Row key, never null."},"symbol_name":{"type":["string","null"],"description":"Name"},"last_price":{"type":["number","null"],"description":"Price"},"percent_change":{"type":["number","null"],"description":"Change"},"volume":{"type":["number","null"],"description":"Volume"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"ScreenerRowMarketMomentum":{"type":"object","description":"One row of Market Momentum (market-momentum).","required":["advancing_issues","declining_issues","unchanged_issues","new_highs","new_lows","exchange","percent_advancing_issues","percent_declining_issues","percent_unchanged_issues","data_date"],"additionalProperties":false,"properties":{"advancing_issues":{"type":["number","null"],"description":"Advancing"},"declining_issues":{"type":["number","null"],"description":"Declining"},"unchanged_issues":{"type":["number","null"],"description":"Unchanged"},"new_highs":{"type":["number","null"],"description":"New Highs"},"new_lows":{"type":["number","null"],"description":"New Lows"},"exchange":{"type":"string","description":"Row key, never null."},"percent_advancing_issues":{"type":["number","null"],"description":"% Advancing"},"percent_declining_issues":{"type":["number","null"],"description":"% Declining"},"percent_unchanged_issues":{"type":["number","null"],"description":"% Unchanged"},"data_date":{"type":"string","format":"date","description":"Snapshot date."}}},"Pagination":{"type":"object","description":"Present on list endpoints. Follow `next_cursor` until it is null.","required":["limit","next_cursor"],"additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"description":"Page size that was applied."},"next_cursor":{"type":["string","null"],"description":"Cursor for the next page; null on the last page."},"total":{"type":"integer","minimum":0,"description":"Rows across all pages. Only where it is cheap and exact."}}},"Candle":{"type":"object","required":["date","open","high","low","close","volume"],"additionalProperties":false,"properties":{"date":{"type":"string","format":"date","description":"Trading day (weekly candles use the Monday of the week)."},"open":{"type":"number","example":179.9},"high":{"type":"number","example":182.4},"low":{"type":"number","example":179.1},"close":{"type":"number","example":181.85},"volume":{"type":"number","example":201345600}}},"StockInfo":{"type":"object","required":["symbol","symbol_name","last_price","percent_change","exchange","industry"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"symbol_name":{"type":["string","null"],"example":"NVIDIA Corp"},"last_price":{"type":["number","null"],"example":181.85},"percent_change":{"type":["number","null"],"description":"Daily change in percent: 1.27 means +1.27%."},"exchange":{"type":["string","null"],"example":"NASDAQ"},"industry":{"type":["string","null"],"example":"Semiconductors"}}},"SymbolMatch":{"type":"object","required":["symbol","name"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"AAPL"},"name":{"type":["string","null"],"example":"Apple Inc."}}},"ScreenerMembership":{"type":"object","required":["slug","name","category","tier"],"additionalProperties":false,"properties":{"slug":{"$ref":"#/components/schemas/ScreenerSlug"},"name":{"type":"string"},"category":{"$ref":"#/components/schemas/ScreenerCategory"},"tier":{"$ref":"#/components/schemas/Tier"}}},"PatternId":{"type":"string","enum":["double_top","double_bottom","triple_top","triple_bottom","head_shoulders","inv_head_shoulders","round_bottom","cup_handle","asc_triangle","desc_triangle","sym_triangle","channel_up","channel_down","rectangle","flag","wedge_rising","wedge_falling","abcd","gartley","bat","butterfly","crab","impulse_wave","corrective_wave"]},"PatternPoint":{"type":"object","required":["index","date","price","label"],"additionalProperties":false,"properties":{"index":{"type":["integer","null"],"description":"Candle index within the analysed window."},"date":{"type":["string","null"],"format":"date"},"price":{"type":["number","null"]},"label":{"type":["string","null"]}}},"PatternLine":{"type":"object","required":["points","style"],"additionalProperties":false,"properties":{"points":{"type":"array","items":{"type":"object","required":["date","price"],"additionalProperties":false,"properties":{"date":{"type":["string","null"],"format":"date"},"price":{"type":["number","null"]}}}},"style":{"type":["string","null"],"enum":["solid","dashed","dotted",null]}}},"Pattern":{"type":"object","required":["id","name","type","category","confidence","points","lines","target_price","last_structural_point"],"additionalProperties":false,"properties":{"id":{"$ref":"#/components/schemas/PatternId"},"name":{"type":"string","example":"Cup and Handle"},"type":{"type":"string","enum":["bullish","bearish","neutral"],"description":"Conventional direction of the chart pattern."},"category":{"type":"string","enum":["reversal","continuation","harmonic","wave"]},"confidence":{"type":["number","null"],"minimum":0,"maximum":100,"example":72},"points":{"type":"array","items":{"$ref":"#/components/schemas/PatternPoint"}},"lines":{"type":"array","items":{"$ref":"#/components/schemas/PatternLine"}},"target_price":{"type":["number","null"],"description":"Measured-move price level; null when not defined for the pattern."},"last_structural_point":{"anyOf":[{"$ref":"#/components/schemas/PatternPoint"},{"type":"null"}]}}},"SymbolPatterns":{"type":"object","required":["symbol","interval","computed_at","candle_count","patterns"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"interval":{"type":"string","enum":["1d","1wk"]},"computed_at":{"type":["string","null"],"format":"date-time","description":"When the patterns were computed; null when never."},"candle_count":{"type":["integer","null"],"description":"Candles the detection ran on."},"patterns":{"type":"array","items":{"$ref":"#/components/schemas/Pattern"}}}},"PatternHit":{"type":"object","required":["id","label","direction","strength","forming_status"],"additionalProperties":false,"properties":{"id":{"$ref":"#/components/schemas/PatternId"},"label":{"type":"string","example":"Cup and Handle"},"direction":{"type":"string","enum":["bullish","bearish","neutral"]},"strength":{"type":["number","null"],"description":"Pattern confidence 0 to 100."},"forming_status":{"type":"string","enum":["forming","near-breakout"]}}},"PatternSearchStock":{"type":"object","required":["symbol","symbol_name","exchange","industry","last_price","volume","data_date","matched_patterns"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"symbol_name":{"type":["string","null"]},"exchange":{"type":["string","null"]},"industry":{"type":["string","null"]},"last_price":{"type":["number","null"]},"volume":{"type":["number","null"]},"data_date":{"type":["string","null"],"format":"date"},"matched_patterns":{"type":"array","items":{"$ref":"#/components/schemas/PatternHit"}}}},"PatternSearchGroup":{"type":"object","required":["screener_slug","screener_name","count","truncated","stocks"],"additionalProperties":false,"properties":{"screener_slug":{"$ref":"#/components/schemas/ScreenerSlug"},"screener_name":{"type":"string","example":"Hot Prospects"},"count":{"type":"integer","description":"Matches before truncation to `limit`."},"truncated":{"type":"boolean","description":"True when stocks were cut to `limit`."},"stocks":{"type":"array","items":{"$ref":"#/components/schemas/PatternSearchStock"}}}},"OptionsFlowDay":{"type":"object","description":"Aggregated unusual-options flow of one symbol on one trading day.","required":["symbol","data_date","stock_price","call_contracts","call_volume","call_open_interest","call_avg_vol_oi","call_avg_iv","call_avg_delta","call_total_premium","put_contracts","put_volume","put_open_interest","put_avg_vol_oi","put_avg_iv","put_avg_delta","put_total_premium","total_volume","total_oi","call_put_volume_ratio","call_put_oi_ratio","net_delta","avg_days_to_expiry","consecutive_days"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"data_date":{"type":"string","format":"date"},"stock_price":{"type":["number","null"],"description":"Underlying price."},"call_contracts":{"type":["integer","null"],"description":"Number of unusual call contracts."},"call_volume":{"type":["integer","null"]},"call_open_interest":{"type":["integer","null"]},"call_avg_vol_oi":{"type":["number","null"],"description":"Average volume/OI ratio of the calls."},"call_avg_iv":{"type":["number","null"],"description":"Average implied volatility of the calls, in percent."},"call_avg_delta":{"type":["number","null"]},"call_total_premium":{"type":["number","null"],"description":"Sum of last_price * volume * 100 for calls, USD."},"put_contracts":{"type":["integer","null"]},"put_volume":{"type":["integer","null"]},"put_open_interest":{"type":["integer","null"]},"put_avg_vol_oi":{"type":["number","null"]},"put_avg_iv":{"type":["number","null"]},"put_avg_delta":{"type":["number","null"],"description":"Average absolute delta of the puts."},"put_total_premium":{"type":["number","null"]},"total_volume":{"type":["integer","null"]},"total_oi":{"type":["integer","null"]},"call_put_volume_ratio":{"type":["number","null"],"description":"Call volume divided by put volume. Null without puts."},"call_put_oi_ratio":{"type":["number","null"],"description":"Call open interest divided by put open interest."},"net_delta":{"type":["number","null"]},"avg_days_to_expiry":{"type":["number","null"]},"consecutive_days":{"type":["integer","null"],"description":"Consecutive trading days up to this one with the same call/put regime."}}},"OptionsFlowMarketStats":{"type":"object","description":"Market-wide totals for the day.","required":["total_symbols","total_market_volume","total_call_volume","total_put_volume","market_call_put_ratio","avg_streak","max_streak"],"additionalProperties":false,"properties":{"total_symbols":{"type":"integer"},"total_market_volume":{"type":["number","null"]},"total_call_volume":{"type":["number","null"]},"total_put_volume":{"type":["number","null"]},"market_call_put_ratio":{"type":["number","null"]},"avg_streak":{"type":["number","null"]},"max_streak":{"type":["integer","null"]}}},"OptionsFlowRecord":{"type":"object","required":["symbol","signal_date","signal_type","side","call_put_ratio","call_put_oi_ratio","near_earnings","next_earnings_date","call_volume","put_volume","total_volume","total_oi","call_avg_iv","put_avg_iv","total_premium","consecutive_days","signal_price","entry_price","entry_date","net_delta","avg_days_to_expiry","strength_score","bullish_screener_hits","bearish_screener_hits","bullish_screener_list","bearish_screener_list","market_breadth_score","market_call_put_ratio","market_context","current_price","high_since","low_since","price_change_pct","max_gain_pct","max_drawdown_pct","max_high_date","min_low_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"signal_date":{"type":"string","format":"date","description":"Trading day of the record."},"signal_type":{"type":"string","description":"Classification of the day's flow by call/put ratio, streak, and volume.","enum":["strong_bullish","strong_bearish","accumulation","distribution","high_vol_bullish","high_vol_bearish","bullish","bearish"]},"side":{"type":"string","enum":["bullish","bearish"],"description":"`bullish` when the call/put volume ratio is above 1."},"call_put_ratio":{"type":["number","null"],"description":"Call/put volume ratio."},"call_put_oi_ratio":{"type":["number","null"],"description":"Call/put open-interest ratio."},"near_earnings":{"type":"boolean","description":"An earnings report falls within 14 days after the record date."},"next_earnings_date":{"type":["string","null"],"format":"date"},"call_volume":{"type":"integer"},"put_volume":{"type":"integer"},"total_volume":{"type":"integer"},"total_oi":{"type":"integer"},"call_avg_iv":{"type":["number","null"],"description":"Average implied volatility of calls, in percent."},"put_avg_iv":{"type":["number","null"]},"total_premium":{"type":["number","null"],"description":"Call plus put premium, USD."},"consecutive_days":{"type":"integer","description":"Streak length of the same flow regime up to the record date."},"signal_price":{"type":["number","null"],"description":"Underlying price on the record date."},"entry_price":{"type":["number","null"],"description":"Open of the first daily candle after the record was published. Null until that candle exists."},"entry_date":{"type":["string","null"],"format":"date"},"net_delta":{"type":["number","null"]},"avg_days_to_expiry":{"type":["number","null"]},"strength_score":{"type":"integer","minimum":0,"maximum":13,"description":"Composite ranking score."},"bullish_screener_hits":{"type":"integer"},"bearish_screener_hits":{"type":"integer"},"bullish_screener_list":{"type":"array","items":{"type":"string"}},"bearish_screener_list":{"type":"array","items":{"type":"string"}},"market_breadth_score":{"type":["integer","null"],"minimum":0,"maximum":100},"market_call_put_ratio":{"type":["number","null"]},"market_context":{"type":["string","null"],"enum":["bullish_only","bearish_only","mixed",null]},"current_price":{"type":["number","null"],"description":"Latest daily close."},"high_since":{"type":["number","null"],"description":"Highest high since entry_date."},"low_since":{"type":["number","null"],"description":"Lowest low since entry_date."},"price_change_pct":{"type":["number","null"],"description":"(current_price - entry_price) / entry_price * 100."},"max_gain_pct":{"type":["number","null"],"description":"(high_since - entry_price) / entry_price * 100."},"max_drawdown_pct":{"type":["number","null"],"description":"(low_since - entry_price) / entry_price * 100."},"max_high_date":{"type":["string","null"],"format":"date"},"min_low_date":{"type":["string","null"],"format":"date"}}},"SentimentDay":{"type":"object","required":["date","market_breadth_score","market_call_put_ratio","context","bullish_count","bearish_count","sentiment_score","sentiment_label"],"additionalProperties":false,"properties":{"date":{"type":"string","format":"date"},"market_breadth_score":{"type":["integer","null"],"description":"Combined advance/decline and new-highs/new-lows score, 0 to 100."},"market_call_put_ratio":{"type":["number","null"],"description":"Market-wide call volume divided by put volume."},"context":{"type":"string","enum":["bullish_only","bearish_only","mixed"]},"bullish_count":{"type":"integer"},"bearish_count":{"type":"integer"},"sentiment_score":{"type":"integer","minimum":0,"maximum":100,"description":"clamp(round((market_call_put_ratio - 0.5) * 100), 0, 100); 50 when the ratio is missing."},"sentiment_label":{"type":"string","enum":["bullish","neutral","bearish"],"description":"65 and above bullish, 45 to 64 neutral, below 45 bearish."}}},"UnusualContract":{"type":"object","description":"One option contract.","required":["symbol","option_symbol","symbol_type","base_last_price","strike_price","expiration_date","days_to_expiration","last_price","bid_price","midpoint","ask_price","volume","open_interest","volume_oi_ratio","volatility","delta","trade_time","data_date"],"additionalProperties":false,"properties":{"symbol":{"type":"string","example":"NVDA"},"option_symbol":{"type":["string","null"]},"symbol_type":{"type":["string","null"],"enum":["Call","Put",null]},"base_last_price":{"type":["number","null"],"description":"Underlying price."},"strike_price":{"type":["number","null"]},"expiration_date":{"type":["string","null"],"format":"date"},"days_to_expiration":{"type":["integer","null"]},"last_price":{"type":["number","null"]},"bid_price":{"type":["number","null"]},"midpoint":{"type":["number","null"]},"ask_price":{"type":["number","null"]},"volume":{"type":["integer","null"]},"open_interest":{"type":["integer","null"]},"volume_oi_ratio":{"type":["number","null"]},"volatility":{"type":["number","null"],"description":"Implied volatility in percent."},"delta":{"type":["number","null"]},"trade_time":{"type":["string","null"],"description":"As delivered by the source: a date (\"09/03/26\") or a time (\"16:00 ET\")."},"data_date":{"type":"string","format":"date"}}},"TrendTopic":{"type":"object","required":["date","topic","weight"],"additionalProperties":false,"properties":{"date":{"type":"string","format":"date"},"topic":{"type":"string","example":"Solid-state batteries"},"weight":{"type":"number","example":0.82}}},"TrendConnection":{"type":"object","required":["date","source_category","source_topic","target_category","target_topic","strength","rationale"],"additionalProperties":false,"properties":{"date":{"type":"string","format":"date"},"source_category":{"type":"string","enum":["techscience","patents","fundingevents"]},"source_topic":{"type":"string"},"target_category":{"type":"string","enum":["techscience","patents","fundingevents"]},"target_topic":{"type":"string"},"strength":{"type":"number","minimum":0,"maximum":1},"rationale":{"type":["string","null"],"description":"Model-written explanation of the link."}}},"MarketMomentumRow":{"type":"object","description":"Breadth figures for one exchange on one day.","required":["data_date","exchange","advancing_issues","declining_issues","unchanged_issues","percent_advancing_issues","percent_declining_issues","percent_unchanged_issues","new_highs","new_lows"],"additionalProperties":false,"properties":{"data_date":{"type":"string","format":"date"},"exchange":{"type":"string","example":"NYSE"},"advancing_issues":{"type":["number","null"]},"declining_issues":{"type":["number","null"]},"unchanged_issues":{"type":["number","null"]},"percent_advancing_issues":{"type":["number","null"],"description":"Percent, 63 means 63%."},"percent_declining_issues":{"type":["number","null"]},"percent_unchanged_issues":{"type":["number","null"]},"new_highs":{"type":["number","null"]},"new_lows":{"type":["number","null"]}}}}}}