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

# Coverage

> What is implemented, what deviates, and every known gap against the Financial Datasets contract.

"Compatible" on this site means the request and response shapes match the Financial Datasets interface closely enough that an existing client can switch base URLs and keep working. It does not mean the two servers behave identically everywhere they overlap. This page is the itemized version of that claim.

Monid Finance MCP is an independent, Monid-backed implementation. It is not affiliated with or endorsed by Financial Datasets, and no Financial Datasets data or code is used.

Every claim below was checked on 2026-09-04 by sending the same request to both APIs and diffing the responses field by field.

## Tool status

All 27 Financial Datasets MCP tool names are implemented against live Monid routes and contract tested. The advertised names and input schemas are diffed against the captured Financial Datasets surface by test, so the two cannot silently drift. Tool descriptions are this server's own prose.

Call any of them over MCP at `/mcp` or `/api`.

## REST coverage

All 54 Financial Datasets REST paths are registered, and every one of them answers from a live source. There are no stubs.

<Tabs>
  <Tab title="As-reported, 4 routes">
    `/financials/as-reported`, `/financials/income-statements/as-reported`, `/financials/balance-sheets/as-reported` and `/financials/cash-flow-statements/as-reported` read the rendered statement files EDGAR generates from a filing's own XBRL presentation linkbase, so the `line_items` tree is the filing's hierarchy.

    They match Financial Datasets' structure, not its labels. Apple's filing prints "Gross margin" where Financial Datasets prints "Gross Profit", and this server prints what the filing prints. `full_label` comes from the row's XBRL element name, so it agrees with theirs either way.
  </Tab>
</Tabs>

## Deviations that will change a client's behavior

These routes work, but not the way Financial Datasets does. Read them before pointing an existing integration here.

| Route                               | Deviation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/ipos`                             | Requires `ticker`. The filings feed behind it is keyed on one issuer and cannot list registrations market-wide. `classification` is rejected rather than silently ignored. Cover-page fields (`exchange`, `is_ipo_grade`, price range) are omitted.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `/institutional-holdings/investors` | Requires `ticker`. The 13F feed needs an issuer CIK on every call, so it answers "who holds this issuer" rather than "every filer we know of".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `/company/facts/ciks`               | Returns 8,005 CIKs against Financial Datasets' 21,005. Ours is the SEC ticker-file universe; theirs also covers filers with no listed ticker. Every CIK we return is in their list too.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `/macro/interest-rates`             | Four banks (FED, ECB, BOE, BOJ) against Financial Datasets' ten; `/banks` lists only those. Each rate is read from the bank's own publication: the Fed target-range midpoint, the ECB deposit facility rate, the BOE Bank Rate, the BOJ policy rate. Each bank's own page carries its whole decision history, so one scrape yields 56 Fed decisions back to 2003 and 35 ECB decisions back to 2000. The route reports the rate in force at the start of each month, the shape Financial Datasets publishes, defaulting to the last twelve months; `bank`, `start_date` and `end_date` all narrow it. The Bank of Japan publishes each decision only as a PDF statement, so its rate takes two Monid calls: the year's releases listing supplies the newest Statement on Monetary Policy and its date, and Context.dev's extractor reads the rate out of that PDF. |
| `/news`                             | Requires `ticker`. Market-wide news is not routed.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `/prices/snapshot/market`           | Nasdaq's most-active set, not the whole market. Record shape matches exactly.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |

## Cash flow statement source

Measured 2026-09-04 against SEC XBRL across eight large caps (AAPL, MSFT, XOM, KO, TSLA, PFE, VZ, NVDA), the normalized statements feed's cash flow subtotals came back: operating 8/8 correct, investing 0/8, financing 4/8, net change in cash 0/8. Apple FY2025 investing read 27,910,000,000 against the 10-K's 15,195,000,000; Microsoft FY2026 read -23,552,000,000 against SEC's -139,500,000,000.

The cash flow statement is therefore sourced from marketbeat, which matched SEC line for line on every figure checked. That applies on every path that builds one: `get_cash_flow_statement`, `get_all_financials`, and `search_line_items` when a cash flow field is requested. Income statement and balance sheet stay on the normalized feed, which agrees with SEC where measured.

Two consequences a caller will notice. marketbeat does not report `share_based_compensation` or `ending_cash_balance`, so those two fields are omitted on annual, quarterly and ttm cash flow records rather than carried over from a feed proven wrong on three of four subtotals. And the correction costs one extra provider call per statement, \$0.02 measured, which is why `search_line_items` only pays it when the requested line items include a cash flow field.

The defect was reported to the upstream provider on 2026-09-04.

## REST and MCP disagree on defaults

The same tool can return different data depending on which transport called it, if you rely on a default instead of passing the parameter.

`get_income_statement`, `get_balance_sheet`, `get_cash_flow_statement`, and `get_financial_metrics` default `period` to `ttm` in the MCP tool schema, matching the published Financial Datasets schema. The REST route for the same data defaults an omitted `period` to `annual`, because the REST handler always fills a value before calling the tool. Pass `period` explicitly on both transports.

`get_filings` defaults `limit` to `100` over MCP and to `10` over REST, for the same reason.

## Response contract

A success response contains only Financial Datasets schema keys, in schema property order. A field the server cannot source is left out, never set to null or guessed. Every failure uses the Financial Datasets `{"error": <code>, "message": <text>}` shape, covered in [Errors](/guides/errors). Pagination follows [Pagination](/guides/how-to-use-pagination). Cost and provenance never appear in a response body. They go to a receipts ledger, one row per Monid call, recording the provider, endpoint, run id and measured cost.

## Known gaps, endpoint by endpoint

<AccordionGroup>
  <Accordion title="Company lookup is ticker only">
    `cik` is accepted for parity but answers `bad_request`. `get_company_facts` sources ticker and name only.
  </Accordion>

  <Accordion title="TTM statements are computed, not sourced">
    Trailing-twelve-month rows are built locally from four consecutive quarters. Flow fields are summed, weighted-average shares averaged, and balance-sheet fields carry over from the final quarter. TTM rows omit `fiscal_period` and `currency`, and omit filing identity, since a TTM window spans more than one filing.
  </Accordion>

  <Accordion title="Prices: ascending order, local aggregation, single interval multiplier">
    `get_stock_prices` returns ascending time order. Week, month and year bars are aggregated locally from daily bars. `time` is the bar's end date in UTC. `interval_multiplier` must be `1`.
  </Accordion>

  <Accordion title="Filing exhibits are not sourced">
    `get_filing_items` accepts `include_exhibits` for parity, but `true` answers `bad_request`.
  </Accordion>

  <Accordion title="Filing items are extracted synchronously">
    `/filings/items` runs the extraction inline and returns items on the same response. It never issues a request id, so `/filings/items/requests/{request_id}` answers `not_found` for any id rather than reporting a request as pending that will never complete.
  </Accordion>

  <Accordion title="Earnings composition is narrower">
    `get_earnings` with a ticker composes records from 10-K and 10-Q filing events only; 8-K earnings releases are not composed. Without a ticker it answers the Nasdaq earnings calendar feed, five records. Records omit any block whose period is absent from the underlying statements matrix.
  </Accordion>

  <Accordion title="Financial metrics omit market-derived valuation fields">
    `get_financial_metrics` leaves out fields needing a historical market price we do not have: `enterprise_value`, `price_to_*` ratios, EV multiples, `free_cash_flow_yield`, `peg_ratio`, `return_on_invested_capital`, `currency`, `filing_datetime`.
  </Accordion>

  <Accordion title="Insider trades are capped at 15 rows">
    Financial Datasets allows up to 5000. This server caps at 15, the size of the validated SEC Form 4 feed it reads. `form_type` filtering is rejected, because the underlying route reports no form types. `name` is the raw insider relationship text, which carries the person's job title where Financial Datasets returns the name alone. `title`, `transaction_code`, `security_title` and `shares_owned_before_transaction` are omitted.
  </Accordion>

  <Accordion title="Ownership state data runs months behind">
    Measured 2026-09-04: the newest record in the 13D feed behind `/beneficial-ownership` and `/activist-ownership` was filed 2026-03-06, roughly six months back. This is not a real-time feed. Every row carries its own `filing_date` and `event_date` so recency is readable directly. Insider ownership is a different case and tracked filings within days.
  </Accordion>

  <Accordion title="Beneficial ownership reports fewer fields">
    Financial Datasets returns 26 fields per stake; this server sources 11. The voting and dispositive power columns, `issuer_cik`, `issuer_cusip`, `accession_number` and the amendment fields are absent from the 13D/13G feed this reads, so they are omitted. `share_change` and `share_change_percent` are extra, and genuinely sourced.
  </Accordion>

  <Accordion title="Insider ownership reports fewer fields">
    Financial Datasets returns 21 fields; this server sources 9. `title`, `is_officer`, `is_board_director`, `is_ten_percent_owner` and the derivative-security block need a Form 3/4/5 XML parse this route does not do. `form_type` filtering is rejected: the feed carries no Form 3/5 classification.
  </Accordion>

  <Accordion title="Screener supports two fields">
    `screen_stocks` executes `exchange` and `market_cap` with the `eq` operator through the Nasdaq screener. Any other field or operator answers `bad_request` before any Monid call. `list_stock_screener_filters` lists only those two, not the full Financial Datasets catalog of 113 filterable fields.
  </Accordion>
</AccordionGroup>

## Should you migrate an existing integration

If your integration reads normalized statements, metrics, prices, filings, news, earnings, ownership or KPI data, and does not depend on the omitted fields above, pointing your base URL and key here is close to a drop-in swap.

Do not migrate yet if you depend on `cik`-keyed company lookup, market-wide news, or an unscoped IPO or investor listing. The `as_reported=true` flag on the normalized statement tools is also still rejected; ask the dedicated `as-reported` routes above for that hierarchy instead. File an issue on [GitHub](https://github.com/BeLazy167/freefinancialdataset) if you need one of those.
