Skip to main content
Glama

capabilities

Server Details

Deterministic company, entity and location lookups for agents - per call, x402 or API key.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

24 tools
company_uk_accountsCheck UK company accounts due dates on Companies HouseA
Read-onlyIdempotent
Inspect

Return the accounts filing status of a UK company from the Companies House register — the accounting reference date, the last accounts filed (type and period), the next accounts due date and a derived overdue flag. Use when: When are this UK company's accounts due? Not for: You need financial figures (turnover, profit, balance sheet) — not on the public register API. Related: company_uk_filings; company_uk_profile; company_uk_status. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.accounts
metaYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful context beyond those annotations: the derived overdue flag, the fact that financial figures are not available through the register API, and per-call pricing. 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.

Conciseness4/5

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

The description is well front-loaded with the primary purpose and output, then efficiently covers usage, exclusions, related tools, and pricing. Each section earns its place, though the pricing detail is slightly tangential to tool selection and invocation.

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 one required parameter with thorough schema documentation, an output schema, and clear usage boundaries, the description is complete. It tells the agent what the tool returns, when to use it, when not to use it, and how it relates to siblings. Nothing essential is missing for correct selection and invocation.

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 fully covers the single parameter with a detailed explanation of accepted company number formats and rejection behavior. Since schema coverage is 100%, the description does not need to compensate, and it provides no additional parameter-level meaning beyond 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 uses a specific verb and resource: 'Return the accounts filing status of a UK company from the Companies House register.' It also enumerates the exact outputs (accounting reference date, last accounts filed, next due date, overdue flag), which clearly distinguishes it from siblings like company_uk_profile or company_uk_filings.

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 an explicit trigger ('When are this UK company's accounts due?') and a clear exclusion ('Not for: You need financial figures'). It names related sibling tools, though it does not fully explain when each of those siblings should be chosen instead. This is clear context but stops short of a complete routing guide.

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

company_uk_chargesList UK company charges and mortgages from Companies HouseA
Read-onlyIdempotent
Inspect

Charges registered against a UK company at Companies House — mortgages, debentures and other security — with dates, classification, particulars and the persons entitled. Use when: Establish whether a UK company has outstanding security over its assets, and who holds it. Not for: You need insolvency proceedings — not currently supported (see the resource flags on company.uk.profile). Related: company_uk_profile; company_uk_filings; company_uk_status. Price: USD 0.006/call (x402), 0.005 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum charges to return per page (1-100). Default 3: a charge carries free-text particulars, secured details and the persons entitled, so it is several times the size of an officer or a filing row - the register-wide counts and page.total still describe the whole register.
detailNoHow much of each charge to return. Default summary. `full` adds the four members the register populates only for particular filings — acquired_on, resolved_on, assets_ceased_released and more_than_four_persons_entitled — which are null on the great majority of charges.
offsetNoZero-based index into the register's charge list (not into the filtered result). Pass back page.next_offset from the previous response to page.
statusNoWhich charges to return. Default `all`. `outstanding` returns the charges that are still security over the company (everything the register has not marked satisfied or fully-satisfied, including part-satisfied); `satisfied` returns the discharged ones. The register offers no server-side filter, so Eckari applies it after reading up to three register pages of 100 charges — read page.has_more rather than items.length.
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.charges
metaYes

TDQS

A4.3/5.0
Behavior3/5

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

The annotations already establish that this is read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds the scope limitation about insolvency and points to resource flags, but does not disclose additional behavioral traits such as auth needs, rate limits, or output-shape caveats in prose. With the annotation bar lower, 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.

Conciseness5/5

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

The description is front-loaded with the core result, then uses compact labeled sections for use, not-for, related tools, and price. Every sentence contributes selection or invocation value, and the longer parameter notes are justified by the tool's complexity.

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 five-parameter tool with a rich output schema, the definition covers what the tool does, when to use it, what it is not for, related resources, pricing, and the main limitations. The schema and annotations complete the operational details, so nothing needed for correct invocation is left ambiguous.

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 applies. The prose description does not add parameter-level meaning beyond what the input schema already provides; the schema's detailed parameter notes are doing the work, but that is structured data rather than extra description value.

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 exactly what the tool returns: charges registered against a UK company at Companies House, with charge types, dates, classification, particulars, and persons entitled. This is specific enough to distinguish it clearly from siblings like company_uk_filings, company_uk_profile, and company_uk_status.

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 gives explicit 'Use when' and 'Not for' guidance, names the relevant decision (outstanding security and who holds it), explicitly excludes insolvency proceedings, and lists related tools. An agent can determine when to select this tool without inferring the conditions.

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

company_uk_directorsList UK company directors from the Companies House officers registerA
Read-onlyIdempotent
Inspect

Directors of a UK company from the Companies House officers register — the register of directors, secretaries and LLP members — including corporate and nominee directors, with appointment and resignation dates, nationality, country of residence, occupation, month/year of birth and correspondence address. Use when: Identify who is legally responsible for a UK company - the directors on the Companies House officers register. Not for: You need beneficial owners / persons with significant control — use company.uk.owners. Price: USD 0.005/call (x402), 0.004 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoWhich appointments to return. Default `director` — the capability's name is its contract. The register encodes the office in officer_role, so the filter is a substring test on it: `director` matches director, corporate-director, nominee-director and corporate-nominee-director; `secretary` matches secretary, corporate-secretary, nominee-secretary and corporate-nominee-secretary; `llp_member` matches llp-member, llp-designated-member and their corporate- forms; `all` returns every appointment the register lists, including managing officers, general partners, judicial factors and the EEIG/SE organ roles. Filtering is applied after the register read, so read page.has_more rather than items.length.
limitNoMaximum officers to return per page (1-100). Default 5. Eckari reads up to three register pages of 100 entries to fill this after the role and resigned filters are applied; if the limit is still unmet, page.has_more is true and page.next_offset says where to resume.
offsetNoZero-based index into the register's own officer list (not into the filtered result). Pass back page.next_offset from the previous response to page.
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.
include_resignedNoInclude resigned officers. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.directors
metaYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, yet the description still adds valuable traits: it discloses the per-call price (USD 0.005/call), an operational cost an agent cannot infer from structured metadata, and scopes exactly what the register covers (directors, secretaries, LLP members, corporate and nominee forms). The schema parameter notes further disclose filter-after-read and three-page pagination mechanics. 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?

The description is dense but every clause earns its place: core purpose, register scope, included fields, when-to-use, not-for routing, and price. It is front-loaded with the primary purpose before any qualification, and the dash structure keeps the multi-part sentence scannable. There is no filler or repetition of the title.

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 tool's complexity (5 params, abstract pagination, substring filters), the division of labor is ideal: the description handles purpose, scope, use-cases, exclusions, and cost, while the schema's exhaustive property descriptions cover parameter mechanics and the output schema covers return structure. Annotations cover safety and data openness. Nothing an agent needs to call this 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 schema's own property descriptions are exceptionally rich (company_number accepted shapes, role substring-matching semantics, offset meaning). The main description adds no direct parameter guidance beyond mentioning the register scope and corporate/nominee categories, which loosely maps to the role enum. Per the rubric, baseline 3 is correct when the schema does the heavy lifting.

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 — retrieving directors from the Companies House officers register — and enumerates the exact data fields returned (appointment/resignation dates, nationality, occupation, birth month/year, correspondence address). It explicitly differentiates from the most confusable sibling by naming company.uk.owners as the destination for beneficial-owner lookups, so an agent can distinguish it without opening other schemas.

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?

"Use when: Identify who is legally responsible for a UK company" gives an explicit triggering condition, while "Not for: You need beneficial owners / persons with significant control — use company.uk.owners" supplies an explicit exclusion and the named alternative. This is the ideal when/when-not/alternatives pattern; nothing is left to inference.

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

company_uk_filingsList UK company filing history from Companies HouseA
Read-onlyIdempotent
Inspect

Return the filing history of a UK company from the Companies House register — accounts, confirmation statements, officer appointments, address and capital changes, resolutions and mortgages — most recent first, optionally filtered by category, with date, form type (AA, CS01, AP01, TM01), the readable register description, registrar annotations and a document_url for every filed image. Use when: What has this UK company filed recently? Not for: You need the current directors themselves rather than the filing events — use company.uk.directors. Price: USD 0.005/call (x402), 0.004 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum filings to return per page (1-100). Default 5.
detailNoHow much of each filing to return. Default summary: the readable description, its source, the register's annotations, the form type and the document URL. `full` adds the register's raw description_key and description_values for reconciliation against a register capture.
offsetNoZero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so page.has_more is simply offset + returned < page.total; pass back page.next_offset.
categoryNoOptional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as query.category.
company_numberYesCompanies House company number. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.filings
metaYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations that mark it read-only and idempotent, the description adds real behavioral detail: results sorted most-recent-first, optional category filtering, output fields, and document URLs for every filed image. It also discloses pricing, which is useful for call decisions.

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 compact and front-loaded: the core returning behavior comes first, followed by crisp selection guidance and pricing. No wasted words.

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?

Together with the fully described schema and output schema, the description covers what the tool returns, when to use it, what it is not for, and cost. Nothing material is missing for an agent to invoke 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?

Input schema coverage is 100%, and each parameter already has detailed descriptions including validation patterns, defaults, and page semantics. The description adds context about category filtering and form types, but does not need to explain parameters further; 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?

The description names a specific verb ('Return'), a precise resource ('filing history of a UK company from the Companies House register'), and a concrete scope with examples of covered filing types. It also differentiates itself from company_uk_directors by clarifying it returns filing events rather than current directors.

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?

Includes explicit 'Use when' and 'Not for' guidance, giving a representative query and naming the sibling tool to use instead for director lists. This removes ambiguity about when to select this tool.

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

company_uk_ownersList UK company beneficial owners (PSC) from Companies HouseA
Read-onlyIdempotent
Inspect

An empty items list is never the same as "no owner": ownership_status and the filed PSC statements/exemptions explain why the register discloses none. Use when: Who owns this UK company? Not for: You need directors/officers rather than owners — use company.uk.directors. Related: company_uk_directors; company_uk_profile; company_uk_status. Price: USD 0.008/call (x402), 0.006 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum PSCs to return per page (1-100). Default 10. Eckari reads up to three register pages of 100 entries to fill this after the ceased filter is applied; if the limit is still unmet, page.has_more is true and page.next_offset says where to resume.
offsetNoZero-based index into the register's own PSC list (not into the filtered result). Pass back page.next_offset from the previous response to page.
company_numberYesCompanies House company number. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.
include_ceasedNoInclude PSCs whose control has ceased. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.owners
metaYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, open-world, non-destructive behavior. The description adds a valuable non-obvious semantic: an empty items list does not mean no owner, and ownership_status/PSC statements explain why. This goes beyond the schema and helps the agent interpret response data correctly.

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 compact and front-loads the most important interpretive caveat before routing guidance and pricing. Every line earns its place, and the use/not-for/related structure makes it easy for an agent to scan and act on.

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 input schema, output schema, and annotations, the description covers the remaining critical context: when to use it, when not to, how to interpret empty results, and related tools. Nothing essential for selecting and invoking 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?

The input schema has 100% coverage, with thorough descriptions for company_number, limit, offset, and include_ceased. The tool description itself adds no parameter-level guidance, but with full schema coverage it does not need to. 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?

The description clearly identifies the tool as a beneficial-owner lookup for UK companies via the title and 'Use when: Who owns this UK company?' This is a specific verb-plus-resource statement that distinguishes it from director, profile, and status lookups. It also names the relevant PSC concept, so there is 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 Guidelines5/5

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

The description gives explicit 'Use when' and 'Not for' guidance, and directly names the alternative director-focused tool. Listing related tools further helps an agent route to the correct sibling. This is concrete, actionable usage guidance rather than a vague hint.

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

company_uk_profileGet UK company profile from Companies HouseA
Read-onlyIdempotent
Inspect

Return the core registered profile of a UK company from the Companies House register: name, status with derived is_active and is_striking_off, type, jurisdiction, incorporation and cessation dates, SIC codes with their official UK SIC 2007 descriptions, registered office address, previous names, and the accounts and confirmation-statement summary. Use when: You have a UK company number and need the standard registered record. Not for: You only need to know if the company is active — use company.uk.status (cheaper). Price: USD 0.004/call (x402), 0.003 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.profile
metaYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the bar is lower. The description adds useful context beyond annotations: it reveals that is_active and is_striking_off are derived fields, states pricing (USD 0.004/call), and implies no write side effects. This is more than minimal and contradicts nothing.

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 front-loaded with the primary purpose and output scope, followed by usage conditions and pricing. The opening sentence is a long enumeration of returned fields, but each item helps an agent judge relevance. It is slightly verbose compared to a minimal two-sentence ideal, so it earns a 4 rather than 5.

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 low parameter count, rich input schema, existing output schema, and the annotations covering safety, the description is nearly complete. It includes price, usage boundaries, and output highlights. The only minor gap is the tool-name typo in the alternative reference, which slightly reduces completeness for routing.

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 single parameter company_number is already documented in great detail, including accepted formats, case-insensitivity, whitespace handling, and INVALID_INPUT rejection. The tool description itself adds no parameter-level meaning beyond 'You have a UK company number', which is appropriate but not above the schema 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 opens with a specific verb and resource ('Return the core registered profile of a UK company') and enumerates the exact data elements returned, distinguishing it clearly from more narrow sibling tools. It also explicitly names the alternative company_uk_status, making separation from siblings 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 provides explicit 'Use when' and 'Not for' guidance, including a cost-based reason to prefer company_uk_status for simple active checks. However, the alternative is written as 'company.uk.status' rather than the actual sibling name 'company_uk_status', creating a minor ambiguity that prevents a perfect score.

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

company_uk_registered_officeGet UK registered office address from Companies HouseA
Read-onlyIdempotent
Inspect

Return the current registered office address of a UK company from the Companies House register as structured fields (premises, address lines, locality, region, postcode, country) plus a single-line rendering for correspondence, address matching and verification. Use when: What is the registered office address of company 00445790? Not for: You need the whole registered profile as well — use company.uk.profile (it already includes this address). Related: company_uk_profile; company_uk_status; company_uk_search. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.registered_office
metaYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds meaningful context beyond those hints: it returns the current address, renders it as structured fields plus a single-line string, and is intended for correspondence, matching, and verification. 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?

The description is well-structured and front-loaded: purpose first, then use cases, exclusions, related tools, and price. Every segment earns its place and there is no redundancy. The inclusion of pricing is slightly unusual but does not hurt clarity.

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 simple read-only lookup with one well-documented parameter and an output schema, the description is complete. It covers what the tool returns, when to use it, when not to use it, alternatives, and related tools. Nothing essential is missing for an agent to select and invoke 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?

Schema description coverage is 100% and the schema already thoroughly explains company_number formats, normalization, whitespace handling, and invalid input behavior. The description adds little to parameter semantics beyond the example '00445790', so the baseline of 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?

The description opens with a specific verb and resource: 'Return the current registered office address of a UK company from the Companies House register.' It also lists the structured fields returned and explicitly contrasts itself with company_uk_profile via the 'Not for' clause, so an agent can distinguish it from siblings.

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 provides an explicit 'Use when' example, an explicit 'Not for' exclusion, and points to the correct alternative: 'use company.uk.profile (it already includes this address).' This is exactly the guidance an agent needs to select between this tool and related siblings.

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

company_uk_statusCheck UK company status on Companies HouseA
Read-onlyIdempotent
Inspect

Return the current legal status of a UK company from the Companies House register — active, dissolved, liquidation, administration, receivership, voluntary-arrangement and others — with status detail, cessation date, a derived is_active (true for the live-on-the-register statuses active, open and registered) and a derived is_striking_off for an active company with a proposal to strike off. Use when: Is this UK company still active? Not for: You need the full registered profile (type, SIC codes, incorporation date) — use company.uk.profile. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
company_numberYesCompanies House company number, also called the company registration number (CRN), e.g. 00445790, SC123456, NI000001, BR008975. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.status
metaYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds valuable behavioral context: it returns status detail, cessation date, and explains the derived is_active and is_striking_off semantics. This goes beyond the structured annotations without contradicting them.

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 front-loaded with the core purpose and return details, followed by crisp use-case guidance and an explicit alternative. The pricing note is compact and relevant for cost-aware agents. Every sentence 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?

For a single-parameter, read-only status lookup with a rich input schema, an output schema, and safety annotations, the description is complete. It covers what the tool returns, when to use it, what it is not for, and the alternative tool. 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 description coverage is 100% and the schema thoroughly documents company_number formats, normalization, case-insensitivity, whitespace handling, and rejection behavior. The description does not need to repeat parameter details, so the baseline of 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?

The description opens with a specific verb and resource: 'Return the current legal status of a UK company from the Companies House register.' It enumerates concrete status examples and derived fields, which clearly distinguishes it from sibling tools like company_uk_profile.

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 ('Use when: Is this UK company still active?') and when not to use it, naming the alternative for full registered profiles. This removes ambiguity about selecting among the UK company siblings.

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

company_us_filingsList SEC EDGAR filings for a US company by ticker or CIKA
Read-onlyIdempotent
Inspect

Return the recent EDGAR filing history of a US company identified by stock ticker (AAPL) or CIK, optionally filtered by form type and filing date and paged. Use when: List every 8-K on this ticker's EDGAR index this year, with links to the documents. Not for: You need to know who submitted a filing — EDGAR's submissions index carries no filer identity, so a Form 4 or SCHEDULE 13G here tells you the filing exists, not who made it. Related: company_us_filings_latest; company_us_profile; company_us_resolve; company_uk_filings. Price: USD 0.005/call (x402), 0.004 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.
formNoComma-separated EDGAR form types to keep, e.g. "10-K,10-Q,8-K". Matching is exact and case-insensitive; omit to return every form.
limitNoMaximum number of filings to return from the filtered set. Defaults to 5 so a first call stays small; raise it explicitly when you need more.
sinceNoKeep only filings with a filing_date on or after this ISO date (YYYY-MM-DD).
offsetNoZero-based offset into the filtered set, for paging. Pass page.next_offset from the previous response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.filings
metaYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, and not destructive. The description adds pricing info, states that NOT_FOUND is not billable, and implies result includes document links. 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?

Five sentences: purpose, use when, not for, related tools, pricing. Front-loaded with essential info, no fluff, each sentence 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 5 parameters, output schema exists, and annotations cover safety, the description covers usage, limitations, pricing, and non-billable case. It is complete for an agent to decide on tool selection and invocation.

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 input schema fully documents each parameter. The description adds no new semantic details beyond summarizing optional filters and paging. 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?

The description clearly states the tool returns recent EDGAR filing history for a US company by ticker or CIK, with optional filtering and paging. The verb 'Return' and resource 'EDGAR filing history' are specific. It also lists related tools for differentiation.

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?

Explicit 'Use when' example (list every 8-K this year) and 'Not for' scenario (need filer identity, which is not provided). Also mentions related tools and pricing, giving clear context for when to use this tool vs alternatives.

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

company_us_filings_latestLatest 10-K, 10-Q or 8-K for a US company by ticker or CIKA
Read-onlyIdempotent
Inspect

Give a stock ticker (AAPL) or CIK and get the most recent EDGAR filing of each requested form — by default the latest 10-K, 10-Q and 8-K — with filing and report dates and a direct sec.gov link to each primary document. Use when: What is Apple's latest 8-K, and where is the document? Not for: You need to know who submitted the filing — EDGAR's submissions index carries no filer identity, and for ownership forms (3, 4, 5, SCHEDULE 13G) the submitter is a third party, not the company. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.
formNoComma-separated EDGAR form types to report the latest filing of. Defaults to "10-K,10-Q,8-K". Matching is exact and case-insensitive; output order follows the requested order.10-K,10-Q,8-K

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.filings.latest
metaYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive hints, so the burden on the description is lighter. The description adds useful behavioral details: it returns filing and report dates, a direct sec.gov link, and notes that a ticker without SEC index entry returns NOT_FOUND as a non-billable result. It does not elaborate on pagination or result limits, but the output schema presumably covers the structure. This is strong beyond 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?

The description is three sentences, front-loaded with the core function, then a usage guideline section, then pricing. Each sentence earns its place. It could drop the pricing line or move it to annotations, but it doesn't hurt clarity. Minor structural waste from the pricing sentence, which might be better as a note, but overall efficient.

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 tool's moderate complexity, 100% schema coverage, and presence of an output schema, the description covers all essential aspects: what it does, how to use parameters, when to use it, behavioral quirks (CIK normalization, NOT_FOUND non-billable), and limitations (no filer identity). The output schema presumably documents the return structure, so no need to repeat it. Complete for an agent to confidently select and invoke.

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 baseline is 3. The description adds meaningful context beyond the schema: it explains how CIK prefixes and leading zeros are handled, that tickers are matched case-insensitively, that company names are not accepted (pointing to company_us_resolve), and the default form list. The form parameter gets clarity on matching and ordering. The extra explanations elevate this to a 4.

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 it retrieves the most recent EDGAR filings (10-K, 10-Q, 8-K) for a US company given a ticker or CIK, providing dates and direct sec.gov links. This is a specific verb+resource combination that distinguishes it from siblings like company_us_filings (which may retrieve historical filings) and company_us_resolve (which resolves company names).

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 says 'Use when: What is Apple's latest 8-K, and where is the document?' and provides a clear 'Not for:' case explaining that it doesn't return filer identity and unsuitable for ownership forms. This gives direct when-to-use and when-not-to-use guidance, and implicitly steers users toward siblings like company_us_profile for other needs.

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

company_us_profileUS public company profile from SEC EDGAR by ticker or CIKA
Read-onlyIdempotent
Inspect

Look up an SEC filer by stock ticker (AAPL) or CIK and return its registered profile — legal name, entity type, SIC industry code and description, EIN, filer category, fiscal year end, state of incorporation, tickers and exchanges, former names, business and mailing addresses and phone. Use when: Which exchanges and tickers does this filer trade under? Not for: You need to know whether the filer is still submitting periodic reports — check the filing dates with company.us.filings.latest; EDGAR publishes no reporting-status field. Price: USD 0.004/call (x402), 0.003 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.profile
metaYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations (readOnlyHint, idempotentHint) are complemented by the description's details: missing ticker returns NOT_FOUND (non-billable), company names are not accepted, and the tool provides price per call. No contradictions.

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 compact yet rich, front-loading purpose and key fields, then adding usage guidance and pricing. Every sentence serves a purpose with no redundancy.

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 only one parameter, an output schema present, and annotations covering safety and idempotence, the description fully covers what the agent needs: what it returns, when to use, when not, and cost. No 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?

Input schema covers 100% of the single parameter with a detailed regex and description. The description reinforces the parameter behavior (CIK vs ticker) and adds that company names should be resolved via company.us.resolve, which is useful beyond 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 clearly states the tool returns an SEC filer's registered profile by ticker or CIK, listing specific fields (legal name, entity type, SIC, etc.). It distinguishes from siblings like company.us.filings.latest and company.us.resolve by mentioning what the tool does not do (reporting status, name resolution).

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?

Includes explicit 'Use when' (exchanges/tickers) and 'Not for' (reporting status) sections, with a direct reference to the alternative tool company.us.filings.latest. Also mentions pricing, helping the agent evaluate cost sensitivity.

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

company_us_resolveResolve a US company name to its SEC CIK and tickerA
Read-onlyIdempotent
Inspect

Turn a company-name fragment or stock ticker into the SEC EDGAR identifiers. Use when: Which SEC filer and CIK does the company name "Apple" belong to? Not for: You already have a ticker or a CIK and want profile or filings — company.us.profile, company.us.filings and company.us.filings.latest accept either identifier directly, so this extra call is unnecessary. Related: company_us_profile; company_us_filings_latest; company_us_filings; entity_lei_search. Price: USD 0.002/call (x402), 0.0015 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesTicker symbol (e.g. AAPL) or company-name fragment (e.g. Apple). Matching is case-insensitive and trimmed; no fuzzy matching is applied.
limitNoMaximum number of ranked matches to return. Ranking is applied before the limit; page.total reports how many matched in full.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.resolve
metaYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description's burden is low. The description adds context about matching behavior (case-insensitive, trimmed, no fuzzy matching) and pricing. However, it does not elaborate on ranking criteria or pagination beyond what the schema already provides for the limit parameter.

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 very concise: two initial sentences state the action, followed by structured use-case guidance and pricing. Every sentence serves a distinct purpose, and the key information 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?

Combined with the input schema (100% covered), annotations, and an output schema, the description covers all essential aspects: input type, use cases, when not to use, related tools, and pricing. The tool is simple and the description is complete enough for an agent to correctly select and invoke it.

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 fully documents both parameters. The description does not add new semantic information beyond echoing the schema (e.g., matching details, limit behavior). Therefore the description provides no additional value for parameter understanding.

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 explicitly states the tool converts a company-name fragment or stock ticker into SEC EDGAR identifiers (CIK and ticker). It distinguishes itself from sibling tools by specifying what it is not for and naming alternatives that accept identifiers directly.

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?

Provides explicit 'Use when' and 'Not for' sections with examples and names specific alternative tools (company.us.profile, company.us.filings, company.us.filings.latest). Also lists related tools and pricing, giving clear guidance on when to call this tool versus others.

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

domain_expiryCheck domain expiry date and days remaining (RDAP)A
Read-onlyIdempotent
Inspect

Registry expiry date for a domain read live from the authoritative registry RDAP server, with whole days remaining, the registry status codes, the registrar name and the registry's own last-update timestamp. A focused, cheaper subset of domain.registration for renewal monitoring and portfolio checks. Use when: When does this domain expire? Not for: You also need nameservers, DNSSEC, the creation date or the registrar's abuse contact - use domain.registration. Related: domain_registration. Price: USD 0.002/call (x402), 0.0015 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesBare domain name such as example.com or bbc.co.uk. Internationalised names are converted to punycode (IDNA). URLs, paths, ports and single-label names are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/domain.expiry
metaYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and no destruction. The description adds that the tool reads 'live from the authoritative registry RDAP server' and includes pricing details (USD 0.002/call). This provides useful behavioral context beyond annotations, though it could mention rate limits or authentication needs if any.

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 paragraph with clear front-loading: first sentence states the core functionality and outputs, second sentence outlines usage boundaries. Every sentence adds value with no redundancy or fluff.

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 low tool complexity (1 parameter, output schema present), the description fully covers what the tool returns, when to use it versus alternatives, and pricing. No gaps are evident for effective agent invocation.

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% for the single parameter 'domain'. The schema already thoroughly describes the parameter format (bare domain, punycode conversion, rejection of URLs/paths). The tool description does not add new parameter-level semantics beyond stating it accepts a domain name. Baseline score of 3 is appropriate given 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 clearly states the tool's purpose: check domain expiry date and days remaining using RDAP. It lists specific outputs (registry status codes, registrar name, last-update timestamp). It also distinguishes itself from the sibling tool 'domain_registration' by noting it is a cheaper subset focused on renewal monitoring, thereby avoiding ambiguity.

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 ('When does this domain expire?') and when not to ('Not for: You also need nameservers, DNSSEC... - use domain.registration'). It also mentions a related tool (domain_registration), providing clear guidance on alternatives.

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

domain_registrationWHOIS lookup for a domain, from the registry RDAP recordA
Read-onlyIdempotent
Inspect

The WHOIS lookup for a domain, answered from the registry's own RDAP service - the structured successor to port-43 WHOIS, read live via the IANA bootstrap, never scraped WHOIS text. Use when: Answer a WHOIS question about a domain - registrar, creation date, expiry, transfer lock - from the registry record. Not for: You only need the expiry date and days remaining - use domain.expiry (cheaper). Related: domain_expiry. Price: USD 0.004/call (x402), 0.003 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesBare domain name such as example.com or bbc.co.uk. Internationalised names are converted to punycode (IDNA). URLs, paths, ports and single-label names are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/domain.registration
metaYes

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). The description adds valuable context: the data is retrieved live via the IANA bootstrap (not scraped WHOIS text), and the pricing is disclosed ($0.004/call). This goes beyond the annotations, though it does not detail failure modes or latency which would be needed for a perfect score.

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 well-structured with a clear opening sentence, followed by 'Use when' and 'Not for' sections, and a pricing note. It is front-loaded with the essential purpose. The pricing information, while helpful, adds slight length but does not detract from readability. Nearly every sentence earns its place, earning a high score.

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 low complexity (single parameter, clear annotations, output schema present), the description is fully complete. It covers purpose, usage guidelines, data source, pricing, and alternatives. The agent has all necessary context to decide whether to invoke this tool, and the output schema handles return values without needing description.

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?

With only one parameter and 100% schema description coverage, the input schema already provides rich semantics (pattern, length limits, punycode conversion, URL/port rejection). The tool description does not add further meaning about the parameter beyond restating its purpose. Baseline of 3 is appropriate given the schema carries the load.

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 performs WHOIS lookup via RDAP, specifying it returns registrar, creation date, expiry, transfer lock. It distinguishes itself from the sibling domain_expiry by noting that tool is cheaper and limited to expiry dates. The verb 'lookup' and resource 'domain' are specific, and the data source (registry RDAP) is explicit.

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 provides explicit 'Use when' and 'Not for' conditions, directly referencing the sibling tool domain_expiry as a cheaper alternative for expiry-only queries. It also lists concrete use cases (registrar, creation date, expiry, transfer lock), giving clear guidance on when to invoke this tool versus alternatives.

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

entity_lei_profileGet legal entity profile by LEI from the GLEIF registerA
Read-onlyIdempotent
Inspect

Return the registry-authoritative GLEIF record for a Legal Entity Identifier — legal and previous names, legal and headquarters addresses, jurisdiction, legal form, entity and registration status, renewal dates (with days until renewal), managing LOU, corroboration level, BIC codes and the named local registry. Use when: Look up everything the LEI register holds for this identifier. Not for: You only have a company name — use entity.lei.search first. Related: entity_lei_search; company_uk_profile; company_uk_status; company_us_profile. Price: USD 0.004/call (x402), 0.003 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
leiYes20-character ISO 17442 Legal Entity Identifier (18 alphanumerics + 2 check digits). Case-insensitive. The structure is checked before payment, so a wrong-shaped LEI is rejected on the 402 (details.input_validation). The ISO 7064 MOD 97-10 checksum cannot be expressed as a schema pattern and is verified at execution: it fails with INVALID_INPUT before any upstream call and before settlement, so a bad checksum is never charged for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/entity.lei.profile
metaYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by detailing the input validation behavior (checksum checked before execution, never charged for bad checksums) and pricing. This provides behavioral context beyond the annotations, though it could be slightly more explicit about the 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.

Conciseness4/5

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

The description is well-structured with sections for purpose, usage guidance, related tools, and pricing. It front-loads the core functionality. However, the list of return fields is somewhat redundant given the output schema, making it slightly longer than necessary. Still, it remains concise overall.

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 single parameter, rich annotations, and presence of an output schema, the description covers all necessary context: purpose, when to use, alternatives, pricing, validation behavior, and related tools. It is fully complete for the tool's complexity.

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 input schema provides 100% coverage for the single parameter 'lei', with a detailed description including pattern, length, and checksum validation. The tool description adds 'Legal Entity Identifier' but does not significantly augment the schema's semantics. Given high schema coverage, a score of 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?

The description clearly states 'Return the registry-authoritative GLEIF record for a Legal Entity Identifier' and lists specific fields (names, addresses, jurisdiction, etc.), using a specific verb and resource. It distinguishes from the sibling entity_lei_search, which is used when the input is a company name rather than an LEI.

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 includes explicit 'Use when' and 'Not for' sections, stating to use when looking up everything the LEI register holds, and not for company name searches (directing to entity_lei_search). It also lists related tools, providing clear guidance on when to use this tool versus alternatives.

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

fx_reference_rateGet the official ECB reference exchange rate for a pair (accounting, invoicing, reporting)A
Read-onlyIdempotent
Inspect

European Central Bank euro foreign exchange reference rate for a pair - the official daily fix used for accounting, invoicing and reporting - latest or any date in the last 90 days. The ECB publishes EUR/XXX only, so inverse and cross rates are computed from the same fix and named in rate_derivation. Use when: Convert or report an amount at an official daily rate both sides of a contract can verify against the ECB. Not for: You need an executable, tradable, live or intraday market rate - this is a daily fix only. Price: USD 0.002/call (x402), 0.0015 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
baseYesISO 4217 code of the base currency. EUR is always available; other currencies must be in the ECB reference rate list for the selected date.
dateNoOptional ISO calendar date (YYYY-MM-DD) within the last 90 days. When the ECB published no fix on that date (a TARGET closing day), the latest prior fix is returned with a note.
quoteYesISO 4217 code of the quote currency. EUR is always available; other currencies must be in the ECB reference rate list for the selected date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/fx.reference_rate
metaYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. The description adds that the rate covers latest or any date in the last 90 days, that ECB publishes EUR/XXX only with derived rates named in rate_derivation, and mentions pricing. It also notes date fallback to prior fix on non-publishing days. This adds behavioral context beyond 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?

Description is a few sentences but each adds value: purpose, limitation (EUR/XXX only), usage guidance, pricing. It front-loads the main purpose. Could be slightly tighter, but no fluff.

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 three parameters and existence of output schema, the description covers purpose, usage, behavioral details, limitations, and pricing. It is complete for an agent to select and invoke correctly without further clarification.

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% with descriptions for base, quote, and date. The description adds semantic value: explains that EUR/XXX is the native fix (inverse/cross computed) and that date returns latest prior fix if no ECB fix on that day. This goes beyond the schema's descriptions.

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 it returns 'European Central Bank euro foreign exchange reference rate' for a pair, specifying it's the official daily fix for accounting, invoicing, and reporting. It distinguishes itself from live/tradable rates and mentions that inverse/cross rates are computed, giving a precise 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?

Explicit 'Use when' and 'Not for' sections: use for official daily rates verifiable against ECB, not for executable/live/intraday rates. This provides clear context for when to invoke this tool versus alternatives like live rate APIs.

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

location_us_geocodeGeocode a US street address (Census, TIGER interpolated)A
Read-onlyIdempotent
Inspect

Convert a one-line US street address into coordinates using the US Census Bureau Geocoder. Returns the standardised matched address, latitude and longitude to 6 decimal places, the TIGER/Line segment and parsed address components. Coordinates are interpolated along street address ranges, not rooftop or parcel positions. Use when: Convert this US street address to latitude and longitude. Not for: You need rooftop or parcel-level precision — Census coordinates are TIGER address-range interpolations. Related: location_us_geographies. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of candidate matches to return, in the Census Bureau's own order. page.total always reports how many the Census Bureau returned in total, so a low limit never hides an ambiguous address.
offsetNoZero-based index of the first candidate to return. The Census Bureau returns every match in one response, so paging is applied by Eckari over that set - pass page.next_offset to walk the remaining candidates without a second upstream lookup.
addressYesOne-line US street address including city and state, e.g. "1600 Pennsylvania Ave NW, Washington, DC 20500".

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/location.us.geocode
metaYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds critical behavioral context: 'Coordinates are interpolated along street address ranges, not rooftop or parcel positions.' It also includes pricing information. 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.

Conciseness4/5

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

The description is well-structured with a clear lead sentence, output details, precision caveat, usage guidance, related tool, and pricing. It is slightly long but every sentence adds value. Front-loaded with core purpose.

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 presence of an output schema (not shown here), the description does not need to detail return values. It covers purpose, precision limitations, usage guidance, pricing, and related tool. The paging behavior is documented in the schema parameter descriptions. The description is complete for an agent to make an informed decision.

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 detailed parameter descriptions for limit, offset, and address. The description does not add additional semantics beyond what the schema provides, though it confirms the address format. Baseline score of 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?

The description clearly states the tool converts a one-line US street address into coordinates using the US Census Bureau Geocoder. It specifies the output includes latitude/longitude to 6 decimal places, TIGER/Line segment, and parsed address components. The related tool 'location_us_geographies' is mentioned, distinguishing it from a sibling.

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?

Explicitly provides 'Use when' and 'Not for' guidance, stating rooftop/parcel precision is not available. References the related tool 'location_us_geographies' as an alternative. This gives clear direction on when to use this tool versus alternatives.

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

location_us_geographiesGet US Census geographies for coordinates (state to ZCTA)A
Read-onlyIdempotent
Inspect

Return the US Census Bureau geographies containing a latitude/longitude — state, county, census tract, block group, census block, incorporated place, congressional district and ZIP Code Tabulation Area — each with its FIPS or GEOID. The standard way to attach official US statistical geography to a point. Use when: Which county and census tract is this coordinate in? Not for: You have an address rather than coordinates — use location.us.geocode first. Related: location_us_geocode. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (WGS 84), e.g. 38.8977.
lonYesLongitude in decimal degrees (WGS 84), negative in the western hemisphere, e.g. -77.0365.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/location.us.geographies
metaYes

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, destructiveHint=false. The description adds return value context (list of geographies with FIPS/GEOID) and pricing, consistent with annotations. No contradictions.

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?

At ~85 words, the description is concise and well-structured: purpose first, then returns, then use cases. Could be slightly tighter, but no wasted sentences.

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 simple coordinate-to-geography lookup with 2 required params, existing annotations, and an output schema, the description covers the return types, use case, sibling distinction, and pricing—complete and actionable.

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% with clear descriptions for both lat and lon. The description repeats 'latitude/longitude' but adds no semantic detail beyond what the schema provides. 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?

The description clearly states the tool returns US Census geographies for a lat/lng, lists specific geography types (state, county, census tract, etc.) with FIPS/GEOID, and distinguishes from sibling location_us_geocode by specifying coordinates vs. addresses.

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?

Provides explicit use when ('Which county and census tract is this coordinate in?'), not for ('You have an address'), and names the alternative (location.us.geocode first). Also includes pricing, aiding agent decision-making.

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

parcel_detect_carrierDetect the carrier from a tracking numberA
Read-onlyIdempotent
Inspect

Identify which carrier issued a tracking number using a deterministic, versioned signature set - prefixes, lengths, carrier check digits and UPU S10 structure - returning the carrier, how distinctive the match is, every ranked candidate with typed evidence, and the parsed S10 details. No upstream call and no carrier account required. Use when: Which carrier is this tracking number from? Not for: You need tracking events, status or delivery estimates - not yet available. Price: USD 0.001/call (x402), 0.001 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
origin_countryNoOptional ISO 3166-1 alpha-2 origin country hint. Used only as a small tie-breaker; it never invents a candidate.
tracking_numberYesTracking or consignment number. Spaces and hyphens are removed and letters upper-cased before matching (4-40 letters and digits after normalisation). Digits and letters are never altered.
destination_countryNoOptional ISO 3166-1 alpha-2 destination country hint. Used only as a small tie-breaker; it never invents a candidate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/parcel.detect_carrier
metaYes

TDQS

A4.9/5.0
Behavior5/5

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

The description thoroughly discloses behavioral traits beyond annotations: it is deterministic, uses a versioned signature set, explains how country hints are used only as tie-breakers without inventing candidates, and mentions pricing. The description aligns with annotations (readOnlyHint, idempotentHint, etc.) and adds rich operational detail.

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 compact, with clear sentences covering purpose, method, output, usage guidelines, and pricing. Every sentence adds necessary information and there is no fluff. Structure front-loads the action, then method, then guidance.

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 tool's complexity (carrier detection, ranking, S10 parsing, pricing) and that an output schema exists, the description is impressively complete. It covers what the tool does, how it works, when/not to use it, costs, and parameter semantics. No gaps are evident for an agent to select and invoke it 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 description coverage is 100%, so baseline is 3. The description adds value by explaining how 'origin_country' and 'destination_country' are purely tie-breakers and never invent candidates, and how 'tracking_number' is normalized (spaces/hyphens removed, letters upper-cased). This is helpful context beyond the schema's regex and length constraints.

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: identify which carrier issued a tracking number. It uses specific verbs like 'detect' and 'identify', describes the deterministic method (prefixes, lengths, check digits, UPU S10), and lists what the tool returns. It is well-distinguished from siblings which are in different domains (company, domain, fx, location, weather).

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 provides a use case ('Which carrier is this tracking number from?') and a clear 'not for' case (tracking events, status, delivery estimates). It also mentions no upstream call or carrier account required, which sets expectations for when not to look elsewhere.

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

weather_us_alertsGet active US weather alerts for a point or state (NWS)A
Read-onlyIdempotent
Inspect

Active National Weather Service watches, warnings and advisories for a US coordinate or a two-letter state or marine area code - event, severity, certainty, urgency, headline, affected areas and zone codes, and effective/onset/expiry times in UTC. Read at request time, so an empty list means nothing is active. Use when: Decide whether an active US weather warning affects a location before dispatching or travelling. Not for: You need the forecast rather than alerts - use weather.us.forecast. Related: weather_us_forecast; weather_us_observation. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude in decimal degrees (WGS84). Provide lat and lon together, or provide state.
lonNoLongitude in decimal degrees (WGS84). Provide lat and lon together, or provide state.
limitNoMaximum number of active alerts to return, in the order NWS returns them. The default of 5 keeps the answer compact - a busy state can have dozens of active alerts, each covering tens of zones - and page.total always reports how many are active, so nothing is hidden.
stateNoTwo-letter US state, territory or NWS marine area code such as CA / TX / PR. Alternative to lat and lon; one of the two forms is required.
detailNocompact (default) returns the fields an agent decides on. full adds the two NWS narrative members - description (the multi-paragraph WHAT/WHERE/WHEN/IMPACTS text, truncated at 2000 characters with description_truncated set) and instruction (the protective-action text) - which are written for a human reader and are several times the size of the rest of the alert.compact
offsetNoZero-based index of the first alert to return, for paging through the active set with limit. The whole active set is read in one upstream request and returned in that order, so a window over it is consistent.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.alerts
metaYes

TDQS

A4.8/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 safety profile is clear. The description adds value by noting that the result is read at request time ('Read at request time, so an empty list means nothing is active') and describing the limit mechanism with page.total for completeness. However, it could mention that NWS data may have latency or that the tool depends on upstream availability, which is minor.

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 well-structured paragraph that front-loads the core purpose and input types, then provides usage guidance, alternatives, and pricing. Every sentence adds distinct value, and the text is streamlined with no redundancy.

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 tool's complexity (6 parameters, no required ones, an output schema exists, and full annotation support), the description is complete. It covers purpose, input options, alternative tools, behavioral guarantees, and even pricing cost context. The output schema likely handles return value descriptions, so the description need not cover that.

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 description coverage is 100%, so the schema already documents all parameters well. The description adds significant meaning beyond the schema: it explains the purpose of limit ('keeps the answer compact...page.total always reports how many are active'), detail's difference ('compact returns the fields an agent decides on; full adds NWS narrative members'), and offset behavior ('the whole active set is read in one upstream request...a window over it is consistent'). This enriches parameter understanding.

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 specific verbs ('Get active...weather alerts') and identifies the resource ('National Weather Service watches, warnings and advisories') and location inputs ('US coordinate or a two-letter state or marine area code'). It clearly distinguishes from siblings like weather_us_forecast and weather_us_observation listed in the sibling-tools.

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 provides explicit when-to-use guidance ('Decide whether an active US weather warning affects a location before dispatching or travelling'), explicit when-not-to-use ('Not for: You need the forecast rather than alerts'), and names specific alternative tools ('use weather.us.forecast', 'Related: weather_us_forecast; weather_us_observation'). It also mentions pricing to inform cost-aware decisions.

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

weather_us_forecastGet the US weather forecast for coordinates (NWS)A
Read-onlyIdempotent
Inspect

Official National Weather Service forecast for any US coordinate - six 12-hour day/night periods by default, or hourly - each with temperature in C and F, precipitation probability, a wind speed range in km/h, wind direction and a short forecast, plus the NWS issue time so an agent can judge its age. Use when: What is the weather forecast for these US coordinates? Not for: You need the latest observed conditions and their age - use weather.us.observation. Related: weather_us_observation; weather_us_alerts. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (WGS84). Rounded to 4 decimal places before the National Weather Service lookup.
lonYesLongitude in decimal degrees (WGS84). Rounded to 4 decimal places before the National Weather Service lookup.
hoursNoNumber of hourly periods to return, soonest first. Applies when hourly is true; use period_limit for day/night forecasts.
detailNocompact (default) returns the fields an agent acts on. full adds the NWS narrative (detailed_forecast), the icon URL, the trend note and, for hourly periods, dewpoint_c and humidity_pct.compact
hourlyNoReturn hourly periods instead of the default 12-hour day/night periods. Hourly periods have no name and, at detail=full, carry dewpoint and humidity.
period_limitNoMaximum number of 12-hour day/night periods to return, soonest first. Applies when hourly is false; use hours for hourly forecasts. NWS issues 14 periods (7 days); the default of 6 is three days. Named period_limit, not periods, because periods is the returned series.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.forecast
metaYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds value by noting the NWS issue time field (allowing agent to judge data freshness) and pricing (USD 0.003/call). No contradictions 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.

Conciseness4/5

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

The description is a single, dense paragraph that front-loads the core purpose before listing features, usage guidance, and pricing. It is efficient with no wasted words, though a slightly more structured format (e.g., bullet points) could improve scanning. Still, every sentence adds 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?

Given 6 parameters (all well-described in schema), an existing output schema, rich annotations, and a full sibling list, the description covers all essential aspects: purpose, output fields, usage boundaries, pricing, and temporal detail (NWS issue time). There are no missing pieces for an agent to correctly invoke the tool.

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% with detailed parameter descriptions. The description supplements by clarifying the default behavior ('six 12-hour day/night periods by default, or hourly') and explaining the relationship between hours and period_limit parameters. This helps an agent choose the correct combination without reading the schema alone.

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 'Official National Weather Service forecast for any US coordinate' and enumerates the returned data (six 12-hour periods or hourly, with temperature, precipitation, wind, etc.). It distinguishes from sibling tools weather_us_observation and weather_us_alerts by specifying scope and content.

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?

Explicitly provides use-case guidance: 'Use when: What is the weather forecast for these US coordinates? Not for: You need the latest observed conditions and their age - use weather.us.observation.' It also lists related tools ('Related: weather.us.observation; weather.us.alerts'), leaving no ambiguity about when to invoke this tool versus alternatives.

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

weather_us_observationGet the latest US weather observation with its age (NWS)A
Read-onlyIdempotent
Inspect

Latest surface observation from the nearest National Weather Service station to a US coordinate, with the station identity, the observation time (observed_at), its age in seconds and an is_stale flag. Station observations are reported roughly every 20-60 minutes, so this is the most recent measurement, not a real-time reading. Use when: What was the most recently observed temperature at these US coordinates? Not for: You need a prediction rather than a measurement - use weather.us.forecast. Related: weather_us_forecast; weather_us_alerts. Price: USD 0.003/call (x402), 0.002 (account key).

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude in decimal degrees (WGS84). Rounded to 4 decimal places before the National Weather Service lookup.
lonYesLongitude in decimal degrees (WGS84). Rounded to 4 decimal places before the National Weather Service lookup.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.observation
metaYes

TDQS

A4.9/5.0
Behavior5/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. The description adds value by explaining the polling frequency ('every 20-60 minutes'), that it's 'the most recent measurement, not a real-time reading', and the is_stale flag – all behavioral insights beyond 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?

Three well-structured sentences: first explains what the tool returns, second provides behavioral context, third gives usage guidance and pricing – no wasted words, front-loaded with key information.

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 tool has 2 well-documented params, a complete output schema, and full annotation coverage, the description elegantly fills gaps by explaining staleness, observation frequency, and use-case boundaries – fully sufficient for an agent to select and invoke 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% with detailed descriptions for lat and lon (including rounding to 4 decimal places and WGS84 coordinate system). The description adds context by linking parameters to the nearest station lookup, but does not repeat schema information; a minor improvement would be a short mention of rounding impact.

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' with a clear resource 'latest surface observation' from a source 'nearest National Weather Service station' and lists key output fields (station identity, observed_at, age, is_stale). It distinguishes itself from siblings by mentioning US coordinates and the time-bound nature of observations.

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?

Explicitly states when to use ('What was the most recently observed temperature at these US coordinates?') and when not to ('Not for: You need a prediction rather than a measurement'), with direct sibling tool names (weather_us_forecast and weather_us_alerts) and pricing context, providing comprehensive guidance.

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. Dates show when Glama detected each change.

  1. 8 tool updates
    • Changedcompany_uk_accounts2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_charges2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_directors2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_filings2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_owners2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_profile2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_registered_office2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
    • Changedcompany_uk_status2 fields changed
      • changedInput schema / properties / company_number / description
        Previous value: -"Companies House company number, also called the company registration number (CRN), e.g. 00445790, SC123456, NI000001, BR008975. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN), e.g. 00445790, SC123456, NI000001, BR008975. Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
      • changedInput schema / properties / company_number / pattern
        Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
  2. 7 tool updates
    • Changedcompany_uk_charges1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum charges to return per page (1-100). Default 5."New value: +"Maximum charges to return per page (1-100). Default 3: a charge carries free-text particulars, secured details and the persons entitled, so it is several times the size of an officer or a filing row - the register-wide counts and page.total still describe the whole register."
    • Changedcompany_us_filings3 fields changed
      • removedInput schema / properties / cik
        Removed value: -{
        -  "description": "SEC Central Index Key, 1-10 digits, with or without leading zeros and with or without a CIK prefix. Obtain it from company.us.resolve.",
        -  "maxLength": 13,
        -  "minLength": 1,
        -  "pattern": "^(?:[Cc][Ii][Kk])?[0-9]{1,10}$",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "SEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.",
        +  "maxLength": 13,
        +  "minLength": 1,
        +  "pattern": "^(?:(?:[Cc][Ii][Kk])?[0-9]{1,10}|[A-Za-z][A-Za-z0-9.-]{0,9})$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "cik"
        -]New value: +[
        +  "id"
        +]
    • Changedcompany_us_filings_latest3 fields changed
      • removedInput schema / properties / cik
        Removed value: -{
        -  "description": "SEC Central Index Key, 1-10 digits, with or without leading zeros and with or without a CIK prefix. Obtain it from company.us.resolve.",
        -  "maxLength": 13,
        -  "minLength": 1,
        -  "pattern": "^(?:[Cc][Ii][Kk])?[0-9]{1,10}$",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "SEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.",
        +  "maxLength": 13,
        +  "minLength": 1,
        +  "pattern": "^(?:(?:[Cc][Ii][Kk])?[0-9]{1,10}|[A-Za-z][A-Za-z0-9.-]{0,9})$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "cik"
        -]New value: +[
        +  "id"
        +]
    • Changedcompany_us_profile3 fields changed
      • removedInput schema / properties / cik
        Removed value: -{
        -  "description": "SEC Central Index Key, 1-10 digits, with or without leading zeros and with or without a CIK prefix (e.g. 320193, 0000320193, CIK0000320193). Obtain it from company.us.resolve.",
        -  "maxLength": 13,
        -  "minLength": 1,
        -  "pattern": "^(?:[Cc][Ii][Kk])?[0-9]{1,10}$",
        -  "type": "string"
        -}
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "SEC CIK or exchange ticker symbol. All digits is read as a CIK (leading zeros and an EDGAR CIK prefix are both accepted: 320193, 0000320193, CIK0000320193); anything else is read as a ticker (1-10 characters starting with a letter) and matched exactly, case-insensitively, against the SEC listed-security index — AAPL, aapl and BRK-B all work. Company names are not accepted: resolve one with company.us.resolve. A ticker with no SEC index entry returns NOT_FOUND, which is not a billable result.",
        +  "maxLength": 13,
        +  "minLength": 1,
        +  "pattern": "^(?:(?:[Cc][Ii][Kk])?[0-9]{1,10}|[A-Za-z][A-Za-z0-9.-]{0,9})$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "cik"
        -]New value: +[
        +  "id"
        +]
    • Changedentity_lei_search1 field changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Zero-based offset into the result set for paging. Pass back page.next_offset from the previous response; page.has_more says whether there is one. GLEIF pages by page number, so an offset that is a multiple of limit is one upstream page - which is every offset page.next_offset produces. Capped at 9900 because GLEIF refuses page-based pagination beyond 10,000 records; beyond that, narrow the query.",
        +  "maximum": 9900,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedweather_us_alerts3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "compact",
        +  "description": "compact (default) returns the fields an agent decides on. full adds the two NWS narrative members - description (the multi-paragraph WHAT/WHERE/WHEN/IMPACTS text, truncated at 2000 characters with description_truncated set) and instruction (the protective-action text) - which are written for a human reader and are several times the size of the rest of the alert.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / default
        Previous value: -10New value: +5
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of active alerts to return, in the order NWS returns them. The default of 10 keeps the answer compact; a busy state can have dozens of active alerts, each with a multi-paragraph narrative. page.total always reports how many are active."New value: +"Maximum number of active alerts to return, in the order NWS returns them. The default of 5 keeps the answer compact - a busy state can have dozens of active alerts, each covering tens of zones - and page.total always reports how many are active, so nothing is hidden."
    • Changedweather_us_forecast3 fields changed
      • changedInput schema / properties / hours / description
        Previous value: -"Number of hourly periods to return, soonest first. Applies when hourly is true; use periods for day/night forecasts."New value: +"Number of hourly periods to return, soonest first. Applies when hourly is true; use period_limit for day/night forecasts."
      • addedInput schema / properties / period_limit
        Added value: +{
        +  "default": 6,
        +  "description": "Maximum number of 12-hour day/night periods to return, soonest first. Applies when hourly is false; use hours for hourly forecasts. NWS issues 14 periods (7 days); the default of 6 is three days. Named period_limit, not periods, because periods is the returned series.",
        +  "maximum": 14,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / periods
        Removed value: -{
        -  "default": 6,
        -  "description": "Number of 12-hour day/night periods to return, soonest first. Applies when hourly is false; use hours for hourly forecasts. NWS issues 14 periods (7 days); the default of 6 is three days.",
        -  "maximum": 14,
        -  "minimum": 1,
        -  "type": "integer"
        -}
  3. 9 tool updates
    • Changedcompany_uk_accounts3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_charges3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_directors3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_filings3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_owners3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_profile3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_registered_office3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedcompany_uk_status3 fields changed
      • removedInput schema / properties / companyNumber
        Removed value: -{
        -  "description": "Companies House company number, also called the company registration number (CRN), e.g. 00445790, SC123456, NI000001, BR008975. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        -  "maxLength": 10,
        -  "minLength": 1,
        -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        -  "type": "string"
        -}
      • addedInput schema / properties / company_number
        Added value: +{
        +  "description": "Companies House company number, also called the company registration number (CRN), e.g. 00445790, SC123456, NI000001, BR008975. The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
        +  "maxLength": 10,
        +  "minLength": 1,
        +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "companyNumber"
        -]New value: +[
        +  "company_number"
        +]
    • Changedweather_us_alerts3 fields changed
      • addedInput schema / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "lat",
        +      "lon"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "state"
        +    ]
        +  }
        +]
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "description": "Maximum number of active alerts to return, in the order NWS returns them. The default of 10 keeps the answer compact; a busy state can have dozens of active alerts, each with a multi-paragraph narrative. page.total always reports how many are active.",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based index of the first alert to return, for paging through the active set with limit. The whole active set is read in one upstream request and returned in that order, so a window over it is consistent.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
  4. 24 tool updates
    • Changedcompany_uk_accounts7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.accounts"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "accounting_reference_date": {
        -    "additionalProperties": false,
        -    "description": "The register's accounting reference date (ARD) as a day and month with no year: the anchor Companies House uses to derive a company's accounting periods and filing deadlines. It is not the same thing as the end date of any particular set of accounts — a company filing to a 52/53-week calendar may make its accounts up to any date within seven days either side of the ARD, so read last_accounts.made_up_to for the actual period end. TESCO PLC's ARD is 26 February while its last accounts were made up to 28 February 2026.",
        -    "properties": {
        -      "day": {
        -        "type": [
        -          "integer",
        -          "null"
        -        ]
        -      },
        -      "month": {
        -        "type": [
        -          "integer",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "company_name": {
        -    "type": "string"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "has_accounts_information": {
        -    "description": "Derived; false when the register holds no accounts block for this company.",
        -    "type": "boolean"
        -  },
        -  "last_accounts": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "made_up_to": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "period_end_on": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "period_start_on": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "type": {
        -        "description": "Register accounts type (e.g. full",
        -        "dormant": null,
        -        "group).": null,
        -        "micro-entity": null,
        -        "small": null,
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "next_accounts": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "due_on": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "overdue": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "period_end_on": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "period_start_on": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "company_name",
        -  "has_accounts_information",
        -  "accounting_reference_date",
        -  "last_accounts",
        -  "next_accounts"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_charges11 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "How much of each charge to return. Default summary. `full` adds the four members the register populates only for particular filings — acquired_on, resolved_on, assets_ceased_released and more_than_four_persons_entitled — which are null on the great majority of charges.",
        +  "enum": [
        +    "summary",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum charges to return per page (1-100). Default 25."New value: +"Maximum charges to return per page (1-100). Default 5."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based index into the register's charge list. The list is returned whole (nothing is filtered out after reading), so offset + charges.length < total_count is the end-of-list test."New value: +"Zero-based index into the register's charge list (not into the filtered result). Pass back page.next_offset from the previous response to page."
      • addedInput schema / properties / status
        Added value: +{
        +  "description": "Which charges to return. Default `all`. `outstanding` returns the charges that are still security over the company (everything the register has not marked satisfied or fully-satisfied, including part-satisfied); `satisfied` returns the discharged ones. The register offers no server-side filter, so Eckari applies it after reading up to three register pages of 100 charges — read page.has_more rather than items.length.",
        +  "enum": [
        +    "outstanding",
        +    "satisfied",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.charges"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "charges": {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "acquired_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "assets_ceased_released": {
        -          "description": "Register cease/release information (mapped from the register field name).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "charge_code": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "charge_number": {
        -          "type": "integer"
        -        },
        -        "classification": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "type": "string"
        -              },
        -              "type": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "description"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "created_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "delivered_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "type": "string"
        -        },
        -        "is_outstanding": {
        -          "description": "Derived; false when status is satisfied or fully-satisfied (the two terminal keys), true otherwise — including part-satisfied, where security remains in force. An unrecognised future status is reported as outstanding rather than silently discharged.",
        -          "type": "boolean"
        -        },
        -        "more_than_four_persons_entitled": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "particulars": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "chargor_acting_as_bare_trustee": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "contains_fixed_charge": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "contains_floating_charge": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "contains_negative_pledge": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "description": {
        -                "type": "string"
        -              },
        -              "floating_charge_covers_all": {
        -                "type": [
        -                  "boolean",
        -                  "null"
        -                ]
        -              },
        -              "type": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "description"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "persons_entitled": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "name": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "name"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "resolved_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "satisfied_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "secured_details": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "description": {
        -                "type": "string"
        -              },
        -              "type": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "type",
        -              "description"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "status": {
        -          "description": "Companies House charge status. outstanding — registered and not discharged. part-satisfied — partly discharged, security still in force for the remainder. satisfied and fully-satisfied — both terminal: the register uses two keys for a fully discharged charge and the public register renders either as \"Satisfied\", so filtering on one alone gives the wrong answer. Use is_outstanding instead.",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "charge_number",
        -        "status",
        -        "is_outstanding",
        -        "created_on",
        -        "delivered_on",
        -        "satisfied_on",
        -        "classification",
        -        "particulars",
        -        "persons_entitled"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "offset": {
        -    "type": "integer"
        -  },
        -  "outstanding_count": {
        -    "description": "Derived, register-wide: total_count minus satisfied_count — the charges the register has not recorded as discharged. Part-satisfied charges are counted as outstanding because the security has not been fully released; part_satisfied_count reports them separately. That makes this equal to the public register's own \"Outstanding\" headline only when part_satisfied_count is 0; when it is not, this figure is larger by exactly that number, because the register lists part-satisfied charges under their own heading. Null when the register omits total_count or satisfied_count.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "part_satisfied_count": {
        -    "description": "Register-wide count of charges the register records as partly discharged. These are also included in outstanding_count.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "satisfied_count": {
        -    "description": "Register-wide count of charges the register records as fully discharged (status satisfied or fully-satisfied). Not a count of the returned page.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "total_count": {
        -    "description": "Total charges registered against the company. Register-wide",
        -    "not a count of the returned page.": null,
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "total_count",
        -  "outstanding_count",
        -  "satisfied_count",
        -  "part_satisfied_count",
        -  "offset",
        -  "charges"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_directors10 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum officers to return per page (1-100). Default 35. Eckari reads up to three register pages of 100 entries to fill this after the resigned filter is applied; if the limit is still unmet, has_more is true and next_offset says where to resume."New value: +"Maximum officers to return per page (1-100). Default 5. Eckari reads up to three register pages of 100 entries to fill this after the role and resigned filters are applied; if the limit is still unmet, page.has_more is true and page.next_offset says where to resume."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based index into the register's own officer list (not into the filtered result). Pass back the next_offset from the previous response to page."New value: +"Zero-based index into the register's own officer list (not into the filtered result). Pass back page.next_offset from the previous response to page."
      • addedInput schema / properties / role
        Added value: +{
        +  "description": "Which appointments to return. Default `director` — the capability's name is its contract. The register encodes the office in officer_role, so the filter is a substring test on it: `director` matches director, corporate-director, nominee-director and corporate-nominee-director; `secretary` matches secretary, corporate-secretary, nominee-secretary and corporate-nominee-secretary; `llp_member` matches llp-member, llp-designated-member and their corporate- forms; `all` returns every appointment the register lists, including managing officers, general partners, judicial factors and the EEIG/SE organ roles. Filtering is applied after the register read, so read page.has_more rather than items.length.",
        +  "enum": [
        +    "director",
        +    "secretary",
        +    "llp_member",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.directors"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "active_count": {
        -    "description": "Register-wide count of officers in the register's active bucket. Not a count of the returned page, and not simply 'entries without a resignation date': when a company is dissolved or closed the register moves its serving officers into inactive_count and active_count becomes 0.",
        -    "type": "integer"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "has_more": {
        -    "description": "Derived; true when officers matching the current filter remain beyond this page — either because more matches were read than limit allows, or because the register list was not exhausted within the three-page read budget. officers.length < limit is NOT a valid end-of-list test, and neither is comparing against total_officers or active_count, which are register-wide.",
        -    "type": "boolean"
        -  },
        -  "inactive_count": {
        -    "description": "Register-wide count of officers in the register's third bucket — appointments that ended with the company rather than by resignation, which is where the officers of a dissolved or closed company are counted. Null when the register omits the member. Not a count of the returned page.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "next_offset": {
        -    "description": "Derived; the offset to pass to the next request to continue after the last officer returned. Null when has_more is false.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "officers": {
        -    "description": "Officer entries in the register's own order. Resigned entries are omitted unless include_resigned is true; inactive entries (a dissolved company's officers) are always returned, because the register does not treat them as resigned.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "address": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "address_line_1": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "address_line_2": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "care_of": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "country": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "locality": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "po_box": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "postal_code": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "premises": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "region": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "appointed_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "country_of_residence": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date_of_birth": {
        -          "additionalProperties": false,
        -          "description": "Month and year only, as published on the public register.",
        -          "properties": {
        -            "month": {
        -              "type": "integer"
        -            },
        -            "year": {
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "month",
        -            "year"
        -          ],
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "identification": {
        -          "additionalProperties": false,
        -          "description": "Corporate officer identification where the officer is a corporate body.",
        -          "properties": {
        -            "identification_type": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "legal_authority": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "legal_form": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "place_registered": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "registration_number": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "is_active": {
        -          "description": "Derived; true exactly when officer_status is active. It is NOT 'no resignation date recorded': an officer of a dissolved company has no resignation date and is not active.",
        -          "type": "boolean"
        -        },
        -        "name": {
        -          "description": "Officer name as registered (surname-first for natural persons).",
        -          "type": "string"
        -        },
        -        "nationality": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "occupation": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "officer_status": {
        -          "description": "Derived from the register's own three officer buckets: resigned when the entry carries a resignation date; inactive when it does not but the register reports no active officers and a non-zero inactive_count (the appointment ended with a dissolved or closed company); otherwise active. It describes the register entry, not the company — check company.uk.status for the company's own state.",
        -          "enum": [
        -            "active",
        -            "resigned",
        -            "inactive"
        -          ],
        -          "type": "string"
        -        },
        -        "resigned_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "role": {
        -          "corporate-director).": null,
        -          "description": "Companies House officer_role (e.g. director",
        -          "llp-member": null,
        -          "secretary": null,
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "role",
        -        "officer_status",
        -        "is_active",
        -        "appointed_on",
        -        "resigned_on"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "offset": {
        -    "description": "The register index this page started at (the requested offset).",
        -    "type": "integer"
        -  },
        -  "resigned_count": {
        -    "description": "Register-wide count of resigned officers. Not a count of the returned page.",
        -    "type": "integer"
        -  },
        -  "total_officers": {
        -    "description": "Total officer entries on the register for this company (active + inactive + resigned). Register-wide",
        -    "not a count of the returned page.": null,
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "total_officers",
        -  "active_count",
        -  "inactive_count",
        -  "resigned_count",
        -  "offset",
        -  "officers",
        -  "has_more",
        -  "next_offset"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_filings11 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"Optional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as category_filter."New value: +"Optional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as query.category."
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "How much of each filing to return. Default summary: the readable description, its source, the register's annotations, the form type and the document URL. `full` adds the register's raw description_key and description_values for reconciliation against a register capture.",
        +  "enum": [
        +    "summary",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum filings to return per page (1-100). Default 25."New value: +"Maximum filings to return per page (1-100). Default 5."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so for this list offset + filings.length < total_count is the end-of-list test."New value: +"Zero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so page.has_more is simply offset + returned < page.total; pass back page.next_offset."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.filings"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "category_filter": {
        -    "because total_count depends on it.": null,
        -    "description": "Derived; the category filter actually applied to this response (the normalised input value)",
        -    "or null when no filter was applied. Makes a logged or cached response self-describing": null,
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "filing_history_status": {
        -    "description": "The register's own statement about this company's filing history, passed through unchanged (e.g. filing-history-available). It qualifies a short or empty list: without it, 'no filings match this filter' and 'the register holds no filing history for this company' look identical. Null when the register omits it.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "filings": {
        -    "description": "The register's own filing order, passed through unchanged — reverse chronological (most recent first) in practice. Eckari applies no sort of its own and guarantees no ordering; sort on date yourself if your logic depends on it.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "annotations": {
        -          "description": "Registrar annotations attached to this filing, verbatim and in register order; empty when there are none. The register renders them beneath the filing's own description (e.g. \"Purchase of own shares. ANNOTATION Clarification …\"), so a consumer reading description alone is not reading what the register says about the filing. Annotations are the registrar's after-the-fact clarifications and corrections.",
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "annotation": {
        -                "description": "The annotation text as published by the register.",
        -                "type": "string"
        -              },
        -              "date": {
        -                "description": "The date the annotation was added as published by the register (ISO date or date-time; passed through unchanged). Null when the register omits it.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              },
        -              "description": {
        -                "description": "The register's own description key for the annotation entry (e.g. annotation). Null when the register omits it.",
        -                "type": [
        -                  "string",
        -                  "null"
        -                ]
        -              }
        -            },
        -            "required": [
        -              "annotation",
        -              "date",
        -              "description"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "category": {
        -          "type": "string"
        -        },
        -        "date": {
        -          "description": "Date the filing was processed by the register.",
        -          "format": "date",
        -          "type": "string"
        -        },
        -        "description": {
        -          "description": "Human-readable description of the filing, rendered from the Companies House filing_history_descriptions enumeration with the register's own description_values merged in (e.g. \"Confirmation statement made on 2026-06-18 with no updates\"). Never invented: an unrecognised key is rendered as a readable form of the key itself and flagged by description_source. Registrar annotations are NOT merged into this text — read annotations[] as well to see everything the register shows for the filing.",
        -          "type": "string"
        -        },
        -        "description_key": {
        -          "description": "Raw register description key for the filing (e.g. capital-return-purchase-own-shares), stable for machine matching.",
        -          "type": "string"
        -        },
        -        "description_source": {
        -          "description": "\"enumeration\" when description_key matched the published Companies House enumeration; \"fallback\" when it did not and the key itself was made readable.",
        -          "enum": [
        -            "enumeration",
        -            "fallback"
        -          ],
        -          "type": "string"
        -        },
        -        "description_values": {
        -          "addresses": null,
        -          "capital figures). Passed through unmodified; null when the register supplies none.": null,
        -          "description": "Placeholder values supplied by the register for the description template (dates",
        -          "officer names": null,
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "has_document": {
        -          "description": "Derived; true when the register exposes document metadata for this filing, meaning a filed image exists on the Companies House document service. It is a statement about the register, not a promise from Eckari: this capability never returns the document itself and provides no download URL.",
        -          "type": "boolean"
        -        },
        -        "pages": {
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "paper_filed": {
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "subcategory": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "transaction_id": {
        -          "type": "string"
        -        },
        -        "type": {
        -          "AP01": null,
        -          "CS01": null,
        -          "TM01).": null,
        -          "description": "Register filing type code (e.g. AA",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "transaction_id",
        -        "date",
        -        "category",
        -        "type",
        -        "description",
        -        "description_key",
        -        "description_values",
        -        "description_source"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "offset": {
        -    "description": "The register index this page started at (the requested offset).",
        -    "type": "integer"
        -  },
        -  "total_count": {
        -    "description": "Total filings for this company after the category filter in category_filter — register-wide for that filter, not a count of the returned page. It is filter-dependent, so read it together with category_filter.",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "total_count",
        -  "category_filter",
        -  "offset",
        -  "filings"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_owners9 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum PSCs to return per page (1-100). Default 25. Eckari reads up to three register pages of 100 entries to fill this after the ceased filter is applied; if the limit is still unmet, has_more is true and next_offset says where to resume."New value: +"Maximum PSCs to return per page (1-100). Default 10. Eckari reads up to three register pages of 100 entries to fill this after the ceased filter is applied; if the limit is still unmet, page.has_more is true and page.next_offset says where to resume."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based index into the register's own PSC list (not into the filtered result). Pass back the next_offset from the previous response to page."New value: +"Zero-based index into the register's own PSC list (not into the filtered result). Pass back page.next_offset from the previous response to page."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.owners"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "active_count": {
        -    "description": "Register-wide count of PSC entries with no cessation date. Not a count of the returned page.",
        -    "type": "integer"
        -  },
        -  "active_statement_count": {
        -    "description": "Number of statements with no cessation date. Unaffected by include_ceased.",
        -    "type": "integer"
        -  },
        -  "ceased_count": {
        -    "description": "Register-wide count of ceased PSC entries. Not a count of the returned page.",
        -    "type": "integer"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "exemptions": {
        -    "description": "PSC exemptions recorded against the company. This is where the register records a listed company's exemption from the PSC regime (DTR5 / voting shares admitted to a regulated market) — it is a separate register collection from statements, and it is the reason a listed PLC discloses no PSC. Historic (closed) exemptions are returned too, flagged by is_current false.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "description": {
        -          "description": "Official exemption text from the Companies House exemption_descriptions enumeration. Falls back to the raw key when unknown; never invented.",
        -          "type": "string"
        -        },
        -        "exempt_from": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "exempt_to": {
        -          "description": "Date the exemption ended; null while it remains in force.",
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "exemption_type": {
        -          "description": "Companies House exemption key (e.g. psc-exempt-as-trading-on-uk-regulated-market, disclosure-transparency-rules-chapter-five-applies).",
        -          "type": "string"
        -        },
        -        "is_current": {
        -          "description": "Derived; true when the register records no end date for the exemption.",
        -          "type": "boolean"
        -        }
        -      },
        -      "required": [
        -        "exemption_type",
        -        "description",
        -        "exempt_from",
        -        "exempt_to",
        -        "is_current"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "has_more": {
        -    "description": "Derived; true when PSC entries matching the current filter remain beyond this page — either because more matches were read than limit allows, or because the register list was not exhausted within the three-page read budget. owners.length < limit is NOT a valid end-of-list test, and neither is comparing against total_results or active_count, which are register-wide.",
        -    "type": "boolean"
        -  },
        -  "next_offset": {
        -    "description": "Derived; the offset to pass to the next request to continue after the last PSC returned. Null when has_more is false.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "offset": {
        -    "description": "The register index this page started at (the requested offset).",
        -    "type": "integer"
        -  },
        -  "owners": {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "address": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "address_line_1": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "address_line_2": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "care_of": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "country": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "locality": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "po_box": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "postal_code": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "premises": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "region": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "ceased_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "country_of_residence": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date_of_birth": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "month": {
        -              "type": "integer"
        -            },
        -            "year": {
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "month",
        -            "year"
        -          ],
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "identification": {
        -          "additionalProperties": false,
        -          "description": "Corporate/legal-person identification where applicable.",
        -          "properties": {
        -            "country_registered": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "legal_authority": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "legal_form": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "place_registered": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "registration_number": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "is_active": {
        -          "description": "Derived; true when the register records no cessation date for this PSC entry. It describes the entry, not the company — a dissolved company can still carry a PSC entry with no cessation date, so check company.uk.status for the company's own state.",
        -          "type": "boolean"
        -        },
        -        "is_sanctioned": {
        -          "description": "Register-declared flag, passed through unchanged. Companies House only ever populates it for beneficial owners on the Register of Overseas Entities, where the filer declares whether the person is designated under UK sanctions legislation; it is null for every other PSC entry and null does NOT mean 'not sanctioned'. This is NOT a sanctions screening result: Eckari runs no screening, checks no list and infers nothing. Screen against an authoritative sanctions source before relying on it.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "kind": {
        -          "description": "PSC kind (e.g. individual-person-with-significant-control, corporate-entity-person-with-significant-control, legal-person-with-significant-control, super-secure-person-with-significant-control, or the *-beneficial-owner variants for registered overseas entities).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "PSC name as published. Null only for super-secure entries, where the register withholds the individual's particulars.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "nationality": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "natures_of_control": {
        -          "description": "Companies House natures_of_control codes exactly as published (e.g. ownership-of-shares-75-to-100-percent, voting-rights-25-to-50-percent, right-to-appoint-and-remove-directors, significant-influence-or-control). Stable keys for machine matching.",
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "natures_of_control_descriptions": {
        -          "description": "Official Companies House text for each natures_of_control code, from the register's published psc_descriptions enumeration, in the same order and of the same length as natures_of_control (e.g. \"The person holds, directly or indirectly, more than 75% of the shares in the company.\"). An unrecognised future code echoes back as itself; never invented.",
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "notified_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "kind",
        -        "is_active",
        -        "notified_on",
        -        "ceased_on",
        -        "natures_of_control",
        -        "natures_of_control_descriptions",
        -        "is_sanctioned"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "ownership_status": {
        -    "description": "Single derived answer to \"does this company disclose owners, and if not, why not?\". Precedence, highest first. (1) pscs_listed — at least one active PSC entry is listed (this also covers the Register of Overseas Entities statement all-beneficial-owners-identified, which is meaningful only alongside listed entries). (2) exempt_listed_company — a current PSC exemption, or an active statement whose key starts psc-exempt-. (3) no_psc_declared — an active statement no-individual-or-entity-with-signficant-control (or its -partnership form), or the Register of Overseas Entities statement no-beneficial-owner-identified: the entity positively declares it has no registrable person. (4) psc_not_identified — an active statement saying an owner exists but the register does not (yet) identify them: psc-exists-but-not-identified, psc-details-not-confirmed, steps-to-find-psc-not-yet-completed, psc-contacted-but-no-response, psc-has-failed-to-confirm-changed-details, restrictions-notice-issued-to-psc, awaiting-confirmation-from-psc, their -partnership forms, the Register of Overseas Entities keys at-least-one-beneficial-owner-unidentified and information-not-provided-for-at-least-one-beneficial-owner (and the combined form), and all-beneficial-owners-identified filed with no PSC entry on the register. (5) super_secure — an active super-secure statement, or an active PSC entry the register marks super-secure, where the individual's particulars are withheld. (6) no_information — the register holds no PSC entry, no active statement and no exemption at all. Any other active statement key, including one the register publishes in future, is reported as psc_not_identified, so no_information is never returned while the register is explaining itself. An empty owners list never on its own means the company has no owner. Paging caveat: for a company whose every active PSC entry is super-secure, a page that skips past those entries reports pscs_listed rather than super_secure — both are truthful (the entry is listed), and no page can turn a company with disclosed PSCs into super_secure.",
        -    "enum": [
        -      "pscs_listed",
        -      "exempt_listed_company",
        -      "no_psc_declared",
        -      "psc_not_identified",
        -      "super_secure",
        -      "no_information"
        -    ],
        -    "type": "string"
        -  },
        -  "statements": {
        -    "description": "PSC statements filed against the company — the register's own explanation of why a PSC entry is absent or incomplete (no registrable person, PSC not identified, restrictions notice, super-secure, and the Register of Overseas Entities beneficial-owner statements). Ceased statements are omitted unless include_ceased is true. This collection is fetched whole, not paged by limit/offset, so ownership_status does not drift between pages.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "ceased_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "description": {
        -          "description": "Official statement text from the Companies House psc_descriptions enumeration. Falls back to the raw key when the register publishes a key we do not yet carry; never invented.",
        -          "type": "string"
        -        },
        -        "linked_psc_name": {
        -          "description": "Name of the PSC the statement refers to",
        -          "type": [
        -            "string",
        -            "null"
        -          ],
        -          "where the register links one.": null
        -        },
        -        "notified_on": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "statement": {
        -          "description": "Companies House statement key (e.g. no-individual-or-entity-with-signficant-control, psc-exists-but-not-identified, restrictions-notice-issued-to-psc, no-beneficial-owner-identified).",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "statement",
        -        "description",
        -        "notified_on",
        -        "ceased_on",
        -        "linked_psc_name"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "total_results": {
        -    "description": "Register-wide count of PSC entries for this company. Not a count of the returned page.",
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "total_results",
        -  "active_count",
        -  "ceased_count",
        -  "offset",
        -  "owners",
        -  "has_more",
        -  "next_offset",
        -  "statements",
        -  "active_statement_count",
        -  "exemptions",
        -  "ownership_status"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_profile7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.profile"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "accounts": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "accounting_reference_date": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "day": {
        -            "type": [
        -              "integer",
        -              "null"
        -            ]
        -          },
        -          "month": {
        -            "type": [
        -              "integer",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      },
        -      "last_accounts": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "made_up_to": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "period_end_on": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "period_start_on": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "type": {
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      },
        -      "next_accounts": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "due_on": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "overdue": {
        -            "type": [
        -              "boolean",
        -              "null"
        -            ]
        -          },
        -          "period_end_on": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "period_start_on": {
        -            "format": "date",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "can_file": {
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "company_name": {
        -    "type": "string"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "confirmation_statement": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "last_made_up_to": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "next_due": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "next_made_up_to": {
        -        "format": "date",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "overdue": {
        -        "type": [
        -          "boolean",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "date_of_cessation": {
        -    "format": "date",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "date_of_creation": {
        -    "format": "date",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "jurisdiction": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "previous_company_names": {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "ceased_on": {
        -          "format": "date",
        -          "type": "string"
        -        },
        -        "effective_from": {
        -          "format": "date",
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "effective_from",
        -        "ceased_on"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "registered_office_address": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "address_line_1": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "address_line_2": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "care_of": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "country": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "locality": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "po_box": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_code": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "premises": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "region": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "registered_office_is_in_dispute": {
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "registered_office_single_line": {
        -    "description": "Derived; the registered office rendered on one line by the same deterministic renderer company.uk.registered_office uses, so the two capabilities always agree. Format: the non-empty parts joined with \", \" in the order premises + address_line_1 (themselves joined by a space), address_line_2, locality, region, postal_code, country. Empty string when the register holds no address. It is a normalised rendering and is not byte-comparable with the register's own address_snippet in company.uk.search, which places country before the postcode.",
        -    "type": "string"
        -  },
        -  "resources": {
        -    "additionalProperties": false,
        -    "description": "Which related registers exist for this company (derived from the register's resource links). Use it to decide which further capability is worth calling. This block is also the deliberate replacement for the register's three deprecated profile booleans: has_charges (→ resources.charges, and company.uk.charges for the detail), has_insolvency_history and has_been_liquidated (→ resources.insolvency). Companies House marks all three deprecated and directs consumers to the links these flags are derived from, so Eckari does not surface them (ADR-004); their absence is a decision, not an omission.",
        -    "properties": {
        -      "charges": {
        -        "description": "True when the register exposes a charges resource for this company — the live replacement for the register's deprecated has_charges flag. Read the charges themselves with company.uk.charges.",
        -        "type": "boolean"
        -      },
        -      "filing_history": {
        -        "type": "boolean"
        -      },
        -      "insolvency": {
        -        "description": "True when the register exposes an insolvency resource for this company — the live replacement for the register's deprecated has_insolvency_history and has_been_liquidated flags. Eckari does not yet publish the insolvency detail itself (ADR-004).",
        -        "type": "boolean"
        -      },
        -      "officers": {
        -        "type": "boolean"
        -      },
        -      "persons_with_significant_control": {
        -        "description": "True when the register exposes any ownership resource for this company — the PSC list, the PSC statements collection or the PSC exemptions collection. company.uk.owners answers all three, and an exempt listed company such as TESCO PLC has no PSC list but does have an exemption, so a flag derived from the PSC list alone would route an agent away from the answer.",
        -        "type": "boolean"
        -      },
        -      "persons_with_significant_control_exemptions": {
        -        "description": "True when the register exposes the PSC exemptions collection — where a listed company's exemption from the PSC regime is recorded.",
        -        "type": "boolean"
        -      },
        -      "persons_with_significant_control_statements": {
        -        "description": "True when the register exposes the PSC statements collection — the company's own filed explanation of why a PSC entry is absent.",
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "officers",
        -      "persons_with_significant_control",
        -      "persons_with_significant_control_statements",
        -      "persons_with_significant_control_exemptions",
        -      "filing_history",
        -      "charges",
        -      "insolvency"
        -    ],
        -    "type": "object"
        -  },
        -  "sic_codes": {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "status": {
        -    "description": "Companies House company_status.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "status_detail": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "subtype": {
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "type": {
        -    "description": "Companies House company type (e.g. ltd",
        -    "llp).": null,
        -    "plc": null,
        -    "type": "string"
        -  },
        -  "undeliverable_registered_office_address": {
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "company_name",
        -  "status",
        -  "type",
        -  "date_of_creation",
        -  "sic_codes",
        -  "registered_office_address",
        -  "registered_office_single_line",
        -  "previous_company_names",
        -  "resources"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_registered_office7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.registered_office"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "address": {
        -    "additionalProperties": false,
        -    "description": "The register's address components, passed through unchanged. Same component set as registered_office_address in company.uk.profile, so the two capabilities can be compared field by field.",
        -    "properties": {
        -      "address_line_1": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "address_line_2": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "care_of": {
        -        "description": "Register c/o line (an agent or occupier the post is addressed via). A routing instruction rather than part of the premises, so it is deliberately excluded from single_line — include it yourself when addressing correspondence.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "country": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "locality": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "po_box": {
        -        "description": "Register PO box. Like care_of, a routing instruction and deliberately excluded from single_line.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "postal_code": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "premises": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "region": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  "company_number": {
        -    "type": "string"
        -  },
        -  "single_line": {
        -    "description": "Derived by Eckari's single deterministic address renderer, which company.uk.profile also uses for registered_office_single_line, so the two capabilities always agree. Format: the non-empty parts joined with \", \" in the order premises + address_line_1 (themselves joined by a space), address_line_2, locality, region, postal_code, country. care_of and po_box are excluded by design — they are routing instructions, not the address of the premises — so read them from address when addressing correspondence. Empty string when the register holds no address. It is a normalised rendering for display and fuzzy matching, and is not byte-comparable with the register's own address_snippet in company.uk.search, which places country before the postcode.",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "address",
        -  "single_line"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_search9 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum results to return (1-50). Default 20."New value: +"Maximum results to return (1-50). Default 10."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based offset into the register's result set for paging. The result list is returned whole (nothing is filtered out after reading), so offset + items.length < total_results is the end-of-list test."New value: +"Zero-based offset into the register's result set for paging. Pass back page.next_offset from the previous response; page.has_more says whether there is one."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.search"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "items": {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "address": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "address_line_1": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "address_line_2": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "care_of": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "country": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "locality": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "po_box": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "postal_code": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "premises": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "region": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "address_snippet": {
        -          "description": "The register's own one-line address for the result, passed through verbatim. Its component order (country before postcode) differs from the single_line rendering in company.uk.registered_office and company.uk.profile, so the two are not byte-comparable.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "company_name": {
        -          "type": "string"
        -        },
        -        "company_number": {
        -          "type": "string"
        -        },
        -        "date_of_cessation": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "date_of_creation": {
        -          "format": "date",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "match_rank": {
        -          "description": "Derived; the 1-based position of this item in the register's own result ordering, continuing across pages (offset + index + 1). It records where the register placed the result and is NOT a relevance, confidence or similarity score — Eckari does not compute one. Rank 1 is not a guarantee of an exact name match.",
        -          "minimum": 1,
        -          "type": "integer"
        -        },
        -        "status": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "type": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "match_rank",
        -        "company_number",
        -        "company_name",
        -        "status",
        -        "type",
        -        "date_of_creation",
        -        "address_snippet"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "offset": {
        -    "type": "integer"
        -  },
        -  "query": {
        -    "type": "string"
        -  },
        -  "total_results": {
        -    "description": "Total matches reported by the register.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "query",
        -  "total_results",
        -  "offset",
        -  "items"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_uk_status7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / data / description
        Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.status"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "company_name": {
        -    "type": "string"
        -  },
        -  "company_number": {
        -    "description": "Normalised 8-character company number.",
        -    "type": "string"
        -  },
        -  "date_of_cessation": {
        -    "description": "Date the company was dissolved, converted/closed or removed, when applicable.",
        -    "format": "date",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "is_active": {
        -    "description": "Derived; true when status is one of active, open or registered — the three values the register uses for an entity that is still live on it (companies, UK establishments and overseas entities respectively). False for every other status, including dissolved, closed, removed, liquidation, administration and receivership. It is a liveness flag, not a good-standing flag: an active company with a proposal to strike off, an overdue filing or an insolvency process is still is_active true — read is_striking_off and status_detail alongside it.",
        -    "type": "boolean"
        -  },
        -  "is_striking_off": {
        -    "description": "Derived; true when status_detail is exactly active-proposal-to-strike-off, meaning the registrar has published a proposal to strike the company off the register. False when the register records no such detail.",
        -    "type": "boolean"
        -  },
        -  "source_status": {
        -    "description": "The exact upstream status string, as returned by the register. Always equal to status; retained for reconciliation against a raw register capture.",
        -    "type": "string"
        -  },
        -  "status": {
        -    "description": "Companies House company_status value (e.g. active, dissolved, liquidation, administration, receivership, voluntary-arrangement, insolvency-proceedings, converted-closed, registered, removed, closed, open). Companies use active/dissolved; UK establishments (BR…) and registered overseas entities (OE…) use open/closed and registered/removed.",
        -    "type": "string"
        -  },
        -  "status_detail": {
        -    "description": "Companies House company_status_detail where present (e.g. active-proposal-to-strike-off, transferred-from-uk, transformed-to-se, converted-to-plc).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "company_number",
        -  "company_name",
        -  "status",
        -  "is_active",
        -  "is_striking_off",
        -  "source_status"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_us_filings10 fields changed
      • changedInput schema / properties / limit / default
        Previous value: -25New value: +5
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of filings to return from the filtered set."New value: +"Maximum number of filings to return from the filtered set. Defaults to 5 so a first call stays small; raise it explicitly when you need more."
      • changedInput schema / properties / offset / description
        Previous value: -"Zero-based offset into the filtered set, for paging."New value: +"Zero-based offset into the filtered set, for paging. Pass page.next_offset from the previous response."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.filings"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "cik": {
        -    "description": "SEC Central Index Key, zero-padded to 10 digits.",
        -    "type": "string"
        -  },
        -  "filings": {
        -    "description": "Filings in EDGAR order, newest first. This is the company's EDGAR index, not a list of filings the company itself submitted: forms filed by third parties about the company (SCHEDULE 13G/13D by an institutional holder, Forms 3/4/5 by insiders, UPLOAD for SEC staff correspondence) appear here too, and EDGAR does not publish who submitted each one.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "accession_number": {
        -          "description": "EDGAR accession number in dashed form (e.g. 0000320193-25-000079).",
        -          "type": "string"
        -        },
        -        "act": {
        -          "description": "Securities act the filing is made under (33 or 34), or null when EDGAR states none.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "document_url": {
        -          "description": "Direct https://www.sec.gov link to the primary document, or null when EDGAR reports no primary document.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "file_number": {
        -          "description": "SEC file number, or null when EDGAR states none.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "filing_date": {
        -          "description": "Date the filing was accepted by EDGAR (YYYY-MM-DD).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "form": {
        -          "description": "EDGAR form type exactly as filed (e.g. 10-K, 10-Q, 8-K, DEF 14A, SCHEDULE 13G).",
        -          "type": "string"
        -        },
        -        "index_url": {
        -          "description": "Direct https://www.sec.gov link to the filing index page listing every document in the submission.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "is_inline_xbrl": {
        -          "description": "True when EDGAR flags the filing as inline XBRL.",
        -          "type": "boolean"
        -        },
        -        "is_xbrl": {
        -          "description": "True when EDGAR flags the filing as containing XBRL data.",
        -          "type": "boolean"
        -        },
        -        "items": {
        -          "description": "8-K item codes reported by the filing (e.g. 2.02, 9.01). Empty for forms that carry no item codes.",
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "primary_doc_description": {
        -          "description": "EDGAR's description of the primary document, or null when blank upstream.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "primary_document": {
        -          "description": "File name — or path relative to the filing's EDGAR Archives directory, which older submissions use — of the filing's primary document. document_url is the resolved link; prefer it over building one from this value.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_date": {
        -          "description": "Period or event date the filing reports on (YYYY-MM-DD), or null when the form has none.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "size_bytes": {
        -          "description": "Size of the filing package in bytes as reported by EDGAR, or null when absent.",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "accession_number",
        -        "form",
        -        "filing_date",
        -        "report_date",
        -        "act",
        -        "file_number",
        -        "items",
        -        "primary_document",
        -        "primary_doc_description",
        -        "is_xbrl",
        -        "is_inline_xbrl",
        -        "size_bytes",
        -        "document_url",
        -        "index_url"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "has_more": {
        -    "description": "Derived; true when filings matching the current form and since filters remain beyond this page within the recent window. filings.length < limit is NOT a valid end-of-page test on its own — compare offset + filings.length with total_count, or just read this field.",
        -    "type": "boolean"
        -  },
        -  "has_more_history": {
        -    "description": "True when EDGAR holds older filings outside the recent window that could still match this query. It is gated on the since filter: EDGAR declares the date range of each older page, so a since date newer than every older page means the recent window already holds every matching filing and this is false. Older pages are not traversed by this capability version; narrow the query with since or form instead.",
        -    "type": "boolean"
        -  },
        -  "name": {
        -    "description": "Current filer name on EDGAR.",
        -    "type": "string"
        -  },
        -  "next_offset": {
        -    "description": "Derived; the offset to pass to the next request to continue after the last filing returned. Null when has_more is false.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "offset": {
        -    "description": "The offset applied to this page.",
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "total_count": {
        -    "description": "Number of filings matching the form and since filters within EDGAR's recent filing window (see has_more_history), before limit and offset are applied.",
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "cik",
        -  "name",
        -  "total_count",
        -  "offset",
        -  "has_more",
        -  "next_offset",
        -  "has_more_history",
        -  "filings"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_us_filings_latest7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.filings.latest"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "cik": {
        -    "description": "SEC Central Index Key, zero-padded to 10 digits.",
        -    "type": "string"
        -  },
        -  "latest": {
        -    "description": "One entry per requested form that appears in EDGAR's recent window for this CIK, in the order the forms were requested. Forms with no filing in that window are omitted rather than returned empty. The window is the company's EDGAR index, so a requested ownership form (3, 4, 5, SCHEDULE 13G) returns the newest filing made about the company by a third party; EDGAR does not publish who submitted it.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "accession_number": {
        -          "description": "EDGAR accession number in dashed form (e.g. 0000320193-25-000079).",
        -          "type": "string"
        -        },
        -        "document_url": {
        -          "description": "Direct https://www.sec.gov link to the primary document, or null when EDGAR reports no primary document.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "filing_date": {
        -          "description": "Date the filing was accepted by EDGAR (YYYY-MM-DD).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "form": {
        -          "description": "EDGAR form type exactly as filed.",
        -          "type": "string"
        -        },
        -        "primary_document": {
        -          "description": "File name — or path relative to the filing's EDGAR Archives directory, which older submissions use — of the filing's primary document. document_url is the resolved link; prefer it over building one from this value.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "report_date": {
        -          "description": "Period or event date the filing reports on (YYYY-MM-DD), or null when the form has none.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "form",
        -        "accession_number",
        -        "filing_date",
        -        "report_date",
        -        "primary_document",
        -        "document_url"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "name": {
        -    "description": "Current filer name on EDGAR.",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "cik",
        -  "name",
        -  "latest"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_us_profile7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.profile"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "addresses": {
        -    "additionalProperties": false,
        -    "description": "Addresses on file with the SEC. Either may be null when EDGAR holds none.",
        -    "properties": {
        -      "business": {
        -        "additionalProperties": false,
        -        "description": "Business address of record.",
        -        "properties": {
        -          "city": {
        -            "description": "City or town.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "state_or_country": {
        -            "description": "State code for US addresses, or an EDGAR country code for foreign addresses.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "street1": {
        -            "description": "First address line.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "street2": {
        -            "description": "Second address line.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "zip": {
        -            "description": "Postal code as filed. Not validated against USPS.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "street1",
        -          "street2",
        -          "city",
        -          "state_or_country",
        -          "zip"
        -        ],
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      },
        -      "mailing": {
        -        "additionalProperties": false,
        -        "description": "Mailing address of record.",
        -        "properties": {
        -          "city": {
        -            "description": "City or town.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "state_or_country": {
        -            "description": "State code for US addresses, or an EDGAR country code for foreign addresses.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "street1": {
        -            "description": "First address line.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "street2": {
        -            "description": "Second address line.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "zip": {
        -            "description": "Postal code as filed. Not validated against USPS.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "street1",
        -          "street2",
        -          "city",
        -          "state_or_country",
        -          "zip"
        -        ],
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "business",
        -      "mailing"
        -    ],
        -    "type": "object"
        -  },
        -  "category": {
        -    "description": "SEC filer category (e.g. Large accelerated filer). May contain HTML line breaks exactly as EDGAR publishes them.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "cik": {
        -    "description": "SEC Central Index Key, zero-padded to 10 digits.",
        -    "type": "string"
        -  },
        -  "ein": {
        -    "description": "Employer Identification Number as filed with the SEC, digits only and unformatted. Some filers report a placeholder such as 000000000.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "entity_type": {
        -    "description": "EDGAR entity classification (e.g. operating), or null when EDGAR states none.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "exchanges": {
        -    "description": "Listing venues recorded by the SEC, one entry per entry in tickers and positionally aligned with it: exchanges[i] is the venue for tickers[i]. An entry is null when EDGAR records no venue for that security (live example: tickers [MAAI, MAA, MAA-PI] against exchanges [null, NYSE, NYSE]), so nulls are preserved rather than dropped. Empty when the filer has no listed security. EDGAR occasionally returns fewer exchange entries than tickers; treat a missing trailing entry as unknown.",
        -    "items": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  "fiscal_year_end": {
        -    "description": "Fiscal year end as MMDD (e.g. 0926 for 26 September), or null when EDGAR states none.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "former_names": {
        -    "description": "Previous EDGAR filer names in EDGAR's own order, which is not guaranteed to be chronological — sort by from/to yourself if you need an ordered history. Empty when the filer has never changed name on EDGAR.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "from": {
        -          "description": "ISO 8601 timestamp from which the former name applied, exactly as EDGAR publishes it.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "Former filer name.",
        -          "type": "string"
        -        },
        -        "to": {
        -          "description": "ISO 8601 timestamp until which the former name applied, exactly as EDGAR publishes it.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "from",
        -        "to"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "investor_website": {
        -    "description": "Investor relations website recorded by the SEC, or null. EDGAR leaves this blank for most filers.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "lei": {
        -    "description": "Legal Entity Identifier recorded by the SEC, or null when the filer has not reported one. Frequently null even for large filers; use entity.lei.search to look one up by name.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "name": {
        -    "description": "Current filer name on EDGAR.",
        -    "type": "string"
        -  },
        -  "phone": {
        -    "description": "Contact telephone number exactly as filed with the SEC; formatting is not normalised, so values such as (408) 996-1010, 408-996-1010 and 4089961010 all occur. No country code is implied and the number is not validated.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "sic_code": {
        -    "description": "Standard Industrial Classification code assigned by the SEC, or null when unassigned.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "sic_description": {
        -    "description": "SEC description of the SIC code (e.g. Electronic Computers).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "state_of_incorporation": {
        -    "description": "State or country of incorporation code as recorded by the SEC.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "state_of_incorporation_description": {
        -    "description": "EDGAR's stateOfIncorporationDescription field. Despite the name it is usually the same code as state_of_incorporation rather than a human-readable name (EDGAR returns \"CA\" for both on CIK 0000320193); expect a longer description only for the foreign-jurisdiction codes where EDGAR supplies one. Do not rely on it for display.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "tickers": {
        -    "description": "Trading symbols recorded by the SEC for this filer, in EDGAR order. Empty when the filer has no listed security.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "website": {
        -    "description": "Corporate website recorded by the SEC, or null. EDGAR leaves this blank for most filers.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "cik",
        -  "name",
        -  "entity_type",
        -  "tickers",
        -  "exchanges",
        -  "former_names",
        -  "addresses"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedcompany_us_resolve8 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of ranked matches to return. Ranking is applied before the limit; total_matches reports the full count."New value: +"Maximum number of ranked matches to return. Ranking is applied before the limit; page.total reports how many matched in full."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.us.resolve"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "items": {
        -    "description": "Matches ordered by match class, then registered name ascending, then CIK ascending, then ticker ascending. A company with several listed securities appears once per ticker.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "cik": {
        -          "description": "SEC Central Index Key, zero-padded to 10 digits — the identifier every other company.us.* capability takes.",
        -          "type": "string"
        -        },
        -        "exchange": {
        -          "description": "Listing venue recorded by the SEC (e.g. Nasdaq, NYSE, OTC), or null when the SEC index does not state one.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "Company name as recorded by the SEC. This is the EDGAR filer name, which may differ from the trading name.",
        -          "type": "string"
        -        },
        -        "ticker": {
        -          "description": "Trading symbol as published in the SEC company index, or null when the row carries no symbol.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "cik",
        -        "ticker",
        -        "name",
        -        "exchange"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "match_type": {
        -    "description": "Strongest match class present in the result set, or null when nothing matched. ticker_exact beats name_exact beats name_prefix beats name_contains.",
        -    "enum": [
        -      "ticker_exact",
        -      "name_exact",
        -      "name_prefix",
        -      "name_contains",
        -      null
        -    ],
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "query": {
        -    "description": "The trimmed query as interpreted by the resolver.",
        -    "type": "string"
        -  },
        -  "total_matches": {
        -    "description": "Number of index rows matching the query before the limit is applied. Only SEC filers with a listed security appear in this index (company_tickers_exchange.json, about 10,400 rows); zero results do not mean the company is not an SEC filer.",
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "query",
        -  "match_type",
        -  "total_matches",
        -  "items"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changeddomain_expiry7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/domain.expiry"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "days_until_expiry": {
        -    "description": "Whole days from now to expires_at, floored; negative when already past expiry.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "domain": {
        -    "description": "ASCII (punycode) domain name as recorded by the registry.",
        -    "type": "string"
        -  },
        -  "expires_at": {
        -    "description": "Registry expiry date (RDAP expiration event); null when the registry does not publish one.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "registered": {
        -    "description": "True when the registry returned a record; false when the registry has no record.",
        -    "type": "boolean"
        -  },
        -  "registrar_name": {
        -    "description": "Registrar name from the RDAP registrar entity.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "status": {
        -    "description": "RFC 9083 status values (the RDAP spelling of EPP status codes), lower-cased and sorted.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "terms_url": {
        -    "description": "Link to the first notice the registry published with this response - normally its terms of service. Those terms govern your use of this data. Null when the registry published no notice link. domain.registration returns the full notices list.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "domain",
        -  "registered",
        -  "expires_at",
        -  "days_until_expiry",
        -  "status",
        -  "registrar_name",
        -  "terms_url"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changeddomain_registration7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/domain.registration"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "auto_renew_flag": {
        -    "description": "True only when the registry publishes the auto renew period status. RDAP does not otherwise expose auto-renew, so null means unknown rather than off.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "availability_note": {
        -    "description": "Set only when the registry has no record; explains that this is strong evidence of availability but not an authoritative EPP check.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "bootstrap_suffix": {
        -    "description": "Suffix that matched in the IANA RDAP bootstrap (RFC 9224 longest-suffix rule) and so selected rdap_server. Usually the same as tld, but it can be longer where IANA publishes a multi-label entry.",
        -    "type": "string"
        -  },
        -  "days_until_expiry": {
        -    "description": "Whole days from now to expires_at, floored; negative when already past expiry.",
        -    "type": [
        -      "integer",
        -      "null"
        -    ]
        -  },
        -  "dnssec_signed": {
        -    "description": "Registry DNSSEC delegation flag (secureDNS.delegationSigned); null when the registry omits it.",
        -    "type": [
        -      "boolean",
        -      "null"
        -    ]
        -  },
        -  "domain": {
        -    "description": "ASCII (punycode) domain name as recorded by the registry.",
        -    "type": "string"
        -  },
        -  "events": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "expires_at": {
        -        "description": "Registry expiry date (RDAP expiration event).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "registered_at": {
        -        "description": "Registry creation date (RDAP registration event).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "transferred_at": {
        -        "description": "Last transfer date when the registry publishes one.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "updated_at": {
        -        "description": "Last change to the registry record (RDAP last changed event).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "registered_at",
        -      "updated_at",
        -      "expires_at",
        -      "transferred_at"
        -    ],
        -    "type": "object"
        -  },
        -  "nameservers": {
        -    "description": "Delegated nameserver hostnames from the registry, lower-cased, de-duplicated and sorted.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "notices": {
        -    "description": "Notices published by the registry with the response, including its terms of service. Those terms govern your use of the data.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "title": {
        -          "description": "Notice title such as Terms of Service.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "url": {
        -          "description": "First link published with the notice.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "title",
        -        "url"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "rdap_last_update": {
        -    "description": "Registry's own last update of RDAP database timestamp - the true freshness of this record.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "rdap_server": {
        -    "description": "Authoritative registry RDAP base URL that answered, resolved from the IANA bootstrap.",
        -    "type": "string"
        -  },
        -  "registered": {
        -    "description": "True when the registry returned a record. False means the registry has no record (RDAP 404).",
        -    "type": "boolean"
        -  },
        -  "registrar": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "abuse_email": {
        -        "description": "Registrar abuse contact email when published; frequently redacted.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "iana_id": {
        -        "description": "IANA registrar id where the registry publishes one (gTLDs); null for registries that use their own identifiers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "Registrar name from the RDAP registrar entity.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "url": {
        -        "description": "Registrar URL when published.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "name",
        -      "iana_id",
        -      "url",
        -      "abuse_email"
        -    ],
        -    "type": "object"
        -  },
        -  "status": {
        -    "description": "RFC 9083 status values - the RDAP spelling of EPP status codes such as \"client transfer prohibited\" - lower-cased, de-duplicated and sorted.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "tld": {
        -    "description": "Last label of the domain name - uk for bbc.co.uk, com for example.com. This is the label itself, not necessarily the suffix the IANA bootstrap matched - read bootstrap_suffix for the entry that actually routed the query.",
        -    "type": "string"
        -  },
        -  "unicode_name": {
        -    "description": "Unicode form of the name when the registry publishes one.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "domain",
        -  "tld",
        -  "bootstrap_suffix",
        -  "registered",
        -  "status",
        -  "registrar",
        -  "events",
        -  "nameservers",
        -  "rdap_server",
        -  "notices"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedentity_lei_profile8 fields changed
      • changedInput schema / properties / lei / description
        Previous value: -"20-character ISO 17442 Legal Entity Identifier. Case-insensitive. The ISO 7064 MOD 97-10 checksum is validated locally, so a malformed LEI is rejected without an upstream call."New value: +"20-character ISO 17442 Legal Entity Identifier (18 alphanumerics + 2 check digits). Case-insensitive. The structure is checked before payment, so a wrong-shaped LEI is rejected on the 402 (details.input_validation). The ISO 7064 MOD 97-10 checksum cannot be expressed as a schema pattern and is verified at execution: it fails with INVALID_INPUT before any upstream call and before settlement, so a bad checksum is never charged for."
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/entity.lei.profile"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "bic": {
        -    "description": "Business Identifier Codes (ISO 9362) mapped to this LEI by GLEIF. Empty when none are mapped.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "category": {
        -    "description": "GLEIF entity category (e.g. GENERAL, BRANCH, FUND, SOLE_PROPRIETOR, INTERNATIONAL_ORGANIZATION).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "conformity_flag": {
        -    "description": "GLEIF data-quality conformity flag (e.g. CONFORMING, NON_CONFORMING, NOT_APPLICABLE).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "creation_date": {
        -    "description": "ISO 8601 timestamp of entity creation as reported to GLEIF, or null.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "entity_status": {
        -    "description": "Legal entity status recorded by GLEIF (e.g. ACTIVE, INACTIVE, NULL).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "expiration": {
        -    "additionalProperties": false,
        -    "description": "Entity expiry as reported to GLEIF; null when the entity has not expired.",
        -    "properties": {
        -      "date": {
        -        "description": "ISO 8601 expiry timestamp.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "reason": {
        -        "description": "GLEIF expiry reason (e.g. DISSOLVED, CORPORATE_ACTION, VOLUNTARY).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "date",
        -      "reason"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "golden_copy_date": {
        -    "description": "Publish timestamp of the GLEIF golden copy this record was served from, exactly as GLEIF reports it. GLEIF republishes the golden copy three times a day (observed publish timestamps 00:00, 08:00 and 16:00 UTC), so a record can be up to about eight hours behind the LOU's latest update. Present means the answer is near_live rather than live; null when GLEIF states no publish date.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "headquarters_address": {
        -    "additionalProperties": false,
        -    "description": "Headquarters address as held by GLEIF; often differs from the legal address (which may be a registered agent).",
        -    "properties": {
        -      "city": {
        -        "description": "City or town.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "country": {
        -        "description": "ISO 3166-1 alpha-2 country code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lines": {
        -        "description": "Street address lines in GLEIF order.",
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "postal_code": {
        -        "description": "Postal code as held by GLEIF.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "region": {
        -        "description": "ISO 3166-2 subdivision code, or null.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "lines",
        -      "city",
        -      "region",
        -      "country",
        -      "postal_code"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "jurisdiction": {
        -    "description": "Legal jurisdiction as an ISO 3166 country or subdivision code (e.g. GB, US-CA).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "legal_address": {
        -    "additionalProperties": false,
        -    "description": "Registered legal address as held by GLEIF.",
        -    "properties": {
        -      "city": {
        -        "description": "City or town.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "country": {
        -        "description": "ISO 3166-1 alpha-2 country code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "lines": {
        -        "description": "Street address lines in GLEIF order.",
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "postal_code": {
        -        "description": "Postal code as held by GLEIF.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "region": {
        -        "description": "ISO 3166-2 subdivision code, or null.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "lines",
        -      "city",
        -      "region",
        -      "country",
        -      "postal_code"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "legal_form": {
        -    "additionalProperties": false,
        -    "description": "Entity legal form from the ISO 20275 Entity Legal Forms code list.",
        -    "properties": {
        -      "code": {
        -        "description": "ISO 20275 ELF code (e.g. H1UM), or null.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "other": {
        -        "description": "Free-text legal form when no ELF code applies.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "other"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "legal_name": {
        -    "description": "Registered legal name as held by GLEIF, or null when the record carries no legal name. Never falls back to the LEI itself — an identifier is not a name.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "legal_name_language": {
        -    "description": "ISO language code of the legal name, or null.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "lei": {
        -    "description": "20-character ISO 17442 Legal Entity Identifier, upper-cased.",
        -    "type": "string"
        -  },
        -  "other_names": {
        -    "description": "Other or previous names GLEIF holds for the entity, in GLEIF order.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "language": {
        -          "description": "ISO language code of the name, or null.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "The alternative or previous name.",
        -          "type": "string"
        -        },
        -        "type": {
        -          "description": "GLEIF name type (e.g. PREVIOUS_LEGAL_NAME, TRADING_OR_OPERATING_NAME).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "name",
        -        "type",
        -        "language"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "registered_as": {
        -    "description": "The entity's identifier in that local registry. When ra_code is RA000585 this is a UK company number usable with company.uk.profile and company.uk.status.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "registered_at": {
        -    "additionalProperties": false,
        -    "description": "Business registry the entity is registered at, as an ISO 17442 Registration Authority code.",
        -    "properties": {
        -      "other": {
        -        "description": "Free-text authority name when the entity's registry has no RA code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "ra_code": {
        -        "description": "Registration Authority code (e.g. RA000585 is UK Companies House). RA999999 means no listed authority.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "ra_code",
        -      "other"
        -    ],
        -    "type": "object"
        -  },
        -  "registration": {
        -    "additionalProperties": false,
        -    "description": "State of the LEI registration itself, as distinct from the entity's own status.",
        -    "properties": {
        -      "corroboration_level": {
        -        "description": "GLEIF validation level (e.g. FULLY_CORROBORATED, PARTIALLY_CORROBORATED, ENTITY_SUPPLIED_ONLY).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "initial_date": {
        -        "description": "ISO 8601 timestamp the LEI was first issued.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "last_update": {
        -        "description": "ISO 8601 timestamp the record was last updated.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "managing_lou": {
        -        "description": "LEI of the Local Operating Unit maintaining this record.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "next_renewal": {
        -        "description": "ISO 8601 timestamp the registration is next due for renewal.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "status": {
        -        "description": "LEI registration status (e.g. ISSUED, LAPSED, RETIRED, ANNULLED, MERGED, DUPLICATE).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "validated_as": {
        -        "description": "The identifier used at the validating registry.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "validated_at": {
        -        "additionalProperties": false,
        -        "description": "Registry against which the LOU validated the record.",
        -        "properties": {
        -          "other": {
        -            "description": "Free-text authority name when no RA code applies.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "ra_code": {
        -            "description": "Registration Authority code used for validation.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "ra_code",
        -          "other"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "status",
        -      "initial_date",
        -      "last_update",
        -      "next_renewal",
        -      "managing_lou",
        -      "corroboration_level",
        -      "validated_at",
        -      "validated_as"
        -    ],
        -    "type": "object"
        -  },
        -  "related": {
        -    "additionalProperties": false,
        -    "description": "What relationship data GLEIF holds for this entity. False means the relationship is not reported (often with a documented reporting exception), which is a valid registry answer, not an error.",
        -    "properties": {
        -      "children_available": {
        -        "description": "True when GLEIF publishes direct child relationships for this entity.",
        -        "type": "boolean"
        -      },
        -      "direct_parent_available": {
        -        "description": "True when GLEIF publishes a direct accounting-consolidation parent record for this entity.",
        -        "type": "boolean"
        -      },
        -      "ultimate_parent_available": {
        -        "description": "True when GLEIF publishes an ultimate accounting-consolidation parent record for this entity.",
        -        "type": "boolean"
        -      }
        -    },
        -    "required": [
        -      "direct_parent_available",
        -      "ultimate_parent_available",
        -      "children_available"
        -    ],
        -    "type": "object"
        -  },
        -  "sub_category": {
        -    "description": "GLEIF entity sub-category, or null.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "lei",
        -  "legal_name",
        -  "legal_name_language",
        -  "other_names",
        -  "legal_address",
        -  "headquarters_address",
        -  "jurisdiction",
        -  "legal_form",
        -  "category",
        -  "sub_category",
        -  "entity_status",
        -  "creation_date",
        -  "expiration",
        -  "registered_at",
        -  "registered_as",
        -  "registration",
        -  "bic",
        -  "conformity_flag",
        -  "golden_copy_date",
        -  "related"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedentity_lei_search7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/entity.lei.search"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "country": {
        -    "description": "Upper-cased ISO 3166-1 alpha-2 filter applied, or null when no country filter was supplied.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "items": {
        -    "description": "Entities in GLEIF's own order. Records matched by the authoritative name filter come first, then records added from GLEIF's fuzzy name completion, de-duplicated by LEI. Eckari applies no scoring of its own.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "entity_status": {
        -          "description": "Legal entity status recorded by GLEIF (e.g. ACTIVE, INACTIVE, NULL).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "jurisdiction": {
        -          "description": "Legal jurisdiction as an ISO 3166 country or subdivision code (e.g. GB, US-CA).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "legal_address": {
        -          "additionalProperties": false,
        -          "description": "Registered legal address as held by GLEIF.",
        -          "properties": {
        -            "city": {
        -              "description": "City or town.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "country": {
        -              "description": "ISO 3166-1 alpha-2 country code.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "lines": {
        -              "description": "Street address lines in GLEIF order.",
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "postal_code": {
        -              "description": "Postal code as held by GLEIF.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "region": {
        -              "description": "ISO 3166-2 subdivision code, or null.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "required": [
        -            "lines",
        -            "city",
        -            "region",
        -            "country",
        -            "postal_code"
        -          ],
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "legal_name": {
        -          "description": "Registered legal name as held by GLEIF, or null when the record carries no legal name. Never falls back to the LEI itself — an identifier is not a name.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "legal_name_language": {
        -          "description": "ISO language code of the legal name, or null when GLEIF states none.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "lei": {
        -          "description": "20-character ISO 17442 Legal Entity Identifier.",
        -          "type": "string"
        -        },
        -        "match_source": {
        -          "description": "How GLEIF surfaced this record — filter means the authoritative legal-name filter, fuzzy means GLEIF's name-completion service.",
        -          "enum": [
        -            "filter",
        -            "fuzzy"
        -          ],
        -          "type": "string"
        -        },
        -        "registered_as": {
        -          "description": "The entity's identifier in that local registry. When ra_code is RA000585 this is a UK company number usable with company.uk.profile and company.uk.status.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "registered_at": {
        -          "additionalProperties": false,
        -          "description": "Business registry the entity is registered at, as an ISO 17442 Registration Authority code.",
        -          "properties": {
        -            "other": {
        -              "description": "Free-text authority name when the entity's registry has no RA code.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "ra_code": {
        -              "description": "Registration Authority code (e.g. RA000585 is UK Companies House, RA000598 is the California Secretary of State). RA999999 means no listed authority.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "required": [
        -            "ra_code",
        -            "other"
        -          ],
        -          "type": "object"
        -        },
        -        "status": {
        -          "description": "LEI registration status (e.g. ISSUED, LAPSED, RETIRED, ANNULLED, MERGED). ISSUED means the registration is current.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "lei",
        -        "legal_name",
        -        "legal_name_language",
        -        "status",
        -        "entity_status",
        -        "jurisdiction",
        -        "legal_address",
        -        "registered_at",
        -        "registered_as",
        -        "match_source"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "query": {
        -    "description": "The trimmed query as sent to GLEIF.",
        -    "type": "string"
        -  },
        -  "total_results": {
        -    "description": "Total entities GLEIF reports for its authoritative legal-name filter, independent of the page size. GLEIF publishes no total for the fuzzy name-completion fill-ins, so they are not counted; the only adjustment is a floor at the number of items actually returned, so total_results is never smaller than items.length. It is not a pageable total — this capability returns one page and has no offset.",
        -    "minimum": 0,
        -    "type": "integer"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "query",
        -  "country",
        -  "total_results",
        -  "items"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedfx_reference_rate7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/fx.reference_rate"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "attribution": {
        -    "description": "Required attribution text - always the exact string \"Source: European Central Bank\".",
        -    "type": "string"
        -  },
        -  "base": {
        -    "description": "Base currency (ISO 4217, upper case).",
        -    "type": "string"
        -  },
        -  "disclaimer": {
        -    "description": "Plain-language statement of what this rate is and is not, including that it must not be relied on for settlement or dealing and that the same content is available free of charge from the ECB website. When the rate is inverted or crossed it also states that Eckari computed it from the ECB fix - the ECB requires its information to be reproduced accurately and any modification to be stated.",
        -    "type": "string"
        -  },
        -  "is_derived_cross": {
        -    "description": "True when neither side is EUR, so the rate is a cross computed by Eckari from two euro reference rates of the same fix. False for a plain inverted pair such as USD to EUR - read is_inverted for that case.",
        -    "type": "boolean"
        -  },
        -  "is_inverted": {
        -    "description": "True whenever base is not EUR. The ECB publishes units of currency per 1 EUR only, so the published quotation for the base currency is inverted (divided into) to produce this rate - the value is computed by Eckari, not published by the ECB. False only when base is EUR.",
        -    "type": "boolean"
        -  },
        -  "note": {
        -    "description": "Set when the fix returned is not the one asked for - either the requested date had no fix and the latest prior fix was returned, or no fix has been published for today (UTC) yet and the latest published fix was returned.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "published_pair": {
        -    "description": "The single ECB-published quotation this rate comes from, always in the form EUR/XXX - for EUR to USD the rate is that quotation, and for USD to EUR it is its reciprocal. Null when no single published quotation gives the rate - a cross (rate_derivation cross) or the EUR to EUR identity; see published_pairs_used for every quotation involved.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "published_pairs_used": {
        -    "description": "Every ECB quotation used to produce the rate, in the form EUR/XXX - two for a cross, one for published or inverse, none for the identity.",
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  "quote": {
        -    "description": "Quote currency (ISO 4217, upper case).",
        -    "type": "string"
        -  },
        -  "rate": {
        -    "description": "Units of quote currency per 1 unit of base currency, as a decimal string with 6 decimal places. Computed with exact integer arithmetic from the ECB fix (rate = published(quote) / published(base), with EUR = 1) and rounded half-even - never floating point. When is_inverted or is_derived_cross is true this is a computed value, not a figure published by the ECB, and rounding means it need not round-trip exactly against the published fix.",
        -    "pattern": "^[0-9]+\\.[0-9]{6}$",
        -    "type": "string"
        -  },
        -  "rate_date": {
        -    "description": "TARGET working day of the ECB fix used (the Cube time value), which may be earlier than a requested date or than today when no fix has been published yet - see note.",
        -    "type": "string"
        -  },
        -  "rate_derivation": {
        -    "description": "How the rate relates to what the ECB publishes. published = the ECB EUR/quote fix itself (base EUR); inverse = 1 divided by the EUR/base fix (quote EUR), an Eckari computation; cross = the EUR/quote fix divided by the EUR/base fix, an Eckari computation from two published quotations of the same fix (neither side EUR); identity = EUR to EUR (1). Only published values are ECB figures.",
        -    "enum": [
        -      "published",
        -      "inverse",
        -      "cross",
        -      "identity"
        -    ],
        -    "type": "string"
        -  },
        -  "rate_kind": {
        -    "description": "Always the string reference - an official daily reference rate, not a tradable or executable market rate.",
        -    "type": "string"
        -  },
        -  "source": {
        -    "description": "Always the string ecb.",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "base",
        -  "quote",
        -  "rate",
        -  "rate_date",
        -  "source",
        -  "rate_kind",
        -  "is_inverted",
        -  "is_derived_cross",
        -  "rate_derivation",
        -  "published_pair",
        -  "published_pairs_used",
        -  "attribution",
        -  "disclaimer"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedlocation_us_geocode9 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of candidate matches to return, in the Census Bureau's own order. When the Census Bureau returns more than this, the extra candidates are omitted and has_more is true; total_candidates always reports how many it returned."New value: +"Maximum number of candidate matches to return, in the Census Bureau's own order. page.total always reports how many the Census Bureau returned in total, so a low limit never hides an ambiguous address."
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based index of the first candidate to return. The Census Bureau returns every match in one response, so paging is applied by Eckari over that set - pass page.next_offset to walk the remaining candidates without a second upstream lookup.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/location.us.geocode"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "attribution": {
        -    "description": "Non-endorsement notice reproduced verbatim from the Census Bureau developer API terms of service (the published Census wording; the Geocoding Services API publishes no citation sentence of its own and the Census geocoding-services page points to these terms): \"This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.\" Display it wherever this result is shown or redistributed.",
        -    "type": "string"
        -  },
        -  "benchmark": {
        -    "description": "Census Bureau address-range benchmark used for the match (Public_AR_Current).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "candidates": {
        -    "description": "Candidate matches in the Census Bureau's own order (best first), truncated to limit. Eckari applies no re-ranking.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "address_components": {
        -          "additionalProperties": false,
        -          "description": "Parsed components of the matched address. Empty upstream values are returned as null.",
        -          "properties": {
        -            "city": {
        -              "description": "City or place name as standardised by the Census Bureau.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "from_address": {
        -              "description": "Lowest house number of the matched TIGER address range.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "pre_direction": {
        -              "description": "Directional appearing before the street name (e.g. N, SW).",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "pre_type": {
        -              "description": "Street type appearing before the name (e.g. AVENUE in \"Avenue of the Americas\").",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "state": {
        -              "description": "Two-letter US state or territory code.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "street_name": {
        -              "description": "Street name without type or directional parts.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "suffix_direction": {
        -              "description": "Directional appearing after the street name (e.g. NW).",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "suffix_type": {
        -              "description": "Street type appearing after the name (e.g. AVE, ST, BLVD).",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "to_address": {
        -              "description": "Highest house number of the matched TIGER address range.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "zip": {
        -              "description": "Five-digit ZIP code recorded on the TIGER address range. This is Census reference data, not a USPS deliverability check.",
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "required": [
        -            "from_address",
        -            "to_address",
        -            "street_name",
        -            "pre_type",
        -            "pre_direction",
        -            "suffix_type",
        -            "suffix_direction",
        -            "city",
        -            "state",
        -            "zip"
        -          ],
        -          "type": "object"
        -        },
        -        "lat": {
        -          "description": "Latitude in decimal degrees (WGS 84), interpolated along the TIGER/Line street segment.",
        -          "maximum": 90,
        -          "minimum": -90,
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "lon": {
        -          "description": "Longitude in decimal degrees (WGS 84), interpolated along the TIGER/Line street segment.",
        -          "maximum": 180,
        -          "minimum": -180,
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "matched_address": {
        -          "description": "Standardised address as returned by the Census Bureau, upper-cased.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "precision": {
        -          "const": "tiger_interpolated",
        -          "description": "Always tiger_interpolated: the coordinate is interpolated from the address range of a TIGER/Line street segment, not a rooftop, parcel centroid or surveyed point. Typical error is the length of a house-number range along one block.",
        -          "type": "string"
        -        },
        -        "side": {
        -          "description": "Side of the street segment the address falls on (L or R), as recorded in TIGER/Line.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "tiger_line_id": {
        -          "description": "Identifier of the TIGER/Line street segment the match was interpolated along.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "matched_address",
        -        "lat",
        -        "lon",
        -        "precision",
        -        "tiger_line_id",
        -        "side",
        -        "address_components"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "has_more": {
        -    "description": "True when total_candidates exceeds the number of candidates returned, so matches were omitted. Raise limit (up to 10) to see them.",
        -    "type": "boolean"
        -  },
        -  "matched": {
        -    "description": "True when the Census Bureau returned at least one candidate. False with an empty candidates array is a valid answer for an unrecognised or non-US address.",
        -    "type": "boolean"
        -  },
        -  "query": {
        -    "description": "The trimmed address as sent to the Census Bureau.",
        -    "type": "string"
        -  },
        -  "total_candidates": {
        -    "description": "Number of candidates the Census Bureau returned for this address, before limit was applied. A value above 1 means the address is ambiguous in TIGER/Line - typically the same house number on the same street in several ZIP codes - even when only one candidate is shown.",
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "vintage": {
        -    "description": "Geography vintage echoed by the Census Bureau. The address-location endpoint does not return one, so this is null for this capability; see location.us.geographies.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "query",
        -  "matched",
        -  "candidates",
        -  "total_candidates",
        -  "has_more",
        -  "benchmark",
        -  "vintage",
        -  "attribution"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedlocation_us_geographies7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/location.us.geographies"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "attribution": {
        -    "description": "Non-endorsement notice reproduced verbatim from the Census Bureau developer API terms of service (the published Census wording; the Geocoding Services API publishes no citation sentence of its own and the Census geocoding-services page points to these terms): \"This product uses the Census Bureau Data API but is not endorsed or certified by the Census Bureau.\" Display it wherever this result is shown or redistributed.",
        -    "type": "string"
        -  },
        -  "benchmark": {
        -    "description": "Census Bureau address-range benchmark used for the lookup (Public_AR_Current).",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "block": {
        -    "additionalProperties": false,
        -    "description": "Census block containing the point (decennial census block layer), or null.",
        -    "properties": {
        -      "geoid": {
        -        "description": "15-character census block GEOID.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "block_group": {
        -    "additionalProperties": false,
        -    "description": "Census block group containing the point, or null.",
        -    "properties": {
        -      "geoid": {
        -        "description": "12-character block group GEOID.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "census_geographies_vintage": {
        -    "description": "Census geography vintage used for the lookup (Current_Current), echoed by the Census Bureau.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "congressional_district": {
        -    "additionalProperties": false,
        -    "description": "Congressional district for the current session containing the point, or null.",
        -    "properties": {
        -      "geoid": {
        -        "description": "Four-character congressional district GEOID (state FIPS + district number).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "District name as published by the Census Bureau.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid",
        -      "name"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "county": {
        -    "additionalProperties": false,
        -    "description": "County or county equivalent containing the point; null when the Census Bureau returns no county layer.",
        -    "properties": {
        -      "fips": {
        -        "description": "Five-digit county FIPS code (state FIPS + county code).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "County or county-equivalent name.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "fips",
        -      "name"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "lat": {
        -    "description": "The latitude that was looked up, echoed back.",
        -    "type": "number"
        -  },
        -  "lon": {
        -    "description": "The longitude that was looked up, echoed back.",
        -    "type": "number"
        -  },
        -  "place": {
        -    "additionalProperties": false,
        -    "description": "Incorporated place containing the point, or null when the point is unincorporated.",
        -    "properties": {
        -      "geoid": {
        -        "description": "Seven-character place GEOID (state FIPS + place code).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "Place name as published (e.g. Washington city).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid",
        -      "name"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "state": {
        -    "additionalProperties": false,
        -    "description": "US state, district or territory containing the point.",
        -    "properties": {
        -      "fips": {
        -        "description": "Two-digit state FIPS code (e.g. 11 for the District of Columbia).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "State, district or territory name.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "usps": {
        -        "description": "Two-letter USPS state abbreviation as published by the Census Bureau.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "fips",
        -      "name",
        -      "usps"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "tract": {
        -    "additionalProperties": false,
        -    "description": "Census tract containing the point; null when the Census Bureau returns no tract layer.",
        -    "properties": {
        -      "geoid": {
        -        "description": "11-character census tract GEOID (state + county + tract).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "description": "Census tract name as published (e.g. Census Tract 9800).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid",
        -      "name"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  },
        -  "zcta": {
        -    "additionalProperties": false,
        -    "description": "ZIP Code Tabulation Area containing the point, or null. A ZCTA is a Census statistical approximation of a ZIP code built from census blocks — it is NOT a USPS delivery ZIP code. ZCTAs and ZIPs are not one-to-one: some ZIPs have no ZCTA, boundaries do not match carrier routes, and PO-Box-only ZIPs have no area. Never present a ZCTA as USPS-validated.",
        -    "properties": {
        -      "geoid": {
        -        "description": "Five-digit ZCTA code (ZCTA5).",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "geoid"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "lat",
        -  "lon",
        -  "state",
        -  "county",
        -  "tract",
        -  "block_group",
        -  "block",
        -  "place",
        -  "congressional_district",
        -  "zcta",
        -  "census_geographies_vintage",
        -  "benchmark",
        -  "attribution"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedparcel_detect_carrier7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/parcel.detect_carrier"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "candidates": {
        -    "description": "Candidate carriers, highest confidence first, ties broken by carrier_id ascending. Confidence comes from a fixed score table - carrier-unique prefix plus length plus valid check digit 0.98, prefix plus length 0.85, UPU S10 with a valid check digit 0.90, length plus valid check digit 0.80, S10 structure with an invalid check digit 0.45, plus 0.02 when a country hint matches. It is a rule-based heuristic, NOT a calibrated probability. Read 0.80 (length plus check digit, no distinguishing prefix) with care - such a format has no carrier-unique marker, and any number of the right length passes a single decimal check digit about 1 time in 10 by chance (about 1 in 36 for the alphanumeric mod 37,36 check), so a wrong carrier can score 0.80. A carrier-unique prefix is what makes 0.85 and 0.98 distinctive.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "carrier_id": {
        -          "description": "Stable Eckari carrier identifier such as ups or usps.",
        -          "type": "string"
        -        },
        -        "carrier_name": {
        -          "description": "Human-readable carrier name.",
        -          "type": "string"
        -        },
        -        "confidence": {
        -          "description": "Deterministic signature MATCH SCORE from the fixed table (0-1, two decimals). It is not a probability and must not be read as one; identical to match_score and kept under this name for compatibility. Use match_strength to know whether the match is distinctive.",
        -          "maximum": 1,
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "confidence_basis": {
        -          "description": "Always rule_based_uncalibrated - the score expresses how distinctive the matched format is, not an empirical probability.",
        -          "type": "string"
        -        },
        -        "format_id": {
        -          "description": "Identifier of the matched format within the signature set.",
        -          "type": "string"
        -        },
        -        "match_score": {
        -          "description": "Same value as confidence under its truthful name - a fixed-table match score.",
        -          "maximum": 1,
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "match_strength": {
        -          "description": "distinctive = carrier-unique marker (prefix or UPU S10 operator) plus length plus a valid check digit; strong = carrier-unique marker plus length, check digit not verifiable; weak = length plus check digit only with no carrier-unique marker (a number of the right length passes a single decimal check digit about 1 in 10 by chance), or S10 structure with an invalid check digit. Treat weak matches as hints.",
        -          "enum": [
        -            "distinctive",
        -            "strong",
        -            "weak"
        -          ],
        -          "type": "string"
        -        },
        -        "reasons": {
        -          "description": "Why this candidate matched, for example prefix:1Z / length:18 / check_digit:ups_mod10 / upu_s10:GB / country_hint:CA.",
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "required": [
        -        "carrier_id",
        -        "carrier_name",
        -        "confidence",
        -        "confidence_basis",
        -        "match_score",
        -        "match_strength",
        -        "reasons",
        -        "format_id"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "formats_evaluated": {
        -    "description": "Number of distinct formats in the signature set whose pattern matched the normalised number, counted before check digits were applied. Zero with no candidates means no covered format matches this shape at all; a value above zero with no candidates means a covered format matched but its check digit did not validate - a typo or a partial capture rather than an unknown carrier.",
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "input": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "normalised": {
        -        "description": "Upper-cased value with spaces and hyphens removed - the string the rules were evaluated against.",
        -        "type": "string"
        -      },
        -      "original": {
        -        "description": "Input as supplied, trimmed. Never altered otherwise.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "original",
        -      "normalised"
        -    ],
        -    "type": "object"
        -  },
        -  "is_upu_s10": {
        -    "description": "True when the number matches the UPU S10 postal item structure.",
        -    "type": "boolean"
        -  },
        -  "signature_version": {
        -    "description": "Version of the signature set that produced this result; results are reproducible for a given version.",
        -    "type": "string"
        -  },
        -  "top_candidate": {
        -    "description": "carrier_id of the best candidate, or null when the best score is below 0.5. Check top_candidate_distinctive before acting on it - a weak (length plus check digit) match can name a carrier by chance.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "top_candidate_distinctive": {
        -    "description": "True only when top_candidate matched a carrier-unique marker (match_strength distinctive or strong). False when there is no top candidate or it is a weak length-plus-check match.",
        -    "type": "boolean"
        -  },
        -  "upu_s10": {
        -    "additionalProperties": false,
        -    "description": "Parsed UPU S10 components; null when the number is not S10.",
        -    "properties": {
        -      "check_digit_valid": {
        -        "description": "True when the S10 check digit validates against the serial.",
        -        "type": "boolean"
        -      },
        -      "origin_country": {
        -        "description": "ISO 3166-1 alpha-2 country code of the origin designated operator.",
        -        "type": "string"
        -      },
        -      "serial": {
        -        "description": "Eight-digit S10 serial number.",
        -        "type": "string"
        -      },
        -      "service_indicator": {
        -        "description": "Two-letter S10 service indicator such as RB.",
        -        "type": "string"
        -      },
        -      "service_type": {
        -        "description": "Service class implied by the first indicator letter, for example letter_post_registered; null when unrecognised.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "service_indicator",
        -      "service_type",
        -      "serial",
        -      "check_digit_valid",
        -      "origin_country"
        -    ],
        -    "type": [
        -      "object",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "input",
        -  "candidates",
        -  "top_candidate",
        -  "top_candidate_distinctive",
        -  "formats_evaluated",
        -  "is_upu_s10",
        -  "upu_s10",
        -  "signature_version"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedweather_us_alerts7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.alerts"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "alerts": {
        -    "description": "Active alerts in the order returned by NWS.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "affected_zones": {
        -          "description": "NWS zone URLs covered by the alert.",
        -          "items": {
        -            "type": "string"
        -          },
        -          "type": "array"
        -        },
        -        "area_description": {
        -          "description": "Human-readable list of affected areas.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "certainty": {
        -          "description": "CAP certainty - Observed / Likely / Possible / Unlikely / Unknown.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "description": {
        -          "description": "Alert narrative, truncated to 2000 characters when description_truncated is true.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "description_truncated": {
        -          "description": "True when the narrative was truncated at 2000 characters.",
        -          "type": "boolean"
        -        },
        -        "effective": {
        -          "description": "Time the alert becomes effective.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "ends": {
        -          "description": "Expected end of the hazard.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "event": {
        -          "description": "Event type such as Extreme Heat Warning.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "expires": {
        -          "description": "Time the alert message expires.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "headline": {
        -          "description": "NWS headline for the alert.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "id": {
        -          "description": "NWS alert identifier (CAP urn:oid form).",
        -          "type": "string"
        -        },
        -        "instruction": {
        -          "description": "Protective action instruction issued by NWS.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "message_type": {
        -          "description": "CAP message type - Alert / Update / Cancel.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "onset": {
        -          "description": "Expected start of the hazard.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sender_name": {
        -          "description": "Issuing office such as NWS Las Vegas NV.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "sent": {
        -          "description": "Time the message was sent.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "severity": {
        -          "description": "CAP severity - Extreme / Severe / Moderate / Minor / Unknown.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "status": {
        -          "description": "CAP status such as Actual / Exercise / Test.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "urgency": {
        -          "description": "CAP urgency - Immediate / Expected / Future / Past / Unknown.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "event",
        -        "severity",
        -        "certainty",
        -        "urgency",
        -        "status",
        -        "message_type",
        -        "area_description",
        -        "sender_name",
        -        "effective",
        -        "expires",
        -        "description_truncated",
        -        "affected_zones"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "count": {
        -    "description": "Number of active alerts returned.",
        -    "type": "integer"
        -  },
        -  "query": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "lat": {
        -        "description": "Latitude queried, when a point was supplied.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "lon": {
        -        "description": "Longitude queried, when a point was supplied.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "state": {
        -        "description": "Area code queried, when a state was supplied.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "lat",
        -      "lon",
        -      "state"
        -    ],
        -    "type": "object"
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "query",
        -  "count",
        -  "alerts"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedweather_us_forecast12 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "default": "compact",
        +  "description": "compact (default) returns the fields an agent acts on. full adds the NWS narrative (detailed_forecast), the icon URL, the trend note and, for hourly periods, dewpoint_c and humidity_pct.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / hourly / default
        Added value: +false
      • changedInput schema / properties / hourly / description
        Previous value: -"Return hourly periods instead of the default 12-hour day/night periods."New value: +"Return hourly periods instead of the default 12-hour day/night periods. Hourly periods have no name and, at detail=full, carry dewpoint and humidity."
      • addedInput schema / properties / hours
        Added value: +{
        +  "default": 24,
        +  "description": "Number of hourly periods to return, soonest first. Applies when hourly is true; use periods for day/night forecasts.",
        +  "maximum": 48,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / periods
        Added value: +{
        +  "default": 6,
        +  "description": "Number of 12-hour day/night periods to return, soonest first. Applies when hourly is false; use hours for hourly forecasts. NWS issues 14 periods (7 days); the default of 6 is three days.",
        +  "maximum": 14,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.forecast"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "generated_at": {
        -    "description": "Time NWS generated this response from the forecast grid.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "location": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "city": {
        -        "description": "Nearest named place reported by NWS for the point; null when NWS omits it.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "grid": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "office": {
        -            "description": "NWS weather forecast office identifier (for example LWX) that issued this forecast.",
        -            "type": "string"
        -          },
        -          "x": {
        -            "description": "Forecast grid X coordinate for the office.",
        -            "type": "integer"
        -          },
        -          "y": {
        -            "description": "Forecast grid Y coordinate for the office.",
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "office",
        -          "x",
        -          "y"
        -        ],
        -        "type": "object"
        -      },
        -      "lat": {
        -        "description": "Latitude actually queried (rounded to 4 decimal places).",
        -        "type": "number"
        -      },
        -      "lon": {
        -        "description": "Longitude actually queried (rounded to 4 decimal places).",
        -        "type": "number"
        -      },
        -      "state": {
        -        "description": "Two-letter US state or territory code.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "timezone": {
        -        "description": "IANA timezone of the point as reported by NWS.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "lat",
        -      "lon",
        -      "grid",
        -      "city",
        -      "state",
        -      "timezone"
        -    ],
        -    "type": "object"
        -  },
        -  "periods": {
        -    "description": "Forecast periods in chronological order, as issued by the forecast office.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "detailed_forecast": {
        -          "description": "Detailed narrative issued by NWS; null for hourly periods.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "dewpoint_c": {
        -          "description": "Dewpoint in degrees Celsius (hourly periods only); rounded to 2 decimal places.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "end": {
        -          "description": "Period end (ISO 8601 with UTC offset).",
        -          "type": "string"
        -        },
        -        "humidity_pct": {
        -          "description": "Relative humidity as a percentage (hourly periods only); rounded to 2 decimal places.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "icon": {
        -          "description": "NWS icon URL for the period.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "is_daytime": {
        -          "description": "True when the National Weather Service marks the period as daytime, false when it marks it as night, null when the forecast omits the flag - null is not night.",
        -          "type": [
        -            "boolean",
        -            "null"
        -          ]
        -        },
        -        "name": {
        -          "description": "Period label such as Tonight or Tuesday; null for hourly periods.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "number": {
        -          "description": "Sequence number of the period.",
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "precipitation_probability_pct": {
        -          "description": "Probability of precipitation for the period as a percentage; null when not forecast.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "short_forecast": {
        -          "description": "Short forecast phrase issued by NWS.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "start": {
        -          "description": "Period start (ISO 8601 with UTC offset).",
        -          "type": "string"
        -        },
        -        "temperature": {
        -          "description": "Forecast temperature expressed in temperature_unit.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "temperature_trend": {
        -          "description": "NWS trend note such as rising or falling; usually null.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "temperature_unit": {
        -          "description": "Unit letter as issued by NWS - F for Fahrenheit or C for Celsius. US forecasts are issued in F. Null when the forecast omits the unit or issues one this contract does not recognise; the temperature is then a number with no stated unit, never assumed to be Fahrenheit.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "wind_direction": {
        -          "description": "Compass direction as issued by NWS (for example NW).",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "wind_speed": {
        -          "description": "Wind speed exactly as issued by NWS - typically an mph range such as 2 to 7 mph.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "number",
        -        "name",
        -        "start",
        -        "end",
        -        "is_daytime",
        -        "temperature",
        -        "temperature_unit",
        -        "short_forecast"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "units": {
        -    "description": "Unit system of the period values as issued by NWS - \"us\" means temperatures in Fahrenheit and wind as an mph text range.",
        -    "type": "string"
        -  },
        -  "updated_at": {
        -    "description": "Time the forecast product was issued by the forecast office (NWS updateTime). This is the true age of the forecast.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "valid_from": {
        -    "description": "Start of the validity interval of the underlying forecast grid.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "location",
        -  "updated_at",
        -  "generated_at",
        -  "valid_from",
        -  "units",
        -  "periods"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
    • Changedweather_us_observation7 fields changed
      • removedOutput schema / properties / data / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / data / description
        Added value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/weather.us.observation"
      • removedOutput schema / properties / data / properties
        Removed value: -{
        -  "age_seconds": {
        -    "description": "Whole seconds between observed_at and the time this response was produced. Always inspect this before treating the reading as current.",
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  "barometric_pressure_pa": {
        -    "description": "Station barometric pressure in pascals. Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "cloud_layers": {
        -    "description": "Reported cloud layers, lowest first, exactly as published by the station.",
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "amount": {
        -          "description": "METAR cloud amount code - one of CLR / FEW / SCT / BKN / OVC / VV.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "base_m": {
        -          "description": "Cloud base height above ground in metres.",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        }
        -      },
        -      "required": [
        -        "amount",
        -        "base_m"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  "dewpoint_c": {
        -    "description": "Dewpoint in degrees Celsius (2 decimal places). Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "is_stale": {
        -    "description": "True when age_seconds exceeds 10800 (3 hours). The observation is still returned; the flag says it is old.",
        -    "type": "boolean"
        -  },
        -  "observed_at": {
        -    "description": "Time the observation was taken, as reported by the station (ISO 8601 UTC). This is not the request time.",
        -    "type": "string"
        -  },
        -  "precipitation_last_hour_mm": {
        -    "description": "Precipitation in the last hour in millimetres. Null when the station does not report it or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "relative_humidity_pct": {
        -    "description": "Relative humidity as a percentage (2 decimal places). Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "station": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "distance_km": {
        -        "description": "Great-circle distance in kilometres (2 decimal places) from the coordinate you asked about to the station's published position, computed by Eckari on a spherical earth. It is not the National Weather Service's own distance figure, which is measured from the forecast grid point rather than your point. Null when the station publishes no coordinates.",
        -        "type": [
        -          "number",
        -          "null"
        -        ]
        -      },
        -      "id": {
        -        "description": "NWS station identifier (for example KDCA).",
        -        "type": "string"
        -      },
        -      "name": {
        -        "description": "Station name as published by NWS.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "name",
        -      "distance_km"
        -    ],
        -    "type": "object"
        -  },
        -  "temperature_c": {
        -    "description": "Air temperature in degrees Celsius (2 decimal places). Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "text_description": {
        -    "description": "Station's own summary phrase such as Mostly Cloudy.",
        -    "type": [
        -      "string",
        -      "null"
        -    ]
        -  },
        -  "visibility_m": {
        -    "description": "Horizontal visibility in metres. Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "wind_direction_deg": {
        -    "description": "Wind direction in degrees clockwise from true north. Null when variable, when the station omits the value, or when its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "wind_gust_kmh": {
        -    "description": "Wind gust in kilometres per hour. Null when the station omits the value or its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  },
        -  "wind_speed_kmh": {
        -    "description": "Wind speed in kilometres per hour (2 decimal places). Null when calm, when the station omits the value, or when its quality control rejected it (NWS qualityControl X = failed or Q = questionable).",
        -    "type": [
        -      "number",
        -      "null"
        -    ]
        -  }
        -}
      • removedOutput schema / properties / data / required
        Removed value: -[
        -  "station",
        -  "observed_at",
        -  "age_seconds",
        -  "is_stale",
        -  "cloud_layers"
        -]
      • addedOutput schema / properties / meta / properties / attribution_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta / properties / retrieved_at / format
        Added value: +"date-time"
      • addedOutput schema / properties / meta / required
        Added value: +[
        +  "capability",
        +  "version",
        +  "retrieved_at",
        +  "source",
        +  "freshness",
        +  "request_id"
        +]
  5. 24 tool updates
    • First observedcompany_uk_accounts
    • First observedcompany_uk_charges
    • First observedcompany_uk_directors
    • First observedcompany_uk_filings
    • First observedcompany_uk_owners
    • First observedcompany_uk_profile
    • First observedcompany_uk_registered_office
    • First observedcompany_uk_search
    • First observedcompany_uk_status
    • First observedcompany_us_filings
    • First observedcompany_us_filings_latest
    • First observedcompany_us_profile
    • First observedcompany_us_resolve
    • First observeddomain_expiry
    • First observeddomain_registration
    • First observedentity_lei_profile
    • First observedentity_lei_search
    • First observedfx_reference_rate
    • First observedlocation_us_geocode
    • First observedlocation_us_geographies
    • First observedparcel_detect_carrier
    • First observedweather_us_alerts
    • First observedweather_us_forecast
    • First observedweather_us_observation

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enriches company data from a domain name, providing firmographics, socials, tech stack, and contact info via a pay-per-call x402 micropayment API.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Find professional email addresses from name + company domain. Tests 15+ patterns against MX records with confidence scoring, with pay-per-call via x402.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.4/5.0
Disambiguation4/5

Tools are largely distinct, targeting specific entities (UK company, US company, domain, LEI, FX, location, parcel, weather) or sub-aspects (e.g., accounts vs. charges vs. directors). Overlap exists between company.uk.profile and company.uk.status (both contain status info, but the latter is cheaper and focused). Also, company.uk.filings and company.us.filings_latest could be confused if an agent generalizes 'filings' across jurisdictions.

Naming Consistency5/5

All tools follow a consistent pattern: domain_entity_subject (e.g., company_uk_accounts, domain_expiry, weather_us_alerts). Underscores and lower case are used throughout. Verbs are implied by the noun (e.g., 'search' for lookup, 'detect' for identification). No mixed conventions or unpredictable names.

Tool Count4/5

24 tools is on the high side but still reasonable for a general-purpose data server spanning multiple domains (company, domain, entity, fx, location, parcel, weather). Each domain gets a cohesive set, and the documentation justifies each tool. Could be slightly leaner if some niche tools (e.g., domain_expiry vs. registration) were merged, but overall scoping is acceptable.

Completeness4/5

Each domain offers good coverage: UK company tools cover CRUD-like operations (profile, status, search, filings, charges, directors, owners, registered office); similarly for US companies (profile, filings, resolve, latest filings). Weather has forecast, observation, alerts. Parcel only detects carrier (no tracking). Missing features like advanced filtering on company filings or less common domains, but core workflows are covered.

Resources