---
title: "Unified TF-IDF search across tickers, research, news"
method: GET
path: "/api/search"
tags: ["Search"]
---

# Unified TF-IDF search across tickers, research, news

`GET /api/search`

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

Unified TF-IDF search across all content.

## Query parameters

- `q` string
- `type` string, nullable
- `limit` integer

## Response `200`

Successful Response

- SearchResponse: `GET /api/search` response. F4 schema-tightening (2026-04-30): `query` echo and `results` list are REQUIRED. Three 200 branches (semantic-engine OK, semantic-engine ImportError fallback, exception fallback) all populate both fields; the empty-query 400 branch uses ErrorResponse and is out of scope. Frontend search overlay iterates `results.forEach(...)` without a null-check and reads `data.query` to echo back the query in the overlay header — both must be present.
  - `query` string, required
  - `results` SearchResult[], required
    - `ticker` string, nullable
    - `name` string, nullable
    - `exchange` string, nullable
    - `type` string, nullable
    - `score` number, nullable
  - `count` integer, nullable

## Other responses

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