---
title: "Public company report (no API key required)"
method: GET
path: "/reports/{symbol}"
tags: ["Stocks"]
---

# Public company report (no API key required)

`GET /reports/{symbol}`

## Request

- Base URL: `https://mcp.dalalos.in/v1`
- URL: `https://mcp.dalalos.in/v1/reports/{symbol}`
- Auth: none required

The same source-linked canonical company report as `/stocks/{q}/report`, over a FIXED reporting window, on a route that needs NO `Authorization` header — it backs a public web page linked from emailed briefs, where the reader has no session. `data` is uniform in both directions: `report_available`, `company` (always present), `readiness` (`ready`|`limited`|`insufficient` plus the issues behind it), and `report` (the `company_report_v1` payload, or `null`). A company that resolves but has too little cached data returns 200 with `readiness.status="insufficient"` — never an error — carrying a thin report when one could still be assembled, or `report: null` plus `reason_code="no_data"` when none could. Takes no query parameters: unlike every other data route it is not metered per account, so the window is fixed and results are briefly cached server-side. Raw data only, no verdicts.

## Path parameters

- `symbol` string, required

## Response `200`

Success (or success-with-empty when nothing is cached).

- Envelope: Standard DalalOS response envelope (src/models.py). `source` is a per-tool provenance tag; `stale`/`data_age_seconds` describe cache freshness.
  - `cached_at` string, nullable: ISO timestamp the served data was refreshed.
  - `data` unknown
  - `data_age_seconds` number: Present only when cached_at is set.
  - `error` string, nullable
  - `reason_code` string, nullable: Stable machine-readable category (no_data, not_found, bad_request, ...).
  - `resolved_via` string: Present only when a query resolved via a rename/merger alias.
  - `source` string, nullable
  - `stale` boolean, required
  - `status` 'success' | 'error', required

## Other responses

- `400`: Malformed request (reason_code=bad_request).
- `404`: Identifier resolves to nothing (reason_code=not_found).
- `429`: Rate or concurrency limit exceeded.

---

[API](https://skmtc.dev/dalalos/apis/dalalos-indian-stock-rest-api.md) · [All operations](https://skmtc.dev/dalalos/apis/dalalos-indian-stock-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dalalos/apis/dalalos-indian-stock-rest-api/revisions/b13d59d2b300?raw)
