Skip to main content
Glama

Server Details

Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 44 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
SharpLu/ko-mcp
GitHub Stars
0
Server Listing
ko.io

TDQS

A3.9/5.0

Scored across 24 tools

Disambiguation5/5

Each tool has a distinct resource+action target, and overlapping-looking pairs are explicitly differentiated: get_congress_member vs get_congress_trades, get_institution_holdings vs get_stock_holders, get_crypto_holder vs get_crypto_holders, and get_insider_trades vs list_insider_traders all clarify their grain and purpose in the descriptions. The three sec_* filing tools (list/index/document) are cleanly separated by workflow step.

Naming Consistency5/5

Consistent snake_case with predictable verb prefixes (get_, list_, sec_get_/sec_list_, search). The sec_ namespace prefix is used uniformly across the three filing tools, and singular/plural (holder/holders) is applied meaningfully rather than arbitrarily.

Tool Count4/5

24 tools is on the heavier side, but the server spans many distinct domains (congress trades, crypto ETFs, macro indicators, insider activity, 13F holdings, stock fundamentals, SEC filings), so most tools earn their place. Slightly over what a single server ideally carries, but not bloated with redundant entries.

Completeness4/5

Broad lifecycle coverage across stocks (price, profile, financials, holders, activity), institutions (list, holdings), insiders (trades, list), congress (member, trades), macro (rates, yields, indicators, stress), and SEC filings (list, index, document). Minor gaps exist (e.g., no explicit dividends/splits or crypto ETF flows beyond holdings), but core workflows are well served with a search entry point linking everything.

Available Tools

24 tools
get_congress_memberA
Read-onlyIdempotent
Inspect

Get detailed trading history of a specific U.S. Congress member. Shows individual trades with transaction types, amounts, and disclosure dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
memberYesMember slug (e.g. 'nancy-pelosi', 'dan-crenshaw'). Use get_congress_trades or search to find exact slugs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
memberYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations fully declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds that the tool shows trading history details, which is helpful. However, it does not disclose behavioral aspects like pagination behavior, rate limits, or how the 'page' and 'limit' parameters affect results. Since annotations cover the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and directly states what it does. It is front-loaded with the purpose ('Get detailed trading history'), and the rest adds detail. No wasted words, though it could mention usage context for siblings, but that is not strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema available (which likely details return format), and annotations cover read-only behavior. The description explains what the tool returns (trades with transaction types, amounts, dates). It does not explain the 'member' slug format or how to find it, but that is covered in the schema's parameter description. Given the output schema and annotations, the description is adequate for the agent to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, meaning the description for 'member' parameter exists, but 'page' and 'limit' lack descriptions. The main description does not clarify the meaning of 'page' and 'limit', relying on the schema's defaults and types. The description adds context for 'member' (that it is a slug) but not for the other parameters. With low coverage, the description does not fully compensate, but the schema provides enough via names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and resource ('trading history of a specific U.S. Congress member'), and specifies what is shown (individual trades with transaction types, amounts, disclosure dates). This distinguishes it from the sibling 'get_congress_trades' which likely lists all trades, though it does not explicitly name the sibling. The purpose is clear and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: it is for retrieving details on a specific congress member, while the sibling 'get_congress_trades' likely provides a broader listing. However, it does not explicitly state when NOT to use this tool or name alternatives. The parameter schema hint 'Use get_congress_trades or search to find exact slugs' partially guides usage, but that is in the parameter description, not the main description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_congress_tradesA
Read-onlyIdempotent
Inspect

Search individual stock trades disclosed by U.S. Congress members (House and Senate) under the STOCK Act. Returns a markdown table of transactions: member name, chamber, ticker, buy/sell type, transaction date, disclosure date (the gap between the two reveals reporting delay), dollar amount range, and owner (self/spouse/joint). Use for questions like 'What did Nancy Pelosi trade recently?', 'Which members bought NVDA?', or 'Show the largest Senate trades this quarter'. Filter by chamber, ticker, or member name; sort by traded value, trade count, or recency. For one member's profile and complete trading history, use get_congress_member instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default 1)
sortNoSort order — volume (most traded value), trades (most trades), recent (latest first)volume
limitNoTrades per page, 1-50 (default 20)
searchNoFull or partial member name, e.g. 'Pelosi' or 'Dan Crenshaw'
tickerNoStock ticker symbol to filter by, e.g. NVDA or AAPL
chamberNoCongressional chamber: house, senate, or all (default all)all

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
filtersYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnly/openWorld/idempotent/non-destructive behavior, so the bar is lower, but the description still adds concrete behavioral context: it returns a markdown table, highlights that the disclosure-date gap reveals reporting delay, and lists owner categories. This tells the agent what kind of response to expect and what analytical value the data provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: main purpose, return format, example queries, filter/sort semantics, and sibling differentiation. The most important information is front-loaded, and the length is appropriate for a search tool with six parameters and multiple use cases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With comprehensive annotations, a fully described input schema, and an output schema present, the description covers the remaining gap: when to use the tool, what it returns, and how to think about the data. An agent can confidently select and invoke this tool for a wide range of congressional-trade questions without needing additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter. The description adds useful semantic framing by mapping the sort enum to plain-language meanings ('traded value, trade count, or recency'), demonstrating search examples, and showing how filters combine. It doesn't add new parameter details, but it makes the existing schema meanings easier to use.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search individual stock trades disclosed by U.S. Congress members under the STOCK Act.' It names exact data fields (member, chamber, ticker, buy/sell, dates, amount range, owner) and even differentiates itself from the sibling get_congress_member by explicitly indicating that the sibling covers one member's profile and complete history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage guidance is explicit and actionable: it lists representative questions ('What did Nancy Pelosi trade recently?'), describes filter and sort options, and names the alternative tool with the condition for choosing it ('For one member's profile and complete trading history, use get_congress_member instead'). This leaves no ambiguity about when to call this tool versus its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_exposureA
Read-onlyIdempotent
Inspect

Get a market-wide summary of institutional exposure to US spot crypto ETFs (Bitcoin ETF complex: IBIT, FBTC, GBTC, etc.) from the latest quarter of SEC 13F filings. Returns total institutional USD held, quarter-over-quarter change, and a per-ETF breakdown (holders, USD, QoQ).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
complexYes
productsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the tool is clearly safe and non-mutating. The description adds meaningful behavioral context by specifying that it returns data from the latest quarter (with no lookback control) and includes a per-ETF breakdown, QoQ change, and total USD, which helps set expectations about the output granularity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core purpose, then lists the exact return components. Every phrase earns its place, with no filler or redundant repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool that returns a known summary, the description is complete. It specifies the ETF complex (IBIT, FBTC, GBTC), the data source (SEC 13F), and the output fields (total USD, QoQ change, per-ETF breakdown). Additionally, an output schema exists, so the description doesn't need to further detail return values. There are no gaps that would prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, so the description doesn't need to explain parameters. It instead clarifies what data is returned (total institutional USD, QoQ change, per-ETF breakdown), which is valuable for an agent deciding if this tool meets the query needs. With no parameters, the description's return details compensate well for the lack of schema guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('US spot crypto ETFs') and clearly distinguishes it from siblings like 'get_crypto_holder' and 'get_crypto_holders' by focusing on a market-wide summary rather than individual holder data. It also specifies the data source (SEC 13F filings) and the scope (latest quarter), which removes ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use this tool (when needing a market-wide institutional exposure summary) but does not explicitly mention when not to use it or point to alternatives like 'get_crypto_holder' or 'get_crypto_holders' for granular per-entity data. The context is clear enough for an agent to infer the right choice, but explicit exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_holderA
Read-onlyIdempotent
Inspect

Get one institution's spot crypto-ETF holdings (Bitcoin ETF complex): its per-ETF positions in the latest filed quarter (shares, USD, QoQ change, action) plus its rank among all crypto-ETF holders. Use a CIK number (find it with get_crypto_holders or the search tool).

ParametersJSON Schema
NameRequiredDescriptionDefault
institutionYesInstitution CIK number (e.g. '1512857' for Brevan Howard) or name (e.g. 'BlackRock').

Output Schema

ParametersJSON Schema
NameRequiredDescription
cikYes
positionsYes
requestedYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
institutionYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavioral context beyond that: the data is scoped to the latest filed quarter, includes specific fields and a rank, and is limited to the Bitcoin ETF complex. This is meaningful supplement rather than contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences carry a dense but focused payload: what is returned, the quarter scope, the rank, and how to resolve the input. There is no fluff, and the most important scope qualifier ('one institution's') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with a 100%-covered schema, robust read-only annotations, and an output schema, the description is complete. It states the return contents, the time scope, the ranking context, and how to obtain the required identifier. Nothing essential for calling the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema already explains that 'institution' accepts a CIK number or name with examples. The description's 'Use a CIK number' adds no new semantic info; the pointer to get_crypto_holders for finding the CIK is helpful but is usage guidance rather than parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('Get'), the resource ('one institution's spot crypto-ETF holdings'), and the granularity (per-ETF positions, shares, USD, QoQ change, action, rank). The singular 'one institution's' distinguishes it from the plural sibling get_crypto_holders, so an agent can tell tools apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use it: to retrieve a single institution's crypto-ETF holdings. It also provides actionable input guidance by telling the agent to use a CIK number and pointing to get_crypto_holders or the search tool to find it. It does not explicitly enumerate exclusions versus all siblings, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crypto_holdersA
Read-onlyIdempotent
Inspect

List institutional investors holding US spot crypto ETFs (Bitcoin ETF complex), ranked by total USD held, from the latest quarter of SEC 13F filings. Optionally filter to holders of a specific ETF via the product parameter (e.g. 'IBIT').

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
productNoFilter to holders of a specific spot crypto ETF ticker, e.g. 'IBIT', 'FBTC', 'GBTC'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
productYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
total_holdersYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral context: ranking order, reliance on latest 13F filings, and optional filtering capability. It doesn't discuss pagination or output shape, but the output schema covers those, and there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences deliver the core purpose, ranking, data source, and filter behavior without fluff. The most important information is front-loaded, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations, 100% parameter documentation, and an output schema, the description is fully sufficient. It explains what data is returned, the ordering, the filing period, and how to narrow results. No critical operational detail is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a documented meaning. The description reinforces the 'product' parameter with an example ('IBIT') and places it in context, but it does not add significant new semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb ('List'), clearly identifies the resource ('institutional investors holding US spot crypto ETFs (Bitcoin ETF complex)'), and narrows scope with ranking ('by total USD held') and source ('latest quarter of SEC 13F filings'). This strongly differentiates it from siblings like get_crypto_holder and get_institution_holdings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states what the tool does and provides concrete usage guidance for the optional product filter with a canonical example. It doesn't explicitly name alternatives or when-not-to-use conditions, but the context is clear enough for an agent to select this tool for the intended purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_economic_indicatorsA
Read-onlyIdempotent
Inspect

Get U.S. economic indicators from BLS — CPI (inflation), PPI (producer prices), Non-farm Payrolls (employment), Unemployment Rate, JOLTS. Filter by category.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of history (default 365)
pageNoPage number (default 1)
limitNoRows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.
categoryNoCategory (case-insensitive): cpi/inflation, ppi, nfp/payrolls, unemployment, jolts, or allall

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
categoryYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side effects. The description adds no behavioral details beyond the data source and categories; it doesn't mention pagination, rate limits, or response format. Since annotations carry the burden, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the core purpose and lists all relevant indicators. There is no wasted wording, and the filtering note is appropriately included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is straightforward, has an output schema, and annotations cover safety. The description states the data source and categories, which is enough for an agent to know what it does. Pagination is documented in the schema, so the description needn't repeat it. It could mention that it returns historical time series, but the days parameter implies that. Slightly above minimum but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% – every parameter has a description in the input schema. The description's 'Filter by category' simply echoes the category parameter. No new meaning is added beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get U.S. economic indicators from BLS' and enumerates the specific indicators (CPI, PPI, NFP, Unemployment, JOLTS). It also notes the filtering capability. This is a specific verb+resource and distinguishes it from sibling tools that cover different domains (congress, crypto, fed rates, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage by naming the data source and indicators, and the sibling tools are clearly for other data types. However, it doesn't explicitly state when to use this tool versus alternatives or any exclusions. Given the clear domain separation, this is acceptable but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fed_ratesA
Read-onlyIdempotent
Inspect

Get daily U.S. policy and money-market interest rates as a markdown table: Effective Fed Funds Rate, SOFR, Prime Rate, and benchmark Treasury yields (3M, 2Y, 10Y, 30Y) per date, newest first. Use for monetary-policy questions like 'Where is the Fed funds rate now?' or 'How has SOFR moved this quarter?', or to compare policy rates against long-end yields for inversion analysis. Covers up to 10 years of daily history. For the full Treasury curve across all maturities, use get_treasury_yields instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of history (default 30)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
unitYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable context: it returns a markdown table, covers up to 10 years of daily history, and lists the specific data series. It does not contradict the annotations and enriches the behavioral understanding beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: the first defines the output, the second gives use cases, and the third distinguishes from the sibling. Every sentence serves a purpose, and the most critical information (what it returns) is front-loaded. It is slightly longer than minimal but remains efficient and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not detail return values. It covers the data series included, the time range, the use cases, and the sibling distinction. All necessary information for an agent to correctly invoke this tool—including the single parameter's meaning via schema—is present. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter 'days' is described in the schema as 'Number of days of history (default 30)' with a maximum of 3650. The tool description mentions 'Covers up to 10 years of daily history,' which aligns with the max but adds little beyond what the schema already states. There is no added syntax or formatting guidance, so it stays at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Get daily U.S. policy and money-market interest rates' and enumerates exactly which rates are included (Effective Fed Funds, SOFR, Prime, Treasury yields). It also differentiates from the sibling get_treasury_yields by explicitly stating it covers only selected maturities and directs the agent to the sibling for the full curve. This leaves no ambiguity about the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: for monetary-policy questions like 'Where is the Fed funds rate now?' or for inversion analysis comparing policy rates to long-end yields. It also names the alternative tool get_treasury_yields and the condition under which to use it ('For the full Treasury curve across all maturities'). This is clear and actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_financial_stressB
Read-onlyIdempotent
Inspect

Get the OFR Financial Stress Index — a daily indicator of stress in global financial markets. Values above 0 indicate above-average stress.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of history (default 365)
pageNoPage number (default 1)
limitNoRows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the interpretive context that values above 0 indicate above-average stress, which is useful. However, it does not mention pagination or the fact that long time windows may page, which is only hinted in the parameter description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, efficient and front-loaded with the core purpose, followed by a brief interpretation. No wasted words, though it could be slightly longer to cover usage guidelines without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with 0 required params, an output schema, and full schema description coverage, so it does not need extensive description. However, it lacks guidance on pagination for long time windows and does not explain what fields the output contains (though output schema covers that). It is mostly complete but could improve by mentioning pagination behavior explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with each parameter having a clear description. The description itself adds a small interpretive note about stress values, but the parameter descriptions already cover what each parameter does. The description does not need to duplicate schema content; the schema is sufficient, so a baseline of 3 applies, but the description's mention of 'global financial markets' adds minor context, justifying a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves the OFR Financial Stress Index, a specific resource with a clear domain (financial markets stress). The verb 'get' and the named index distinguish it from siblings like get_economic_indicators, though it does not explicitly mention which sibling to use for broader economic data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool compared to alternatives like get_economic_indicators or get_stock_financials. The description implies it is for financial stress monitoring, but does not state when not to use it or mention any competing tools that might also provide similar indicator data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form144_noticesA
Read-onlyIdempotent
Inspect

Get SEC Form 144 filings — notices of proposed sale of restricted/controlled securities by insiders. Filed before selling, these signal upcoming insider sales. Complements Form 4 (post-trade) with pre-trade intent.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax notices to return
tickerNoFilter by stock ticker (e.g. 'AAPL')
insider_cikNoFilter by insider's CIK number

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
filtersYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety and idempotency. The description adds semantic context (pre-trade intent) but no additional behavioral traits such as rate limits, pagination, or auth requirements. Since the annotations carry the main behavioral burden, the description does not contradict them and provides marginal added value, warranting a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the core action ('Get SEC Form 144 filings') and then providing essential context. It is efficient with no wasted words, though it could be even more concise by trimming the redundant explanation of what Form 144 is.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with three optional parameters and an output schema, the description explains the purpose and the nature of the data (pre-trade insider sales) adequately. It does not mention any edge cases or limitations (e.g., date ranges, coverage), but given the output schema and annotations, an agent can likely invoke it correctly. Slightly more detail on return behavior would improve it, but it is not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (limit, ticker, insider_cik) having a clear description. The tool description does not add any extra meaning or clarify syntax beyond what the schema already provides. Baseline of 3 applies because the schema fully documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'Get' and resource 'SEC Form 144 filings', then explains what these filings are (notices of proposed sale of restricted/controlled securities by insiders). It adds context that they signal upcoming insider sales, which distinguishes it from general insider-trade tools, though it doesn't explicitly name a sibling alternative. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case ('signal upcoming insider sales') and contrasts with Form 4 (post-trade vs pre-trade intent), giving some situational guidance. However, it does not explicitly state when to choose this tool over siblings like get_insider_trades or sec_list_filings, nor does it mention any exclusions or prerequisites. Guidance is present but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ftd_dataA
Read-onlyIdempotent
Inspect

Get SEC fails-to-deliver (FTD) data for a stock. Each quantity is the aggregate net BALANCE of shares that had failed to deliver and were still outstanding on that settlement date, as published by the SEC -- NOT the number of new fails that day. Balances carry over between days, so never sum quantities across dates (that counts the same unsettled shares repeatedly); compare levels or take the maximum instead. Fails arise from many causes (operational and processing delays, long sales, market-maker activity), and FTD data on its own is not evidence of naked short selling. Free/keyless access covers the trailing 92 days. structuredContent carries the exact share quantities.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDays of settlement-date history (default 90; Free/keyless access allows up to 92)
pageNoPage number (default 1)
limitNoRows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.
tickerYesStock ticker symbol (e.g. 'GME', 'TSLA')

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
tickerYes
measureYesEach quantity is the balance of fails outstanding on that settlement date -- not new fails that day; never sum across dates
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds substantial behavioral context beyond annotations: quantities are aggregate net balances (not new fails), balances carry over between days, free/keyless access covers 92 days, and the data should not be interpreted as evidence of naked short selling. This goes far beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured, leading with the purpose, then clarifying the data semantics, warning about summation, noting access limits, and adding interpretation caveats. Each sentence adds value without redundancy, and the critical warnings are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all essential context: data meaning, the summation pitfall, access limits, and interpretation caveats. Combined with the schema's parameter descriptions and the output schema, an agent has everything needed to call the tool correctly and interpret results without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are fully described in the schema (100% coverage), so the description adds little additional parameter-level detail. It does reiterate the free-access limit for days, but that is already in the schema. The description's main value is in interpreting the data, not the parameters themselves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves SEC fails-to-deliver (FTD) data for a stock, specifying the verb, resource, and scope. It distinguishes this from other stock data tools by emphasizing that quantities are aggregate net balances, not new fails, which is a unique and precise purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: never sum quantities across dates because they are balances that carry over, and it warns that FTD data alone is not evidence of naked short selling. It does not explicitly name alternative tools, but the unique data type makes the usage context clear, and the guidance prevents common misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_insider_tradesA
Read-onlyIdempotent
Inspect

Get insider (SEC Form 4) transactions for one company. Two grains, and the answer says which: (1) with executive_cik -> one row per Form 4 transaction line, with its SEC code (P open-market or private purchase, S open-market or private sale, M/X/C option or RSU exercise/conversion, A grant/award, F shares withheld for tax, G gift, ...), shares, price and value; (2) without it -> one row per insider per trade date that AGGREGATES all that day's lines, split into code P/S purchases/sales (open market or private) versus all acquisitions/dispositions (which also count vests, exercises and tax withholding), with both dollar totals and the line count; when ko.io reports them, the Lines cell and structuredContent also carry that day's SEC codes (e.g. '4 (F 1, M 2, S 1)'). Do not read an aggregate day's total disposed value as a sale decision; use the P/S columns, whose dollar totals cover priced lines only (unpriced lines are counted and flagged as partial). Keyless/Free access covers the trailing 92 days; period beyond 1Q requires Pro. structuredContent carries the exact share counts and dollar amounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoRows per page, 1-200
periodNoTrade-date window for the per-day view: 1Q = trailing 90 days (default, allowed on every plan); 2Q / 1Y / ALL require Pro. Ignored when executive_cik is given (that view returns the full history your plan allows).1Q
tickerYesStock ticker symbol (e.g. 'AAPL')
executive_cikNoInsider's SEC CIK (from a previous answer's person_cik, or list_insider_traders). When given, returns that insider's individual Form 4 transaction lines in this company, newest first.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
grainYesinsider_trade_date = one row per insider per day, aggregating that day's Form 4 lines; form4_transaction_line = one row per line
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
periodYes
tickerYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
executive_cikYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld/idempotent annotations, the description discloses aggregation logic, SEC code meanings, the caution about partial unpriced lines, and the 92-day Free versus Pro period constraints. This adds meaningful behavioral context that annotations alone do not convey, and it does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and information-rich, but it is overly long and runs in long, compound sentences with embedded examples and caveats. The purpose is front-loaded, but the sheer volume of details makes it harder to parse quickly. It could be restructured with bullet points or shorter sentences without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two distinct modes, multiple SEC codes, access-tier constraints, and a warning about data interpretation, this description is remarkably complete. It covers output semantics, parameter behavior, and edge cases. The existence of an output schema means return values need not be detailed, but the description goes beyond that to explain how to interpret the data correctly, leaving no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description enriches parameter understanding by explaining how executive_cik changes the output grain, that period is ignored in that mode, and how the 'P/S' columns relate to priced vs unpriced lines. This goes beyond the schema's field descriptions, though some details (like period being ignored) are already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Get insider (SEC Form 4) transactions for one company.' This clearly distinguishes it from sibling tools like get_congress_trades or get_stock_activity by scoping to a single company and Form 4 data. It also outlines two output grains, leaving no ambiguity about what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical guidance on when to use each mode: with executive_cik for individual transaction lines, without for per-day aggregates. It also warns against misinterpreting aggregate disposed value, and explains access limits (Free vs Pro). However, it does not explicitly name alternative tools or say when to prefer this tool over a sibling, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_institution_holdingsA
Read-onlyIdempotent
Inspect

Get current stock holdings of an institutional investor (hedge fund, mutual fund, pension fund) from their latest SEC 13F filing. Returns top positions with share counts, values, and quarter-over-quarter changes. Every answer states its grain: ENTITY (a CIK that belongs to a manager family is answered for the whole family by default -- pass entity='filer' for that one filer's own 13F) and SECURITY (the default portfolio merges an issuer's share classes into one row, e.g. GOOG+GOOGL, and lists the per-class breakdown; pass ticker to get only that security). Shares and value are the 13F-reported totals over all legs; option legs are flagged. structuredContent carries exact shares/values and the grain fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
entityNofamily (default): consolidate every 13F filer in the manager family; filer: only the requested CIK's own filing.family
tickerNoOnly this security (e.g. 'GOOG'). Returns the security grain: GOOG is Class C only, not the Alphabet issuer total.
institutionYesInstitution CIK number (e.g. '1067983'), slug (e.g. 'berkshire-hathaway'), or name (e.g. 'Berkshire Hathaway') — names are resolved automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
viewYessnapshot = one quarter's holdings; history = one position across quarters (family + ticker), one row per quarter, newest first
familyYesThe manager family, when the answer is at family grain and ko.io named it
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
quartersYesDistinct quarter-ends present in rows, newest first
requestedYesThe institution identifier the caller passed
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
entity_grainYesfiler = one 13F filer's own filing; family = consolidated across a manager family's filers
quarter_dateYesThe snapshot's quarter; null for a history (each row carries its own quarter_date)
resolved_cikYesThe CIK ko.io answered for (the family's canonical CIK at family grain)
requested_cikYesThe CIK/slug the request was made for
ticker_filterYes
position_basisYesWhat shares_held/holding_value count, when ko.io stated it (e.g. 13f_reported_all_legs)
security_grainYessecurity = one row per security/share class; issuer = share classes of one issuer merged; mixed = portfolio with some merged rows

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive, so the bar for additional disclosure is lower. The description goes well beyond that by explaining the default entity-family consolidation, the security-level share-class merging (GOOG+GOOGL), the behavior of the `ticker` parameter, option-leg flagging, and that structuredContent carries exact values. This is rich, non-obvious behavioral context that an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place. It front-loads the core purpose, then explains the two key grain behaviors and the structuredContent guarantee. No filler or repetition of schema details; the structure makes the complex grain semantics easy to follow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, return values do not need to be re-explained. The description covers the important contextual aspects: default entity behavior, security grain behavior, share-class merging, option-leg handling, and structuredContent exactness. Pagination is already in the schema. Nothing essential is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning beyond the schema. It explains the entity grain options ('family' vs 'filer'), how `ticker` changes the grain to a specific share class, that share classes are merged by default, and that shares/value are 13F-reported totals over all legs. This materially helps an agent choose correct parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get current stock holdings of an institutional investor ... from their latest SEC 13F filing.' It clearly defines what is returned (top positions, share counts, values, quarter-over-quarter changes) and distinguishes this from other stock-holder tools by focusing on institutional 13F filings. The grain discussion further clarifies the tool's exact scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context about when to use the tool — when you need institutional investor holdings from 13F filings — but it does not explicitly name alternatives or state when not to use it. The grain and parameter guidance is useful for invoking the tool correctly, but there is no explicit comparison to sibling tools such as get_stock_holders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_activityA
Read-onlyIdempotent
Inspect

Get institutional buying/selling activity trend for a stock over multiple quarters. Shows how many institutions are buying vs selling, net share changes, and value flows — useful for detecting accumulation or distribution patterns. Plan limits: Free/keyless access covers the latest 13F quarter only; the multi-quarter trend requires Pro. Omit quarters to get the most your plan allows. structuredContent carries the exact net shares/values. Each quarter carries ko.io's comparability state (comparable / split_adjusted with its split factor / not_comparable / first_reported): a null share or value flow means UNKNOWN (withheld), never zero.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol
quartersNoNumber of quarters to return. Omit for the plan default (Pro: 8 = 2 years; Free/keyless: the latest quarter only). An explicit value above what your plan allows returns a plan-limit error.

Output Schema

ParametersJSON Schema
NameRequiredDescription
trendYes
latestYes
tickerYes
plan_noteYesSet when the plan limited how many quarters were returned
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
quarters_returnedYes
quarters_requestedYesnull = the plan default was used

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnly, idempotent, non-destructive) already cover the safety profile, yet the description adds substantial behavioral detail beyond them: plan-limit gating (Free = latest quarter only, Pro = multi-quarter), a plan-limit error for oversized `quarters`, and the critical null-means-UNKNOWN-not-zero semantics. It also discloses the per-quarter comparability state machine (comparable / split_adjusted / not_comparable / first_reported), which an agent must handle correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the core purpose, then proceeds through plan limits, structuredContent pointer, and null semantics in a logical order. Every sentence carries non-redundant information, though the final comparability sentence is heavy and could be slightly tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate fields, and instead explains the semantic pitfalls the schema cannot: null vs zero for share/value flows, comparability states per quarter, and plan-gated depth. An agent has everything needed to call it and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented; the description still adds meaning by explaining the plan-default behavior when `quarters` is omitted and the plan-limit error raised by an explicit value above the plan allowance, which is not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: institutional buying/selling activity trend over multiple quarters, plus the concrete data returned (buying vs selling counts, net share changes, value flows). This is clearly distinguishable from siblings like get_institution_holdings or get_stock_holders, which cover holdings rather than aggregated activity trends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives use context ('useful for detecting accumulation or distribution patterns') and instructs on plan-gated usage ('Omit `quarters` to get the most your plan allows'), which is actionable invocation guidance. It stops short of naming when to prefer a sibling tool over this one, so it is clear context without explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_financialsA
Read-onlyIdempotent
Inspect

Get quarterly or annual financial statements for a company (revenue, net income, EPS, margins, cash flow, debt ratios) from SEC 10-K/10-Q filings. Plan limits: the Free plan and keyless access return only the latest quarterly statement; annual statements and earlier quarters require Pro (a request for them returns an explicit plan-limit error, never 'no data'). structuredContent carries the exact reported values.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of periods to return (default 8)
tickerYesStock ticker symbol (e.g. 'AAPL', 'MSFT')
period_typeNoPeriod type — quarterly (10-Q) or annual (10-K)quarterly

Output Schema

ParametersJSON Schema
NameRequiredDescription
tickerYes
periodsYes
plan_noteYesSet when the caller's plan limited which periods were returned
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
period_typeYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description goes beyond these by disclosing the plan-based limitation (Free/keyless returns only the latest quarterly statement), the exact error type (plan-limit error vs 'no data'), and the fact that structuredContent carries exact reported values. This adds meaningful behavioral detail not captured in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero filler. The first sentence states purpose and scope; the second delivers plan limits and a note on the structuredContent output. It is front-loaded with the core function, and every clause earns its place. This is exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only 3 parameters, no nested objects, and an output schema exists (structuredContent). The description covers the key operational constraints (plan limits, error semantics) and confirms the return payload (structuredContent). It doesn't explicitly describe the response shape or pagination, but given the output schema exists, that is not required. It is complete enough for an agent to call it correctly, though a brief note on the default limit of 8 periods could be inferred from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented (ticker, limit, period_type). The description adds value by clarifying that the limit parameter may be constrained by plan (Free plan returns only the latest quarterly, so higher limits on free tier likely trigger an error) and that period_type 'annual' also requires Pro. This goes beyond the schema's basic descriptions, providing operational context for how parameters interact with plan limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') and resource ('quarterly or annual financial statements'), lists the concrete metrics (revenue, net income, EPS, margins, cash flow, debt ratios), and names the source (SEC 10-K/10-Q). This clearly distinguishes it from siblings like get_stock_price (price) and get_stock_activity (trading activity), so an agent can select it without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives important usage context via plan limits (Free/keyless returns only latest quarterly; annual and earlier quarters require Pro) and specifies error behavior (explicit plan-limit error, never 'no data'). However, it does not explicitly state when to choose this tool over alternatives, nor does it mention any exclusion criteria. The plan-limit guidance is useful for when the tool can be used, but there's no direct contrast with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_holdersA
Read-onlyIdempotent
Inspect

Get top institutional holders of a stock from SEC 13F filings. Shows which hedge funds, mutual funds, and pension funds own the most shares, with quarter-over-quarter changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
tickerYesStock ticker symbol (e.g. 'NVDA')

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
familyYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
tickerYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
entity_grainYesfiler = each row is one 13F filer CIK (not consolidated into manager families); null = ko.io did not state it
quarter_dateYes
requested_cikYes
position_basisYes
total_institutionsYes
position_basis_noteYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds useful provenance ('SEC 13F filings') and the fact that quarter-over-quarter changes are included, but omits traits that matter for filings data, such as the quarterly cadence and filing lag, and says nothing about pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The identity and scope of the tool are front-loaded in the first sentence, and the enrichment detail comes second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape needn't be spelled out, and the annotations carry the safety profile. The description covers data source and content, leaving only minor gaps like pagination expectations, which the page/limit schema parameters already address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so ticker, page, and limit are fully documented in the schema. The description mentions the stock input but adds no format, syntax, or paging nuance beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get top institutional holders of a stock') and pins the data source ('from SEC 13F filings'). This cleanly separates it from the sibling get_institution_holdings, which is the inverse lookup (holdings of an institution), so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing 'holders of a stock' implies the use case (who owns this ticker), but there is no explicit when-to-use, when-not-to-use, or named alternative such as get_institution_holdings. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_priceA
Read-onlyIdempotent
Inspect

Get historical daily stock prices (OHLC). Returns a summary by default; set series=true to get the full daily price series (for backtesting / charting).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows of the daily series to return when series=true.
periodNoLook-back window1y
seriesNoIf true, return the full daily OHLC series (up to `limit` rows) instead of just a summary.
tickerYesStock ticker symbol

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYesThe rows rendered: the full series (series=true, up to limit) or the latest 10
latestYes
periodYes
tickerYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
period_startYes
rows_returnedYes
days_requestedYes
period_low_closeYes
total_return_pctYes(latest close - period-start close) / period-start close x 100, from the returned rows
period_high_closeYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds valuable behavioral nuance by disclosing that a summary is returned by default and that series=true switches to a full daily series. This output-shape behavior goes beyond the annotations and contains no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The core action is front-loaded, and the mode switch is explained succinctly without repeating structured schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only price lookup with a fully documented schema, supportive annotations, and an output schema, the description tells the agent everything essential: what the tool returns and how to request the full series. The behavioral choice is the only real decision point, and it is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents ticker, series, period, and limit fully. The description adds only a mild use-case hint for series=true (backtesting/charting), which doesn't meaningfully expand parameter understanding beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get historical daily stock prices (OHLC)'. It also identifies a key variant (summary vs full series), which clearly distinguishes it from siblings like get_stock_activity, get_stock_financials, and get_stock_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: historical price data, and specifically backtesting or charting when series=true. However, it doesn't name alternatives or explicitly state when not to use this tool among the many stock-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_profileB
Read-onlyIdempotent
Inspect

Get a company's profile — sector, market cap, price, P/E ratio, 52-week range, beta, dividend yield, and other key financials.

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol (e.g. 'AAPL', 'NVDA', 'MSFT')

Output Schema

ParametersJSON Schema
NameRequiredDescription
stockYes
tickerYes
top_holdersYes
position_basisYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that—no mention of data freshness, rate limits, or output behavior. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the action and resource, then lists the key return fields. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool with an output schema and comprehensive annotations, the description is largely sufficient. The only notable gap is the lack of sibling differentiation, but the low complexity and rich structured metadata compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the ticker parameter is already well documented with examples ('AAPL', 'NVDA', 'MSFT'). The description adds no additional parameter semantics, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get a company's profile') and enumerates concrete fields such as sector, market cap, P/E ratio, and 52-week range. It is clear and informative, though it does not explicitly distinguish itself from siblings like get_stock_price or get_stock_financials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for retrieving a broad company profile snapshot, but it does not state when to prefer it over similar siblings or when not to use it. There is no explicit alternative routing or exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_treasury_yieldsB
Read-onlyIdempotent
Inspect

Get U.S. Treasury yield curve data — daily yields for maturities from 1-month to 30-year. Essential for understanding interest rate environment and yield curve shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDays of daily history to return, 1-3650 (default 30 = last month)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
unitYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the data scope (daily yields, maturity range) which is useful context beyond annotations. However, it does not disclose other behavioral traits like pagination, rate limits, or data freshness, though these are less critical given the simple read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero redundancy. It front-loads the primary action and data scope, then adds a brief justification for its usefulness. Every word contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter, high schema coverage, existing output schema, and comprehensive annotations, the description sufficiently covers the purpose and data scope. It does not elaborate on return format, but the output schema handles that. It is complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage, with the single parameter 'days' fully described including default, min, max, and meaning. The description does not add any additional parameter-level information, so it meets the baseline of 3 but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves U.S. Treasury yield curve data with daily yields across maturities from 1-month to 30-year. The verb 'Get' and specific resource 'Treasury yield curve data' make the purpose unambiguous. It does not explicitly differentiate from sibling tools like get_fed_rates, but the resource is distinct enough for an agent to identify it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is 'essential for understanding interest rate environment and yield curve shape,' which implies a use case but provides no guidance on when to prefer this tool over alternatives such as get_fed_rates or get_economic_indicators. There is no exclusion criteria or mention of when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_insider_tradersB
Read-onlyIdempotent
Inspect

List executives/insiders who have recently traded their company stock. Filter by role (CEO only or all executives). Useful for finding notable insider buying/selling activity across the market.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
roleNoFilter by role (case-insensitive): CEO, executive/officer, or allall
limitNo
searchNoSearch by name or ticker

Output Schema

ParametersJSON Schema
NameRequiredDescription
roleYes
rowsYes
grainYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
searchYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds that it lists recent market-wide insider activity and supports a role filter, but it does not disclose the time window behind 'recently,' sorting/pagination behavior, or any rate limits—minor gaps given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states the action and scope, second notes the role filter and use case. It is front-loaded and free of filler, though 'notable' is vague.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return fields don't need describing. The core purpose and filter are present, but the description leaves ambiguity around the recency window and does not mention pagination or how search works, making it only minimally complete for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with only role and search described; page and limit have no schema descriptions. The description echoes the role values but adds no meaning for page/limit and does not explain search semantics beyond the schema, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'List executives/insiders who have recently traded their company stock.' It also mentions market-wide scope, which loosely distinguishes it from sibling get_insider_trades, but it never names an alternative or explicitly contrasts with related tools, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a use case ('Useful for finding notable insider buying/selling activity across the market') and mentions the role-based filter, which implies when it is appropriate. However, it does not give explicit when-not-to-use guidance or name alternatives like get_insider_trades for ticker-specific data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_institutionsB
Read-onlyIdempotent
Inspect

List top institutional investors (hedge funds, mutual funds, etc.) tracked in the SEC 13F database. Supports search by name and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
searchNoSearch by institution name, CIK, or manager name (e.g. 'Klarman' -> Baupost)

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
pagingYesPaging state reconciled from ko.io meta.total_count and meta.softwall
searchYes
plan_limitYesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side-effect expectations. The description adds useful behavioral context about data source (SEC 13F) and search/pagination support, but it does not disclose ordering, default limits, or any rate-limit behavior beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the core action front-loaded. There is zero filler, and the additional capability note (search + pagination) is placed second without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with an output schema and three optional, fully documented parameters, the description is adequate. It falls short only in not clarifying the default ordering implied by 'top' nor explicitly explaining the search fields (e.g., CIK), but these are minor given the schema and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, limit, and search are already fully documented. The description merely restates that search and pagination are supported without adding any parameter semantics beyond what the schema provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'top institutional investors tracked in the SEC 13F database', which separates it from 'insider traders' or 'stock holders'. However, it does not explicitly contrast with sibling tools like list_insider_traders or get_institution_holdings, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over alternatives. The sentence 'Supports search by name and pagination' describes capabilities rather than usage context, and no exclusions or alternative-tool routing is mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sec_get_filing_documentA
Read-onlyIdempotent
Inspect

Get a source document from a SEC filing, served by ko.io. Returns a ko.io LINK to the rendered document (open in a browser) plus, optionally, an extracted text excerpt. Never returns the whole file — for full content, open the link or request a specific section. Requires a paid ko.io plan (Pro): on Free or keyless access the call returns an explicit plan-limit error. Use sec_list_filings / sec_get_filing_index (open on every plan) to find filings and their files.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number
fileNoFile name within the filing (from sec_get_filing_index). Omit for the primary document.
accession_noYesAccession number, e.g. '0000320193-23-000106'
include_excerptNoInclude a text excerpt (first ~6000 chars) in the response

Output Schema

ParametersJSON Schema
NameRequiredDescription
cikYes
fileYes
linkYes
excerptYes
accession_noYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly/openWorld/idempotent/not-destructive hints. The description adds substantial behavioral context beyond that: it returns a ko.io link rather than the file, never returns full content, requires a paid Pro plan, and returns a plan-limit error on free/keyless access. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the first states the core purpose, the second states a key limitation, and the third covers plan requirements and alternative tools. No filler, with the most defining characteristics front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only retrieval tool that has an output schema, the description covers all essential non-schema behavioral facts: link vs. full content, excerpt availability, plan gating, and how to locate filings/files. An agent has everything needed to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific meaning beyond the schema; the note about requesting a specific section loosely relates to the 'file' parameter, but the schema already documents parameter purpose clearly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('source document from a SEC filing'), and immediately differentiates itself from sibling tools by naming sec_list_filings / sec_get_filing_index as the discovery path. It also clarifies that it never returns the whole file, further pinning down its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent to use sec_list_filings / sec_get_filing_index (open on every plan) to find filings and their files, establishing when to use alternatives. It also discloses the paid-plan requirement and the explicit plan-limit error, so an agent knows when the call will fail and why.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sec_get_filing_indexA
Read-onlyIdempotent
Inspect

Enumerate every file in a single SEC filing (primary document, exhibits, images, XBRL, the full .txt submission). Pass a file name from here to sec_get_filing_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikYesCompany CIK number
accession_noYesAccession number, e.g. '0000320193-23-000106'

Output Schema

ParametersJSON Schema
NameRequiredDescription
cikYes
filesYes
accessionYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so no safety contradiction exists. The description adds behavioral detail beyond those hints by defining the tool's result as a complete inventory of a single filing, including the full .txt submission; however, it does not describe potential pagination or response-size behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences contain no filler: the first states scope and content, the second states the immediate downstream use. Every clause earns its place and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only enumeration tool with 2 fully described parameters, an output schema, and covering annotations, the description covers what the tool does and how the output is consumed. The only minor omission is an explicit link to the upstream listing tool (sec_list_filings) that would produce the accession number.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies; the input schema already documents cik as a company CIK number and accession_no with an example. The description adds no further parameter-level detail beyond implying that the filing is identified by the accession number.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Enumerate every file in a single SEC filing') and enumerates content types (primary document, exhibits, images, XBRL, .txt submission), which clarifies exactly what is returned. It also names the downstream sibling sec_get_filing_document, so an agent can distinguish this indexing tool from the document-retrieval tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives an explicit usage cue: pass a returned file name to sec_get_filing_document. This tells the agent how to use the output and routes it to a specific sibling, but it does not explicitly state when not to use the tool or when to prefer sec_list_filings instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sec_list_filingsA
Read-onlyIdempotent
Inspect

List an entity's SEC filings from EDGAR (most recent first), each with its accession number. Provide the company's CIK (use search or get_stock_profile to find it). Returns accession numbers to pass to sec_get_filing_index / sec_get_filing_document.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLatest filing date, ISO YYYY-MM-DD
cikYesCompany CIK number (e.g. '320193' for Apple)
fromNoEarliest filing date, ISO YYYY-MM-DD
limitNoMax filings to return
form_typeNoExact SEC form filter, e.g. '10-K', '13F-HR', '8-K'

Output Schema

ParametersJSON Schema
NameRequiredDescription
cikYes
rowsYes
filtersYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value beyond those by disclosing ordering behavior ('most recent first') and the output's purpose (accession numbers for downstream SEC tools). No contradiction with annotations; the added behavioral context is useful but does not cover rate limits or EDGAR quirks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the core purpose. Each sentence earns its place: what it does, how to prepare the required parameter, and how to use the results. No filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations, 100% parameter coverage, and existing output schema, the description covers the essentials: required parameter sourcing, ordering, and downstream workflow. It doesn't mention pagination, EDGAR-specific limitations, or the open-world semantics behind the data, but nothing an agent strictly needs to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema by explaining how to source the required cik parameter ('use search or get_stock_profile to find it') and by relating the result set to the downstream tools. The schema already documents date format and form_type examples, so no further parameter elaboration is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'List an entity's SEC filings from EDGAR', with concrete behavioral detail (most recent first, each with accession number). It explicitly differentiates itself from siblings by naming sec_get_filing_index and sec_get_filing_document as downstream consumers of its output, so an agent can distinguish it from those related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational context: it tells the agent to obtain the CIK via search or get_stock_profile, and explains what to do with the returned accession numbers (pass them to sec_get_filing_index / sec_get_filing_document). It lacks explicit when-not-to-use or exclusion guidance versus alternatives, but the workflow it describes is clear enough for an agent to invoke it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedget_stock_activity4 fields changed
      • changedOutput schema / properties / latest / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "changes": {
        -        "additionalProperties": false,
        -        "description": "equity_filer_baseline: common stock only (option legs excluded); one holder per filer CIK; only filers with a usable prior-quarter baseline are classified. Same names/values as ko.io REST `changes`. Absent when ko.io did not send it.",
        -        "properties": {
        -          "added": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "basis": {
        -            "description": "\"equity_filer_baseline\"",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "exited": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "holders": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "net_shares": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        -          },
        -          "net_value": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        -          },
        -          "new": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "no_baseline": {
        -            "anyOf": [
        -              {
        -                "$ref": "#/properties/quarters_requested/anyOf/0"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Filers with no usable prior-quarter baseline: not classified as new/added/..."
        -          },
        -          "shares_added": {
        -            "type": [
        -              "number",
        -              "null"
        -            ]
        -          },
        -          "shares_removed": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        -          },
        -          "trimmed": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "unchanged": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -          },
        -          "value_added": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        -          },
        -          "value_removed": {
        -            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        -          }
        -        },
        -        "required": [
        -          "basis",
        -          "new",
        -          "added",
        -          "trimmed",
        -          "exited",
        -          "unchanged",
        -          "no_baseline",
        -          "holders",
        -          "shares_added",
        -          "shares_removed",
        -          "net_shares",
        -          "value_added",
        -          "value_removed",
        -          "net_value"
        -        ],
        -        "type": "object"
        -      },
        -      "institutions_decreased": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_exited": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_increased": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/properties/quarters_requested/anyOf/0"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "institutions_new": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_total": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "net_shares": {
        -        "anyOf": [
        -          {
        -            "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        -      },
        -      "net_value": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "quarter": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shares_added": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "shares_removed": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "value_added": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "value_removed": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      }
        -    },
        -    "required": [
        -      "quarter",
        -      "institutions_increased",
        -      "institutions_decreased",
        -      "institutions_new",
        -      "institutions_exited",
        -      "net_shares",
        -      "net_value",
        -      "institutions_total",
        -      "shares_added",
        -      "shares_removed",
        -      "value_added",
        -      "value_removed"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "changes": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": false,
        +            "properties": {
        +              "added": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "basis": {
        +                "description": "\"equity_filer_baseline\"",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "comparability": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/comparability"
        +              },
        +              "comparability_reason": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/quarter",
        +                "description": "ko.io's prose for the comparability state; null when comparable"
        +              },
        +              "exited": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "flow_excluded_filers": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased",
        +                "description": "Classified filers left out of share/value flows (implausible row); still counted as holders"
        +              },
        +              "holders": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "net_shares": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              },
        +              "net_value": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              },
        +              "new": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "no_baseline": {
        +                "anyOf": [
        +                  {
        +                    "$ref": "#/properties/quarters_requested/anyOf/0"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Filers with no usable prior-quarter baseline: not classified as new/added/..."
        +              },
        +              "null_reason": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/null_reason"
        +              },
        +              "price_corrected": {
        +                "description": "true when values use the holders' median implied price instead of a quarter-end close that was off by > 50%",
        +                "type": [
        +                  "boolean",
        +                  "null"
        +                ]
        +              },
        +              "shares_added": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              },
        +              "shares_removed": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              },
        +              "split_factor": {
        +                "description": "split_adjusted only: last quarter's shares were multiplied by this factor before classifying (e.g. 10 = 10-for-1); null otherwise",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "trimmed": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "unchanged": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +              },
        +              "value_added": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              },
        +              "value_removed": {
        +                "$ref": "#/properties/latest/anyOf/0/properties/changes/anyOf/0/properties/split_factor"
        +              }
        +            },
        +            "required": [
        +              "basis",
        +              "new",
        +              "added",
        +              "trimmed",
        +              "exited",
        +              "unchanged",
        +              "no_baseline",
        +              "holders",
        +              "shares_added",
        +              "shares_removed",
        +              "net_shares",
        +              "value_added",
        +              "value_removed",
        +              "net_value"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "equity_filer_baseline: common stock only (option legs excluded); one holder per filer CIK; only filers with a usable prior-quarter baseline are classified. Same names/values as ko.io REST `changes`. A null share/value flow means UNKNOWN (withheld), never zero. null = ko.io could not compute `changes` for this quarter; absent when ko.io did not send it."
        +      },
        +      "comparability": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/quarter",
        +        "description": "comparable | split_adjusted (last quarter's shares x split_factor before classifying) | not_comparable (share and value flows withheld -> null) | first_reported (no 13F filer held it last quarter: no prior-quarter baseline, every holder is new) | unknown (flows could not be recomputed -> null)"
        +      },
        +      "institutions_decreased": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_exited": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_increased": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/properties/quarters_requested/anyOf/0"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "institutions_new": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_total": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "net_shares": {
        +        "anyOf": [
        +          {
        +            "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "null = unknown (withheld, see null_reason), never zero"
        +      },
        +      "net_value": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/properties/latest/anyOf/0/properties/net_shares/anyOf/0"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "null = unknown (withheld, see null_reason), never zero"
        +      },
        +      "null_reason": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/quarter",
        +        "description": "Why the share/value flows are null (e.g. share_ratio_not_a_split_factor, price_conflict_insufficient_samples, value_above_sanity_cap, not_recomputable); null when they are not"
        +      },
        +      "quarter": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "shares_added": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/properties/latest/anyOf/0/properties/net_shares/anyOf/0"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +      },
        +      "shares_removed": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/shares_added"
        +      },
        +      "value_added": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/shares_added"
        +      },
        +      "value_removed": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/shares_added"
        +      }
        +    },
        +    "required": [
        +      "quarter",
        +      "institutions_increased",
        +      "institutions_decreased",
        +      "institutions_new",
        +      "institutions_exited",
        +      "net_shares",
        +      "net_value",
        +      "institutions_total",
        +      "shares_added",
        +      "shares_removed",
        +      "value_added",
        +      "value_removed"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / trend / items / properties / comparability
        Added value: +{
        +  "$ref": "#/properties/latest/anyOf/0/properties/comparability"
        +}
      • changedOutput schema / properties / trend / items / properties / net_value / $ref
        Previous value: -"#/properties/latest/anyOf/0/properties/net_shares"New value: +"#/properties/latest/anyOf/0/properties/net_value"
      • addedOutput schema / properties / trend / items / properties / null_reason
        Added value: +{
        +  "$ref": "#/properties/latest/anyOf/0/properties/null_reason"
        +}
    • Changedget_stock_holders3 fields changed
      • addedOutput schema / properties / rows / items / properties / equity_action
        Added value: +{
        +  "$ref": "#/properties/quarter_date",
        +  "description": "NEW | ADDED | TRIMMED | EXITED | UNCHANGED on the equity_filer_baseline basis; null = not classified"
        +}
      • addedOutput schema / properties / rows / items / properties / equity_share_change
        Added value: +{
        +  "$ref": "#/properties/rows/items/properties/shares_held",
        +  "description": "Common-share change on the equity_filer_baseline basis (split-restated); null = no usable prior-quarter baseline (unknown, never zero). Absent when ko.io did not send it"
        +}
      • addedOutput schema / properties / rows / items / properties / flags
        Added value: +{
        +  "description": "e.g. NO_BASELINE (no prior-quarter 13F in ko.io), DEALER (market maker / dealer desk)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 1 tool update
    • Changedget_stock_activity2 fields changed
      • changedOutput schema / properties / latest / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "institutions_decreased": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_exited": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_increased": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/properties/quarters_requested/anyOf/0"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "institutions_new": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "institutions_total": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        -      },
        -      "net_shares": {
        -        "anyOf": [
        -          {
        -            "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        -      },
        -      "net_value": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "quarter": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shares_added": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "shares_removed": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "value_added": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      },
        -      "value_removed": {
        -        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        -      }
        -    },
        -    "required": [
        -      "quarter",
        -      "institutions_increased",
        -      "institutions_decreased",
        -      "institutions_new",
        -      "institutions_exited",
        -      "net_shares",
        -      "net_value",
        -      "institutions_total",
        -      "shares_added",
        -      "shares_removed",
        -      "value_added",
        -      "value_removed"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "changes": {
        +        "additionalProperties": false,
        +        "description": "equity_filer_baseline: common stock only (option legs excluded); one holder per filer CIK; only filers with a usable prior-quarter baseline are classified. Same names/values as ko.io REST `changes`. Absent when ko.io did not send it.",
        +        "properties": {
        +          "added": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "basis": {
        +            "description": "\"equity_filer_baseline\"",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "exited": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "holders": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "net_shares": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        +          },
        +          "net_value": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        +          },
        +          "new": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "no_baseline": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/quarters_requested/anyOf/0"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Filers with no usable prior-quarter baseline: not classified as new/added/..."
        +          },
        +          "shares_added": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "shares_removed": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        +          },
        +          "trimmed": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "unchanged": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "value_added": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        +          },
        +          "value_removed": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/changes/properties/shares_added"
        +          }
        +        },
        +        "required": [
        +          "basis",
        +          "new",
        +          "added",
        +          "trimmed",
        +          "exited",
        +          "unchanged",
        +          "no_baseline",
        +          "holders",
        +          "shares_added",
        +          "shares_removed",
        +          "net_shares",
        +          "value_added",
        +          "value_removed",
        +          "net_value"
        +        ],
        +        "type": "object"
        +      },
        +      "institutions_decreased": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_exited": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_increased": {
        +        "anyOf": [
        +          {
        +            "$ref": "#/properties/quarters_requested/anyOf/0"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "institutions_new": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "institutions_total": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +      },
        +      "net_shares": {
        +        "anyOf": [
        +          {
        +            "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +      },
        +      "net_value": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +      },
        +      "quarter": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "shares_added": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +      },
        +      "shares_removed": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +      },
        +      "value_added": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +      },
        +      "value_removed": {
        +        "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +      }
        +    },
        +    "required": [
        +      "quarter",
        +      "institutions_increased",
        +      "institutions_decreased",
        +      "institutions_new",
        +      "institutions_exited",
        +      "net_shares",
        +      "net_value",
        +      "institutions_total",
        +      "shares_added",
        +      "shares_removed",
        +      "value_added",
        +      "value_removed"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / trend / items / properties / changes
        Added value: +{
        +  "$ref": "#/properties/latest/anyOf/0/properties/changes"
        +}
  3. 24 tool updates
    • Changedget_congress_member1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "member": {
        +      "type": "string"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/rows/items/properties/member_name"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount_range": {
        +            "description": "The disclosed dollar RANGE (STOCK Act bands), not an exact amount",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "asset_description": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "chamber": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "disclosure_date": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "member_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "owner": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "transaction_date": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          },
        +          "transaction_type": {
        +            "$ref": "#/properties/rows/items/properties/member_name"
        +          }
        +        },
        +        "required": [
        +          "member_name",
        +          "chamber",
        +          "ticker",
        +          "asset_description",
        +          "transaction_type",
        +          "transaction_date",
        +          "disclosure_date",
        +          "amount_range",
        +          "owner"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "member",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_congress_trades1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "filters": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "chamber": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "search": {
        +          "$ref": "#/properties/filters/properties/chamber"
        +        },
        +        "sort": {
        +          "$ref": "#/properties/filters/properties/chamber"
        +        },
        +        "ticker": {
        +          "$ref": "#/properties/filters/properties/chamber"
        +        }
        +      },
        +      "required": [
        +        "chamber",
        +        "ticker",
        +        "search",
        +        "sort"
        +      ],
        +      "type": "object"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/filters/properties/chamber"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "amount_range": {
        +            "description": "The disclosed dollar RANGE (STOCK Act bands), not an exact amount",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "asset_description": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "chamber": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "disclosure_date": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "member_name": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "owner": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "transaction_date": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          },
        +          "transaction_type": {
        +            "$ref": "#/properties/filters/properties/chamber"
        +          }
        +        },
        +        "required": [
        +          "member_name",
        +          "chamber",
        +          "ticker",
        +          "asset_description",
        +          "transaction_type",
        +          "transaction_date",
        +          "disclosure_date",
        +          "amount_range",
        +          "owner"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "filters",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_crypto_exposure1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "complex": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "products": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "qoq_change": {
        +          "$ref": "#/properties/complex/properties/total_usd"
        +        },
        +        "total_usd": {
        +          "anyOf": [
        +            {
        +              "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +        }
        +      },
        +      "required": [
        +        "total_usd",
        +        "qoq_change",
        +        "products"
        +      ],
        +      "type": "object"
        +    },
        +    "products": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "holders": {
        +            "$ref": "#/properties/complex/properties/products"
        +          },
        +          "prev_usd": {
        +            "$ref": "#/properties/complex/properties/total_usd"
        +          },
        +          "product_name": {
        +            "$ref": "#/properties/products/items/properties/product_ticker"
        +          },
        +          "product_ticker": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "qoq_change": {
        +            "$ref": "#/properties/complex/properties/total_usd"
        +          },
        +          "sponsor": {
        +            "$ref": "#/properties/products/items/properties/product_ticker"
        +          },
        +          "total_usd": {
        +            "$ref": "#/properties/complex/properties/total_usd"
        +          }
        +        },
        +        "required": [
        +          "product_ticker",
        +          "product_name",
        +          "sponsor",
        +          "holders",
        +          "total_usd",
        +          "prev_usd",
        +          "qoq_change"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "complex",
        +    "products"
        +  ],
        +  "type": "object"
        +}
    • Changedget_crypto_holder1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cik": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "institution": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "latest_quarter": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "name": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "portfolio_weight_pct": {
        +              "$ref": "#/properties/institution/anyOf/0/properties/total_usd"
        +            },
        +            "qoq_change": {
        +              "$ref": "#/properties/institution/anyOf/0/properties/total_usd"
        +            },
        +            "rank": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "total_holders": {
        +              "$ref": "#/properties/institution/anyOf/0/properties/rank"
        +            },
        +            "total_usd": {
        +              "anyOf": [
        +                {
        +                  "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +            }
        +          },
        +          "required": [
        +            "name",
        +            "latest_quarter",
        +            "total_usd",
        +            "qoq_change",
        +            "rank",
        +            "total_holders",
        +            "portfolio_weight_pct"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/institution/anyOf/0/properties/rank"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/cik"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/cik"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "positions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "$ref": "#/properties/cik"
        +          },
        +          "product_name": {
        +            "$ref": "#/properties/cik"
        +          },
        +          "product_ticker": {
        +            "$ref": "#/properties/cik"
        +          },
        +          "qoq_value_change": {
        +            "$ref": "#/properties/institution/anyOf/0/properties/total_usd"
        +          },
        +          "shares_held": {
        +            "$ref": "#/properties/institution/anyOf/0/properties/total_usd"
        +          },
        +          "usd_value": {
        +            "$ref": "#/properties/institution/anyOf/0/properties/total_usd"
        +          }
        +        },
        +        "required": [
        +          "product_ticker",
        +          "product_name",
        +          "shares_held",
        +          "usd_value",
        +          "qoq_value_change",
        +          "action"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "requested": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested",
        +    "cik",
        +    "institution",
        +    "positions",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_crypto_holders1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_holders/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_holders/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_holders/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/product"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/product"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/product"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/product"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/total_holders"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/product"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/product"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "product": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "cik": {
        +            "$ref": "#/properties/product"
        +          },
        +          "name": {
        +            "$ref": "#/properties/product"
        +          },
        +          "prev_usd": {
        +            "$ref": "#/properties/rows/items/properties/total_usd"
        +          },
        +          "product_count": {
        +            "$ref": "#/properties/total_holders"
        +          },
        +          "products": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "qoq_value_change": {
        +            "$ref": "#/properties/rows/items/properties/total_usd"
        +          },
        +          "rank": {
        +            "$ref": "#/properties/total_holders"
        +          },
        +          "total_usd": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          }
        +        },
        +        "required": [
        +          "rank",
        +          "cik",
        +          "name",
        +          "total_usd",
        +          "prev_usd",
        +          "qoq_value_change",
        +          "product_count",
        +          "products"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total_holders": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "product",
        +    "total_holders",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_economic_indicators1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "category": {
        +      "type": "string"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "category": {
        +            "$ref": "#/properties/rows/items/properties/date"
        +          },
        +          "date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "series_id": {
        +            "$ref": "#/properties/rows/items/properties/date"
        +          },
        +          "series_name": {
        +            "$ref": "#/properties/rows/items/properties/date"
        +          },
        +          "value": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "series_id",
        +          "series_name",
        +          "value",
        +          "category"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "category",
        +    "rows",
        +    "paging"
        +  ],
        +  "type": "object"
        +}
    • Changedget_fed_rates1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "fed_funds_rate": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "prime_rate": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          },
        +          "sofr": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          },
        +          "treasury_10y": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          },
        +          "treasury_2y": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          },
        +          "treasury_30y": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          },
        +          "treasury_3m": {
        +            "$ref": "#/properties/rows/items/properties/fed_funds_rate"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "fed_funds_rate",
        +          "sofr",
        +          "prime_rate",
        +          "treasury_3m",
        +          "treasury_2y",
        +          "treasury_10y",
        +          "treasury_30y"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "unit": {
        +      "const": "percent",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "unit",
        +    "rows"
        +  ],
        +  "type": "object"
        +}
    • Changedget_financial_stress1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "series": {
        +            "$ref": "#/properties/rows/items/properties/date"
        +          },
        +          "value": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "series",
        +          "value"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "rows",
        +    "paging"
        +  ],
        +  "type": "object"
        +}
    • Changedget_form144_notices1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "filters": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "insider_cik": {
        +          "$ref": "#/properties/filters/properties/ticker"
        +        },
        +        "ticker": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "ticker",
        +        "insider_cik"
        +      ],
        +      "type": "object"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/filters/properties/ticker"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accession_no": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "aggregate_market_value": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/rows/items/properties/units_to_sell/anyOf/0"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "approx_sale_date": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "broker_name": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "filed_date": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "has_10b5_1_plan": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "issuer_cik": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "issuer_name": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "issuer_ticker": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "relationship": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "securities_class": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "seller_name": {
        +            "$ref": "#/properties/filters/properties/ticker"
        +          },
        +          "units_to_sell": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Units the filer NOTIFIED an intent to sell -- not a completed sale"
        +          }
        +        },
        +        "required": [
        +          "accession_no",
        +          "filed_date",
        +          "issuer_ticker",
        +          "issuer_name",
        +          "issuer_cik",
        +          "seller_name",
        +          "relationship",
        +          "securities_class",
        +          "units_to_sell",
        +          "aggregate_market_value",
        +          "approx_sale_date",
        +          "broker_name",
        +          "has_10b5_1_plan"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "filters",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_ftd_data2 fields changed
      • changedInput schema / properties / days / description
        Previous value: -"Number of days of history (default 90)"New value: +"Days of settlement-date history (default 90; Free/keyless access allows up to 92)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "measure": {
        +      "const": "outstanding_fail_balance",
        +      "description": "Each quantity is the balance of fails outstanding on that settlement date -- not new fails that day; never sum across dates",
        +      "type": "string"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "$ref": "#/properties/paging/properties/total_count/anyOf/0"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/rows/items/properties/settlement_date"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "price": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/rows/items/properties/quantity/anyOf/0"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "quantity": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Outstanding fails-to-deliver balance (shares) on that settlement date"
        +          },
        +          "settlement_date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/rows/items/properties/settlement_date"
        +          }
        +        },
        +        "required": [
        +          "settlement_date",
        +          "ticker",
        +          "quantity",
        +          "price"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "measure",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_insider_trades4 fields changed
      • changedInput schema / properties / executive_cik / description
        Previous value: -"Filter by specific executive CIK (from list_insider_traders)"New value: +"Insider's SEC CIK (from a previous answer's person_cik, or list_insider_traders). When given, returns that insider's individual Form 4 transaction lines in this company, newest first."
      • changedInput schema / properties / limit / description
        Previous value: -"Trades per page, 1-200"New value: +"Rows per page, 1-200"
      • addedInput schema / properties / period
        Added value: +{
        +  "default": "1Q",
        +  "description": "Trade-date window for the per-day view: 1Q = trailing 90 days (default, allowed on every plan); 2Q / 1Y / ALL require Pro. Ignored when executive_cik is given (that view returns the full history your plan allows).",
        +  "enum": [
        +    "1Q",
        +    "2Q",
        +    "1Y",
        +    "ALL"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "executive_cik": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "grain": {
        +      "description": "insider_trade_date = one row per insider per day, aggregating that day's Form 4 lines; form4_transaction_line = one row per line",
        +      "enum": [
        +        "insider_trade_date",
        +        "form4_transaction_line"
        +      ],
        +      "type": "string"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "period": {
        +      "$ref": "#/properties/executive_cik"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/executive_cik"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/executive_cik"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/executive_cik"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/executive_cik"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/rows/items/properties/form4_lines"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/executive_cik"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/executive_cik"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "acquired_disposed": {
        +            "anyOf": [
        +              {
        +                "enum": [
        +                  "A",
        +                  "D"
        +                ],
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "all_shares_acquired": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "all_shares_disposed": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "all_value_acquired": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "all_value_disposed": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "code_meaning": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "code_p_or_s": {
        +            "description": "true for SEC codes P (purchase) and S (sale) -- open market OR private; the code does not distinguish",
        +            "type": "boolean"
        +          },
        +          "first_filed_date": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "form4_lines": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "is_derivative": {
        +            "type": "boolean"
        +          },
        +          "last_filed_date": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "officer_title": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "person_cik": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "person_name": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "price": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "ps_buy_lines": {
        +            "$ref": "#/properties/rows/items/properties/form4_lines",
        +            "description": "Code P lines that day (open market or private purchases)"
        +          },
        +          "ps_buy_unpriced_lines": {
        +            "$ref": "#/properties/rows/items/properties/form4_lines",
        +            "description": "Code P lines with no dollar value; > 0 means ps_value_bought is partial"
        +          },
        +          "ps_sell_lines": {
        +            "$ref": "#/properties/rows/items/properties/form4_lines",
        +            "description": "Code S lines that day (open market or private sales)"
        +          },
        +          "ps_sell_unpriced_lines": {
        +            "$ref": "#/properties/rows/items/properties/form4_lines",
        +            "description": "Code S lines with no dollar value; > 0 means ps_value_sold is partial"
        +          },
        +          "ps_shares_bought": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "null = unknown (a line had no share count)"
        +          },
        +          "ps_shares_sold": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "ps_value_bought": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Dollar total of PRICED code P lines only"
        +          },
        +          "ps_value_bought_complete": {
        +            "description": "false = some code P lines unpriced; null = not reported",
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "ps_value_sold": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Dollar total of PRICED code S lines only"
        +          },
        +          "ps_value_sold_complete": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "security_title": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "shares": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "shares_owned_after": {
        +            "$ref": "#/properties/rows/items/properties/shares"
        +          },
        +          "trade_date": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "transaction_code": {
        +            "$ref": "#/properties/executive_cik"
        +          },
        +          "transaction_code_breakdown": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "acquired_disposed": {
        +                      "enum": [
        +                        "A",
        +                        "D"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "code": {
        +                      "$ref": "#/properties/executive_cik"
        +                    },
        +                    "code_meaning": {
        +                      "type": "string"
        +                    },
        +                    "is_derivative": {
        +                      "type": "boolean"
        +                    },
        +                    "lines": {
        +                      "$ref": "#/properties/rows/items/properties/form4_lines"
        +                    },
        +                    "shares": {
        +                      "$ref": "#/properties/rows/items/properties/shares"
        +                    },
        +                    "value": {
        +                      "$ref": "#/properties/rows/items/properties/shares"
        +                    }
        +                  },
        +                  "required": [
        +                    "code",
        +                    "code_meaning",
        +                    "acquired_disposed",
        +                    "is_derivative",
        +                    "lines",
        +                    "shares",
        +                    "value"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Per code x acquired/disposed x table: line count, shares, value (null = unknown, not partial)"
        +          },
        +          "transaction_codes": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Distinct SEC Form 4 codes aggregated into this day (e.g. [\"F\",\"M\",\"S\"]); null = not reported by ko.io"
        +          },
        +          "value": {
        +            "$ref": "#/properties/rows/items/properties/shares",
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          }
        +        },
        +        "required": [
        +          "trade_date",
        +          "person_cik",
        +          "person_name",
        +          "shares_owned_after"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "grain",
        +    "executive_cik",
        +    "period",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_institution_holdings3 fields changed
      • addedInput schema / properties / entity
        Added value: +{
        +  "default": "family",
        +  "description": "family (default): consolidate every 13F filer in the manager family; filer: only the requested CIK's own filing.",
        +  "enum": [
        +    "family",
        +    "filer"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / ticker
        Added value: +{
        +  "description": "Only this security (e.g. 'GOOG'). Returns the security grain: GOOG is Class C only, not the Alphabet issuer total.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "entity_grain": {
        +      "description": "filer = one 13F filer's own filing; family = consolidated across a manager family's filers",
        +      "enum": [
        +        "filer",
        +        "family",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "family": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "canonical_cik": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "name": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "slug": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "slug",
        +            "name",
        +            "canonical_cik"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The manager family, when the answer is at family grain and ko.io named it"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/reported_by_members/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/reported_by_members/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/reported_by_members/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/rows/items/properties/reported_by_members"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/family/anyOf/0/properties/slug"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "position_basis": {
        +      "description": "What shares_held/holding_value count, when ko.io stated it (e.g. 13f_reported_all_legs)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quarter_date": {
        +      "description": "The snapshot's quarter; null for a history (each row carries its own quarter_date)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quarters": {
        +      "description": "Distinct quarter-ends present in rows, newest first",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "requested": {
        +      "description": "The institution identifier the caller passed",
        +      "type": "string"
        +    },
        +    "requested_cik": {
        +      "description": "The CIK/slug the request was made for",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "resolved_cik": {
        +      "description": "The CIK ko.io answered for (the family's canonical CIK at family grain)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "$ref": "#/properties/family/anyOf/0/properties/slug"
        +          },
        +          "call_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "cik": {
        +            "$ref": "#/properties/family/anyOf/0/properties/slug"
        +          },
        +          "equity_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "has_option_legs": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "holding_value": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "issuer": {
        +            "$ref": "#/properties/family/anyOf/0/properties/slug"
        +          },
        +          "portfolio_weight_pct": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "put_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "quarter_date": {
        +            "$ref": "#/properties/family/anyOf/0/properties/slug"
        +          },
        +          "reported_by_members": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "security_grain": {
        +            "enum": [
        +              "security",
        +              "issuer"
        +            ],
        +            "type": "string"
        +          },
        +          "share_change": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "share_classes": {
        +            "description": "Per-class breakdown of an issuer-grain row; empty at security grain",
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "holding_value": {
        +                  "$ref": "#/properties/rows/items/properties/shares_held"
        +                },
        +                "shares_held": {
        +                  "$ref": "#/properties/rows/items/properties/shares_held"
        +                },
        +                "ticker": {
        +                  "$ref": "#/properties/family/anyOf/0/properties/slug"
        +                }
        +              },
        +              "required": [
        +                "ticker",
        +                "shares_held",
        +                "holding_value"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "shares_held": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/family/anyOf/0/properties/slug"
        +          },
        +          "tickers": {
        +            "description": "Share-class tickers summed into this row (one entry at security grain)",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "cik",
        +          "ticker",
        +          "issuer",
        +          "quarter_date",
        +          "shares_held",
        +          "holding_value",
        +          "portfolio_weight_pct",
        +          "action",
        +          "share_change",
        +          "security_grain",
        +          "tickers",
        +          "share_classes",
        +          "equity_shares",
        +          "call_shares",
        +          "put_shares",
        +          "has_option_legs",
        +          "reported_by_members"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "security_grain": {
        +      "description": "security = one row per security/share class; issuer = share classes of one issuer merged; mixed = portfolio with some merged rows",
        +      "enum": [
        +        "security",
        +        "issuer",
        +        "mixed"
        +      ],
        +      "type": "string"
        +    },
        +    "ticker_filter": {
        +      "$ref": "#/properties/family/anyOf/0/properties/slug"
        +    },
        +    "view": {
        +      "description": "snapshot = one quarter's holdings; history = one position across quarters (family + ticker), one row per quarter, newest first",
        +      "enum": [
        +        "snapshot",
        +        "history"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested",
        +    "requested_cik",
        +    "resolved_cik",
        +    "entity_grain",
        +    "family",
        +    "security_grain",
        +    "ticker_filter",
        +    "position_basis",
        +    "view",
        +    "quarters",
        +    "quarter_date",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_stock_activity3 fields changed
      • removedInput schema / properties / quarters / default
        Removed value: -8
      • changedInput schema / properties / quarters / description
        Previous value: -"Number of quarters to return (default 8 = 2 years)"New value: +"Number of quarters to return. Omit for the plan default (Pro: 8 = 2 years; Free/keyless: the latest quarter only). An explicit value above what your plan allows returns a plan-limit error."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "latest": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "institutions_decreased": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +            },
        +            "institutions_exited": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +            },
        +            "institutions_increased": {
        +              "anyOf": [
        +                {
        +                  "$ref": "#/properties/quarters_requested/anyOf/0"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "institutions_new": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +            },
        +            "institutions_total": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +            },
        +            "net_shares": {
        +              "anyOf": [
        +                {
        +                  "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +            },
        +            "net_value": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +            },
        +            "quarter": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "shares_added": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +            },
        +            "shares_removed": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +            },
        +            "value_added": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +            },
        +            "value_removed": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +            }
        +          },
        +          "required": [
        +            "quarter",
        +            "institutions_increased",
        +            "institutions_decreased",
        +            "institutions_new",
        +            "institutions_exited",
        +            "net_shares",
        +            "net_value",
        +            "institutions_total",
        +            "shares_added",
        +            "shares_removed",
        +            "value_added",
        +            "value_removed"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "plan_note": {
        +      "description": "Set when the plan limited how many quarters were returned",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "quarters_requested": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "null = the plan default was used"
        +    },
        +    "quarters_returned": {
        +      "type": "integer"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    },
        +    "trend": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "institutions_decreased": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "institutions_exited": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "institutions_increased": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "institutions_new": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/institutions_increased"
        +          },
        +          "net_shares": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +          },
        +          "net_value": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/net_shares"
        +          },
        +          "quarter": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/quarter"
        +          }
        +        },
        +        "required": [
        +          "quarter",
        +          "institutions_increased",
        +          "institutions_decreased",
        +          "institutions_new",
        +          "institutions_exited",
        +          "net_shares",
        +          "net_value"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "quarters_requested",
        +    "quarters_returned",
        +    "latest",
        +    "trend",
        +    "plan_note",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_stock_financials1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "period_type": {
        +      "enum": [
        +        "quarterly",
        +        "annual"
        +      ],
        +      "type": "string"
        +    },
        +    "periods": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "eps_basic": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "eps_diluted": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "gross_profit": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "long_term_debt": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "net_income": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "operating_cashflow": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "operating_income": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "period_end": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "revenue": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "short_term_debt": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          },
        +          "stockholders_equity": {
        +            "$ref": "#/properties/periods/items/properties/revenue"
        +          }
        +        },
        +        "required": [
        +          "period_end",
        +          "revenue",
        +          "net_income",
        +          "eps_basic",
        +          "eps_diluted",
        +          "gross_profit",
        +          "operating_income",
        +          "operating_cashflow",
        +          "long_term_debt",
        +          "short_term_debt",
        +          "stockholders_equity"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/periods/items/properties/period_end"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "plan_note": {
        +      "description": "Set when the caller's plan limited which periods were returned",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "ticker": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "period_type",
        +    "periods",
        +    "plan_note",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_stock_holders1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "entity_grain": {
        +      "anyOf": [
        +        {
        +          "enum": [
        +            "filer",
        +            "family"
        +          ],
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "filer = each row is one 13F filer CIK (not consolidated into manager families); null = ko.io did not state it"
        +    },
        +    "family": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "canonical_cik": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "name": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "slug": {
        +              "$ref": "#/properties/quarter_date"
        +            }
        +          },
        +          "required": [
        +            "slug",
        +            "name",
        +            "canonical_cik"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_institutions/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_institutions/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/total_institutions/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/total_institutions"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/quarter_date"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/quarter_date"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "position_basis": {
        +      "$ref": "#/properties/quarter_date"
        +    },
        +    "position_basis_note": {
        +      "$ref": "#/properties/quarter_date"
        +    },
        +    "quarter_date": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "requested_cik": {
        +      "$ref": "#/properties/quarter_date"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "$ref": "#/properties/quarter_date"
        +          },
        +          "call_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "cik": {
        +            "$ref": "#/properties/quarter_date"
        +          },
        +          "equity_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "family": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "canonical_cik": {
        +                    "$ref": "#/properties/quarter_date"
        +                  },
        +                  "name": {
        +                    "$ref": "#/properties/quarter_date"
        +                  },
        +                  "slug": {
        +                    "$ref": "#/properties/quarter_date"
        +                  }
        +                },
        +                "required": [
        +                  "slug",
        +                  "name",
        +                  "canonical_cik"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "The manager family this holder belongs to, when ko.io attributes it"
        +          },
        +          "has_option_legs": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "holding_value": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "name": {
        +            "$ref": "#/properties/quarter_date"
        +          },
        +          "portfolio_weight_pct": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "put_shares": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "rank": {
        +            "type": "integer"
        +          },
        +          "reported_by_members": {
        +            "$ref": "#/properties/total_institutions"
        +          },
        +          "share_change": {
        +            "$ref": "#/properties/rows/items/properties/shares_held"
        +          },
        +          "shares_held": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          }
        +        },
        +        "required": [
        +          "rank",
        +          "cik",
        +          "name",
        +          "shares_held",
        +          "holding_value",
        +          "portfolio_weight_pct",
        +          "share_change",
        +          "action",
        +          "equity_shares",
        +          "call_shares",
        +          "put_shares",
        +          "has_option_legs",
        +          "family",
        +          "reported_by_members"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    },
        +    "total_institutions": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "quarter_date",
        +    "position_basis",
        +    "position_basis_note",
        +    "entity_grain",
        +    "requested_cik",
        +    "family",
        +    "total_institutions",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_stock_price1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "days_requested": {
        +      "type": "integer"
        +    },
        +    "latest": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "close": {
        +              "anyOf": [
        +                {
        +                  "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +            },
        +            "date": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "date",
        +            "close"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "period": {
        +      "type": "string"
        +    },
        +    "period_high_close": {
        +      "$ref": "#/properties/latest/anyOf/0/properties/close"
        +    },
        +    "period_low_close": {
        +      "$ref": "#/properties/latest/anyOf/0/properties/close"
        +    },
        +    "period_start": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "close": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/close"
        +            },
        +            "date": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            }
        +          },
        +          "required": [
        +            "date",
        +            "close"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            },
        +            "row_cap": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/latest/anyOf/0/properties/date"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "description": "The rows rendered: the full series (series=true, up to limit) or the latest 10",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "close": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/close"
        +          },
        +          "date": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/date"
        +          },
        +          "high": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/close"
        +          },
        +          "low": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/close"
        +          },
        +          "open": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/close"
        +          },
        +          "volume": {
        +            "$ref": "#/properties/latest/anyOf/0/properties/close"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "open",
        +          "high",
        +          "low",
        +          "close",
        +          "volume"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "rows_returned": {
        +      "type": "integer"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    },
        +    "total_return_pct": {
        +      "anyOf": [
        +        {
        +          "$ref": "#/properties/latest/anyOf/0/properties/close/anyOf/0"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "(latest close - period-start close) / period-start close x 100, from the returned rows"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "period",
        +    "days_requested",
        +    "rows_returned",
        +    "latest",
        +    "period_start",
        +    "total_return_pct",
        +    "period_high_close",
        +    "period_low_close",
        +    "rows",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedget_stock_profile1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "position_basis": {
        +      "$ref": "#/properties/stock/properties/sector"
        +    },
        +    "stock": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "avg_volume": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "beta": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "current_price": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "dividend_yield_pct": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "eps": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "fifty_two_week_high": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "fifty_two_week_low": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "industry": {
        +          "$ref": "#/properties/stock/properties/sector"
        +        },
        +        "market_cap": {
        +          "anyOf": [
        +            {
        +              "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +        },
        +        "pe_ratio": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "previous_close": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "price_date": {
        +          "$ref": "#/properties/stock/properties/sector"
        +        },
        +        "profit_margins": {
        +          "$ref": "#/properties/stock/properties/market_cap"
        +        },
        +        "sector": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "sector",
        +        "industry",
        +        "market_cap",
        +        "current_price",
        +        "price_date",
        +        "previous_close",
        +        "fifty_two_week_high",
        +        "fifty_two_week_low",
        +        "pe_ratio",
        +        "eps",
        +        "beta",
        +        "dividend_yield_pct",
        +        "profit_margins",
        +        "avg_volume"
        +      ],
        +      "type": "object"
        +    },
        +    "ticker": {
        +      "type": "string"
        +    },
        +    "top_holders": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "call_shares": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          },
        +          "cik": {
        +            "$ref": "#/properties/stock/properties/sector"
        +          },
        +          "equity_shares": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          },
        +          "has_option_legs": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "holding_value": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          },
        +          "name": {
        +            "$ref": "#/properties/stock/properties/sector"
        +          },
        +          "portfolio_weight_pct": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          },
        +          "put_shares": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          },
        +          "shares_held": {
        +            "$ref": "#/properties/stock/properties/market_cap"
        +          }
        +        },
        +        "required": [
        +          "cik",
        +          "name",
        +          "shares_held",
        +          "holding_value",
        +          "portfolio_weight_pct",
        +          "equity_shares",
        +          "call_shares",
        +          "put_shares",
        +          "has_option_legs"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ticker",
        +    "stock",
        +    "position_basis",
        +    "top_holders"
        +  ],
        +  "type": "object"
        +}
    • Changedget_treasury_yields1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "m1": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "m3": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "m6": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "y1": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "y10": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "y2": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "y30": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          },
        +          "y5": {
        +            "$ref": "#/properties/rows/items/properties/m1"
        +          }
        +        },
        +        "required": [
        +          "date",
        +          "m1",
        +          "m3",
        +          "m6",
        +          "y1",
        +          "y2",
        +          "y5",
        +          "y10",
        +          "y30"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "unit": {
        +      "const": "percent",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "unit",
        +    "rows"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_insider_traders1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "grain": {
        +      "const": "insider_trade_date",
        +      "type": "string"
        +    },
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/form4_lines/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/search"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/search"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/search"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/search"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/rows/items/properties/form4_lines"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/search"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/search"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "role": {
        +      "type": "string"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "all_value_acquired": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/rows/items/properties/ps_value_bought/anyOf/0"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "all_value_disposed": {
        +            "$ref": "#/properties/rows/items/properties/all_value_acquired"
        +          },
        +          "company_name": {
        +            "$ref": "#/properties/search"
        +          },
        +          "form4_lines": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "officer_title": {
        +            "$ref": "#/properties/search"
        +          },
        +          "person_cik": {
        +            "$ref": "#/properties/search"
        +          },
        +          "person_name": {
        +            "$ref": "#/properties/search"
        +          },
        +          "ps_value_bought": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Code P lines (open-market or private purchase), priced lines only"
        +          },
        +          "ps_value_sold": {
        +            "anyOf": [
        +              {
        +                "$ref": "#/properties/rows/items/properties/ps_value_bought/anyOf/0"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Code S lines (open-market or private sale), priced lines only"
        +          },
        +          "shares_owned_after": {
        +            "$ref": "#/properties/rows/items/properties/all_value_acquired"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/search"
        +          },
        +          "trade_date": {
        +            "$ref": "#/properties/search"
        +          }
        +        },
        +        "required": [
        +          "ticker",
        +          "company_name",
        +          "person_cik",
        +          "person_name",
        +          "officer_title",
        +          "trade_date",
        +          "form4_lines",
        +          "ps_value_bought",
        +          "ps_value_sold",
        +          "all_value_acquired",
        +          "all_value_disposed",
        +          "shares_owned_after"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "search": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "search",
        +    "role",
        +    "grain",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_institutions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "paging": {
        +      "additionalProperties": false,
        +      "description": "Paging state reconciled from ko.io meta.total_count and meta.softwall",
        +      "properties": {
        +        "continuation": {
        +          "description": "SIGNIN_REQUIRED = page>1 needs a (free) ko.io API key",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "has_more": {
        +          "description": "null = a full page came back and more MAY exist",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "next_page": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/rank/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Next page THIS caller can open; null when there is none (or sign-in is required)"
        +        },
        +        "page": {
        +          "type": "integer"
        +        },
        +        "per_page": {
        +          "type": "integer"
        +        },
        +        "plan_row_cap": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/rank/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Row cap the caller's plan applied to this page, if any"
        +        },
        +        "returned": {
        +          "type": "integer"
        +        },
        +        "total_count": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/properties/rows/items/properties/rank/anyOf/0"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Total rows matching the request, when ko.io reported it"
        +        },
        +        "truncated_by_plan": {
        +          "description": "True when the plan's row cap withheld rows from this page",
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "page",
        +        "per_page",
        +        "returned",
        +        "total_count",
        +        "has_more",
        +        "next_page",
        +        "continuation",
        +        "plan_row_cap",
        +        "truncated_by_plan"
        +      ],
        +      "type": "object"
        +    },
        +    "plan_limit": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "continuation": {
        +              "$ref": "#/properties/search"
        +            },
        +            "date_basis": {
        +              "$ref": "#/properties/search"
        +            },
        +            "effective_period": {
        +              "$ref": "#/properties/search"
        +            },
        +            "policy_version": {
        +              "$ref": "#/properties/search"
        +            },
        +            "row_cap": {
        +              "$ref": "#/properties/rows/items/properties/rank"
        +            },
        +            "truncated": {
        +              "type": [
        +                "boolean",
        +                "null"
        +              ]
        +            },
        +            "window_end": {
        +              "$ref": "#/properties/search"
        +            },
        +            "window_start": {
        +              "$ref": "#/properties/search"
        +            }
        +          },
        +          "required": [
        +            "policy_version",
        +            "window_start",
        +            "window_end",
        +            "effective_period",
        +            "date_basis",
        +            "row_cap",
        +            "truncated",
        +            "continuation"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "The Free/keyless plan limits ko.io applied to this answer (null for paid callers)"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "category": {
        +            "$ref": "#/properties/search"
        +          },
        +          "cik": {
        +            "$ref": "#/properties/search"
        +          },
        +          "name": {
        +            "$ref": "#/properties/search"
        +          },
        +          "portfolio_value": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "rank": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "slug": {
        +            "$ref": "#/properties/search"
        +          },
        +          "stock_count": {
        +            "$ref": "#/properties/rows/items/properties/rank"
        +          }
        +        },
        +        "required": [
        +          "cik",
        +          "name",
        +          "slug",
        +          "rank",
        +          "category",
        +          "portfolio_value",
        +          "stock_count"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "search": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "search",
        +    "rows",
        +    "paging",
        +    "plan_limit"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "congress": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "name": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "type": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "insiders": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "name": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "type": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "ticker",
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "institutions": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "aum": {
        +            "anyOf": [
        +              {
        +                "pattern": "^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$",
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Exact decimal string as served by ko.io (not rounded); null = unknown"
        +          },
        +          "category": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "cik": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "matched_person": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "name": {
        +                    "$ref": "#/properties/institutions/items/properties/cik"
        +                  },
        +                  "role": {
        +                    "$ref": "#/properties/institutions/items/properties/cik"
        +                  }
        +                },
        +                "required": [
        +                  "name",
        +                  "role"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "name": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "rank": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "slug": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          }
        +        },
        +        "required": [
        +          "cik",
        +          "name",
        +          "slug",
        +          "category",
        +          "aum",
        +          "rank",
        +          "matched_person"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "query": {
        +      "type": "string"
        +    },
        +    "stocks": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "industry": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "market_cap": {
        +            "$ref": "#/properties/institutions/items/properties/aum"
        +          },
        +          "name": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "sector": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          },
        +          "ticker": {
        +            "$ref": "#/properties/institutions/items/properties/cik"
        +          }
        +        },
        +        "required": [
        +          "ticker",
        +          "name",
        +          "sector",
        +          "industry",
        +          "market_cap"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "query",
        +    "institutions",
        +    "stocks",
        +    "insiders",
        +    "congress"
        +  ],
        +  "type": "object"
        +}
    • Changedsec_get_filing_document1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "accession_no": {
        +      "type": "string"
        +    },
        +    "cik": {
        +      "type": "string"
        +    },
        +    "excerpt": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "chars_total": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "status": {
        +          "enum": [
        +            "ok",
        +            "unavailable",
        +            "not_requested"
        +          ],
        +          "type": "string"
        +        },
        +        "text": {
        +          "$ref": "#/properties/file"
        +        },
        +        "truncated": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "text",
        +        "chars_total",
        +        "truncated"
        +      ],
        +      "type": "object"
        +    },
        +    "file": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "link": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "expires_at": {
        +          "$ref": "#/properties/file"
        +        },
        +        "signed": {
        +          "description": "true = ko.io-signed, expiring link a browser can open; false = needs a paid API key",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "signed",
        +        "expires_at"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "cik",
        +    "accession_no",
        +    "file",
        +    "link",
        +    "excerpt"
        +  ],
        +  "type": "object"
        +}
    • Changedsec_get_filing_index1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "accession": {
        +      "$ref": "#/properties/cik"
        +    },
        +    "cik": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "files": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "last_modified": {
        +            "$ref": "#/properties/cik"
        +          },
        +          "name": {
        +            "$ref": "#/properties/cik"
        +          },
        +          "size_bytes": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "type": {
        +            "$ref": "#/properties/cik"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "type",
        +          "size_bytes",
        +          "last_modified"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "cik",
        +    "accession",
        +    "files"
        +  ],
        +  "type": "object"
        +}
    • Changedsec_list_filings1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cik": {
        +      "type": "string"
        +    },
        +    "filters": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "form_type": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "from": {
        +          "$ref": "#/properties/filters/properties/form_type"
        +        },
        +        "to": {
        +          "$ref": "#/properties/filters/properties/form_type"
        +        }
        +      },
        +      "required": [
        +        "form_type",
        +        "from",
        +        "to"
        +      ],
        +      "type": "object"
        +    },
        +    "rows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "accession": {
        +            "$ref": "#/properties/filters/properties/form_type"
        +          },
        +          "description": {
        +            "$ref": "#/properties/filters/properties/form_type"
        +          },
        +          "filing_date": {
        +            "$ref": "#/properties/filters/properties/form_type"
        +          },
        +          "form": {
        +            "$ref": "#/properties/filters/properties/form_type"
        +          },
        +          "primary_document": {
        +            "$ref": "#/properties/filters/properties/form_type"
        +          }
        +        },
        +        "required": [
        +          "filing_date",
        +          "form",
        +          "accession",
        +          "primary_document",
        +          "description"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "cik",
        +    "filters",
        +    "rows"
        +  ],
        +  "type": "object"
        +}
  4. 1 tool update
    • Changedget_congress_trades2 fields changed
      • removedInput schema / properties / party
        Removed value: -{
        -  "default": "all",
        -  "description": "Filter by party — D=Democrat, R=Republican, I=Independent",
        -  "enum": [
        -    "D",
        -    "R",
        -    "I",
        -    "all"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / state
        Removed value: -{
        -  "description": "Member 2-letter U.S. state code, e.g. CA or TX",
        -  "maxLength": 200,
        -  "type": "string"
        -}
  5. 4 tool updates
    • Changedget_economic_indicators2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number (default 1)",
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedget_financial_stress2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number (default 1)",
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedget_ftd_data2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number (default 1)",
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedget_insider_trades2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max trades to return"New value: +"Trades per page, 1-200"
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number",
        +  "minimum": 1,
        +  "type": "integer"
        +}
  6. 1 tool update
    • Changedlist_institutions1 field changed
      • changedInput schema / properties / search / description
        Previous value: -"Search by institution or founder name"New value: +"Search by institution name, CIK, or manager name (e.g. 'Klarman' -> Baupost)"
  7. 24 tool updates
    • First observedget_congress_member
    • First observedget_congress_trades
    • First observedget_crypto_exposure
    • First observedget_crypto_holder
    • First observedget_crypto_holders
    • First observedget_economic_indicators
    • First observedget_fed_rates
    • First observedget_financial_stress
    • First observedget_form144_notices
    • First observedget_ftd_data
    • First observedget_insider_trades
    • First observedget_institution_holdings
    • First observedget_stock_activity
    • First observedget_stock_financials
    • First observedget_stock_holders
    • First observedget_stock_price
    • First observedget_stock_profile
    • First observedget_treasury_yields
    • First observedlist_insider_traders
    • First observedlist_institutions
    • First observedsearch
    • First observedsec_get_filing_document
    • First observedsec_get_filing_index
    • First observedsec_list_filings

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to query financial datasets, including institutional holders, insider transactions, investor portfolios, and SEC filings, via MCP tools.
    233 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with access to a wide range of market data, including short interest, insider trades, financials, and macro indicators, through 26 tools across 31 datasets.
    26
    572 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Hosted MCP server that gives AI agents real-time access to SEC EDGAR filings search, 10-K/8-K reading, XBRL financial facts, and insider-trade (Form 4) alerts.
    13 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Hosted MCP server granting AI agents access to 20M+ SEC EDGAR filings, 100M+ exhibits, and comprehensive entity data through 49 tools, with support for raw documents, extracted sections, and structured JSON.
    13 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.