---
title: "Api Bond Directory"
method: GET
path: "/api/bond-directory"
---

# Api Bond Directory

`GET /api/bond-directory`

## 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/bond-directory`
- Auth: none declared

Browse the LQD+HYG corporate-bond directory (registered users).

The curated browse/screener corpus (v146 corporate_bond_directory) users filter
and add to their watchlist. Public SEC N-PORT data (no paywall per
sf_monetization_v3) but scoped to authed users — anon users get the 59-bond
starter set instead. Returns {bonds, total, page, hasMore}; empty until ingested
(FE falls back to live FINRA TRACE search).

## Query parameters

- `q` string
- `grade` string
- `page` integer

## Response `200`

Successful Response

- CreditBondDirectoryResponse: `GET /api/bond-directory` — the LQD+HYG corporate-bond browse/screener corpus (v146 corporate_bond_directory). FE iterates `data.bonds.forEach(...)` to render the browse table and uses `total`/`hasMore` to paginate. All four declared REQUIRED so the layout + paging controls are stable on the empty path (directory not yet ingested → falls back to live FINRA TRACE search).
  - `bonds` object[], required: Directory rows (key, issuer_name, coupon, maturity_date, coupon_type, grade, source_etf, filing_date); `key` is the row's stable handle (issuer|coupon|maturity). Empty until ingested.
  - `total` integer, required: Total rows matching the filter (for pagination).
  - `page` integer, required: Zero-based page index echoed back.
  - `hasMore` boolean, required: True when more pages remain after this one.

## Other responses

- `422`: Validation 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)
