---
title: "Dividend yield + forward calendar for a ticker"
method: GET
path: "/api/dividend-forecast"
tags: ["Market Data"]
---

# Dividend yield + forward calendar for a ticker

`GET /api/dividend-forecast`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/dividend-forecast`
- Auth: none declared

Dividend forecast for given tickers.

## Query parameters

- `tickers` string

## Response `200`

Successful Response

- DividendForecastResponse: `GET /api/dividend-forecast` response. F4 schema-tightening + correction (2026-04-30): `forecast` and `annualTotal` REQUIRED. Handler returns `{"forecast": [...], "annualTotal": N}` on every 200 path (empty-tickers, success, exception fallback); 400/500 branches use ErrorResponse. Frontend `calendar-view.js:367-368` reads `data.forecast` and `data.annualTotal` to drive the dividend-income projection card. Note: previously declared per-ticker fields (`ticker`, `currentYield`, `annualDividend`, `nextExDate`, `payoutHistory`) at the top level — NONE of which the handler returns. The handler's actual wire format is a list-wrapper. Schema rewritten to match reality.
  - `forecast` DividendForecastEntry[], required
    - `ticker` string, nullable
    - `annualDividend` number, nullable
    - `shares` number, nullable
    - `annualIncome` number, nullable
    - `nextExDate` string, nullable
    - `frequency` integer, nullable
    - `yieldPct` number, nullable
    - `cagr5yr` number, nullable
    - `consecutiveGrowthYears` integer, nullable
  - `annualTotal` number, required

## Other responses

- `400`: Bad Request
- `422`: Validation Error
- `500`: Internal Server Error

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
