> ## Documentation Index
> Fetch the complete documentation index at: https://docs.llmquantdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SEC 申报文件章节读取

> 提取 SEC 10-K / 10-Q / 8-K 申报文件中具体 item 的全文 —— progressive disclosure 模式的第二步。

<Note icon="sparkles">
  **已暴露为 MCP 工具**：`sec_filing_read` —— 在 Claude / Cursor / 任意 MCP 客户端中直接调用。详见 [MCP Server](/zh-CN/integration/mcp-server) 60 秒配置。
</Note>

<Badge color="green" icon="circle-check">已上线</Badge>
 
<Badge color="blue" size="sm">每次 1 credit</Badge>

## 它为 Agent 做什么

`sec_filing_read` 是 SEC Filing **progressive disclosure 模式的第二步**：在 `sec_filing_browse` 拿到某 ticker 的 filing 列表之后，用本工具抽出某份 filing 中具体 item 的全文（Risk Factors、MD\&A、财务报表、earnings press release 等）。传 `accession_number`（在 browse 后推荐，且 **8-K 必传**）或 `year` / `quarter` + 章节 code，响应里会带上正文 + 该 filing 其他章节的 manifest。传 `items`（数组）可一次取多段、仍只 1 credit；请求里这份 filing 没有的 code 会被直接略过、不报错。

`sec_filing_read` **不是 semantic search**：按 `(ticker, filing_type, accession_number 或 year[+quarter], item)` 做参数化精确查询，返回精确的章节文本 —— 不做相关性排序，不做模糊匹配。

## 返回值

<ResponseField name="data" type="FilingReadResult" required>
  <Expandable title="FilingReadResult 字段">
    <ResponseField name="ticker" type="string" required>股票代码。</ResponseField>
    <ResponseField name="filing_type" type="string" required>文件类型 —— `10-K`、`10-Q` 或 `8-K`。</ResponseField>
    <ResponseField name="accession_number" type="string" required>命中的 filing 的 SEC 受理号。</ResponseField>
    <ResponseField name="year" type="integer" nullable>`period_of_report` 的日历年（8-K 为 `null` —— 事件驱动、无报告期）。</ResponseField>
    <ResponseField name="quarter" type="integer" nullable>`period_of_report` 的季度（10-Q 为 1-4；10-K 和 8-K 为 `null`）。</ResponseField>

    <ResponseField name="available_sections" type="SectionManifest[]" required>
      该 filing 所有可抽取章节的 manifest —— 用来探索还能读哪些 item。

      <Expandable title="SectionManifest 字段">
        <ResponseField name="section_key" type="string" required>Item code（`1`、`1A`、`7`、`part1item2`、`item2.02` 等）。</ResponseField>
        <ResponseField name="section_title" type="string" required>章节名称（`Business`、`Risk Factors` 等）。</ResponseField>
        <ResponseField name="ordinal" type="integer" required>该章节在 filing 内的展示顺序。</ResponseField>
        <ResponseField name="char_count" type="integer" required>字符数；该章节尚未被读取时为 `0`。</ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="items" type="Item[]" required>
      请求的 `items` 对应的章节内容（不指定时返回全部章节）。这份 filing 没有的 code 不会出现在这里 —— 对照 `available_sections` 核对。

      <Expandable title="Item 字段">
        <ResponseField name="number" type="string" required>Item code（如 `1A`、`part1item2`）。</ResponseField>
        <ResponseField name="name" type="string" required>章节名称（如 `Risk Factors`、`MD&A`）。</ResponseField>
        <ResponseField name="text" type="string" required>从 filing 抽取的纯文本正文。</ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta.creditsUsed" type="number">本次调用消耗的 credit（固定 `1`）。</ResponseField>
<ResponseField name="meta.remainingCredits" type="number">账户剩余 credit。</ResponseField>

```json title="200 OK · sec_filing_read" expandable theme={null}
{
  "data": {
    "ticker": "NVDA",
    "filing_type": "10-K",
    "accession_number": "0001045810-26-000021",
    "year": 2025,
    "quarter": null,
    "available_sections": [
      { "section_key": "1", "section_title": "Business", "ordinal": 1, "char_count": 48578 },
      { "section_key": "1A", "section_title": "Risk Factors", "ordinal": 2, "char_count": 32100 },
      { "section_key": "7", "section_title": "MD&A", "ordinal": 10, "char_count": 25400 }
    ],
    "items": [
      {
        "number": "1A",
        "name": "Risk Factors",
        "text": "Item 1A. Risk Factors\n\nOur business, financial condition and operating results may be materially affected by..."
      }
    ]
  },
  "meta": { "creditsUsed": 1, "remainingCredits": 99 }
}
```

## 说明

<Tip>
  **两步检索是 canonical 模式**：先用 `sec_filing_browse`（免费）拿 filing 列表，挑出想读的 `accession_number`，再用 `sec_filing_read`（1 credit）+ 具体 `item` 抽正文。这样能避开 10-Q 的 `period_of_report` 和 `filed_at` 季度不一致问题。
</Tip>

<Tip>
  抽更多章节前先看 `available_sections[i].char_count` —— Risk Factors、MD\&A 等长 item 动辄几万字。每次只读一个章节，agent context 才不会爆。
</Tip>

<Tip>
  要同一份 filing 的多段？传 `items`（如 `["item2.02","item9.01"]`）一次取回 —— 仍只 1 credit —— 还能跳过没点名的大附件。
</Tip>

<Warning>
  **10-K、10-Q 和 8-K 使用不同的 item code 体系**，参数参考下方表格。混用会返回 `400`。
</Warning>

<Warning>
  **请求的 code 缺失时略过、不报错。** 格式合法但这份 filing 没有的 `item` / `items` code 会从结果里略过（看 `available_sections` 确认实际有哪些）。只有当请求的 code **全都**取不到时才返回 `400`；格式非法的 code（item 体系与 filing type 不匹配）仍返回 `400`。
</Warning>

<Warning>
  10-Q 时**单传 `year` 不够** —— 必须 `year + quarter` 一起传，或者直接传 `accession_number`。10-Q 只传 `year` 会返回 `400`。
</Warning>

<Warning>
  **8-K 必须用 `accession_number` 定位。** 它是事件驱动（一年多份），`year` / `quarter` 无法唯一锁定 —— 先 browse 再用 `accession_number` 读。对 8-K 传 `year` 或 `quarter` 会返回 `400`。
</Warning>

<Warning>
  仅支持纯文本输出，不返回 HTML / 结构化表格。极新 filing 可能需要稍等片刻才能读取。
</Warning>

## 直接调用

<Accordion title="HTTP / SDK 示例" icon="terminal">
  <CodeGroup>
    ```typescript MCP (Claude / Cursor) theme={null}
    // 1) Browse 拿 filing 列表
    {
      "method": "tools/call",
      "params": {
        "name": "sec_filing_browse",
        "arguments": { "ticker": "NVDA", "filing_type": "10-K", "limit": 5 }
      }
    }

    // 2) 一次读最新 10-K 的 Risk Factors + MD&A（items 1A、7）
    {
      "method": "tools/call",
      "params": {
        "name": "sec_filing_read",
        "arguments": {
          "ticker": "NVDA",
          "filing_type": "10-K",
          "accession_number": "0001045810-26-000021",
          "items": ["1A", "7"]
        }
      }
    }
    ```

    ```python Python (HTTP) theme={null}
    import os, requests

    base = "https://api.llmquantdata.com"
    headers = {"Authorization": f"Bearer {os.environ['LLMQUANT_API_KEY']}"}

    # 1) Browse
    filings = requests.get(
        f"{base}/api/filings",
        headers=headers,
        params={"ticker": "NVDA", "filing_type": "10-K", "limit": 5},
    ).json()["data"]

    # 2) 一次读最近一份 10-K 的 items 1A + 7
    latest = filings[0]
    resp = requests.get(
        f"{base}/api/filings/sections",
        headers=headers,
        params={
            "ticker": "NVDA",
            "filing_type": "10-K",
            "accession_number": latest["accession_number"],
            "items": "1A,7",
        },
    ).json()
    print(resp["data"]["items"][0]["text"][:500])
    ```

    ```bash cURL theme={null}
    # 1) Browse
    curl "https://api.llmquantdata.com/api/filings?ticker=NVDA&filing_type=10-K&limit=5" \
      -H "Authorization: Bearer $LLMQUANT_API_KEY"

    # 2) 一次读 items 1A + 7
    curl "https://api.llmquantdata.com/api/filings/sections?ticker=NVDA&filing_type=10-K&accession_number=0001045810-26-000021&items=1A,7" \
      -H "Authorization: Bearer $LLMQUANT_API_KEY"
    ```
  </CodeGroup>
</Accordion>

## 完整参数参考

<Accordion title="sec_filing_read — 请求参数" icon="sliders">
  <ParamField query="ticker" type="string" required>
    美股 ticker（如 `AAPL`、`NVDA`、`META`）。
  </ParamField>

  <ParamField query="filing_type" type="string" required>
    文件类型 —— `10-K`、`10-Q` 或 `8-K`。
  </ParamField>

  <ParamField query="year" type="integer">
    `period_of_report` 的日历年。当 `accession_number` 省略时：10-K **必填**；10-Q 必须与 `quarter` 一起传。8-K 不使用（用 `accession_number` 定位）。
  </ParamField>

  <ParamField query="quarter" type="integer">
    `period_of_report` 的季度（1-4）。仅适用于 10-Q（10-K 和 8-K 会被拒）。10-Q 通过 `year` 查询且不传 `accession_number` 时必填。
  </ParamField>

  <ParamField query="items" type="string[]">
    一次取多段。HTTP 用逗号分隔（`items=item2.02,item9.01`），MCP 工具传数组。code 和下面 `item` 一样。最多 25 个，自动去重，仍只算 1 credit。这份 filing 没有的 code 会跳过；全都对不上才返回 `400`。不填就返回全部章节。
  </ParamField>

  <ParamField query="item" type="string">
    `items` 的单数别名（仅 HTTP；MCP 工具只暴露 `items`）—— 等价于 `items=[<item>]`。省略则返回所有可抽取章节。

    **10-K item code：** `1`、`1A`、`1B`、`1C`、`2`、`3`、`4`、`5`、`6`、`7`、`7A`、`8`、`9`、`9A`、`9B`、`10`、`11`、`12`、`13`、`14`、`15`。

    **10-Q item code：** `part1item1`、`part1item2`、`part1item3`、`part1item4`、`part2item1`、`part2item1a`、`part2item2`、`part2item3`、`part2item4`、`part2item5`、`part2item6`。

    **8-K item code：** 随 filing 变化（事件驱动）—— 如 `item2.02`（earnings / Results of Operations）、`item5.02`（高管变动）、`item1.01`（重大协议）、`item8.01`（其他事件），外加 `ex99.1`（press release）这类附件。读响应里的 `available_sections` 可看到某份 8-K 实际包含的全集。

    常用组合：10-K `1`（Business）· `1A`（Risk Factors）· `7`（MD\&A）· `8`（财务报表）· `10`（董事/高管）；10-Q `part1item1`（财务报表）· `part1item2`（MD\&A）· `part2item1a`（Risk Factors）。
  </ParamField>

  <ParamField query="accession_number" type="string">
    精确 SEC 受理号（如 `0001045810-26-000021`）。在 `sec_filing_browse` 之后推荐用这种方式，且 **8-K 必传**。不能与 `year` / `quarter` 同时使用。
  </ParamField>
</Accordion>

## 相关接口

<Columns cols={3}>
  <Card title="SEC 申报文件浏览" icon="folder-open" href="/zh-CN/api/filings/browse">
    第 1 步 —— 调 read 之前先列出该 ticker 的可用 filing。
  </Card>

  <Card title="13F 按机构查持仓" icon="briefcase" href="/zh-CN/api/filings/13f-by-manager">
    机构持仓数据 —— 不同的 SEC 申报家族（Form 13F）。
  </Card>

  <Card title="MCP Server 接入" icon="plug" href="/zh-CN/integration/mcp-server">
    60 秒接入 Claude / Cursor / 任意 agent harness。
  </Card>
</Columns>
