Skip to main content
Four Otto endpoints read SEC filings directly from EDGAR: Every response carries a one-line note, a machine-readable caveats[] array, and a methodology link back to this page.

Why caveats are structured

Each caveat is { code, plain, affects }:
  • code — a stable key you can branch on in code. It does not change without a version bump.
  • plain — the caveat in plain English, for a human (or an LLM writing for one).
  • affects — the exact response fields the caveat governs, so you know which numbers it applies to instead of guessing.
The point is that you can tell when a number is safe to use. A null is never silent, and a caveat always names the fields it touches.

The house rules

We return null rather than guess. If a filing omits a value, the affected total is null and a companion count tells you how many rows were missing it. A partial sum presented as a precise figure is a wrong number, and a wrong number is worse than no number. We withhold rather than serve a figure we know is stale. If the filing window contains an amendment, we withhold the whole window until the amendment ages out — and you are not charged for that call. Amendments restate only the corrected lines, so there is no safe way to automatically compose one; serving the superseded original would be quietly wrong. We don’t dress up what the filing doesn’t say. The clearest example: SEC codes P and S cover both open-market and privately negotiated transactions. The filing does not distinguish them, so we never label them “open-market” and never call them “conviction” buying.

Caveat reference

Shared

Insider transactions (Form 4)

Fundamentals (XBRL)

Institutional holdings (13F)

Ownership filings and the written brief

Source and licensing

All four endpoints read public-domain SEC EDGAR data. Otto adds parsing, validation, and (for the brief) synthesis. Nothing here is investment advice.