Shop It Docs
Stock Analysis (Fundamentals)

Dividends

Per-FY dividend table, total-return-index chart, inline upcoming book closures — plus the global cross-symbol calendar

The dividends package owns two endpoints — the per-symbol dividend history and the global cross-symbol upcoming-book-closures feed. Both share the UpcomingBookCloseRow shape so FE can render the same row in either context.

MethodPathCache TTL
GET/api/nepse/companies/{symbol}/fundamentals/dividends30 min
GET/api/nepse/upcoming-book-closes1 hr

GET /companies/{symbol}/fundamentals/dividends

Per-symbol dividend history + total-return-index chart + inline upcoming preview.

Query parameters

ParamDefaultRange
years51 – 20
upcomingDays301 – 180

Response

{
  "message": "ok",
  "data": {
    "symbol": "NABIL",
    "years": 5,
    "rows": [
      {
        "fiscalYearBs": "2080/2081",
        "fiscalYearAd": "2023/2024",
        "bonusPercent": 5,
        "cashPercent": 15,
        "totalDistributionPercent": 20,
        "bookCloseDate":    { "ad": "2024-08-15", "bs": "2081-04-30" },
        "distributionDate": { "ad": "2024-09-10", "bs": "2081-05-25" },
        "dividendYield":    { "value": 2.78, "source": "computed", "status": "valid" },
        "rightsRatio": ""
      }
    ],
    "totalReturnIndex": [
      { "date": "2020-01-15", "indexValue": 100.0,  "type": "start" },
      { "date": "2024-08-20", "indexValue": 123.5,  "type": "dividend", "fiscalYearBs": "2080/2081" },
      { "date": "2026-05-22", "indexValue": 145.2,  "type": "latest" }
    ],
    "upcomingBookCloses": [
      {
        "symbol": "NABIL",
        "companyName": "Nabil Bank Limited",
        "kind": "dividend",
        "bookCloseDate": { "ad": "2026-06-15", "bs": "2083-03-01" },
        "fiscalYearBs": "2081/2082",
        "bonusPercent": 7,
        "cashPercent": 18
      }
    ],
    "methodology": "tr_index_reinvested_split_adjusted",
    "dataAsOf": "2026-05-23T00:00:00+05:45",
    "servedAt": "2026-05-23T14:56:30+05:45"
  }
}

Rows

rows[] merges dividend events and rights events on fiscalYearBs. A single fiscal year may have both — the row carries the dividend numbers and attaches rightsRatio when a rights offering occurred that year. Rights-only fiscal years (no dividend declared) append their own row with zero bonus/cash and dividendYield.status: upstream_missing.

Rows sort ascending by book-closure AD date — top of the table is the oldest event in the window.

FieldTypeNotes
bonusPercent / cashPercentfloat0–100 scale, % of par value (NEPSE par = 100 NPR)
totalDistributionPercentfloatbonus + cash (preferred over the stored column when non-zero)
bookCloseDate / distributionDate{ad, bs}Whole object omitted when both calendar values blank
dividendYieldMetricFloat64cash% × 100 / closeAtBookClose × 100; null when no price covers the date
rightsRatiostringEmpty when no rights offering occurred that FY

Total return index

A sparse, event-anchored chart series that quotes "every NPR 100 invested at the start" as the running total return — bonus splits multiply the share count, cash dividends reinvest at the next-day open.

indexValue(t) = shares(t) × price(t) / startPrice × 100

start point   : { type: "start",    indexValue: 100,    date: <first AD price> }
each dividend : { type: "dividend", indexValue: …,      date: <next-day open AD>, fiscalYearBs }
latest point  : { type: "latest",   indexValue: …,      date: <most recent close AD> }

The methodology constant tr_index_reinvested_split_adjusted rides on the response so FE can show it under the chart legend.

Returns null when either the startOpenPrice or latestClosePrice is missing from the anchor query (the series degenerates without anchor points).

Inline upcoming book closes

upcomingBookCloses[] is the per-symbol slice of the global feed, scoped to upcomingDays. Use this when rendering the dividend page's "next book closure" banner without a second fetch.

GET /upcoming-book-closes (global)

Cross-symbol calendar of upcoming book closures (dividends + AGMs) within the window. Lives at the root /api/nepse/ scope, not under /companies/.

Query parameters

ParamDefaultRange
days301 – 180
limit501 – 200

Response

{
  "message": "ok",
  "data": {
    "days": 30,
    "rows": [
      {
        "symbol": "NABIL",
        "companyName": "Nabil Bank Limited",
        "kind": "dividend",
        "bookCloseDate": { "ad": "2026-06-15", "bs": "2083-03-01" },
        "fiscalYearBs": "2081/2082",
        "bonusPercent": 7,
        "cashPercent": 18
      },
      {
        "symbol": "NIBL",
        "companyName": "Nepal Investment Bank Limited",
        "kind": "agm",
        "bookCloseDate": { "ad": "2026-06-22", "bs": "2083-03-08" },
        "fiscalYearBs": "2081/2082",
        "meetingType": "AGM"
      }
    ],
    "dataAsOf": "2026-05-23T14:56:30+05:45",
    "servedAt": "2026-05-23T14:56:30+05:45"
  }
}

Row kinds

kindSourceDistinguishing fields
dividendnepse_corporate_dividendsbonusPercent, cashPercent
agmnepse_corporate_agmsmeetingType (AGM / EGM / SGM)

Rows sort ascending by book-close date. limit caps the row count — at the cap, additional matches in the window are silently truncated.

The per-symbol dividends.upcomingBookCloses array and the global /upcoming-book-closes.rows array share the same UpcomingBookCloseRow shape. FE components that render one can render the other unchanged.

Caching

KeyTTL
nepse:fundamentals:dividends:{SYMBOL}:y{years}:d{upcomingDays}30 min
nepse:fundamentals:upcoming-book-closes:d{days}:l{limit}1 hr

Errors

CodeReason
200OK
404Per-symbol: symbol not in nepse_companies. Global: never.
500DB error