Skip to main content
Glama

Server Details

Compare domain registration and renewal prices across registrars and check exact-name availability.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.6% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
igalil/cheapest-domains-integrations
GitHub Stars
0
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target clearly different sub-tasks: single availability, batch availability, name comparison, popularity, guidance, registrar links, and price history. The main ambiguity is among the price-oriented tools (get_tld_prices, search_prices, estimate_cost, compare_domain_names), where the boundaries are clarified in descriptions but still require careful reading.

Naming Consistency5/5

All tool names use lowercase snake_case and are verb-led or action-oriented, such as check_availability, get_tld_prices, search_prices, and open_name_finder. The only minor variation is the descriptive _batch suffix, which remains predictable and readable.

Tool Count4/5

Twelve tools is reasonable for a domain pricing and availability research server covering availability, pricing, history, registrar coverage, popularity, and naming guidance. A few tools are niche or could potentially be folded into broader price-research flows, but none are clearly superfluous.

Completeness4/5

The surface covers the core research lifecycle well: checking availability, comparing names, estimating costs, viewing price history, comparing registrars, checking popularity, and constructing registrar links. Gaps are mostly explicit by design, such as no purchase/reservation, no transfer quote, and limited fresh batch checking across multiple distinct names.

Available Tools

12 tools
check_availabilityCheck domain availabilityAInspect

Check one exact domain. Cloudflare answers first; configured fallbacks, then an optional selected registrar, run only for missing facts; a taken name ends the chain. Returns separate availability and nullable premium facts, provider attempts and check times; null premium is unconfirmed, not standard tier. Recheck after expiresAt (5 min; up to 30 days if taken). No prices, purchase or reservation.

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
nameYesOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.
freshNoExplicitly request a fresh single-name recheck only when the user asks. Normal checks reuse saved evidence: five minutes, or up to 30 days for a name found taken. Fresh checks still obey provider gates, pending claims, caller limits and cooldowns; never use in a loop.
registrarNoConnected registrar ID from the registrars endpoint. Omit to compare all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Adds substantial behavior beyond the annotations: the provider chain order (Cloudflare first, fallbacks and registrar only for missing facts, taken name ends the chain), the caching windows with expiresAt, and the warning not to loop fresh checks. Also clarifies null premium means unconfirmed rather than standard tier. It stops short of describing rate-limit or auth failure modes, but the annotation profile (openWorld, non-idempotent) is well complemented.

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?

Dense but front-loaded: the core scope leads, then chain behavior, then return semantics and caching. It reads telegraphically (semicolon-joined clauses) and could be split for parseability, but no sentence is filler.

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

Completeness4/5

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

For a read-check tool with an output schema and full parameter coverage, this covers the essentials: provider ordering, null-premium interpretation, cache lifetime and the explicit non-scope (no prices, purchase or reservation). Minor gaps remain around failure reporting and limits, but nothing needed to call it 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%, so all four parameters are already documented in detail. The description adds only the registrar's role in the fallback chain and the caching window for fresh, so it modestly extends rather than duplicates the schema — baseline 3 is appropriate.

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

Purpose5/5

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

"Check one exact domain" states a specific verb and resource, and the word "one" implicitly draws the line against the batch sibling. An agent knows immediately whether this is a single-name lookup or a bulk operation.

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

Usage Guidelines4/5

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

Gives concrete when-to-use conditions: normal checks reuse saved evidence, a fresh recheck is "only when the user asks," and registrar should be omitted to compare all. It never names the batch or price siblings explicitly, so cross-tool routing is left slightly to inference.

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

check_availability_batchCheck a name across extensionsAInspect

Check one name across up to 20 extensions, reusing shared evidence. Enrichment stops once availability is known, so premium can remain null. Partial failures keep the answers received plus retry guidance, without automatic retries. cachedOnly makes no provider calls. No selected-registrar fallback, fresh mode, prices or purchases.

NameRequiredDescriptionDefault
nameYesOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.
tldsYesOne to 20 distinct ASCII top-level extensions separated by commas, for the same name. Optional leading dots are accepted. No whole-catalog scans.
cachedOnlyNoReturn only existing fresh availability evidence, without provider calls, lookup admission, claims or retries. Cache misses remain Not confirmed.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false) the description discloses real behavior: enrichment halts once availability is known so premium may stay null, partial failures return received answers plus retry guidance with no automatic retries, and cachedOnly performs zero provider calls. It does not explain cost or latency implications of a 20-extension open-world call, which keeps it from a 5.

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?

Four tight sentences, front-loaded with the core action and scope, followed by limits and exclusions. The telegraphic style is dense but each clause carries information; minor fragmentation is the only cost.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and the description covers limits, nullability of premium, partial-failure handling and the cached mode. It is nearly complete for a 3-parameter batch tool; only provider-cost/latency expectations for open-world calls are absent.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates the 20-extension cap from the tlds schema and echoes cachedOnly's 'no provider calls' semantics already stated in the property description, adding little new meaning.

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

Purpose4/5

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

The opening sentence gives a specific verb and resource with scope: 'Check one name across up to 20 extensions, reusing shared evidence.' That scope alone separates it from the single-domain check_availability sibling, though the sibling is never named explicitly.

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 closing clause 'No selected-registrar fallback, fresh mode, prices or purchases' functions as an explicit when-not list that routes agents away from estimate_cost, get_tld_prices and get_registrar_link. It lacks a positive 'use this instead of X' statement, but the exclusions are clear.

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

compare_domain_namesCompare suggested domain namesAInspect

After checking exact names with the availability tools, compare up to 10 candidates using saved renewal-first prices and fresh cached evidence. No new availability requests; cache misses are Not confirmed. Returns standard reference offers, premium facts, dates and links. The assistant explains project fit. Split larger lists into bounded groups. Does not generate names.

NameRequiredDescriptionDefault
domainsYesOne to 10 distinct exact ASCII domains separated by commas or whitespace, such as brightkit.com,brightkit.dev. One label and one top-level extension per domain; no URLs, multi-part suffixes or IDNs.
maxRenewalCentsNoMaximum annual renewal in integer USD cents; 1000 means USD 10.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations it discloses real behavior: no new availability lookups are issued, cache misses are reported as 'Not confirmed', and results include reference offers, premium facts, dates and links. The one gap is that readOnlyHint=false is never reconciled with 'No new availability requests', so the agent cannot tell whether the call writes cached state; that ambiguity is minor rather than contradictory.

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?

It is front-loaded with the precondition and the cap, and every sentence carries information about behavior, output or limits. The prose is dense and telegraphic ('cache misses are Not confirmed'), which costs a little readability but not correctness.

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?

With an output schema present, the description need only summarize return categories, which it does (reference offers, premium facts, dates, links), and it covers the calling constraints for a two-parameter, cache-backed comparison tool. Only the mutation/read-state semantics implied by readOnlyHint=false remain unexplained.

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 'domains' formatting, the 1-10 limit and the integer-cents renewal filter are already fully documented in the schema. The description only echoes the ten-candidate cap ('compare up to 10 candidates') and adds no new meaning about maxRenewalCents or list syntax.

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 ('compare up to 10 candidates'), names the scoping mechanism ('saved renewal-first prices and fresh cached evidence'), and explicitly disclaims a neighboring capability ('Does not generate names'). An agent can distinguish this from check_availability, get_tld_prices and the other siblings without opening any schema.

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

Usage Guidelines5/5

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

It gives an explicit prerequisite and ordering ('After checking exact names with the availability tools'), a batching rule ('Split larger lists into bounded groups'), and an exclusion ('Does not generate names'). The agent knows both when to call it and what it should not be used for.

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

estimate_costEstimate domain costsAInspect

Estimate new registration plus subsequent renewals for one TLD at a registrar. Returns null for unknown multi-year term totals. Not a transfer or existing-domain renewal quote.

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
nameNoOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.
yearsYesPlanning horizon in years, including initial registration.
registrarYesConnected registrar ID from the registrars endpoint. Omit to compare all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, and openWorldHint=true, which already signal a non-idempotent, external-data-backed operation. The description adds the useful behavioral note that it returns null for unknown multi-year term totals, but says nothing about latency, rate limits, or data freshness for a live-quote tool.

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?

Three short sentences, front-loaded with the core action and followed by the null-return caveat and the exclusion. Efficient and well-ordered, though the null caveat is slightly compressed given it is the only return-value signal.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description appropriately covers scope, exclusions, and the null edge case. The main remaining gap is the non-obvious readOnlyHint=false on what is conceptually a read-like pricing lookup, which the description doesn't address.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter, including the optional registrar ID and the default-3 years horizon, is already documented in the schema. The description adds only the high-level framing ('one TLD at a registrar'), not syntax or edge-case guidance beyond what the schema provides.

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

Purpose5/5

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

States a specific verb (estimate) and resource (new registration plus renewals for one TLD at a registrar), and explicitly names what it is not: a transfer or existing-domain renewal quote. This distinguishes it from siblings like get_tld_prices and search_prices.

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 a clear negative exclusion ('Not a transfer or existing-domain renewal quote') and scopes it to new registration plus renewals, which implies when to use it over transfer/renewal tooling. It does not, however, explicitly name the sibling to use instead for comparing prices or checking price history.

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

get_domain_popularityGet domain DNS popularityAInspect

Look up one exact domain in Cloudflare Radar’s global DNS popularity ranking. Returns an exact top-100 rank or a broader popularity group, categories, locations, data dates, and CC BY-NC 4.0 attribution. Not Google SEO difficulty, name competition, or availability. Missing data does not indicate zero competition.

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
nameYesOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations it discloses concretely what comes back ('an exact top-100 rank or a broader popularity group'), the third-party source (Cloudflare Radar), and a licensing obligation (CC BY-NC 4.0 attribution). The caveat 'Missing data does not indicate zero competition' is genuinely valuable behavioral context an agent would otherwise misread as a negative signal. Note the annotation readOnlyHint=false sits slightly at odds with a pure 'look up' framing, though the description itself makes no write claims and this reads as a conservative default rather than a contradiction.

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

Conciseness5/5

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

Four compact sentences, front-loaded with purpose, then return shape, then disambiguation, then the caveat. The negation list is a high-density way to fence off siblings and nothing is redundant.

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?

With an output schema present the description need not spell out return fields, and the licensing, data-source, and missing-data caveats cover the non-obvious gaps. It does not say how unsupported TLDs or out-of-ranking domains surface (error vs. empty response), which leaves a small but real ambiguity for a two-parameter lookup.

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

Parameters3/5

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

Schema coverage is 100% and both parameters already document the ASCII label/extension split, length limits, and IDN exclusions. The description only adds the 'one exact domain' constraint (no wildcards, no batch), which is marginal beyond what the schema already carries, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Look up one exact domain in Cloudflare Radar's global DNS popularity ranking') and immediately differentiates itself from siblings by denying the adjacent concepts of SEO difficulty, name competition, and availability. An agent can distinguish it from check_availability, compare_domain_names, and get_naming_guidance without opening any schema.

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?

'Look up one exact domain' plus the explicit 'Not ... availability' clause makes the selection context clear and steers away from the availability/competition tools. It stops short of naming siblings explicitly or stating what to do for multiple domains (there is a batch sibling for availability but none for popularity), so it is clear guidance without full routing.

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

get_naming_guidanceGet domain naming guidanceAInspect

Return domain naming criteria, renewal-price comparison guidance and availability-status definitions. This static reference does not generate names or check availability.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Labels the tool a "static reference" that neither generates names nor performs live checks, which usefully corrects the impression given by openWorldHint=true and readOnlyHint=false that this touches the outside world or mutates state. What it still leaves implicit is that calling it performs no network activity and consumes no quota; with an output schema present it need not describe returns.

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

Conciseness5/5

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

Two sentences, no filler: the content inventory comes first, the scope exclusion second. Every clause carries information an agent needs, and nothing is repeated from the title or annotations.

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 static, zero-parameter reference with a declared output schema, the description says enough: what content it returns, that it is static, and what it will not do. Nothing required to invoke it correctly is missing.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter meaning to convey; the description correctly adds nothing on this axis. Baseline of 4 applies for a 0-parameter tool.

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?

"Return domain naming criteria, renewal-price comparison guidance and availability-status definitions" gives a specific verb plus three named artifacts, and the second sentence explicitly excludes the two things sibling tools do (generating names, checking availability). An agent can tell this apart from check_availability and compare_domain_names without opening any schema.

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 negative scoping ("does not generate names or check availability") tells the agent when NOT to call it and implicitly routes to check_availability / compare_domain_names. It stops short of naming those siblings explicitly or saying when this reference should be consulted (e.g., before compare_domain_names to interpret its output), so it is clear context rather than full routing.

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

get_price_historyGet price history for an extensionAInspect

Return how each covered registrar's renewal or registration price for one extension changed over time: price periods with the date each price was first seen, when the previous price was last seen, and whether it came from our scheduled refreshes or the registrar's own price page archived by the Internet Archive. A first record may be older than its date. Availability is not checked.

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
priceNoWhich price history to return: the annual renewal (default) or the first-year registration, which includes promotions.renewal
formatNoResponse representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text.json
registrarNoConnected registrar ID from the registrars endpoint. Omit to compare all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Adds context beyond the annotations: data provenance (scheduled refreshes vs. the registrar's own page archived by the Internet Archive) and the caveat that a first record may be older than its stated date. That is meaningful for interpreting results. The annotations mark readOnlyHint=false for what the description frames as a pure retrieval, an inconsistency worth flagging to the agent but the description's stated behavior is the reliable one.

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?

One dense but well-ordered sentence that front-loads the core operation and then qualifies it with provenance and the availability caveat. No filler, though the single run-on structure makes the provenance clause easy to skim past.

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?

With an output schema present, the description does not need to explain return shape and instead spends its space on the two things an agent cannot get from structure: data provenance and the stale-first-record caveat. The unstated pagination bound and the readOnlyHint mismatch are minor residual gaps.

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

Parameters3/5

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

Schema coverage is 100% and the schema already explains tld, price, format and registrar in detail. The description only echoes that renewal and registration are the two price histories and that one extension is queried, so it adds little beyond the structured fields; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (return price history for one extension) and names the scope (each covered registrar, renewal or registration price, over time), which cleanly separates it from siblings like get_tld_prices or search_prices that deal in current pricing.

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

Usage Guidelines3/5

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

The closing note 'Availability is not checked' implicitly routes availability questions to check_availability, and 'over time' implies this is the historical counterpart to a current-price tool. However, no sibling is named and there is no explicit when-to-use or when-not-to-use statement.

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

get_registrarsGet registrar coverageCInspect

Get connected registrar coverage, timestamps, fresh counts, failures, and registrars not compared.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, yet the description's 'Get ... fresh counts' framing reads as a passive read and gives no hint of side effects, network cost, or why repeat calls differ. With no annotations-level explanation of auth, rate limits, or what 'fresh' refresh costs, the agent cannot anticipate the non-idempotent behavior. The list of output fields adds little behavioral context beyond what the output schema already carries.

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?

A single compact sentence with no filler, front-loaded with the resource. It is terse to the point of under-specification rather than bloated, but every word is load-bearing as written.

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

Completeness2/5

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

An output schema exists, so the description's enumeration of return fields is largely redundant, while the genuinely missing pieces — when to call it, what 'connected' and 'not compared' mean, and why it is not read-only — are absent. For a zero-param, open-world tool that isn't idempotent, the agent is left guessing about intent and side effects.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description neither helps nor harms here.

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

Purpose3/5

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

The description is a list of return fields (coverage, timestamps, fresh counts, failures, not-compared registrars) rather than a statement of what the tool does. 'Get connected registrar coverage' is a vague verb+resource pair; an agent can infer it reports registrar connectivity/coverage status, but the scope and trigger are unclear. It is distinguishable from siblings only indirectly, via the 'registrars not compared' phrase echoing compare_domain_names.

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

Usage Guidelines2/5

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

No when-to-use guidance is given, and no sibling is named as an alternative or prerequisite. Nothing tells the agent whether this is a diagnostic/status check, a pre-flight step before compare_domain_names, or something to call routinely.

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

get_tld_pricesCompare prices for an extensionAInspect

Compare all covered registrars for one extension. Returns source failures, quote timestamps and minimum terms; availability is not checked.

NameRequiredDescriptionDefault
tldYesOne covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered.
nameNoOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.
sortNoRanking metric. Total uses a conservative new-registration estimate.renewal
limitNoMaximum number of results, up to 200.
yearsNoPlanning horizon in years, including initial registration.
formatNoResponse representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text.json
offsetNoResult offset. Follow pagination.next for additional results; the feed can change between requests.
orderByNoOrder results by the selected price metric or extension. Cheapest-per-extension winners are selected before ordering.price
directionNoAscending or descending result order. Unknown totals follow priced totals in either price direction.asc
favoritesNoUp to two distinct connected registrar IDs, comma-separated. Adds saved favorite offers and fresh baselines for this result page, independent of filters. Does not save preferences or check names.
registrarNoConnected registrar ID from the registrars endpoint. Omit to compare all.
registrarsNoComma-separated connected registrar IDs to compare together. Use instead of registrar. Cheapest-per-extension winners are chosen within this set.
includeStaleNoWhen false (default), stale offers are omitted from ranking and from view=best winners; fresh offers win. Saved stale prices stay in the catalog and remain inspectable with view=all and includeStale=true. includeStale=true still requires view=all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true and destructiveHint=false; the description adds genuinely new behavioral facts: source failures are surfaced, quote timestamps and minimum terms are returned, and availability is explicitly out of scope. It does not explain the unusual readOnlyHint=false for what reads like a comparison query, which is the one remaining ambiguity.

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

Conciseness5/5

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

Two short sentences, front-loaded with the operation and immediately followed by the most important scope caveat. Nothing is wasted and nothing important is buried.

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?

With 13 parameters, an output schema present, and 100% schema coverage, the description needs only to frame purpose and scope, which it does. The only gap is that pagination-triggering and mutation-like concerns (e.g. favorites not saving preferences) live entirely in the schema rather than being summarized.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 13 parameters is already documented in the input schema, including the registrar/registrars distinction, favorites, and includeStale. The description only loosely echoes 'minimum terms' and 'all covered registrars'; it adds no syntax or defaulting information beyond the schema.

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

Purpose4/5

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

The first sentence names a specific verb and resource with a clear scope, and the trailing 'availability is not checked' implicitly separates it from the check_availability siblings. It stops short of naming which sibling to use for name-level lookups, but an agent can still identify the operation.

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

Usage Guidelines3/5

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

The only routing guidance is the negative constraint that availability is not checked, which implies the agent should go to check_availability for that. There is no guidance on when to use this versus search_prices, estimate_cost, or get_price_history, all of which appear closely related.

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

open_name_finderFind project domain namesAInspect

Open the naming form in a compatible host, or return its text workflow. Collect seed names, an optional project brief, count and annual renewal budget; the current assistant generates ideas and checks them with the research tools. Opening performs no generation or registrar checks. Does not connect subscriptions or require a model API key.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

The annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the agent already knows this interacts with an external world and is not a pure read. The description does add useful boundary context — 'Opening performs no generation or registrar checks' and no subscription or model API key needed — which clarifies what side effects do NOT occur. It stops short of describing what actually happens on open (UI launch, handoff, any auth/host requirements), so the added value is moderate rather than rich.

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?

Three tight sentences, front-loaded with the action and immediately followed by the boundary conditions ('no generation or registrar checks', no key required). No filler, though the middle sentence's clause about what the assistant does is slightly crowded and could be separated for scanning.

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

Completeness4/5

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

For a zero-parameter tool with an output schema, the description carries the right burden: it establishes purpose, boundaries, and prerequisites without redundant return-value explanation. What is missing is any hint of the host/handoff mechanics or failure modes when no compatible host is present, which matters for an openWorldHint 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?

The input schema has zero parameters, so the baseline is 4 and no schema explanation is needed. The description goes further by listing the inputs the form itself collects (seed names, brief, count, renewal budget), which is information the schema cannot convey and helps the agent understand what the user will be asked for.

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

Purpose4/5

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

The description names a specific verb and resource ('Open the naming form in a compatible host, or return its text workflow'), so the agent knows this is an entry-point launcher rather than a lookup. It implicitly distinguishes itself from the research siblings by stating the assistant generates ideas and 'checks them with the research tools'. The only softness is the undefined 'compatible host' and 'text workflow', which leave the exact output shape ambiguous.

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?

It gives clear usage context: this is where seed names, an optional brief, count and renewal budget are collected, and the sibling research tools handle idea generation and checks. It does not, however, say when to prefer opening the form over receiving the text workflow, nor does it name specific siblings like check_availability or estimate_cost, leaving that selection to inference.

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

search_pricesCompare renewal pricesAInspect

Compare standard prices, including explicitly labeled Cloudflare samples. Find affordable domain extensions and registrar offers, sorted by annual renewal by default. Saved offers stay listed after a failed refresh, with stale flags and source timestamps for stating their age. Returns prices, citation links, timestamps, coverage, and pagination. Does not check exact-name availability.

NameRequiredDescriptionDefault
qNoTLD search: .com is exact; com is partial. Separate alternatives with commas or spaces.
nameNoOne ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers.
sortNoRanking metric. Total uses a conservative new-registration estimate.renewal
viewNoBest returns one winner per TLD; all returns every matching registrar offer.best
limitNoMaximum number of results, up to 200.
yearsNoPlanning horizon in years, including initial registration.
formatNoResponse representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text.json
offsetNoResult offset. Follow pagination.next for additional results; the feed can change between requests.
orderByNoOrder results by the selected price metric or extension. Cheapest-per-extension winners are selected before ordering.price
directionNoAscending or descending result order. Unknown totals follow priced totals in either price direction.asc
favoritesNoUp to two distinct connected registrar IDs, comma-separated. Adds saved favorite offers and fresh baselines for this result page, independent of filters. Does not save preferences or check names.
hideJumpsNoExclude current renewal prices greater than twice registration.
registrarNoConnected registrar ID from the registrars endpoint. Omit to compare all.
registrarsNoComma-separated connected registrar IDs to compare together. Use instead of registrar. Cheapest-per-extension winners are chosen within this set.
includeStaleNoWhen false (default), stale offers are omitted from ranking and from view=best winners; fresh offers win. Saved stale prices stay in the catalog and remain inspectable with view=all and includeStale=true. includeStale=true still requires view=all.
maxRenewalCentsNoMaximum annual renewal in integer USD cents; 1000 means USD 10.
hideCountryCodesNoExclude two-letter country-code extensions.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, and the description corroborates that with non-obvious state behavior: saved offers persist after a failed refresh with stale flags and source timestamps. It also lists return contents (prices, citations, timestamps, coverage, pagination) and clarifies that favorites do not save preferences. It does not explain why the call is classified as non-read-only, leaving a small gap against 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?

Four front-loaded sentences with high information density: purpose, default ordering, staleness behavior, return payload, and scope limit. The return-value sentence is somewhat redundant given an output schema exists, but nothing is padded.

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

Completeness4/5

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

For a 17-parameter, open-world price search with full schema coverage and an output schema, the description covers scope, defaults, staleness handling, and output shape adequately. A brief note on registrar connection requirements (the 'Connected registrar ID' concept) and result-change/pagination caveats would round it out.

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

Parameters3/5

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

Schema coverage is 100% and the per-parameter descriptions are already detailed (enums, defaults, patterns, interaction notes like includeStale requiring view=all). The prose restates the default sort and the purpose of filtering but adds no new parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource — comparing standard domain prices across extensions and registrars, sorted by annual renewal — which is clearly distinct from check_availability or get_price_history. It never names a sibling tool, so the differentiation is implicit (via 'Does not check exact-name availability') rather than explicit.

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?

Use context is stated ('Find affordable domain extensions and registrar offers') along with the default ordering and one explicit exclusion (no exact-name availability checks). Missing is any direct routing statement such as 'use check_availability for a specific domain' or guidance on when to prefer get_tld_prices or get_registrars.

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

Tool Schema Changelog

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

  1. 2 tool updates
    • Changedget_tld_prices1 field changed
      • changedInput schema / properties / includeStale / description
        Previous value: -"Accepted for compatibility. Saved prices stay in results until a successful refresh replaces them and are labeled stale. includeStale=true still requires view=all."New value: +"When false (default), stale offers are omitted from ranking and from view=best winners; fresh offers win. Saved stale prices stay in the catalog and remain inspectable with view=all and includeStale=true. includeStale=true still requires view=all."
    • Changedsearch_prices1 field changed
      • changedInput schema / properties / includeStale / description
        Previous value: -"Accepted for compatibility. Saved prices stay in results until a successful refresh replaces them and are labeled stale. includeStale=true still requires view=all."New value: +"When false (default), stale offers are omitted from ranking and from view=best winners; fresh offers win. Saved stale prices stay in the catalog and remain inspectable with view=all and includeStale=true. includeStale=true still requires view=all."
  2. 12 tool updates
    • Changedcheck_availability1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Availability": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "attempts": {
        +          "items": {
        +            "$ref": "#/$defs/AvailabilityAttempt"
        +          },
        +          "maxItems": 5,
        +          "type": "array"
        +        },
        +        "availability": {
        +          "description": "Registration status; independent of premium classification.",
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "description": "Successful provider response time; null when no reliable result was obtained.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "expiresAt": {
        +          "description": "Recheck after this time; never a reservation or guarantee until expiry.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fallback": {
        +          "properties": {
        +            "reason": {
        +              "type": "string"
        +            },
        +            "registrar": {
        +              "type": "string"
        +            },
        +            "state": {
        +              "enum": [
        +                "used",
        +                "unavailable"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "registrar",
        +            "state",
        +            "reason"
        +          ],
        +          "type": "object"
        +        },
        +        "listEnrichmentComplete": {
        +          "description": "Batch results: true when availability is known or every configured fallback stage has answered for this name. False means a later explicit request may add facts; it never means taken.",
        +          "type": "boolean"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "premium": {
        +          "description": "Null means not confirmed, never standard tier.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "registrar": {
        +          "type": "string"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        },
        +        "status": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "premium",
        +            "unsupported",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "domain",
        +        "status",
        +        "reason",
        +        "message",
        +        "provider",
        +        "checkedAt",
        +        "expiresAt",
        +        "service",
        +        "apiVersion"
        +      ],
        +      "type": "object"
        +    },
        +    "AvailabilityAttempt": {
        +      "properties": {
        +        "availability": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "expiresAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "outcome": {
        +          "description": "Whether this stage returned an answer, failed before confirming evidence, or is still in progress. Optional for older responses.",
        +          "enum": [
        +            "answered",
        +            "failed",
        +            "pending"
        +          ]
        +        },
        +        "premium": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "retryAfterSeconds": {
        +          "description": "Suggested wait after a failed stage; never an evidence lifetime.",
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "provider",
        +        "availability",
        +        "premium",
        +        "reason",
        +        "checkedAt",
        +        "expiresAt"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Availability"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Availability, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedcheck_availability_batch1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AvailabilityAttempt": {
        +      "properties": {
        +        "availability": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "expiresAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "outcome": {
        +          "description": "Whether this stage returned an answer, failed before confirming evidence, or is still in progress. Optional for older responses.",
        +          "enum": [
        +            "answered",
        +            "failed",
        +            "pending"
        +          ]
        +        },
        +        "premium": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "retryAfterSeconds": {
        +          "description": "Suggested wait after a failed stage; never an evidence lifetime.",
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "provider",
        +        "availability",
        +        "premium",
        +        "reason",
        +        "checkedAt",
        +        "expiresAt"
        +      ],
        +      "type": "object"
        +    },
        +    "AvailabilityBatch": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "cachedOnly": {
        +          "type": "boolean"
        +        },
        +        "error": {
        +          "description": "Partial failure: retain successful facts and wait before another explicit request. A confirmed Cloudflare-specific rate denial may continue through admitted fallback providers. Caller or shared-storage failure with no returned results uses the ordinary HTTP/MCP error envelope.",
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "domains": {
        +              "description": "When present, only these domains have a paused fallback.",
        +              "items": {
        +                "type": "string"
        +              },
        +              "maxItems": 20,
        +              "type": "array"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "retryAfterSeconds"
        +          ],
        +          "type": "object"
        +        },
        +        "results": {
        +          "items": {
        +            "$ref": "#/$defs/AvailabilityEvidence"
        +          },
        +          "maxItems": 20,
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        },
        +        "unconfirmedDomains": {
        +          "description": "Domains with unknown availability, not taken domains. Premium must be inspected separately even when this list is empty.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "maxItems": 20,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "service",
        +        "results",
        +        "unconfirmedDomains",
        +        "cachedOnly"
        +      ],
        +      "type": "object"
        +    },
        +    "AvailabilityEvidence": {
        +      "properties": {
        +        "attempts": {
        +          "items": {
        +            "$ref": "#/$defs/AvailabilityAttempt"
        +          },
        +          "maxItems": 5,
        +          "type": "array"
        +        },
        +        "availability": {
        +          "description": "Registration status; independent of premium classification.",
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "description": "Successful provider response time; null when no reliable result was obtained.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "expiresAt": {
        +          "description": "Recheck after this time; never a reservation or guarantee until expiry.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fallback": {
        +          "properties": {
        +            "reason": {
        +              "type": "string"
        +            },
        +            "registrar": {
        +              "type": "string"
        +            },
        +            "state": {
        +              "enum": [
        +                "used",
        +                "unavailable"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "registrar",
        +            "state",
        +            "reason"
        +          ],
        +          "type": "object"
        +        },
        +        "listEnrichmentComplete": {
        +          "description": "Batch results: true when availability is known or every configured fallback stage has answered for this name. False means a later explicit request may add facts; it never means taken.",
        +          "type": "boolean"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "premium": {
        +          "description": "Null means not confirmed, never standard tier.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "registrar": {
        +          "type": "string"
        +        },
        +        "status": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "premium",
        +            "unsupported",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "domain",
        +        "status",
        +        "reason",
        +        "message",
        +        "provider",
        +        "checkedAt",
        +        "expiresAt"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/AvailabilityBatch"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are AvailabilityBatch, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedcompare_domain_names1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "AvailabilityAttempt": {
        +      "properties": {
        +        "availability": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "expiresAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "outcome": {
        +          "description": "Whether this stage returned an answer, failed before confirming evidence, or is still in progress. Optional for older responses.",
        +          "enum": [
        +            "answered",
        +            "failed",
        +            "pending"
        +          ]
        +        },
        +        "premium": {
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "retryAfterSeconds": {
        +          "description": "Suggested wait after a failed stage; never an evidence lifetime.",
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "provider",
        +        "availability",
        +        "premium",
        +        "reason",
        +        "checkedAt",
        +        "expiresAt"
        +      ],
        +      "type": "object"
        +    },
        +    "AvailabilityEvidence": {
        +      "properties": {
        +        "attempts": {
        +          "items": {
        +            "$ref": "#/$defs/AvailabilityAttempt"
        +          },
        +          "maxItems": 5,
        +          "type": "array"
        +        },
        +        "availability": {
        +          "description": "Registration status; independent of premium classification.",
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "unknown"
        +          ]
        +        },
        +        "checkedAt": {
        +          "description": "Successful provider response time; null when no reliable result was obtained.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "expiresAt": {
        +          "description": "Recheck after this time; never a reservation or guarantee until expiry.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fallback": {
        +          "properties": {
        +            "reason": {
        +              "type": "string"
        +            },
        +            "registrar": {
        +              "type": "string"
        +            },
        +            "state": {
        +              "enum": [
        +                "used",
        +                "unavailable"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "registrar",
        +            "state",
        +            "reason"
        +          ],
        +          "type": "object"
        +        },
        +        "listEnrichmentComplete": {
        +          "description": "Batch results: true when availability is known or every configured fallback stage has answered for this name. False means a later explicit request may add facts; it never means taken.",
        +          "type": "boolean"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "premium": {
        +          "description": "Null means not confirmed, never standard tier.",
        +          "type": [
        +            "boolean",
        +            "null"
        +          ]
        +        },
        +        "provider": {
        +          "properties": {
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "documentation"
        +          ],
        +          "type": "object"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "registrar": {
        +          "type": "string"
        +        },
        +        "status": {
        +          "enum": [
        +            "available",
        +            "unavailable",
        +            "premium",
        +            "unsupported",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "domain",
        +        "status",
        +        "reason",
        +        "message",
        +        "provider",
        +        "checkedAt",
        +        "expiresAt"
        +      ],
        +      "type": "object"
        +    },
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "Destination": {
        +      "properties": {
        +        "domain": {
        +          "type": "string"
        +        },
        +        "href": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "mode": {
        +          "enum": [
        +            "search",
        +            "copy",
        +            "pricing"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "href",
        +        "mode",
        +        "domain"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "NameComparison": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "cachedOnly": {
        +          "const": true
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "priceScope": {
        +          "type": "string"
        +        },
        +        "rows": {
        +          "items": {
        +            "properties": {
        +              "availability": {
        +                "$ref": "#/$defs/AvailabilityEvidence"
        +              },
        +              "comparison": {
        +                "$ref": "#/$defs/Comparison"
        +              },
        +              "coverage": {
        +                "properties": {
        +                  "error": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "freshOffers": {
        +                    "type": "integer"
        +                  },
        +                  "notCompared": {
        +                    "items": {
        +                      "properties": {
        +                        "name": {
        +                          "type": "string"
        +                        },
        +                        "reason": {
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "partial": {
        +                    "type": "boolean"
        +                  },
        +                  "scope": {
        +                    "type": "string"
        +                  },
        +                  "sources": {
        +                    "items": {
        +                      "$ref": "#/$defs/Source"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "totalOffers": {
        +                    "type": "integer"
        +                  }
        +                },
        +                "required": [
        +                  "scope",
        +                  "totalOffers",
        +                  "freshOffers",
        +                  "sources",
        +                  "notCompared",
        +                  "partial"
        +                ],
        +                "type": [
        +                  "object",
        +                  "null"
        +                ]
        +              },
        +              "domain": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "offers": {
        +                "items": {
        +                  "$ref": "#/$defs/Offer"
        +                },
        +                "maxItems": 200,
        +                "type": "array"
        +              },
        +              "tld": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "domain",
        +              "name",
        +              "tld",
        +              "availability",
        +              "offers",
        +              "coverage",
        +              "comparison"
        +            ],
        +            "type": "object"
        +          },
        +          "maxItems": 10,
        +          "minItems": 1,
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        },
        +        "unconfirmedDomains": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "maxItems": 10,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "service",
        +        "generatedAt",
        +        "currency",
        +        "cachedOnly",
        +        "priceScope",
        +        "rows",
        +        "unconfirmedDomains",
        +        "partial",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Offer": {
        +      "properties": {
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "billingCountry": {
        +          "type": "string"
        +        },
        +        "countryCode": {
        +          "type": "boolean"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "estimateYears": {
        +          "default": 3,
        +          "description": "Planning horizon in years, including initial registration.",
        +          "maximum": 10,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "estimatedTotalCents": {
        +          "description": "Null for multi-year minimum terms; not zero.",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "exchangeRate": {
        +          "type": "number"
        +        },
        +        "exchangeRateDate": {
        +          "type": "string"
        +        },
        +        "exchangeRateSourceUrl": {
        +          "type": "string"
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "futureRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "futureRenewalDate": {
        +          "type": "string"
        +        },
        +        "minimumTermYears": {
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "originalCurrency": {
        +          "type": "string"
        +        },
        +        "originalRegistrationCents": {
        +          "type": "integer"
        +        },
        +        "originalRenewalCents": {
        +          "type": "integer"
        +        },
        +        "pageUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "priceValidUntil": {
        +          "description": "When a scheduled price change takes effect or the exchange rate behind a converted price expires; recheck after this time.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "pricingBasis": {
        +          "description": "Absent for published price lists. sampled_standard: standard-tier prices sampled from registrar search results (Cloudflare). sampled_api (API 1.9.0): registrar API purchase and auto-renewal rates sampled with a synthetic name (GoDaddy); the registrar website and manual renewals can charge more. Both have limited coverage and are not exact-name quotes. Preserve this distinction when displaying or reusing prices.",
        +          "enum": [
        +            "sampled_standard",
        +            "sampled_api"
        +          ],
        +          "type": "string"
        +        },
        +        "registrarId": {
        +          "type": "string"
        +        },
        +        "registrarName": {
        +          "type": "string"
        +        },
        +        "registrarSearch": {
        +          "$ref": "#/$defs/Destination"
        +        },
        +        "registrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "registrationTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRegistrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalSince": {
        +          "description": "API 1.12.0: when this renewal price (with its regular price) was first seen; unchanged since. Absent when not yet dated. See renewalSinceFirstRecord and the price history endpoint.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "renewalSinceFirstRecord": {
        +          "description": "True when renewalSince is our earliest record of this price, so the price may be older. Say \"unchanged since at least\" that date.",
        +          "type": "boolean"
        +        },
        +        "renewalTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "sourceUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "taxExcluded": {
        +          "type": "boolean"
        +        },
        +        "tld": {
        +          "type": "string"
        +        },
        +        "transferCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "tld",
        +        "registrarId",
        +        "registrarName",
        +        "currency",
        +        "registrationCents",
        +        "renewalCents",
        +        "minimumTermYears",
        +        "stale",
        +        "estimatedTotalCents",
        +        "estimateYears",
        +        "availability",
        +        "pageUrl",
        +        "sourceUrl",
        +        "registrarSearch"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/NameComparison"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are NameComparison, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedestimate_cost1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "CostBreakdown": {
        +      "description": "Conservative new-registration estimate, matching the UI. Null for unknown minimum-term totals.",
        +      "properties": {
        +        "items": {
        +          "items": {
        +            "properties": {
        +              "cents": {
        +                "description": "Integer USD cents; 1000 = USD 10.",
        +                "minimum": 0,
        +                "type": "integer"
        +              },
        +              "detail": {
        +                "type": "string"
        +              },
        +              "label": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "label",
        +              "detail",
        +              "cents"
        +            ],
        +            "type": "object"
        +          },
        +          "maxItems": 3,
        +          "type": "array"
        +        },
        +        "renewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "total": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "total",
        +        "renewalCents",
        +        "items"
        +      ],
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Destination": {
        +      "properties": {
        +        "domain": {
        +          "type": "string"
        +        },
        +        "href": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "mode": {
        +          "enum": [
        +            "search",
        +            "copy",
        +            "pricing"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "href",
        +        "mode",
        +        "domain"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "Estimate": {
        +      "allOf": [
        +        {
        +          "$ref": "#/$defs/Envelope"
        +        },
        +        {
        +          "properties": {
        +            "breakdown": {
        +              "$ref": "#/$defs/CostBreakdown"
        +            },
        +            "comparison": {
        +              "$ref": "#/$defs/Comparison"
        +            },
        +            "offer": {
        +              "$ref": "#/$defs/Offer"
        +            }
        +          },
        +          "required": [
        +            "comparison",
        +            "offer",
        +            "breakdown"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "Offer": {
        +      "properties": {
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "billingCountry": {
        +          "type": "string"
        +        },
        +        "countryCode": {
        +          "type": "boolean"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "estimateYears": {
        +          "default": 3,
        +          "description": "Planning horizon in years, including initial registration.",
        +          "maximum": 10,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "estimatedTotalCents": {
        +          "description": "Null for multi-year minimum terms; not zero.",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "exchangeRate": {
        +          "type": "number"
        +        },
        +        "exchangeRateDate": {
        +          "type": "string"
        +        },
        +        "exchangeRateSourceUrl": {
        +          "type": "string"
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "futureRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "futureRenewalDate": {
        +          "type": "string"
        +        },
        +        "minimumTermYears": {
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "originalCurrency": {
        +          "type": "string"
        +        },
        +        "originalRegistrationCents": {
        +          "type": "integer"
        +        },
        +        "originalRenewalCents": {
        +          "type": "integer"
        +        },
        +        "pageUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "priceValidUntil": {
        +          "description": "When a scheduled price change takes effect or the exchange rate behind a converted price expires; recheck after this time.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "pricingBasis": {
        +          "description": "Absent for published price lists. sampled_standard: standard-tier prices sampled from registrar search results (Cloudflare). sampled_api (API 1.9.0): registrar API purchase and auto-renewal rates sampled with a synthetic name (GoDaddy); the registrar website and manual renewals can charge more. Both have limited coverage and are not exact-name quotes. Preserve this distinction when displaying or reusing prices.",
        +          "enum": [
        +            "sampled_standard",
        +            "sampled_api"
        +          ],
        +          "type": "string"
        +        },
        +        "registrarId": {
        +          "type": "string"
        +        },
        +        "registrarName": {
        +          "type": "string"
        +        },
        +        "registrarSearch": {
        +          "$ref": "#/$defs/Destination"
        +        },
        +        "registrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "registrationTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRegistrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalSince": {
        +          "description": "API 1.12.0: when this renewal price (with its regular price) was first seen; unchanged since. Absent when not yet dated. See renewalSinceFirstRecord and the price history endpoint.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "renewalSinceFirstRecord": {
        +          "description": "True when renewalSince is our earliest record of this price, so the price may be older. Say \"unchanged since at least\" that date.",
        +          "type": "boolean"
        +        },
        +        "renewalTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "sourceUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "taxExcluded": {
        +          "type": "boolean"
        +        },
        +        "tld": {
        +          "type": "string"
        +        },
        +        "transferCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "tld",
        +        "registrarId",
        +        "registrarName",
        +        "currency",
        +        "registrationCents",
        +        "renewalCents",
        +        "minimumTermYears",
        +        "stale",
        +        "estimatedTotalCents",
        +        "estimateYears",
        +        "availability",
        +        "pageUrl",
        +        "sourceUrl",
        +        "registrarSearch"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Estimate"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Estimate, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_domain_popularity1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "Popularity": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "bucket": {
        +          "description": "Top-N popularity group, without an exact position inside it. Null does not mean zero competition.",
        +          "enum": [
        +            null,
        +            200,
        +            500,
        +            1000,
        +            2000,
        +            5000,
        +            10000,
        +            20000,
        +            50000,
        +            100000,
        +            200000,
        +            500000,
        +            1000000
        +          ],
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "categories": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "dataPeriod": {
        +          "properties": {
        +            "end": {
        +              "format": "date-time",
        +              "type": "string"
        +            },
        +            "start": {
        +              "format": "date-time",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "start",
        +            "end"
        +          ],
        +          "type": [
        +            "object",
        +            "null"
        +          ]
        +        },
        +        "domain": {
        +          "type": "string"
        +        },
        +        "expiresAt": {
        +          "description": "Six-hour application cache expiry, not the dataset publication date.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "rank": {
        +          "description": "Exact global DNS popularity rank, only for the top 100. Not a Google rank.",
        +          "maximum": 100,
        +          "minimum": 1,
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "reportedBucket": {
        +          "description": "Provider bucket as supplied, including lower-bound markers such as >200000. A lower bound is not an exact rank or proof of traffic.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        },
        +        "source": {
        +          "properties": {
        +            "attribution": {
        +              "type": "string"
        +            },
        +            "documentation": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "id": {
        +              "const": "cloudflare-radar"
        +            },
        +            "license": {
        +              "const": "CC BY-NC 4.0"
        +            },
        +            "licenseUrl": {
        +              "const": "https://creativecommons.org/licenses/by-nc/4.0/"
        +            },
        +            "name": {
        +              "const": "Cloudflare Radar"
        +            },
        +            "url": {
        +              "format": "uri",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "url",
        +            "documentation",
        +            "license",
        +            "licenseUrl",
        +            "attribution"
        +          ],
        +          "type": "object"
        +        },
        +        "status": {
        +          "enum": [
        +            "ranked",
        +            "not_listed",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        },
        +        "topLocations": {
        +          "items": {
        +            "properties": {
        +              "code": {
        +                "type": "string"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "rank": {
        +                "minimum": 1,
        +                "type": "integer"
        +              }
        +            },
        +            "required": [
        +              "code",
        +              "name",
        +              "rank"
        +            ],
        +            "type": "object"
        +          },
        +          "maxItems": 5,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "domain",
        +        "status",
        +        "reason",
        +        "message",
        +        "rank",
        +        "bucket",
        +        "reportedBucket",
        +        "categories",
        +        "topLocations",
        +        "dataPeriod",
        +        "fetchedAt",
        +        "expiresAt",
        +        "source",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Popularity"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Popularity, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_naming_guidance1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "NamingGuide": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "futureCapability": {
        +          "type": "string"
        +        },
        +        "instructions": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "purpose": {
        +          "type": "string"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "purpose",
        +        "instructions",
        +        "availability",
        +        "futureCapability"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/NamingGuide"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are NamingGuide, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_price_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "HistoryStep": {
        +      "properties": {
        +        "approximate": {
        +          "description": "Converted to USD from another currency.",
        +          "type": "boolean"
        +        },
        +        "archiveUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "cents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "changedAfter": {
        +          "description": "The previous price was last seen then: the change happened between this and from.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "firstRecord": {
        +          "description": "No earlier record; the price may be older than from.",
        +          "type": "boolean"
        +        },
        +        "from": {
        +          "description": "When this price was first seen.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "lastConfirmed": {
        +          "description": "Archived prices: the last archived copy still showing this price.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "regularCents": {
        +          "description": "Published regular price while this price is a promotion.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "source": {
        +          "description": "refresh: our scheduled refresh (since 2026-09-28). archive: the registrar’s own price page as copied by the Internet Archive.",
        +          "enum": [
        +            "refresh",
        +            "archive"
        +          ]
        +        },
        +        "to": {
        +          "description": "When the next price or a removal was first seen; null while current.",
        +          "format": "date-time",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "from",
        +        "to",
        +        "cents",
        +        "approximate",
        +        "source",
        +        "firstRecord"
        +      ],
        +      "type": "object"
        +    },
        +    "PriceHistory": {
        +      "allOf": [
        +        {
        +          "$ref": "#/$defs/Envelope"
        +        },
        +        {
        +          "properties": {
        +            "comparison": {
        +              "$ref": "#/$defs/Comparison"
        +            },
        +            "historyStart": {
        +              "format": "date-time",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "notes": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "pageUrl": {
        +              "format": "uri",
        +              "type": "string"
        +            },
        +            "price": {
        +              "enum": [
        +                "renewal",
        +                "registration"
        +              ]
        +            },
        +            "registrars": {
        +              "items": {
        +                "properties": {
        +                  "changes": {
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "current": {
        +                    "description": "The current step, with the same fields as steps[]; null when the registrar does not list the extension now.",
        +                    "type": [
        +                      "object",
        +                      "null"
        +                    ]
        +                  },
        +                  "fetchedAt": {
        +                    "description": "When the current saved offer was retrieved.",
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "highestCents": {
        +                    "description": "Integer USD cents; 1000 = USD 10.",
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "listedNow": {
        +                    "type": "boolean"
        +                  },
        +                  "lowestCents": {
        +                    "description": "Integer USD cents; 1000 = USD 10.",
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "pageUrl": {
        +                    "format": "uri",
        +                    "type": "string"
        +                  },
        +                  "pricingBasis": {
        +                    "description": "The current saved offer’s sample label, as on price offers; absent for published price lists. Preserve it when quoting the current price.",
        +                    "enum": [
        +                      "sampled_standard",
        +                      "sampled_api"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "registrarId": {
        +                    "type": "string"
        +                  },
        +                  "registrarName": {
        +                    "type": "string"
        +                  },
        +                  "stale": {
        +                    "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +                    "type": "boolean"
        +                  },
        +                  "steps": {
        +                    "items": {
        +                      "$ref": "#/$defs/HistoryStep"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "registrarId",
        +                  "registrarName",
        +                  "pageUrl",
        +                  "listedNow",
        +                  "current",
        +                  "changes",
        +                  "lowestCents",
        +                  "highestCents",
        +                  "steps"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "tld": {
        +              "type": "string"
        +            },
        +            "truncated": {
        +              "description": "True when only the newest periods fit one response.",
        +              "type": "boolean"
        +            }
        +          },
        +          "required": [
        +            "comparison",
        +            "tld",
        +            "price",
        +            "pageUrl",
        +            "historyStart",
        +            "registrars",
        +            "truncated",
        +            "notes"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/PriceHistory"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are PriceHistory, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_registrar_link1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Destination": {
        +      "properties": {
        +        "domain": {
        +          "type": "string"
        +        },
        +        "href": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "mode": {
        +          "enum": [
        +            "search",
        +            "copy",
        +            "pricing"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "href",
        +        "mode",
        +        "domain"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "RegistrarLink": {
        +      "allOf": [
        +        {
        +          "$ref": "#/$defs/Envelope"
        +        },
        +        {
        +          "properties": {
        +            "comparison": {
        +              "$ref": "#/$defs/Comparison"
        +            },
        +            "destination": {
        +              "$ref": "#/$defs/Destination"
        +            },
        +            "pageUrl": {
        +              "type": "string"
        +            },
        +            "sourceUrl": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "comparison",
        +            "destination",
        +            "pageUrl",
        +            "sourceUrl"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/RegistrarLink"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are RegistrarLink, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_registrars1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "Registrars": {
        +      "$ref": "#/$defs/Envelope"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Registrars"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Registrars, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedget_tld_prices1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Destination": {
        +      "properties": {
        +        "domain": {
        +          "type": "string"
        +        },
        +        "href": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "mode": {
        +          "enum": [
        +            "search",
        +            "copy",
        +            "pricing"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "href",
        +        "mode",
        +        "domain"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "Offer": {
        +      "properties": {
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "billingCountry": {
        +          "type": "string"
        +        },
        +        "countryCode": {
        +          "type": "boolean"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "estimateYears": {
        +          "default": 3,
        +          "description": "Planning horizon in years, including initial registration.",
        +          "maximum": 10,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "estimatedTotalCents": {
        +          "description": "Null for multi-year minimum terms; not zero.",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "exchangeRate": {
        +          "type": "number"
        +        },
        +        "exchangeRateDate": {
        +          "type": "string"
        +        },
        +        "exchangeRateSourceUrl": {
        +          "type": "string"
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "futureRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "futureRenewalDate": {
        +          "type": "string"
        +        },
        +        "minimumTermYears": {
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "originalCurrency": {
        +          "type": "string"
        +        },
        +        "originalRegistrationCents": {
        +          "type": "integer"
        +        },
        +        "originalRenewalCents": {
        +          "type": "integer"
        +        },
        +        "pageUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "priceValidUntil": {
        +          "description": "When a scheduled price change takes effect or the exchange rate behind a converted price expires; recheck after this time.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "pricingBasis": {
        +          "description": "Absent for published price lists. sampled_standard: standard-tier prices sampled from registrar search results (Cloudflare). sampled_api (API 1.9.0): registrar API purchase and auto-renewal rates sampled with a synthetic name (GoDaddy); the registrar website and manual renewals can charge more. Both have limited coverage and are not exact-name quotes. Preserve this distinction when displaying or reusing prices.",
        +          "enum": [
        +            "sampled_standard",
        +            "sampled_api"
        +          ],
        +          "type": "string"
        +        },
        +        "registrarId": {
        +          "type": "string"
        +        },
        +        "registrarName": {
        +          "type": "string"
        +        },
        +        "registrarSearch": {
        +          "$ref": "#/$defs/Destination"
        +        },
        +        "registrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "registrationTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRegistrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalSince": {
        +          "description": "API 1.12.0: when this renewal price (with its regular price) was first seen; unchanged since. Absent when not yet dated. See renewalSinceFirstRecord and the price history endpoint.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "renewalSinceFirstRecord": {
        +          "description": "True when renewalSince is our earliest record of this price, so the price may be older. Say \"unchanged since at least\" that date.",
        +          "type": "boolean"
        +        },
        +        "renewalTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "sourceUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "taxExcluded": {
        +          "type": "boolean"
        +        },
        +        "tld": {
        +          "type": "string"
        +        },
        +        "transferCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "tld",
        +        "registrarId",
        +        "registrarName",
        +        "currency",
        +        "registrationCents",
        +        "renewalCents",
        +        "minimumTermYears",
        +        "stale",
        +        "estimatedTotalCents",
        +        "estimateYears",
        +        "availability",
        +        "pageUrl",
        +        "sourceUrl",
        +        "registrarSearch"
        +      ],
        +      "type": "object"
        +    },
        +    "Prices": {
        +      "allOf": [
        +        {
        +          "$ref": "#/$defs/Envelope"
        +        },
        +        {
        +          "properties": {
        +            "comparison": {
        +              "$ref": "#/$defs/Comparison"
        +            },
        +            "favoriteBaselines": {
        +              "description": "Lowest fresh saved quote per returned extension for the selected metric, independent of filters. Omitted where no fresh priced baseline exists.",
        +              "items": {
        +                "$ref": "#/$defs/Offer"
        +              },
        +              "maxItems": 200,
        +              "type": "array"
        +            },
        +            "favoriteOffers": {
        +              "description": "Only requested favorites for this page’s extensions, independent of filters. Missing offers are absent; stale offers remain labeled.",
        +              "items": {
        +                "allOf": [
        +                  {
        +                    "$ref": "#/$defs/Offer"
        +                  },
        +                  {
        +                    "properties": {
        +                      "differenceFromCheapestCents": {
        +                        "description": "Selected metric minus the lowest fresh quote across all connected registrars. Null for stale/unpriced quotes or absent fresh baseline; never claim savings from stale data.",
        +                        "type": [
        +                          "integer",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  }
        +                ]
        +              },
        +              "maxItems": 400,
        +              "type": "array"
        +            },
        +            "offers": {
        +              "items": {
        +                "$ref": "#/$defs/Offer"
        +              },
        +              "maxItems": 200,
        +              "type": "array"
        +            },
        +            "pagination": {
        +              "properties": {
        +                "limit": {
        +                  "type": "integer"
        +                },
        +                "next": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "offset": {
        +                  "type": "integer"
        +                },
        +                "total": {
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "limit",
        +                "offset",
        +                "total",
        +                "next"
        +              ],
        +              "type": "object"
        +            },
        +            "query": {
        +              "type": "object"
        +            }
        +          },
        +          "required": [
        +            "comparison",
        +            "offers",
        +            "query",
        +            "pagination"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Prices"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Prices, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedopen_name_finder1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "NameFinder": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "generation": {
        +          "const": "current_assistant"
        +        },
        +        "guidance": {
        +          "properties": {
        +            "availability": {
        +              "const": "not_checked"
        +            },
        +            "futureCapability": {
        +              "type": "string"
        +            },
        +            "instructions": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "purpose": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "purpose",
        +            "instructions",
        +            "availability",
        +            "futureCapability"
        +          ],
        +          "type": "object"
        +        },
        +        "namingUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        },
        +        "subscriptionConnections": {
        +          "const": "not_configured",
        +          "description": "Website subscription authentication is not connected. Compatible assistant hosts use their existing account."
        +        },
        +        "workflow": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "service",
        +        "namingUrl",
        +        "generation",
        +        "subscriptionConnections",
        +        "workflow",
        +        "guidance"
        +      ],
        +      "type": "object"
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/NameFinder"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are NameFinder, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
    • Changedsearch_prices1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Comparison": {
        +      "description": "Revisit current standard prices with supported website filters. Omits proposed names and API pagination; does not save prices or availability.",
        +      "properties": {
        +        "omittedParameters": {
        +          "description": "Estimate horizons outside 2, 3, 5 and 10 years use the website default. Favorites are browser-local preferences and are never written by a link. Disclose omitted settings.",
        +          "items": {
        +            "enum": [
        +              "years",
        +              "favorites"
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "url",
        +        "omittedParameters"
        +      ],
        +      "type": "object"
        +    },
        +    "Coverage": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOffers": {
        +          "type": "integer"
        +        },
        +        "notCompared": {
        +          "items": {
        +            "properties": {
        +              "name": {
        +                "type": "string"
        +              },
        +              "reason": {
        +                "type": "string"
        +              },
        +              "url": {
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "partial": {
        +          "type": "boolean"
        +        },
        +        "scope": {
        +          "type": "string"
        +        },
        +        "sources": {
        +          "items": {
        +            "$ref": "#/$defs/Source"
        +          },
        +          "type": "array"
        +        },
        +        "totalOffers": {
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "scope",
        +        "totalOffers",
        +        "freshOffers",
        +        "sources",
        +        "notCompared",
        +        "partial"
        +      ],
        +      "type": "object"
        +    },
        +    "Destination": {
        +      "properties": {
        +        "domain": {
        +          "type": "string"
        +        },
        +        "href": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "mode": {
        +          "enum": [
        +            "search",
        +            "copy",
        +            "pricing"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "href",
        +        "mode",
        +        "domain"
        +      ],
        +      "type": "object"
        +    },
        +    "Envelope": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "coverage": {
        +          "$ref": "#/$defs/Coverage"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "generatedAt": {
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "limits": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "service": {
        +          "$ref": "#/$defs/ServiceInformation"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "apiVersion",
        +        "generatedAt",
        +        "currency",
        +        "coverage",
        +        "limits"
        +      ],
        +      "type": "object"
        +    },
        +    "Error": {
        +      "properties": {
        +        "apiVersion": {
        +          "type": "string"
        +        },
        +        "error": {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            },
        +            "retryAfterSeconds": {
        +              "minimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "code",
        +            "message"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "apiVersion",
        +        "error"
        +      ],
        +      "type": "object"
        +    },
        +    "Offer": {
        +      "properties": {
        +        "availability": {
        +          "const": "not_checked"
        +        },
        +        "billingCountry": {
        +          "type": "string"
        +        },
        +        "countryCode": {
        +          "type": "boolean"
        +        },
        +        "currency": {
        +          "const": "USD"
        +        },
        +        "estimateYears": {
        +          "default": 3,
        +          "description": "Planning horizon in years, including initial registration.",
        +          "maximum": 10,
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "estimatedTotalCents": {
        +          "description": "Null for multi-year minimum terms; not zero.",
        +          "type": [
        +            "integer",
        +            "null"
        +          ]
        +        },
        +        "exchangeRate": {
        +          "type": "number"
        +        },
        +        "exchangeRateDate": {
        +          "type": "string"
        +        },
        +        "exchangeRateSourceUrl": {
        +          "type": "string"
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "futureRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "futureRenewalDate": {
        +          "type": "string"
        +        },
        +        "minimumTermYears": {
        +          "minimum": 1,
        +          "type": "integer"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "originalCurrency": {
        +          "type": "string"
        +        },
        +        "originalRegistrationCents": {
        +          "type": "integer"
        +        },
        +        "originalRenewalCents": {
        +          "type": "integer"
        +        },
        +        "pageUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "priceValidUntil": {
        +          "description": "When a scheduled price change takes effect or the exchange rate behind a converted price expires; recheck after this time.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "pricingBasis": {
        +          "description": "Absent for published price lists. sampled_standard: standard-tier prices sampled from registrar search results (Cloudflare). sampled_api (API 1.9.0): registrar API purchase and auto-renewal rates sampled with a synthetic name (GoDaddy); the registrar website and manual renewals can charge more. Both have limited coverage and are not exact-name quotes. Preserve this distinction when displaying or reusing prices.",
        +          "enum": [
        +            "sampled_standard",
        +            "sampled_api"
        +          ],
        +          "type": "string"
        +        },
        +        "registrarId": {
        +          "type": "string"
        +        },
        +        "registrarName": {
        +          "type": "string"
        +        },
        +        "registrarSearch": {
        +          "$ref": "#/$defs/Destination"
        +        },
        +        "registrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "registrationTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRegistrationCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "regularRenewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "renewalSince": {
        +          "description": "API 1.12.0: when this renewal price (with its regular price) was first seen; unchanged since. Absent when not yet dated. See renewalSinceFirstRecord and the price history endpoint.",
        +          "format": "date-time",
        +          "type": "string"
        +        },
        +        "renewalSinceFirstRecord": {
        +          "description": "True when renewalSince is our earliest record of this price, so the price may be older. Say \"unchanged since at least\" that date.",
        +          "type": "boolean"
        +        },
        +        "renewalTermCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "sourceUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "taxExcluded": {
        +          "type": "boolean"
        +        },
        +        "tld": {
        +          "type": "string"
        +        },
        +        "transferCents": {
        +          "description": "Integer USD cents; 1000 = USD 10.",
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "tld",
        +        "registrarId",
        +        "registrarName",
        +        "currency",
        +        "registrationCents",
        +        "renewalCents",
        +        "minimumTermYears",
        +        "stale",
        +        "estimatedTotalCents",
        +        "estimateYears",
        +        "availability",
        +        "pageUrl",
        +        "sourceUrl",
        +        "registrarSearch"
        +      ],
        +      "type": "object"
        +    },
        +    "Prices": {
        +      "allOf": [
        +        {
        +          "$ref": "#/$defs/Envelope"
        +        },
        +        {
        +          "properties": {
        +            "comparison": {
        +              "$ref": "#/$defs/Comparison"
        +            },
        +            "favoriteBaselines": {
        +              "description": "Lowest fresh saved quote per returned extension for the selected metric, independent of filters. Omitted where no fresh priced baseline exists.",
        +              "items": {
        +                "$ref": "#/$defs/Offer"
        +              },
        +              "maxItems": 200,
        +              "type": "array"
        +            },
        +            "favoriteOffers": {
        +              "description": "Only requested favorites for this page’s extensions, independent of filters. Missing offers are absent; stale offers remain labeled.",
        +              "items": {
        +                "allOf": [
        +                  {
        +                    "$ref": "#/$defs/Offer"
        +                  },
        +                  {
        +                    "properties": {
        +                      "differenceFromCheapestCents": {
        +                        "description": "Selected metric minus the lowest fresh quote across all connected registrars. Null for stale/unpriced quotes or absent fresh baseline; never claim savings from stale data.",
        +                        "type": [
        +                          "integer",
        +                          "null"
        +                        ]
        +                      }
        +                    },
        +                    "type": "object"
        +                  }
        +                ]
        +              },
        +              "maxItems": 400,
        +              "type": "array"
        +            },
        +            "offers": {
        +              "items": {
        +                "$ref": "#/$defs/Offer"
        +              },
        +              "maxItems": 200,
        +              "type": "array"
        +            },
        +            "pagination": {
        +              "properties": {
        +                "limit": {
        +                  "type": "integer"
        +                },
        +                "next": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "offset": {
        +                  "type": "integer"
        +                },
        +                "total": {
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "limit",
        +                "offset",
        +                "total",
        +                "next"
        +              ],
        +              "type": "object"
        +            },
        +            "query": {
        +              "type": "object"
        +            }
        +          },
        +          "required": [
        +            "comparison",
        +            "offers",
        +            "query",
        +            "pagination"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "ServiceInformation": {
        +      "description": "Cheapest Domains identity and optional setup links, separate from upstream evidence. Does not establish client installation or provider health.",
        +      "properties": {
        +        "name": {
        +          "const": "Cheapest Domains"
        +        },
        +        "pluginUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "setupUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name",
        +        "url",
        +        "setupUrl",
        +        "pluginUrl"
        +      ],
        +      "type": "object"
        +    },
        +    "Source": {
        +      "properties": {
        +        "error": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "fetchedAt": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "freshOfferCount": {
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "nextRefreshAt": {
        +          "description": "When the saved catalog is due for its next scheduled refresh; not an expiry of its prices.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "offerCount": {
        +          "type": "integer"
        +        },
        +        "refresh": {
        +          "description": "Progress of a staged catalog refresh, when one exists. Saved prices remain usable meanwhile.",
        +          "properties": {
        +            "completed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "phase": {
        +              "enum": [
        +                "queued",
        +                "running",
        +                "waiting",
        +                "paused",
        +                "complete"
        +              ]
        +            },
        +            "resumeAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "startedAt": {
        +              "description": "Unix time in milliseconds.",
        +              "type": "integer"
        +            },
        +            "total": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "phase",
        +            "completed",
        +            "total",
        +            "startedAt",
        +            "resumeAt"
        +          ],
        +          "type": "object"
        +        },
        +        "refreshing": {
        +          "type": "boolean"
        +        },
        +        "stale": {
        +          "description": "True when the source’s last refresh failed and its saved catalog is at least 24 hours old. Passing nextRefreshAt alone does not make prices stale; a scheduled refresh every 15 minutes replaces due catalogs.",
        +          "type": "boolean"
        +        },
        +        "url": {
        +          "format": "uri",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "url",
        +        "offerCount",
        +        "freshOfferCount",
        +        "stale",
        +        "refreshing"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Prices"
        +    },
        +    {
        +      "$ref": "#/$defs/Error"
        +    }
        +  ],
        +  "description": "Successful results are Prices, the REST 200 response; results with isError: true are Error.",
        +  "type": "object"
        +}
  3. 2 tool updates
    • Changedcheck_availability1 field changed
      • changedInput schema / properties / fresh / description
        Previous value: -"Explicitly request a fresh single-name recheck only when the user asks. Normal checks reuse five-minute evidence. Fresh checks still obey provider gates, pending claims, caller limits and cooldowns; never use in a loop."New value: +"Explicitly request a fresh single-name recheck only when the user asks. Normal checks reuse saved evidence: five minutes, or up to 30 days for a name found taken. Fresh checks still obey provider gates, pending claims, caller limits and cooldowns; never use in a loop."
    • Addedget_price_history
  4. 2 tool updates
    • Addedcompare_domain_names
    • Addedopen_name_finder
  5. 9 tool updates
    • First observedcheck_availability
    • First observedcheck_availability_batch
    • First observedestimate_cost
    • First observedget_domain_popularity
    • First observedget_naming_guidance
    • First observedget_registrar_link
    • First observedget_registrars
    • First observedget_tld_prices
    • First observedsearch_prices

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables checking domain availability and registration prices across multiple TLDs and providers. Users can find available domain names and compare pricing through natural language.
    11 npm
    10
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables searching domain name variants across TLDs, comparing registrar registration, renewal, and transfer pricing, calculating multi-year ownership costs, and checking availability via RDAP. It also supports filtering, sorting, metadata discovery, bulk comparisons, and structured MCP responses.
    8
    18 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Fast domain availability checker that searches across multiple registrars (Porkbun, Namecheap) and protocols (RDAP, WHOIS) to find available domains, compare pricing, get suggestions, and check social media username availability.
    7
    194 npm
    28
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.