{
  "openapi": "3.1.0",
  "info": {
    "title": "Downstox public data API",
    "version": "1.0.0",
    "summary": "Free, unauthenticated, read-only JSON endpoints for Indian stock market data.",
    "description": "Downstox is a free Indian stock market research site. Every endpoint in this document is public, unauthenticated and read-only (GET only) - no API key, cookie, or signup is required to call any of them. There is no published rate-limit guarantee; callers should be polite and cache responses. Data is for information only and is not investment advice. Downstox is not a SEBI-registered investment adviser, research analyst, or stockbroker. Downstox also has separate authenticated broker-trading endpoints (gated on a signed httpOnly cookie minted by a broker's own OAuth callback - Downstox is an OAuth CLIENT of brokers, never an authorization server) and admin endpoints; neither family is documented here because neither is callable by an unauthenticated agent. Every path, parameter example and response field below was observed in a live response from https://downstox.com while writing this document (2026-08-23); nothing here is guessed. Where a response is large or highly variable, the schema lists only the fields actually observed and says so, rather than inventing the rest.\n\nA NOTE ON robots.txt: it disallows crawling /api/ paths. That line manages crawl BUDGET (it stops search-engine crawlers from wasting fetches walking JSON), not access control - it does not forbid an agent from calling these endpoints directly, and every URL below is reachable with a plain unauthenticated GET. Do not 'fix' that disallow rule to match this document; they are answering different questions.\n\nRATE LIMIT: 300 requests per minute per IP across /api/, then HTTP 429 with {\"success\": false, \"error\": \"Too many requests. Slow down.\"}. No SLA.\n\nUSER-AGENT: the CDN in front of this site rejects a couple of default library user agents before any application code runs. Verified 23 Aug 2026 against /api/blog?limit=1: Python-urllib/3.11 and libwww-perl/6.67 both return HTTP 403, while python-requests, curl, Go-http-client, Java and node-fetch return 200. Send a descriptive User-Agent. It is not a credential, it is a bot filter.",
    "contact": {
      "name": "Downstox",
      "url": "https://downstox.com/about"
    }
  },
  "servers": [
    {
      "url": "https://downstox.com",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "markets",
      "description": "Live index levels, sentiment and news"
    },
    {
      "name": "stocks",
      "description": "Per-symbol fundamentals and broker MTF rates"
    },
    {
      "name": "mutual-funds",
      "description": "AMFI scheme list, categories and NAV history"
    },
    {
      "name": "ipo",
      "description": "IPO grey market premium tracker"
    },
    {
      "name": "screener",
      "description": "Full-universe stock screener and coverage count"
    },
    {
      "name": "flows",
      "description": "FII/DII cash-market flows and participant OI positioning"
    },
    {
      "name": "research",
      "description": "Dividend aristocrats, superinvestor portfolios, US multibaggers, weekly index outlook"
    },
    {
      "name": "corporate",
      "description": "NSE/BSE corporate announcements and management promise tracking"
    },
    {
      "name": "calendar",
      "description": "NSE trading holiday calendar"
    },
    {
      "name": "auction",
      "description": "Closing auction capture status"
    },
    {
      "name": "content",
      "description": "Blog post feed"
    },
    {
      "name": "pre-open",
      "description": "NSE pre-open session base rates"
    }
  ],
  "paths": {
    "/api/india-markets/overview": {
      "get": {
        "tags": [
          "markets"
        ],
        "summary": "NSE/BSE/GIFT Nifty index snapshot, sector heatmap and market news",
        "description": "Returns current NIFTY, SENSEX and GIFT Nifty levels, a 12-entry sector heatmap, 12 extra index tiles and a rolling news feed. Verified live 2026-08-23, HTTP 200.",
        "operationId": "getIndiaMarketsOverview",
        "responses": {
          "200": {
            "description": "Market overview snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IndiaMarketsOverview"
                },
                "example": {
                  "success": true,
                  "indices": {
                    "nse": {
                      "price": 24252,
                      "change": 0.08,
                      "changeAbs": 20.15,
                      "prevClose": 24231.85,
                      "isLive": false,
                      "open": 24284.05,
                      "dayHigh": 24284.05,
                      "dayLow": 24206.8
                    }
                  },
                  "sectors": [
                    {
                      "name": "Bank Nifty",
                      "ticker": "^NSEBANK",
                      "icon": "BNK",
                      "price": 57761.95,
                      "change": 0.46,
                      "changeAbs": 266.05
                    }
                  ],
                  "news": [
                    {
                      "title": "Income Tax Department explains how to choose between ITR-3 and ITR-4",
                      "link": "https://www.livemint.com/money/personal-finance/...",
                      "source": "LiveMint Money",
                      "pubDate": "2026-08-23T13:03:35.000Z"
                    }
                  ],
                  "timestamp": "2026-08-23T13:46:35.118Z",
                  "cached": true
                }
              }
            }
          }
        }
      }
    },
    "/api/markets/sentiments": {
      "get": {
        "tags": [
          "markets"
        ],
        "summary": "One-line AI-generated sentiment label per world index",
        "description": "Returns a { label, reason } pair for 26 world indices (NYSE, NASDAQ, TSX, NSE, BSE, GIFT Nifty and others). Verified live 2026-08-23, HTTP 200.",
        "operationId": "getMarketSentiments",
        "responses": {
          "200": {
            "description": "Per-exchange sentiment labels",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketSentiments"
                },
                "example": {
                  "success": true,
                  "data": {
                    "nyse": {
                      "label": "Neutral",
                      "reason": "Up 0.43% showing steady performance."
                    },
                    "nse": {
                      "label": "Neutral",
                      "reason": "Flat change of 0.08%."
                    }
                  },
                  "cached": true,
                  "refreshAt": "2026-08-23T15:47:17.836Z"
                }
              }
            }
          }
        }
      }
    },
    "/api/stocks/{symbol}": {
      "get": {
        "tags": [
          "stocks"
        ],
        "summary": "Fundamentals, sector, MTF broker rates and related stocks for one NSE symbol",
        "description": "Verified live 2026-08-23: /api/stocks/RELIANCE returns HTTP 200 with fundamentals and per-broker MTF rates; /api/stocks/ZZZZNOTREAL returns HTTP 404 with { success: false, error }.",
        "operationId": "getStock",
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "description": "NSE trading symbol, case-insensitive.",
            "schema": {
              "type": "string"
            },
            "example": "RELIANCE"
          }
        ],
        "responses": {
          "200": {
            "description": "Stock detail",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StockDetail"
                },
                "example": {
                  "success": true,
                  "stock": {
                    "symbol": "RELIANCE",
                    "name": "Reliance Industries Limited",
                    "exchange": "NSE",
                    "isin": "INE002A01018",
                    "rates": {
                      "upstox": 23,
                      "zerodha": 22.6,
                      "groww": 22.56,
                      "dhan": 22
                    }
                  },
                  "mtfAvailable": true,
                  "sector": "Energy",
                  "fundamentals": {
                    "cmp": 1316,
                    "pe": 23.8,
                    "roe": 8.91,
                    "roce": 10.3,
                    "divYield": 0.46,
                    "bookValue": 668,
                    "priceToBook": 1.97,
                    "mcap": 1780882,
                    "fScore": 7,
                    "universe": "nifty50"
                  },
                  "indices": [
                    "nifty50"
                  ],
                  "totalStocks": 1919
                }
              }
            }
          },
          "404": {
            "description": "Unknown symbol",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "error": "Stock ZZZZNOTREAL not found"
                }
              }
            }
          }
        }
      }
    },
    "/api/mf/schemes": {
      "get": {
        "tags": [
          "mutual-funds"
        ],
        "summary": "Paginated list of AMFI mutual fund schemes with returns",
        "description": "Verified live 2026-08-23: default call and q/limit/page all return HTTP 200. Free-text q must be at least 2 characters to trigger a name search; otherwise the category filter (or 'All') applies.",
        "operationId": "listMfSchemes",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Free-text search over scheme name, minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "bluechip"
          },
          {
            "name": "category",
            "in": "query",
            "description": "Exact category name as returned in the categories list, e.g. one from GET /api/mf/schemes's own categories array. Defaults to 'All'.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "1-indexed page number.",
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "example": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size, clamped server-side to [10, 100].",
            "schema": {
              "type": "integer"
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "Scheme page",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MfSchemesPage"
                },
                "example": {
                  "success": true,
                  "total": 4,
                  "page": 1,
                  "totalPages": 1,
                  "schemes": [
                    {
                      "id": 370,
                      "scheme_code": "119441",
                      "scheme_name": "Principal Emerging Bluechip Fund - Direct Plan - Growth Option",
                      "fund_house": "Principal Mutual Fund",
                      "scheme_category": "Equity Scheme - Large & Mid Cap Fund",
                      "category": "Large Cap",
                      "nav": "197.9600",
                      "nav_date": "30-12-2021",
                      "return_1y": "39.17",
                      "return_3y": "22.91",
                      "return_5y": null
                    }
                  ],
                  "categories": [
                    {
                      "name": "Equity - Other",
                      "count": 2790
                    }
                  ],
                  "lastUpdated": "2026-08-22T16:32:08.000Z"
                }
              }
            }
          }
        }
      }
    },
    "/api/mf/scheme/{code}": {
      "get": {
        "tags": [
          "mutual-funds"
        ],
        "summary": "Full historical NAV series for one scheme code",
        "description": "Verified live 2026-08-23: /api/mf/scheme/148101 (a real code taken from the schemes list) returns HTTP 200 with the full NAV history; /api/mf/scheme/999999999 returns HTTP 404 with { success: false, error: 'Scheme not found' }.",
        "operationId": "getMfScheme",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "description": "AMFI scheme code, as returned in scheme_code by GET /api/mf/schemes.",
            "schema": {
              "type": "string"
            },
            "example": "148101"
          }
        ],
        "responses": {
          "200": {
            "description": "Scheme metadata plus NAV history, newest first",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MfSchemeHistory"
                },
                "example": {
                  "success": true,
                  "meta": {
                    "fund_house": "Nippon India Mutual Fund",
                    "scheme_type": "Open Ended Schemes",
                    "scheme_category": "Debt Scheme - Credit Risk Fund",
                    "scheme_code": 148101,
                    "scheme_name": "Nippon India Credit Risk Fund - Segregated Portfolio 1 - Direct Plan - Growth Plan",
                    "isin_growth": null,
                    "isin_div_reinvestment": null
                  },
                  "data": [
                    {
                      "date": "27-01-2022",
                      "nav": "0.53420"
                    },
                    {
                      "date": "25-01-2022",
                      "nav": "0.13530"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Unknown scheme code",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "error": "Scheme not found"
                }
              }
            }
          }
        }
      }
    },
    "/api/ipo/gmp": {
      "get": {
        "tags": [
          "ipo"
        ],
        "summary": "Grey market premium for current and upcoming IPOs",
        "description": "Verified live 2026-08-23, HTTP 200, 14 rows at the time of testing. `gmp`, `priceBand`, `estListing` and `gainPct` are null when no premium has been reported yet for that IPO.",
        "operationId": "getIpoGmp",
        "responses": {
          "200": {
            "description": "GMP rows",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IpoGmpList"
                },
                "example": {
                  "success": true,
                  "stale": false,
                  "count": 14,
                  "rows": [
                    {
                      "company": "Lumino Industries",
                      "norm": "lumino",
                      "slug": "lumino-industries",
                      "gmp": 50,
                      "priceBand": 82,
                      "estListing": 132,
                      "gainPct": 60.98,
                      "date": "27-31 August",
                      "type": "Upcoming",
                      "status": "22 Aug, 17:30"
                    },
                    {
                      "company": "Rays of Belief",
                      "norm": "raysofbelief",
                      "slug": "raysofbelief",
                      "gmp": null,
                      "priceBand": null,
                      "estListing": null,
                      "gainPct": null,
                      "date": "1-3 September",
                      "type": "Upcoming",
                      "status": "22 Aug, 17:30"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/screener/count": {
      "get": {
        "tags": [
          "screener"
        ],
        "summary": "How many stocks the screener covers, and when that count last refreshed",
        "description": "Verified live 2026-08-23, HTTP 200. GET /api/screener/ (no trailing path) returns the same count's full row set - documented here instead because it is a ~1.6MB unpaginated dump of all rows and this endpoint is the honest, cheap way to get the coverage figure alone.",
        "operationId": "getScreenerCount",
        "responses": {
          "200": {
            "description": "Coverage count",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScreenerCount"
                },
                "example": {
                  "success": true,
                  "count": 3129,
                  "lastUpdated": "2026-08-23T13:48:42.000Z"
                }
              }
            }
          }
        }
      }
    },
    "/api/holidays/": {
      "get": {
        "tags": [
          "calendar"
        ],
        "summary": "NSE trading holiday calendar plus current market-open status",
        "description": "Verified live 2026-08-23, HTTP 200.",
        "operationId": "getHolidays",
        "responses": {
          "200": {
            "description": "Holiday calendar and market status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Holidays"
                },
                "example": {
                  "success": true,
                  "marketStatus": {
                    "open": false,
                    "state": "weekend",
                    "reason": "Markets closed for the weekend",
                    "todayHoliday": null
                  },
                  "upcoming": [],
                  "holidays": [
                    {
                      "date": "2026-01-15",
                      "name": "Municipal Corporation Election (Maharashtra)"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/breakouts/": {
      "get": {
        "tags": [
          "screener"
        ],
        "summary": "Stocks breaking their 10/20/50/100/200-day and 52-week highs",
        "description": "Verified live 2026-08-23, HTTP 200. `data` is keyed by the lookback period in days (also listed in `periods`/`labels`); each list holds up to 50 stocks.",
        "operationId": "getBreakouts",
        "responses": {
          "200": {
            "description": "Breakout lists by lookback period",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Breakouts"
                },
                "example": {
                  "success": true,
                  "stale": false,
                  "ageMinutes": 126,
                  "labels": {
                    "10": "10-Day",
                    "20": "20-Day",
                    "50": "50-Day",
                    "100": "100-Day",
                    "200": "200-Day",
                    "252": "52-Week"
                  },
                  "data": {
                    "10": [
                      {
                        "symbol": "KRONOX",
                        "exchange": "NSE",
                        "price": 215.18,
                        "prevHigh": 186.19,
                        "magnitude": 15.57,
                        "volume": 24328555,
                        "avgVolume": 491527,
                        "volumeRatio": 49.5
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/fiidii/daily": {
      "get": {
        "tags": [
          "flows"
        ],
        "summary": "Most recent day's FII/DII net cash-market flows",
        "description": "Verified live 2026-08-23, HTTP 200. Values are in INR crore, as strings in `raw` and pre-parsed numbers in `fii`/`dii`.",
        "operationId": "getFiiDiiDaily",
        "responses": {
          "200": {
            "description": "Latest FII/DII flow",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FiiDiiDaily"
                },
                "example": {
                  "success": true,
                  "date": "21-Aug-2026",
                  "fii": {
                    "buyValue": 12560.91,
                    "sellValue": 13103.62,
                    "netValue": -542.71
                  },
                  "dii": {
                    "buyValue": 15258.71,
                    "sellValue": 13134.57,
                    "netValue": 2124.14
                  },
                  "marketStatus": {
                    "open": false,
                    "state": "weekend",
                    "reason": "Markets closed for the weekend"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/other-side/": {
      "get": {
        "tags": [
          "flows"
        ],
        "summary": "Participant (FII/DII/Pro/client) open-interest regime for the latest session",
        "description": "Verified live 2026-08-23, HTTP 200. This is the public overview behind the /other-side page: which side (FII, DII, retail) is crowded and how fragile the setup looks, derived from published NSE participant OI data. Not a trade signal by itself.",
        "operationId": "getOtherSideOverview",
        "responses": {
          "200": {
            "description": "Latest regime read plus a 30-entry regime log",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OtherSideOverview"
                },
                "example": {
                  "asOf": "2026-08-21",
                  "coverage": {
                    "days": 2516,
                    "firstDate": "2016-06-13",
                    "lastDate": "2026-08-21"
                  },
                  "regime": {
                    "date": "2026-08-21",
                    "regime": "FII crowded short (cash-hedged) / Retail put-selling extreme",
                    "fii_stance": "crowded-short",
                    "retail_stance": "put-selling-extreme",
                    "fragility_label": "Extreme",
                    "computed_at": "2026-08-21T13:55:42.000Z"
                  },
                  "liveRecordSince": "2026-06-11"
                }
              }
            }
          }
        }
      }
    },
    "/api/us-markets/multibaggers": {
      "get": {
        "tags": [
          "research"
        ],
        "summary": "US stocks bucketed by trailing 1-year return (crazy / multibagger / strong / all)",
        "description": "Verified live 2026-08-23, HTTP 200. `crazy`, `multibaggers` and `strong` are ranked subsets of `all` (the full scanned universe).",
        "operationId": "getUsMultibaggers",
        "responses": {
          "200": {
            "description": "US multibagger buckets",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsMultibaggers"
                },
                "example": {
                  "success": true,
                  "universeSize": 144,
                  "stale": false,
                  "multibaggers": [
                    {
                      "ticker": "MRVL",
                      "name": "Marvell Technology, Inc.",
                      "price": 237.04,
                      "ret1y": 224.9,
                      "changePct": -5.57,
                      "exchange": "NasdaqGS"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/dividend-aristocrats/": {
      "get": {
        "tags": [
          "research"
        ],
        "summary": "NSE stocks with a long streak of consecutive dividend-paying years",
        "description": "Verified live 2026-08-23, HTTP 200.",
        "operationId": "getDividendAristocrats",
        "parameters": [
          {
            "name": "min",
            "in": "query",
            "description": "Minimum consecutive years of dividends required, clamped server-side to [5, 25]. Defaults to 10.",
            "schema": {
              "type": "integer"
            },
            "example": 10
          }
        ],
        "responses": {
          "200": {
            "description": "Dividend aristocrat list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DividendAristocrats"
                },
                "example": {
                  "success": true,
                  "minYears": 10,
                  "count": 36,
                  "results": [
                    {
                      "symbol": "INFY",
                      "consecutiveYears": 26,
                      "totalYears": 26,
                      "ttmDividend": 48,
                      "currentPrice": 1121,
                      "yield_pct": 4.28,
                      "growthRate5y": 15.9,
                      "lastDividend": {
                        "date": "2026-06-10",
                        "amount": 25,
                        "year": 2026
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/superinvestors/": {
      "get": {
        "tags": [
          "research"
        ],
        "summary": "Curated list of well-known investors and their notable public holdings",
        "description": "Verified live 2026-08-23, HTTP 200. Holdings are compiled from public shareholding disclosures on a quarterly cycle, not a live feed - see the `disclaimer` field and GET /api/superinvestors/{slug}'s own `meta.disclaimer`.",
        "operationId": "listSuperinvestors",
        "responses": {
          "200": {
            "description": "Investor summaries",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuperinvestorList"
                },
                "example": {
                  "success": true,
                  "asOf": "Q4 FY26 (March 2026 quarter)",
                  "disclaimer": "Holdings are compiled from public stock-exchange shareholding disclosures and reflect notable, well-documented positions, not a complete or real-time portfolio.",
                  "count": 10,
                  "investors": [
                    {
                      "slug": "rekha-jhunjhunwala",
                      "name": "Rekha Jhunjhunwala",
                      "firm": "RARE Enterprises (Jhunjhunwala family)",
                      "holdingCount": 12,
                      "topHoldings": [
                        {
                          "symbol": "TITAN",
                          "company": "Titan Company"
                        }
                      ]
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/superinvestors/{slug}": {
      "get": {
        "tags": [
          "research"
        ],
        "summary": "Full profile and holdings for one curated investor",
        "description": "Verified live 2026-08-23: /api/superinvestors/rekha-jhunjhunwala returns HTTP 200; /api/superinvestors/not-a-real-investor-xyz returns HTTP 404.",
        "operationId": "getSuperinvestor",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Investor slug, as returned by GET /api/superinvestors/slugs or the slug field in the list endpoint.",
            "schema": {
              "type": "string"
            },
            "example": "rekha-jhunjhunwala"
          }
        ],
        "responses": {
          "200": {
            "description": "Investor profile",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SuperinvestorDetail"
                },
                "example": {
                  "success": true,
                  "investor": {
                    "slug": "rekha-jhunjhunwala",
                    "name": "Rekha Jhunjhunwala",
                    "firm": "RARE Enterprises (Jhunjhunwala family)",
                    "oneLiner": "The Jhunjhunwala family portfolio, India's \"Big Bull\" legacy."
                  },
                  "meta": {
                    "asOf": "Q4 FY26 (March 2026 quarter)",
                    "investorCount": 10
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown slug",
            "content": {
              "application/json": {
                "example": {
                  "success": false,
                  "error": "Investor not found"
                }
              }
            }
          }
        }
      }
    },
    "/api/announcements/": {
      "get": {
        "tags": [
          "corporate"
        ],
        "summary": "Merged NSE + BSE corporate announcements feed",
        "description": "Verified live 2026-08-23, HTTP 200, 227 announcements at the time of testing.",
        "operationId": "getAnnouncements",
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "description": "Filter to one company's filings.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Cap on rows returned, capped server-side at 200. Omitted or invalid means no cap.",
            "schema": {
              "type": "integer"
            },
            "example": 50
          }
        ],
        "responses": {
          "200": {
            "description": "Announcement feed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Announcements"
                },
                "example": {
                  "success": true,
                  "announcements": [
                    {
                      "exchange": "BSE",
                      "symbol": "537954",
                      "company": "Shri Krishna Prasadam Ltd",
                      "subject": "Announcement under Regulation 30 (LODR)-Resignation of Director",
                      "category": "Resignation of Director",
                      "publishedAt": "2026-08-23T13:40:06.000Z",
                      "pdfUrl": "https://www.bseindia.com/xml-data/corpfiling/AttachLive/7210bd67-26ed-4c56-b719-2229fa470d81.pdf"
                    }
                  ],
                  "sources": {
                    "nse": "ok",
                    "bse": "ok"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/promises/": {
      "get": {
        "tags": [
          "corporate"
        ],
        "summary": "Management statements from filings, tagged with a target metric and status",
        "description": "Verified live 2026-08-23, HTTP 200, 40 entries at the time of testing. `norm` carries the parsed/canonicalised version of the quoted target; it is present for most rows but its inner shape varies by KPI type, so only the fields observed above are documented.",
        "operationId": "getPromises",
        "responses": {
          "200": {
            "description": "Tracked management promises",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Promises"
                },
                "example": {
                  "success": true,
                  "promises": [
                    {
                      "symbol": "544632",
                      "company": "Meesho Ltd",
                      "quote": "roughly about INR200 crores is kind of the annual budget cap that we have around new initiatives in terms of EBITDA",
                      "metric": "annual budget cap for new initiatives",
                      "target": "INR200 crores",
                      "saidOn": "2026-07-28T15:33:55.000Z",
                      "sourceUrl": "https://www.bseindia.com/xml-data/corpfiling/AttachLive/56beb6e2-520b-4555-908f-2e35b54d78ee.pdf",
                      "status": "stated",
                      "id": "f93abfd59af59d8e5875b43c"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/weekly-outlook/": {
      "get": {
        "tags": [
          "research"
        ],
        "summary": "Weekly technical read (RSI, ATR, pivots, regime) for major indices",
        "description": "Verified live 2026-08-23, HTTP 200, 5 indices at the time of testing.",
        "operationId": "getWeeklyOutlook",
        "responses": {
          "200": {
            "description": "Per-index weekly technical snapshot",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WeeklyOutlook"
                },
                "example": {
                  "success": true,
                  "indices": [
                    {
                      "meta": {
                        "key": "nifty",
                        "label": "NIFTY 50",
                        "ticker": "^NSEI"
                      },
                      "asOf": "2026-08-21",
                      "snapshot": {
                        "open": 24343.45,
                        "high": 24360.1,
                        "low": 24025.65,
                        "close": 24252,
                        "weekReturn": -0.38,
                        "ytdReturn": -7.91,
                        "high52W": 26373.2,
                        "low52W": 22182.55
                      },
                      "indicators": {
                        "rsi14": 59.47,
                        "atr14": 601.18,
                        "sma50": 24745.08,
                        "sma200": 22453.78
                      },
                      "pivots": {
                        "p": 24212.58,
                        "r1": 24399.52,
                        "s1": 24065.07
                      },
                      "regime": {
                        "trend": "flat",
                        "momentum": "neutral",
                        "volatility": "normal"
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/closing-auction/status": {
      "get": {
        "tags": [
          "auction"
        ],
        "summary": "Whether today's closing-auction tick capture ran, and how many sessions are on record",
        "description": "Verified live 2026-08-23, HTTP 200. `phase` reflects the calendar (e.g. 'closed-weekend' outside trading days), not just today's capture outcome.",
        "operationId": "getClosingAuctionStatus",
        "responses": {
          "200": {
            "description": "Capture status",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClosingAuctionStatus"
                },
                "example": {
                  "success": true,
                  "phase": "closed-weekend",
                  "phaseNote": "No session today: it is the weekend.",
                  "indicative": false,
                  "sessionDate": "2026-08-21",
                  "nseStatus": "Closed",
                  "universeSize": 208,
                  "capture": {
                    "sessions": 6,
                    "coverage": [
                      {
                        "date": "2026-08-21",
                        "ticks": 37,
                        "symbols": 208
                      }
                    ]
                  },
                  "error": null
                }
              }
            }
          }
        }
      }
    },
    "/api/blog": {
      "get": {
        "tags": [
          "content"
        ],
        "summary": "Published blog posts, newest first",
        "description": "Verified live 2026-08-23: /api/blog?limit=1 returns HTTP 200 with 1 of 298 total posts at the time of testing.",
        "operationId": "listBlogPosts",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Page size.",
            "schema": {
              "type": "integer"
            },
            "example": 1
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Row offset for pagination.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Filter to one blog category.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Blog post page",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BlogPage"
                },
                "example": {
                  "success": true,
                  "total": 298,
                  "posts": [
                    {
                      "id": 300,
                      "slug": "korean-traders-chase-40-coupons-as-risk-appetite-survives-rout-mt5azx02",
                      "title": "Korean Traders Chase 40% Coupons as Risk Appetite Survives Rout",
                      "excerpt": "Everything you need to know about korean traders chase 40% coupons as risk appetite survives r ...",
                      "category": "market-analysis",
                      "tags": [
                        "market-analysis",
                        "indian-stock-market",
                        "trading"
                      ],
                      "reading_time": 12,
                      "published_at": "2026-08-23T04:25:19.000Z",
                      "cover_image": "https://images.pexels.com/photos/8370486/pexels-photo-8370486.jpeg"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/api/pre-open/base-rates": {
      "get": {
        "tags": [
          "pre-open"
        ],
        "summary": "Historical hit-rate of NSE pre-open buy/sell-leaning signals actually closing up",
        "description": "Verified live 2026-08-23, HTTP 200. `rates.*.rate` was observed as null when a bucket has too few sessions recorded yet (8 of a 20-session minimum window at the time of testing) - see `note`.",
        "operationId": "getPreOpenBaseRates",
        "responses": {
          "200": {
            "description": "Base-rate buckets",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreOpenBaseRates"
                },
                "example": {
                  "success": true,
                  "sessions": 8,
                  "minSessions": 20,
                  "rates": {
                    "buyLeaning": {
                      "n": 120,
                      "closedUp": 51,
                      "rate": null
                    }
                  },
                  "firstSession": "2026-08-12",
                  "lastSession": "2026-08-21",
                  "note": "Only 8 of 20 sessions recorded so far."
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "IndiaMarketsOverview": {
        "type": "object",
        "description": "Only the fields observed live are listed; `indices.bse` and `indices.giftnifty` mirror the `indices.nse` shape, and `extras` mirrors the `sectors` shape at 12 entries.",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "indices": {
            "type": "object",
            "properties": {
              "nse": {
                "$ref": "#/components/schemas/IndexTile"
              }
            }
          },
          "sectors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SectorTile"
            }
          },
          "news": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NewsItem"
            }
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "cached": {
            "type": "boolean"
          }
        }
      },
      "IndexTile": {
        "type": "object",
        "properties": {
          "price": {
            "type": "number"
          },
          "change": {
            "type": "number",
            "description": "Percent change"
          },
          "changeAbs": {
            "type": "number"
          },
          "prevClose": {
            "type": "number"
          },
          "isLive": {
            "type": "boolean"
          },
          "open": {
            "type": "number"
          },
          "dayHigh": {
            "type": "number"
          },
          "dayLow": {
            "type": "number"
          }
        }
      },
      "SectorTile": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "ticker": {
            "type": "string"
          },
          "icon": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "change": {
            "type": "number"
          },
          "changeAbs": {
            "type": "number"
          }
        }
      },
      "NewsItem": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "link": {
            "type": "string",
            "format": "uri"
          },
          "source": {
            "type": "string"
          },
          "pubDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MarketSentiments": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "data": {
            "type": "object",
            "description": "Keyed by exchange code (nyse, nasdaq, nse, bse, giftnifty and 10 others observed live); each value is { label, reason }.",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                }
              }
            }
          },
          "cached": {
            "type": "boolean"
          },
          "refreshAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "StockDetail": {
        "type": "object",
        "description": "The `stock`, `fundamentals` and `brokerInfo` objects carry more fields than listed here (verified live but not exhaustively catalogued); this schema names only the fields inspected.",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "stock": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "exchange": {
                "type": "string"
              },
              "isin": {
                "type": "string"
              },
              "rates": {
                "type": "object",
                "description": "MTF margin rate per broker slug, e.g. upstox/zerodha/groww/dhan.",
                "additionalProperties": {
                  "type": "number"
                }
              }
            }
          },
          "mtfAvailable": {
            "type": "boolean"
          },
          "sector": {
            "type": "string"
          },
          "fundamentals": {
            "type": "object",
            "properties": {
              "cmp": {
                "type": "number"
              },
              "pe": {
                "type": "number"
              },
              "roe": {
                "type": "number"
              },
              "roce": {
                "type": "number"
              },
              "divYield": {
                "type": "number"
              },
              "bookValue": {
                "type": "number"
              },
              "priceToBook": {
                "type": "number"
              },
              "mcap": {
                "type": "number"
              },
              "fScore": {
                "type": "integer",
                "description": "Piotroski-style score, out of 8."
              },
              "universe": {
                "type": "string"
              }
            }
          },
          "indices": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "totalStocks": {
            "type": "integer"
          }
        }
      },
      "MfSchemesPage": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "total": {
            "type": "integer"
          },
          "page": {
            "type": "integer"
          },
          "totalPages": {
            "type": "integer"
          },
          "schemes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MfSchemeSummary"
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "MfSchemeSummary": {
        "type": "object",
        "properties": {
          "scheme_code": {
            "type": "string"
          },
          "scheme_name": {
            "type": "string"
          },
          "fund_house": {
            "type": "string"
          },
          "scheme_category": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "nav": {
            "type": "string",
            "description": "Decimal NAV, serialized as a string."
          },
          "nav_date": {
            "type": "string"
          },
          "return_1y": {
            "type": [
              "string",
              "null"
            ]
          },
          "return_3y": {
            "type": [
              "string",
              "null"
            ]
          },
          "return_5y": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "MfSchemeHistory": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "meta": {
            "type": "object",
            "properties": {
              "fund_house": {
                "type": "string"
              },
              "scheme_type": {
                "type": "string"
              },
              "scheme_category": {
                "type": "string"
              },
              "scheme_code": {
                "type": "integer"
              },
              "scheme_name": {
                "type": "string"
              },
              "isin_growth": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isin_div_reinvestment": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "data": {
            "type": "array",
            "description": "Full NAV history, newest first.",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "nav": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "IpoGmpList": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "stale": {
            "type": "boolean"
          },
          "count": {
            "type": "integer"
          },
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "company": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "gmp": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "priceBand": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "estListing": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "gainPct": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "date": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ScreenerCount": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "count": {
            "type": "integer"
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Holidays": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "marketStatus": {
            "type": "object",
            "properties": {
              "open": {
                "type": "boolean"
              },
              "state": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              },
              "todayHoliday": {
                "type": [
                  "object",
                  "null"
                ]
              }
            }
          },
          "upcoming": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          },
          "holidays": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "Breakouts": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "stale": {
            "type": "boolean"
          },
          "ageMinutes": {
            "type": "number"
          },
          "labels": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "data": {
            "type": "object",
            "description": "Keyed by lookback period in days (10, 20, 50, 100, 200, 252).",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "symbol": {
                    "type": "string"
                  },
                  "exchange": {
                    "type": "string"
                  },
                  "price": {
                    "type": "number"
                  },
                  "prevHigh": {
                    "type": "number"
                  },
                  "magnitude": {
                    "type": "number"
                  },
                  "volume": {
                    "type": "number"
                  },
                  "avgVolume": {
                    "type": "number"
                  },
                  "volumeRatio": {
                    "type": "number"
                  }
                }
              }
            }
          }
        }
      },
      "FiiDiiDaily": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "date": {
            "type": "string"
          },
          "fii": {
            "type": "object",
            "properties": {
              "buyValue": {
                "type": "number"
              },
              "sellValue": {
                "type": "number"
              },
              "netValue": {
                "type": "number"
              }
            }
          },
          "dii": {
            "type": "object",
            "properties": {
              "buyValue": {
                "type": "number"
              },
              "sellValue": {
                "type": "number"
              },
              "netValue": {
                "type": "number"
              }
            }
          },
          "marketStatus": {
            "type": "object",
            "properties": {
              "open": {
                "type": "boolean"
              },
              "state": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              }
            }
          }
        }
      },
      "OtherSideOverview": {
        "type": "object",
        "description": "The `gauges` object carries more per-cohort fields than listed here (fii/dii/pro observed live); only the top-level fields inspected are documented.",
        "properties": {
          "asOf": {
            "type": "string"
          },
          "coverage": {
            "type": "object",
            "properties": {
              "days": {
                "type": "integer"
              },
              "firstDate": {
                "type": "string"
              },
              "lastDate": {
                "type": "string"
              }
            }
          },
          "regime": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string"
              },
              "regime": {
                "type": "string"
              },
              "fii_stance": {
                "type": "string"
              },
              "retail_stance": {
                "type": "string"
              },
              "fragility_label": {
                "type": "string"
              },
              "computed_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "liveRecordSince": {
            "type": "string"
          }
        }
      },
      "UsMultibaggers": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "universeSize": {
            "type": "integer"
          },
          "stale": {
            "type": "boolean"
          },
          "multibaggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsTicker"
            }
          },
          "crazy": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsTicker"
            }
          },
          "strong": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsTicker"
            }
          },
          "all": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsTicker"
            }
          }
        }
      },
      "UsTicker": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "ret1y": {
            "type": "number"
          },
          "changePct": {
            "type": "number"
          },
          "exchange": {
            "type": "string"
          }
        }
      },
      "DividendAristocrats": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "minYears": {
            "type": "integer"
          },
          "count": {
            "type": "integer"
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "symbol": {
                  "type": "string"
                },
                "consecutiveYears": {
                  "type": "integer"
                },
                "totalYears": {
                  "type": "integer"
                },
                "ttmDividend": {
                  "type": "number"
                },
                "currentPrice": {
                  "type": "number"
                },
                "yield_pct": {
                  "type": "number"
                },
                "growthRate5y": {
                  "type": "number"
                },
                "lastDividend": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "year": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "SuperinvestorList": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "asOf": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          },
          "investors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "firm": {
                  "type": "string"
                },
                "holdingCount": {
                  "type": "integer"
                },
                "topHoldings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "symbol": {
                        "type": "string"
                      },
                      "company": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "SuperinvestorDetail": {
        "type": "object",
        "description": "`investor` carries more fields than listed here (bio, style, sectors, full holdings observed live but not exhaustively catalogued).",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "investor": {
            "type": "object",
            "properties": {
              "slug": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "firm": {
                "type": "string"
              },
              "oneLiner": {
                "type": "string"
              }
            }
          },
          "meta": {
            "type": "object",
            "properties": {
              "asOf": {
                "type": "string"
              },
              "investorCount": {
                "type": "integer"
              },
              "disclaimer": {
                "type": "string"
              }
            }
          }
        }
      },
      "Announcements": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "announcements": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "exchange": {
                  "type": "string"
                },
                "symbol": {
                  "type": "string"
                },
                "company": {
                  "type": "string"
                },
                "subject": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "publishedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "pdfUrl": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "sources": {
            "type": "object",
            "properties": {
              "nse": {
                "type": "string"
              },
              "bse": {
                "type": "string"
              }
            }
          }
        }
      },
      "Promises": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "promises": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "symbol": {
                  "type": "string"
                },
                "company": {
                  "type": "string"
                },
                "quote": {
                  "type": "string"
                },
                "metric": {
                  "type": "string"
                },
                "target": {
                  "type": "string"
                },
                "saidOn": {
                  "type": "string",
                  "format": "date-time"
                },
                "sourceUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "status": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "WeeklyOutlook": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "indices": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "meta": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "ticker": {
                      "type": "string"
                    }
                  }
                },
                "asOf": {
                  "type": "string"
                },
                "snapshot": {
                  "type": "object",
                  "properties": {
                    "open": {
                      "type": "number"
                    },
                    "high": {
                      "type": "number"
                    },
                    "low": {
                      "type": "number"
                    },
                    "close": {
                      "type": "number"
                    },
                    "weekReturn": {
                      "type": "number"
                    },
                    "high52W": {
                      "type": "number"
                    },
                    "low52W": {
                      "type": "number"
                    }
                  }
                },
                "indicators": {
                  "type": "object",
                  "properties": {
                    "rsi14": {
                      "type": "number"
                    },
                    "atr14": {
                      "type": "number"
                    },
                    "sma50": {
                      "type": "number"
                    },
                    "sma200": {
                      "type": "number"
                    }
                  }
                },
                "regime": {
                  "type": "object",
                  "properties": {
                    "trend": {
                      "type": "string"
                    },
                    "momentum": {
                      "type": "string"
                    },
                    "volatility": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ClosingAuctionStatus": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "phase": {
            "type": "string"
          },
          "phaseNote": {
            "type": "string"
          },
          "indicative": {
            "type": "boolean"
          },
          "sessionDate": {
            "type": "string"
          },
          "nseStatus": {
            "type": "string"
          },
          "universeSize": {
            "type": "integer"
          },
          "capture": {
            "type": "object",
            "properties": {
              "sessions": {
                "type": "integer"
              },
              "coverage": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string"
                    },
                    "ticks": {
                      "type": "integer"
                    },
                    "symbols": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "BlogPage": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "total": {
            "type": "integer"
          },
          "posts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer"
                },
                "slug": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "excerpt": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "reading_time": {
                  "type": "integer"
                },
                "published_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "cover_image": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "PreOpenBaseRates": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "sessions": {
            "type": "integer"
          },
          "minSessions": {
            "type": "integer"
          },
          "rates": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "n": {
                  "type": "integer"
                },
                "closedUp": {
                  "type": "integer"
                },
                "rate": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              }
            }
          },
          "firstSession": {
            "type": "string"
          },
          "lastSession": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        }
      }
    }
  }
}
