---
title: "LEARN investment-lore case files (modern + historical merged)"
method: GET
path: "/api/learn/investment-lore"
tags: ["Education"]
---

# LEARN investment-lore case files (modern + historical merged)

`GET /api/learn/investment-lore`

## 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/learn/investment-lore`
- Auth: none declared

Return merged modern + historical investment-lore case files.

Pre-PR0 the frontend fetched both `investment-lore.json` (115)
and `investment-lore-historical.json` (78) and concat'd them
client-side, sorting by year DESC. This route does the merge
server-side and adds `_era` ('modern' / 'historical') to each
entry so the existing renderer's era-grouping branch keeps
working unchanged.

Top-level shape: `{entries: [...]}`. (The JSON files are flat
arrays; this envelope wraps them so OpenAPI describes the
response as an object — Pydantic + FastAPI conventions.)

Falls back to reading both JSON files when PG is empty.

## Response `200`

Successful Response

- LearnDataInvestmentLoreResponse: `GET /api/learn/investment-lore` response. Returns the merged modern + historical case-file corpus as a flat `entries[]` list. The pre-PR0 frontend fetched `investment-lore.json` (115 entries) + `investment-lore-historical.json` (78 entries) and concat'd them client-side; this endpoint does the merge server-side. Each entry's `_era` field is preserved/derived so the existing renderer's era-grouping logic keeps working.
  - `entries` unknown[], required
    - unknown

## Other responses

- `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)
