TLD Bench
Server Details
Domain prices for every TLD at the top registrars: renewals, N-year totals, history, availability.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 10 tools
Three tools (cheapest_registrar, compare_tld_prices, total_cost_of_ownership) all answer cost questions and can plausibly be selected for the same query like 'what's cheapest to own example.com for 5 years', and check_availability vs search_name_across_tlds both check-and-price names. The 'Use this when' triggers in each description do help route correctly, and get_tld/get_registrar/list_coupons/price_history are clearly distinct, but the boundaries of the cost trio require careful reading rather than being self-evident.
All names are snake_case and readable, but conventions are mixed: verb_noun (check_availability, compare_tld_prices, get_tld, list_coupons, suggest_names) alongside noun-phrases with no verb (cheapest_registrar, price_history, total_cost_of_ownership). A consistent verb-first pattern would have made intent predictable at a glance.
Ten tools is well within the sweet spot for a domain-pricing research server, and each covers a distinct facet (availability, TLD metadata, registrar metadata, price comparison, history, coupons, ideation, TCO). Nothing feels redundant or bolted on.
The read-only lifecycle for domain shopping is well covered: discover names (suggest_names), check availability, get TLD/registrar metadata, compare prices, history, coupons, and long-run cost. The main gap is discovery/enumeration — there is no way to list available TLDs or registrars to browse, so an agent must already know the extension or registrar it wants.
Available Tools
10 toolscheapest_registrarCheapest registrarARead-onlyIdempotentInspect
Use this when the user wants the single best place to buy (or transfer) one or more extensions for N years. Ranks by the total cost of ownership, not the first-year promotion; returns the winner with a year-by-year breakdown, three runners-up and caveats. Up to 20 extensions in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | Yes | 1-20 extensions | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| operation | No | start with a new registration (default) or a transfer in | register |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| exclude_registrars | No | registrar ids to leave out | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| urls | Yes | each extension's page on tldbench.com |
| as_of | Yes | when the newest price in this response was collected |
| years | Yes | |
| results | Yes | |
| currency | Yes | ISO 4217 |
| operation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: ranking is by TCO rather than promotional first-year price, and the response includes a year-by-year breakdown, three runners-up and caveats. It does not discuss data freshness or how missing registrars are handled, but the added value is real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the usage trigger, then the ranking rule and the return shape. Nothing is redundant and no sentence could be dropped without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explain return values, and annotations cover the safety profile, so what remains is the ranking philosophy and call-size limit, both stated. The only gap is the unresolved overlap with the total_cost_of_ownership sibling, which the description should disambiguate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 schema already documents tlds, years, currency, operation, reseller inclusion and limited-promo handling in detail. The description only restates two of these constraints ('one or more extensions for N years', 'up to 20 extensions in one call') and adds no format or interaction nuance the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: rank registrars by total cost of ownership for one or more TLDs over N years, and return the winner plus runners-up. It distinguishes itself conceptually from first-year-promo comparisons, but never names the very similar sibling total_cost_of_ownership or compare_tld_prices, leaving an agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause gives a clear trigger condition: the user wants the single best place to buy or transfer extensions for N years. There is no explicit when-not guidance and no named alternative for cases like per-TLD price comparison, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_availabilityCheck availabilityARead-onlyIdempotentInspect
Use this when the user asks whether specific domain names are free. Checks the registry (RDAP, WHOIS for some ccTLDs) after a DNS pre-check, with an honest unknown, and adds the cheapest registrar's price to own each free name. Up to 50 names in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast: a DNS delegation is accepted as proof of registration; precise: always ask the registry (status codes, expiry) | fast |
| years | No | horizon for totals, 1-10 years (default 3) | |
| domains | Yes | 1-50 full names (example.com, bücher.de) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| with_prices | No | add the cheapest registrar's price for names that are free | |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | when this answer was put together |
| notes | Yes | |
| years | Yes | |
| results | Yes | in the order asked |
| currency | Yes | ISO 4217 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real signal beyond them: a DNS pre-check precedes the registry lookup, failures surface as an 'honest unknown' rather than a false negative, and prices are attached to free names. It doesn't discuss rate limits or latency of the registry round-trip.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the trigger, then mechanism, then cost side effect. No filler and nothing restated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be described, and annotations cover the safety profile; the description fills in the lookup pipeline and the unknown-result behavior. Minor gaps remain on what the DNS pre-check means for accuracy in fast mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so mode, years, currency, and the include_* flags are already documented; the description only reinforces the 50-name cap and the with_prices behavior. It adds little about the fast-vs-precise tradeoff beyond what the enum description already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('checks the registry' for domain 'free' status) and adds implementation detail (RDAP, WHOIS for ccTLDs) plus a side effect (cheapest registrar's price on free names). It does not explicitly name a sibling to defer to (e.g., cheapest_registrar or total_cost_of_ownership), so the pricing overlap is left for the agent to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user asks whether specific domain names are free' gives a clear trigger condition, and the 50-name batch hint sets scope. No when-not guidance or explicit alternatives are offered, even though sibling tools cover pricing and suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_tld_pricesCompare prices for an extensionARead-onlyIdempotentInspect
Use this when the user asks what an extension costs or where it is cheapest. Returns every registrar's register, renew, transfer and restore prices for one TLD, ranked by the N-year cost of ownership (default 3 years), with each price's source and date.
| Name | Required | Description | Default |
|---|---|---|---|
| tld | Yes | an extension: com, .io, co.uk or рф | |
| sort | No | rank by the N-year total (default), or by one price | total |
| limit | No | offers returned, cheapest first (default 20) | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| registrars | No | only these registrars | |
| include_stale | No | include prices not confirmed for 3x their source's cadence (marked stale) | |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| tld | Yes | |
| url | Yes | the page on tldbench.com with the full comparison |
| sort | Yes | |
| as_of | Yes | when the newest price in this response was collected |
| stats | Yes | |
| years | Yes | |
| offers | Yes | |
| currency | Yes | ISO 4217 |
| offers_total | Yes | offers before `limit` and `registrars` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the default 3-year ownership horizon drives the ranking, each price carries its source and date, and all four price types are returned. It does not mention how stale or limited-promo prices are surfaced, but the schema handles those flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the usage trigger and followed by the return shape. Every clause carries information and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return fields, and it gives a sufficient summary of scope plus the default ranking horizon. It is nearly complete for a 9-parameter read tool, though a note on how it differs from the cheapest_registrar and total_cost_of_ownership siblings would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the description only echoes the N-year default of 3 and the ranking concept. It adds no meaning about currency conversion, registrar identifier forms, or how sort interacts with years beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Returns every registrar's register, renew, transfer and restore prices for one TLD') and adds the ranking dimension, which separates it from siblings like cheapest_registrar and total_cost_of_ownership. An agent can tell exactly what it gets without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Use this when the user asks what an extension costs or where it is cheapest.' That is clear when-to-use guidance, but it never names the closest alternatives (cheapest_registrar for the single cheapest, total_cost_of_ownership for cost breakdowns) or says when not to use it, so routing between overlapping siblings is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registrarRegistrar profileARead-onlyIdempotentInspect
Use this when the user asks about a registrar: its country, group, size (gTLD domains under management), how many extensions it sells, and how fresh our prices for it are. Accepts our id, its name or an IANA id.
| Name | Required | Description | Default |
|---|---|---|---|
| registrar | Yes | a registrar's id (porkbun), name (Porkbun) or IANA id (1861) |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | the page on tldbench.com with the full comparison |
| registrar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds a behavioral signal by mentioning price freshness is reported, but it says nothing about failure behavior for an unknown registrar, and the enumerated return fields largely duplicate the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the trigger condition and then the payload. The second sentence (accepted identifier forms) restates the schema, so it earns slightly less than full marks, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with a full output schema and complete annotations, the description tells the agent when to reach for it and what it yields, which is enough to call it correctly. The only omission is error/not-found behavior, which is minor given the rich structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter's description already states the three accepted identifier forms verbatim. The description repeats that same information rather than adding syntax, precedence, or ambiguity rules (e.g. what happens if a name collides with an id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (registrar profile) and enumerates exactly what it returns — country, group, gTLD domains under management, extension count, price freshness. That specificity makes it clearly distinct from siblings like cheapest_registrar or get_tld without naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger condition ("Use this when the user asks about a registrar") and implies the right context, but names no alternatives or exclusions — e.g. it never says to use cheapest_registrar instead when the user wants price rankings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tldExtension factsARead-onlyIdempotentInspect
Use this when the user asks what an extension is, who runs it, or whether it fits: type (generic or country code), registry, brand TLD or not, DNSSEC, RDAP and WHOIS servers, minimum term, second levels, registry fees, and its price summary.
| Name | Required | Description | Default |
|---|---|---|---|
| tld | Yes | an extension: com, .io, co.uk or рф | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| tld | Yes | |
| url | Yes | the page on tldbench.com with the full comparison |
| as_of | Yes | when the newest price in this response was collected |
| facts | Yes | |
| years | Yes | |
| currency | Yes | ISO 4217 |
| wholesale | Yes | known registry fees, newest first |
| second_levels | Yes | priced extensions under this root (co.uk, org.uk under uk) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the scope of data returned (registry operator, DNSSEC status, RDAP/WHOIS endpoints, minimum term, second-level rules, fee summary). It does not say what happens for an unknown or invalid extension, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the usage trigger followed by a colon-delimited field inventory. The list is long but each item conveys distinct output scope rather than padding, so it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explain return values, and the annotations cover the safety profile; combined with the field inventory, an agent has enough to call this correctly. Only error/edge-case behavior for unrecognized extensions is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself carries rich parameter meaning — the years horizon, ISO 4217 currency with ECB conversion disclosed in `fx`, and the reseller/limited-promo inclusion semantics. The description's mention of 'price summary' gestures at the pricing parameters but adds no syntax or format detail beyond what the schema already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (an extension's facts) and enumerates the returned fields — type, registry, DNSSEC, RDAP/WHOIS servers, fees — so an agent knows it is a TLD profile lookup, not a price comparison. It stops short of explicitly distinguishing itself from siblings like compare_tld_prices or get_registrar, leaving that inference to the reader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause gives concrete user-intent triggers: 'what an extension is, who runs it, or whether it fits.' That is clear when-to-use guidance. It offers no exclusions or named alternatives for when a sibling tool (e.g. compare_tld_prices) would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_couponsPromotions and couponsBRead-onlyIdempotentInspect
Use this when the user asks for promo codes, coupons, deals or first-year discounts. Returns coupon codes as each registrar's own API or promotions page lists them (code, operation, extensions, discount, limits, end date, last seen at the source, an example price with the code), and running promotional prices anyone gets without a code. Codes are seen at the source, not tested at checkout; quote the list price and renewal too.
| Name | Required | Description | Default |
|---|---|---|---|
| tld | No | an extension: com, .io, co.uk or рф | |
| limit | No | ||
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| operation | No | ||
| registrar | No | ||
| active_only | No | false: also coupons that expired in the last 30 days |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| note | Yes | |
| as_of | Yes | |
| coupons | Yes | coupon codes seen at the registrars' own sources, by registrar |
| currency | Yes | ISO 4217 |
| promotions | Yes | running promotional prices, cheapest first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety needs no restating. The description's real value-add is the reliability caveat: codes are 'seen at the source, not tested at checkout,' plus the instruction to quote list price and renewal alongside. That is genuinely useful. It does not mention coverage gaps per registrar or what happens when no coupons exist, so the disclosure is helpful but partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded: trigger first, then return shape and the quoting caveat. It is dense but every clause contributes something (fields, provenance, pricing advice). Minor cost is that the long parenthetical field list reads as a run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is optional, and the description still covers provenance and the list-price caveat well. What is missing is how the six optional filters combine and how to interpret an empty result set across registrars. For a six-parameter, multi-source lookup tool, that leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: tld, currency and active_only carry schema descriptions, while limit, operation and registrar have none. The description adds no parameter guidance at all, not even that results can be scoped by extension, registrar or operation. With half the parameters undocumented in the schema and nothing compensating in the text, an agent must guess at filtering behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and output: coupon codes as each registrar's API or promotions page lists them, plus code-free promotional prices. It enumerates returned fields (code, operation, extensions, discount, limits, end date, last seen, example price), which sharply separates it from price siblings like cheapest_registrar or compare_tld_prices. It stops short of naming those siblings explicitly, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening clause gives an explicit trigger: 'Use this when the user asks for promo codes, coupons, deals or first-year discounts.' That is a clear use context. It does not say when not to use it or name an alternative tool, and it gives no guidance on combining it with list-price tools, so it falls short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_historyPrice historyARead-onlyIdempotentInspect
Use this when the user asks how an extension's prices have moved or whether a rise is coming. Returns each registrar's price periods (changes only) and the registry's announced wholesale changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tld | Yes | an extension: com, .io, co.uk or рф | |
| since | No | YYYY-MM-DD: only periods that end on or after it | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| operation | No | register (a new registration, year 1), renew (one more year), transfer (move in; usually adds a year), restore (redeem an expired domain in its redemption period) | |
| registrar | No | one registrar's id |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| tld | Yes | |
| url | Yes | the page on tldbench.com with the full comparison |
| as_of | Yes | when the newest price in this response was collected |
| series | Yes | |
| currency | Yes | ISO 4217 |
| registry_events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description still adds real behavioral value by disclosing that only change periods are returned (not a dense time series) and that forward-looking registry wholesale announcements are included, which no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the triggering condition comes first, the return content second. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, full schema coverage, an output schema, and complete annotations, the description only needs to convey purpose and return shape, which it does. The 'changes only' and announced-changes clauses are the key facts an agent needs to interpret results correctly; only minor gaps remain around how the two data sets are combined in the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including tld examples, since date semantics, currency conversion via ECB rates with an fx disclosure, operation enum meanings, and registrar id. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: registrar price periods (changes only) plus announced registry wholesale changes for an extension. This is clearly distinguishable from sibling tools such as cheapest_registrar or compare_tld_prices, which deal with current prices rather than historical movement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('when the user asks how an extension's prices have moved or whether a rise is coming'), which is strong usage guidance. It stops short of naming alternatives for cases like current-price comparison, so it is clear context but not full when-not/alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_name_across_tldsSearch a name across extensionsARead-onlyIdempotentInspect
Use this when the user has a name and wants to know which extensions are free and what each costs to own. Checks one label across up to 50 extensions (or a preset: popular, tech, cheap, country:) and sorts the free ones by total cost.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | the label, without an extension (acmeforge) | |
| tlds | No | 1-50 extensions; default: the preset | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| preset | No | popular (default), tech, cheap, or country:<cc> (country:de) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| max_renew_price | No | leave out extensions whose cheapest renewal is above this (in `currency`) | |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | the label checked |
| tlds | Yes | |
| as_of | Yes | |
| notes | Yes | |
| years | Yes | |
| results | Yes | available first, cheapest to own first; then unknown; then taken and the rest |
| currency | Yes | ISO 4217 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only, idempotent, and non-destructive behavior, so the description's additional context is meaningful: it checks one label across up to 50 extensions or a preset and sorts free extensions by total cost. It does not discuss rate limits or detailed output behavior, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the use case and followed by scope and ranking behavior. There is no unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter read-only search with full schema coverage, an output schema, and safety annotations, the description covers the main selection and invocation context. It omits filters, currency, years, and reseller/promo defaults, but those are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented in the schema. The description restates the tlds limit and preset values but adds no meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific trigger, resource, and outcome: a single label checked across extensions for availability and total cost of ownership. That scope is enough to distinguish it from a one-off availability check or a pure TLD price comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('when the user has a name and wants to know which extensions are free and what each costs to own'). However, it does not name alternatives such as check_availability, compare_tld_prices, or total_cost_of_ownership, nor does it say when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_namesCheck and price name ideasARead-onlyIdempotentInspect
Use this when the user needs name ideas. Pass candidates from your own brainstorm and we check and price them; with only keywords we add simple prefixes, suffixes, TLD hacks and combinations. Returns only names that are available or unknown, cheapest first.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | No | extensions to try (default com) | |
| limit | No | names to check (each counts against the availability limit; default 20) | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| keywords | No | words to build names from with simple rules (prefixes, suffixes, TLD hacks, pairs) | |
| candidates | No | your own ideas: labels (brewly) or full names (brewly.co); labels are tried with each of `tlds` | |
| max_length | No | longest label | |
| max_renew_price | No | ||
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | |
| notes | Yes | |
| years | Yes | |
| checked | Yes | |
| currency | Yes | ISO 4217 |
| generated | Yes | names made from the input before checking |
| suggestions | Yes | only names that are available or unknown: available first, cheapest first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/ idempotent/ non-destructive, so the bar is lower. The description still adds real behavior: only available or unknown names are returned, sorted cheapest first, and keyword mode uses prefixes, suffixes, TLD hacks and combinations. It omits that check counts consume an availability quota, a limit noted only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the use condition, then the two input modes, then the output contract. No filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and full annotations present, the description covers the remaining gaps an agent needs: mode selection and result filtering/ordering. The one edge case left implicit is what happens when no parameters are supplied, since nothing is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90% so the baseline is 3, and the description earns above that by explaining the interaction between candidates and tlds (labels are tried against each extension) and how keywords differ. It adds no detail on currency, years, max_renew_price or the reseller/promo flags, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete action: validating and pricing name ideas, with two distinct input modes (candidates vs keywords). It is clear what the tool does, though it does not explicitly contrast itself with siblings like check_availability or search_name_across_tlds, which an agent must infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition ('when the user needs name ideas') and explains which mode to use: pass candidates from your own brainstorm, or keywords alone for rule-based generation. It stops short of exclusions, e.g. telling the agent to use check_availability for a single already-chosen name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
total_cost_of_ownershipTotal cost of ownershipARead-onlyIdempotentInspect
Use this when the user compares the long-run cost of several names or extensions, at one registrar or the cheapest. Applies minimum terms and regular renewals; with transfer_after_year it also finds the cheapest registrar to move to later. Up to 20 domains or extensions in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | No | 1-20 extensions | |
| years | No | horizon for totals, 1-10 years (default 3) | |
| domains | No | 1-20 domain names (their extensions are priced) | |
| currency | No | ISO 4217 currency for prices (default USD); converted at the ECB's daily rate, disclosed in `fx` | |
| registrar | No | price at this registrar; default: the cheapest to own | |
| include_resellers | No | include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false | |
| transfer_after_year | No | also price moving to the cheapest renewing registrar after this many years | |
| include_limited_promos | No | count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price |
Output Schema
| Name | Required | Description |
|---|---|---|
| fx | Yes | How converted prices were converted; null when nothing needed converting. |
| rows | Yes | |
| as_of | Yes | when the newest price in this response was collected |
| years | Yes | |
| currency | Yes | ISO 4217 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a read-only, idempotent, non-destructive closed-world operation, so the safety profile is covered. The description adds genuinely useful mechanics beyond that: minimum terms and regular renewals are applied, and transfer_after_year changes the computation to include a later move. It does not disclose pricing caveats such as how promos or FX affect totals beyond what the schema already says.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the usage trigger, followed by the computational behavior and a size limit. The final "up to 20 domains or extensions" sentence largely restates maxItems in the schema, a small redundancy in an otherwise efficient description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explain return values, and all eight parameters are fully described in the schema. However, for a comparative costing tool with option-driven behavior, it omits how currency conversion, reseller tiers, and limited promos affect the comparison outcome — relevant caveats an agent would otherwise have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including currency, include_resellers, and include_limited_promos is already documented in structured form. The description reinforces the semantics of the year horizon and transfer_after_year, but adds little that the schema does not already carry; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific outcome — comparing long-run ownership cost across several names or extensions — and states the two modes (single registrar vs cheapest). It is clearly distinct from single-price siblings like compare_tld_prices or cheapest_registrar, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user compares the long-run cost of several names or extensions" gives an explicit trigger condition, and the registrar/cheapest dichotomy scopes the two usage modes. It lacks a when-not clause or named alternative for single-domain or single-year lookups, which is the remaining gap.
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.
10 tool updates
- Changed
cheapest_registrar10 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / results / items / properties / best / anyOfPrevious value: -[ - { - "description": "One registrar's prices for one extension.", - "properties": { - "includes": { - "properties": { - "icann_fee": { - "type": [ - "boolean", - "null" - ] - }, - "whois_privacy": { - "type": [ - "boolean", - "null" - ] - } - }, - "required": [ - "whois_privacy", - "icann_fee" - ], - "type": "object" - }, - "max_years": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "min_years": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "the shortest registration term (2 for .ai at most registrars)" - }, - "observed_at": { - "description": "the last time the source confirmed this price", - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - "register": { - "anyOf": [ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "renew": { - "anyOf": [ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "restore": { - "anyOf": [ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "source": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "kind": { - "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", - "enum": [ - "api", - "price_list", - "page", - "mirror" - ], - "type": "string" - }, - "url": { - "description": "where the price was read", - "type": "string" - } - }, - "required": [ - "id", - "kind", - "url" - ], - "type": "object" - }, - "stale": { - "description": "not confirmed for 3x the source's collection interval", - "type": "boolean" - }, - "tld": { - "description": "the extension", - "examples": [ - "com", - "co.uk" - ], - "type": "string" - }, - "totals": { - "anyOf": [ - { - "description": "The cost of owning the domain for `years` years (packages/core computeTco).", - "properties": { - "breakdown": { - "description": "year by year (in /v1/cheapest)", - "items": { - "properties": { - "amount": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "kind": { - "enum": [ - "register", - "transfer", - "renew" - ], - "type": "string" - }, - "promo": { - "type": "boolean" - }, - "year": { - "type": "integer" - } - }, - "required": [ - "year", - "amount", - "kind", - "promo" - ], - "type": "object" - }, - "type": "array" - }, - "first_payment": { - "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "per_year": { - "description": "total / years_paid", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo_applied": { - "type": "boolean" - }, - "start": { - "enum": [ - "register", - "transfer" - ], - "type": "string" - }, - "total": { - "description": "first payment plus every later year at the regular renew price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "description": "the horizon asked for (?years=)", - "type": "integer" - }, - "years_paid": { - "description": "years paid for: at least min_years when starting with a registration", - "type": "integer" - } - }, - "required": [ - "years", - "years_paid", - "start", - "first_payment", - "total", - "per_year", - "promo_applied" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "null when the register or renew price is unknown" - }, - "transfer": { - "anyOf": [ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } - ] - }, - "vat_included": { - "type": [ - "boolean", - "null" - ] - } - }, - "required": [ - "registrar", - "tld", - "register", - "renew", - "transfer", - "restore", - "min_years", - "max_years", - "includes", - "vat_included", - "totals", - "observed_at", - "source", - "stale" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "One registrar's prices for one extension.", + "properties": { + "includes": { + "properties": { + "icann_fee": { + "type": [ + "boolean", + "null" + ] + }, + "whois_privacy": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "whois_privacy", + "icann_fee" + ], + "type": "object" + }, + "max_years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "min_years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "the shortest registration term (2 for .ai at most registrars)" + }, + "observed_at": { + "description": "the last time the source confirmed this price", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "register": { + "anyOf": [ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "renew": { + "anyOf": [ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "restore": { + "anyOf": [ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "source": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "kind": { + "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", + "enum": [ + "api", + "price_list", + "page", + "mirror" + ], + "type": "string" + }, + "url": { + "description": "where the price was read", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ], + "type": "object" + }, + "stale": { + "description": "not confirmed for 3x the source's collection interval", + "type": "boolean" + }, + "tld": { + "description": "the extension", + "examples": [ + "com", + "co.uk" + ], + "type": "string" + }, + "totals": { + "anyOf": [ + { + "description": "The cost of owning the domain for `years` years (packages/core computeTco).", + "properties": { + "breakdown": { + "description": "year by year (in /v1/cheapest)", + "items": { + "properties": { + "amount": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "kind": { + "enum": [ + "register", + "transfer", + "renew" + ], + "type": "string" + }, + "promo": { + "type": "boolean" + }, + "year": { + "type": "integer" + } + }, + "required": [ + "year", + "amount", + "kind", + "promo" + ], + "type": "object" + }, + "type": "array" + }, + "estimated": { + "description": "a year whose regular price is unknown was priced at the regular renewal: the total is an estimate", + "type": "boolean" + }, + "first_payment": { + "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price; for a transfer, the transfer price x its term", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "limited_promo_skipped": { + "description": "a limited promotion runs (per customer, first-time customers) and was not counted: year 1 is the regular price", + "type": "boolean" + }, + "per_year": { + "description": "total / years_paid", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo_applied": { + "description": "year 1 is a promotional price", + "type": "boolean" + }, + "start": { + "enum": [ + "register", + "transfer" + ], + "type": "string" + }, + "total": { + "description": "first payment plus every later year at the regular renew price (never a renewal promotion)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "description": "the horizon asked for (?years=)", + "type": "integer" + }, + "years_paid": { + "description": "years paid for: at least min_years when starting with a registration", + "type": "integer" + } + }, + "required": [ + "years", + "years_paid", + "start", + "first_payment", + "total", + "per_year", + "promo_applied" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "null when the register or renew price is unknown" + }, + "transfer": { + "anyOf": [ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "vat_included": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "registrar", + "tld", + "register", + "renew", + "transfer", + "restore", + "min_years", + "max_years", + "includes", + "vat_included", + "totals", + "observed_at", + "source", + "stale" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / results / items / properties / runners_up / items / properties / register / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / results / items / properties / runners_up / items / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / results / items / properties / runners_up / items / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +} - changed
Output schema / properties / results / items / properties / runners_up / items / properties / renew / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / results / items / properties / runners_up / items / properties / restore / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / results / items / properties / runners_up / items / properties / totals / anyOfPrevious value: -[ - { - "description": "The cost of owning the domain for `years` years (packages/core computeTco).", - "properties": { - "breakdown": { - "description": "year by year (in /v1/cheapest)", - "items": { - "properties": { - "amount": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "kind": { - "enum": [ - "register", - "transfer", - "renew" - ], - "type": "string" - }, - "promo": { - "type": "boolean" - }, - "year": { - "type": "integer" - } - }, - "required": [ - "year", - "amount", - "kind", - "promo" - ], - "type": "object" - }, - "type": "array" - }, - "first_payment": { - "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "per_year": { - "description": "total / years_paid", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo_applied": { - "type": "boolean" - }, - "start": { - "enum": [ - "register", - "transfer" - ], - "type": "string" - }, - "total": { - "description": "first payment plus every later year at the regular renew price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "description": "the horizon asked for (?years=)", - "type": "integer" - }, - "years_paid": { - "description": "years paid for: at least min_years when starting with a registration", - "type": "integer" - } - }, - "required": [ - "years", - "years_paid", - "start", - "first_payment", - "total", - "per_year", - "promo_applied" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cost of owning the domain for `years` years (packages/core computeTco).", + "properties": { + "breakdown": { + "description": "year by year (in /v1/cheapest)", + "items": { + "properties": { + "amount": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "kind": { + "enum": [ + "register", + "transfer", + "renew" + ], + "type": "string" + }, + "promo": { + "type": "boolean" + }, + "year": { + "type": "integer" + } + }, + "required": [ + "year", + "amount", + "kind", + "promo" + ], + "type": "object" + }, + "type": "array" + }, + "estimated": { + "description": "a year whose regular price is unknown was priced at the regular renewal: the total is an estimate", + "type": "boolean" + }, + "first_payment": { + "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price; for a transfer, the transfer price x its term", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "limited_promo_skipped": { + "description": "a limited promotion runs (per customer, first-time customers) and was not counted: year 1 is the regular price", + "type": "boolean" + }, + "per_year": { + "description": "total / years_paid", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo_applied": { + "description": "year 1 is a promotional price", + "type": "boolean" + }, + "start": { + "enum": [ + "register", + "transfer" + ], + "type": "string" + }, + "total": { + "description": "first payment plus every later year at the regular renew price (never a renewal promotion)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "description": "the horizon asked for (?years=)", + "type": "integer" + }, + "years_paid": { + "description": "years paid for: at least min_years when starting with a registration", + "type": "integer" + } + }, + "required": [ + "years", + "years_paid", + "start", + "first_payment", + "total", + "per_year", + "promo_applied" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / results / items / properties / runners_up / items / properties / transfer / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
check_availability3 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / results / items / properties / cheapest / anyOfPrevious value: -[ - { - "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", - "properties": { - "first_payment": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "min_years": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "observed_at": { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - "promo_first_year": { - "type": "boolean" - }, - "register": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "year 1 now (a promotion when one runs)" - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "renew": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular renewal" - }, - "source": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "kind": { - "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", - "enum": [ - "api", - "price_list", - "page", - "mirror" - ], - "type": "string" - }, - "url": { - "description": "where the price was read", - "type": "string" - } - }, - "required": [ - "id", - "kind", - "url" - ], - "type": "object" - }, - "total": { - "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "type": "integer" - } - }, - "required": [ - "registrar", - "years", - "register", - "renew", - "first_payment", - "total", - "min_years", - "promo_first_year", - "observed_at", - "source" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", + "properties": { + "estimated": { + "description": "the total prices a year at the regular renewal because its own regular price is unknown", + "type": "boolean" + }, + "first_payment": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "min_years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "observed_at": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "promo_first_year": { + "type": "boolean" + }, + "register": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "year 1 now (a promotion when one runs)" + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "renew": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular renewal" + }, + "source": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "kind": { + "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", + "enum": [ + "api", + "price_list", + "page", + "mirror" + ], + "type": "string" + }, + "url": { + "description": "where the price was read", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ], + "type": "object" + }, + "total": { + "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "type": "integer" + } + }, + "required": [ + "registrar", + "years", + "register", + "renew", + "first_payment", + "total", + "min_years", + "promo_first_year", + "observed_at", + "source" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
compare_tld_prices11 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / offers / items / properties / register / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / offers / items / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / offers / items / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +} - changed
Output schema / properties / offers / items / properties / renew / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / offers / items / properties / restore / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / offers / items / properties / totals / anyOfPrevious value: -[ - { - "description": "The cost of owning the domain for `years` years (packages/core computeTco).", - "properties": { - "breakdown": { - "description": "year by year (in /v1/cheapest)", - "items": { - "properties": { - "amount": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "kind": { - "enum": [ - "register", - "transfer", - "renew" - ], - "type": "string" - }, - "promo": { - "type": "boolean" - }, - "year": { - "type": "integer" - } - }, - "required": [ - "year", - "amount", - "kind", - "promo" - ], - "type": "object" - }, - "type": "array" - }, - "first_payment": { - "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "per_year": { - "description": "total / years_paid", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo_applied": { - "type": "boolean" - }, - "start": { - "enum": [ - "register", - "transfer" - ], - "type": "string" - }, - "total": { - "description": "first payment plus every later year at the regular renew price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "description": "the horizon asked for (?years=)", - "type": "integer" - }, - "years_paid": { - "description": "years paid for: at least min_years when starting with a registration", - "type": "integer" - } - }, - "required": [ - "years", - "years_paid", - "start", - "first_payment", - "total", - "per_year", - "promo_applied" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cost of owning the domain for `years` years (packages/core computeTco).", + "properties": { + "breakdown": { + "description": "year by year (in /v1/cheapest)", + "items": { + "properties": { + "amount": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "kind": { + "enum": [ + "register", + "transfer", + "renew" + ], + "type": "string" + }, + "promo": { + "type": "boolean" + }, + "year": { + "type": "integer" + } + }, + "required": [ + "year", + "amount", + "kind", + "promo" + ], + "type": "object" + }, + "type": "array" + }, + "estimated": { + "description": "a year whose regular price is unknown was priced at the regular renewal: the total is an estimate", + "type": "boolean" + }, + "first_payment": { + "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price; for a transfer, the transfer price x its term", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "limited_promo_skipped": { + "description": "a limited promotion runs (per customer, first-time customers) and was not counted: year 1 is the regular price", + "type": "boolean" + }, + "per_year": { + "description": "total / years_paid", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo_applied": { + "description": "year 1 is a promotional price", + "type": "boolean" + }, + "start": { + "enum": [ + "register", + "transfer" + ], + "type": "string" + }, + "total": { + "description": "first payment plus every later year at the regular renew price (never a renewal promotion)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "description": "the horizon asked for (?years=)", + "type": "integer" + }, + "years_paid": { + "description": "years paid for: at least min_years when starting with a registration", + "type": "integer" + } + }, + "required": [ + "years", + "years_paid", + "start", + "first_payment", + "total", + "per_year", + "promo_applied" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / offers / items / properties / transfer / anyOfPrevious value: -[ - { - "properties": { - "native": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" - }, - "price": { - "description": "what one year costs now: the promotional price while a promotion runs, else the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo": { - "description": "price is a promotion (first year only, or until promo_ends_at)", - "type": "boolean" - }, - "promo_conditions": { - "description": "the source's conditions for the promotion, as text", - "type": [ - "string", - "null" - ] - }, - "promo_ends_at": { - "anyOf": [ - { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regular": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular (list) price; null when the source gives only a promotional price" - } - }, - "required": [ - "price", - "regular", - "promo", - "promo_ends_at", - "promo_conditions", - "native" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "coupon": { + "anyOf": [ + { + "description": "The coupon code that lowers this price most, as the registrar's own source lists it. Seen at the source, not tested at checkout. Never part of `price`, the totals or any ranking.", + "properties": { + "code": { + "examples": [ + "AWESOMENESS" + ], + "type": "string" + }, + "ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "first_year_only": { + "type": [ + "boolean", + "null" + ] + }, + "last_seen_at": { + "description": "the last time we saw the code at its source; codes are not tested at checkout", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "max_per_customer": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "new_customers_only": { + "type": [ + "boolean", + "null" + ] + }, + "price": { + "description": "this price with the code (year 1, or the one operation it covers)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "saving": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "code", + "price", + "saving", + "first_year_only", + "new_customers_only", + "max_per_customer", + "ends_at", + "last_seen_at", + "source_url" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a coupon code that lowers this price, beside it (never in it); null when none is listed" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "price in the registrar's own currency, when it was converted; null when it is already in that currency" + }, + "price": { + "description": "what one year costs now (per year, whatever the term): the promotional price while a promotion runs, else the regular price", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo": { + "description": "price is a promotion (first year only, or until promo_ends_at)", + "type": "boolean" + }, + "promo_conditions": { + "description": "the source's conditions for the promotion, as text", + "type": [ + "string", + "null" + ] + }, + "promo_ends_at": { + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "promo_inferred": { + "description": "the source marks no promotion, but this register price is below the renewal: we treat it as a first-year price whose regular price is unknown", + "type": "boolean" + }, + "promo_limited": { + "description": "the promotion is limited: capped per customer or for first-time / new customers only. It is shown, but totals, rankings and cheapest use the regular price instead (include_limited_promos=true counts it)", + "type": "boolean" + }, + "promo_years": { + "description": "the promotion covers the first N years of the term (default 1)", + "type": "integer" + }, + "regular": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular (list) price per year; null when unknown (the source gives only a promotional or first-year price)" + }, + "scheduled": { + "anyOf": [ + { + "properties": { + "from": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "regular": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "regular", + "from" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "a change of the regular per-year price the source has announced, and when it takes effect" + }, + "term_years": { + "description": "the shortest term this operation is sold for, in years (2 for a .ai registration, or a transfer that adds 2 years); price is per year, so the operation costs price x term_years", + "type": "integer" + } + }, + "required": [ + "price", + "regular", + "promo", + "promo_ends_at", + "promo_conditions", + "native" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / stats / properties / median_registerAdded value: +{ + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / stats / properties / min_register / descriptionAdded value: +"a limited promotion counts at its regular price"
- Changed
get_registrar2 fields changed- added
Output schema / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +}
- Changed
get_tld7 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / tld / properties / cheapest_register / anyOfPrevious value: -[ - { - "properties": { - "price": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - } - }, - "required": [ - "price", - "registrar" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "price": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + } + }, + "required": [ + "price", + "registrar" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / tld / properties / cheapest_register / descriptionAdded value: +"the lowest year-1 price; a limited promotion counts at its regular price" - changed
Output schema / properties / tld / properties / cheapest_renew / anyOfPrevious value: -[ - { - "properties": { - "price": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - } - }, - "required": [ - "price", - "registrar" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "price": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + } + }, + "required": [ + "price", + "registrar" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / tld / properties / cheapest_total / anyOfPrevious value: -[ - { - "properties": { - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "total": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "type": "integer" - } - }, - "required": [ - "years", - "total", - "registrar" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "total": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "type": "integer" + } + }, + "required": [ + "years", + "total", + "registrar" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / tld / properties / median_registerAdded value: +{ + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the typical year-1 price (median over fresh offers; a limited promotion counts at its regular price)" +}
- Changed
list_coupons34 fields changed- added
Input schema / properties / active_onlyAdded value: +{ + "default": true, + "description": "false: also coupons that expired in the last 30 days", + "type": "boolean" +} - changed
Output schema / properties / coupons / descriptionPrevious value: -"coupon codes seen at their source (none collected yet)"New value: +"coupon codes seen at the registrars' own sources, by registrar" - added
Output schema / properties / coupons / items / descriptionAdded value: +"A coupon code as the registrar's own API, price list or promotions page shows it. Seen at the source, never tested at checkout." - added
Output schema / properties / coupons / items / properties / all_tldsAdded value: +{ + "description": "the source says the code applies to every extension", + "type": "boolean" +} - added
Output schema / properties / coupons / items / properties / code / examplesAdded value: +[ + "AWESOMENESS" +] - changed
Output schema / properties / coupons / items / properties / code / typePrevious value: -[ - "string", - "null" -]New value: +"string" - added
Output schema / properties / coupons / items / properties / description / examplesAdded value: +[ + "1.00 USD off a registration, first year only, 1 per customer" +] - added
Output schema / properties / coupons / items / properties / discountAdded value: +{ + "properties": { + "amount": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "kind": { + "description": "amount: `amount` off; percent: `percent`% off; price: the price with the code is `amount`", + "enum": [ + "amount", + "percent", + "price" + ], + "type": "string" + }, + "native": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "`amount` as the source gives it, when it was converted" + }, + "percent": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "kind", + "percent", + "amount", + "native" + ], + "type": "object" +} - added
Output schema / properties / coupons / items / properties / ends_atAdded value: +{ + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / coupons / items / properties / exampleAdded value: +{ + "anyOf": [ + { + "properties": { + "price": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "tld": { + "type": "string" + }, + "with_code": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "tld", + "price", + "with_code" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "one extension's current price and the price with the code" +} - added
Output schema / properties / coupons / items / properties / expired_atAdded value: +{ + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / coupons / items / properties / expired_reasonAdded value: +{ + "anyOf": [ + { + "enum": [ + "ended", + "missing" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ended: past its end date; missing: its source stopped listing it (2 consecutive collections)" +} - added
Output schema / properties / coupons / items / properties / expires_at / descriptionAdded value: +"same as ends_at" - added
Output schema / properties / coupons / items / properties / first_seen_atAdded value: +{ + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" +} - added
Output schema / properties / coupons / items / properties / first_year_onlyAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / coupons / items / properties / last_seen_atAdded value: +{ + "description": "the last collection that saw the code at its source", + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" +} - added
Output schema / properties / coupons / items / properties / max_per_customerAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / coupons / items / properties / new_customers_onlyAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / coupons / items / properties / observed_at / descriptionAdded value: +"same as last_seen_at" - added
Output schema / properties / coupons / items / properties / operationAdded value: +{ + "description": "register (a new registration, year 1), renew (one more year), transfer (move in; usually adds a year), restore (redeem an expired domain in its redemption period)", + "enum": [ + "register", + "renew", + "transfer", + "restore" + ], + "type": "string" +} - added
Output schema / properties / coupons / items / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / coupons / items / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +} - added
Output schema / properties / coupons / items / properties / sourceAdded value: +{ + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "kind": { + "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", + "enum": [ + "api", + "price_list", + "page", + "mirror" + ], + "type": "string" + }, + "url": { + "description": "where the price was read", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ], + "type": "object" +} - added
Output schema / properties / coupons / items / properties / staleAdded value: +{ + "description": "its source hasn't been collected for 3x its interval", + "type": "boolean" +} - added
Output schema / properties / coupons / items / properties / starts_atAdded value: +{ + "anyOf": [ + { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / coupons / items / properties / statusAdded value: +{ + "enum": [ + "active", + "expired" + ], + "type": "string" +} - added
Output schema / properties / coupons / items / properties / termsAdded value: +{ + "description": "the source's terms, as text", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / coupons / items / properties / tlds / descriptionAdded value: +"the extensions the code applies to; empty when all_tlds" - changed
Output schema / properties / coupons / items / requiredPrevious value: -[ - "registrar", - "code", - "tlds", - "description", - "expires_at", - "observed_at", - "source_url" -]New value: +[ + "registrar", + "code", + "operation", + "tlds", + "all_tlds", + "description", + "discount", + "first_year_only", + "new_customers_only", + "max_per_customer", + "starts_at", + "ends_at", + "expires_at", + "terms", + "status", + "expired_at", + "expired_reason", + "first_seen_at", + "last_seen_at", + "observed_at", + "stale", + "example", + "source", + "source_url" +] - added
Output schema / properties / fxAdded value: +{ + "anyOf": [ + { + "properties": { + "date": { + "description": "the date of the primary rates (ECB reference rates)", + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + "rates": { + "additionalProperties": { + "properties": { + "date": { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + "rate": { + "description": "units of the response currency per unit of this currency", + "type": "number" + }, + "source": { + "type": "string" + } + }, + "required": [ + "rate", + "date", + "source" + ], + "type": "object" + }, + "description": "every rate used in this response, by native currency", + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "source": { + "examples": [ + "European Central Bank euro foreign exchange reference rates" + ], + "type": "string" + } + }, + "required": [ + "date", + "source", + "rates" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "How converted prices were converted; null when nothing needed converting." +} - added
Output schema / properties / promotions / items / properties / promo_limitedAdded value: +{ + "description": "capped per customer or for first-time customers only", + "type": "boolean" +} - added
Output schema / properties / promotions / items / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / promotions / items / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "as_of", - "currency", - "coupons", - "promotions", - "note" -]New value: +[ + "as_of", + "currency", + "fx", + "coupons", + "promotions", + "note" +]
- Changed
price_history2 fields changed- added
Output schema / properties / series / items / properties / registrar / properties / noteAdded value: +{ + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / series / items / properties / registrar / properties / pricing_tierAdded value: +{ + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" +}
- Changed
search_name_across_tlds3 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / results / items / properties / cheapest / anyOfPrevious value: -[ - { - "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", - "properties": { - "first_payment": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "min_years": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "observed_at": { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - "promo_first_year": { - "type": "boolean" - }, - "register": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "year 1 now (a promotion when one runs)" - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "renew": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular renewal" - }, - "source": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "kind": { - "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", - "enum": [ - "api", - "price_list", - "page", - "mirror" - ], - "type": "string" - }, - "url": { - "description": "where the price was read", - "type": "string" - } - }, - "required": [ - "id", - "kind", - "url" - ], - "type": "object" - }, - "total": { - "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "type": "integer" - } - }, - "required": [ - "registrar", - "years", - "register", - "renew", - "first_payment", - "total", - "min_years", - "promo_first_year", - "observed_at", - "source" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", + "properties": { + "estimated": { + "description": "the total prices a year at the regular renewal because its own regular price is unknown", + "type": "boolean" + }, + "first_payment": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "min_years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "observed_at": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "promo_first_year": { + "type": "boolean" + }, + "register": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "year 1 now (a promotion when one runs)" + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "renew": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular renewal" + }, + "source": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "kind": { + "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", + "enum": [ + "api", + "price_list", + "page", + "mirror" + ], + "type": "string" + }, + "url": { + "description": "where the price was read", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ], + "type": "object" + }, + "total": { + "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "type": "integer" + } + }, + "required": [ + "registrar", + "years", + "register", + "renew", + "first_payment", + "total", + "min_years", + "promo_first_year", + "observed_at", + "source" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
suggest_names3 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / suggestions / items / properties / cheapest / anyOfPrevious value: -[ - { - "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", - "properties": { - "first_payment": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "min_years": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "observed_at": { - "examples": [ - "2026-11-06T04:12:00.000Z" - ], - "format": "date-time", - "type": "string" - }, - "promo_first_year": { - "type": "boolean" - }, - "register": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "year 1 now (a promotion when one runs)" - }, - "registrar": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "renew": { - "anyOf": [ - { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "the regular renewal" - }, - "source": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "kind": { - "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", - "enum": [ - "api", - "price_list", - "page", - "mirror" - ], - "type": "string" - }, - "url": { - "description": "where the price was read", - "type": "string" - } - }, - "required": [ - "id", - "kind", - "url" - ], - "type": "object" - }, - "total": { - "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "type": "integer" - } - }, - "required": [ - "registrar", - "years", - "register", - "renew", - "first_payment", - "total", - "min_years", - "promo_first_year", - "observed_at", - "source" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cheapest registrar to own the name for `years` (standard price; a premium name costs more).", + "properties": { + "estimated": { + "description": "the total prices a year at the regular renewal because its own regular price is unknown", + "type": "boolean" + }, + "first_payment": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "min_years": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "observed_at": { + "examples": [ + "2026-11-06T04:12:00.000Z" + ], + "format": "date-time", + "type": "string" + }, + "promo_first_year": { + "type": "boolean" + }, + "register": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "year 1 now (a promotion when one runs)" + }, + "registrar": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "renew": { + "anyOf": [ + { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "the regular renewal" + }, + "source": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "kind": { + "description": "api: the registrar's own price API; price_list: a file or JSON the registrar publishes; page: its price page; mirror: a third party's copy of the registrar's prices", + "enum": [ + "api", + "price_list", + "page", + "mirror" + ], + "type": "string" + }, + "url": { + "description": "where the price was read", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "url" + ], + "type": "object" + }, + "total": { + "description": "the cost to own it for `years` (computeTco), the same number as /v1/tlds/{tld}/prices", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "type": "integer" + } + }, + "required": [ + "registrar", + "years", + "register", + "renew", + "first_payment", + "total", + "min_years", + "promo_first_year", + "observed_at", + "source" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
total_cost_of_ownership5 fields changed- added
Input schema / properties / include_limited_promosAdded value: +{ + "default": false, + "description": "count limited promotions (one per customer, first-time customers only) in totals and rankings; default false: they are listed and flagged promo_limited, but year 1 is priced at the regular price", + "type": "boolean" +} - added
Input schema / properties / include_resellersAdded value: +{ + "default": false, + "description": "include registrars whose prices are a reseller account's tier (pricing_tier reseller, e.g. eNom); default false", + "type": "boolean" +} - changed
Output schema / properties / rows / items / properties / registrar / anyOfPrevious value: -[ - { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / rows / items / properties / switch / anyOfPrevious value: -[ - { - "properties": { - "after_year": { - "type": "integer" - }, - "saving": { - "description": "total without the switch minus total with it", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "to": { - "properties": { - "id": { - "examples": [ - "porkbun" - ], - "type": "string" - }, - "name": { - "examples": [ - "Porkbun" - ], - "type": "string" - }, - "url": { - "description": "the registrar's website (a plain link, no affiliate code)", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name", - "url" - ], - "type": "object" - }, - "total": { - "description": "register at `registrar`, transfer to `to` after `after_year` years, renew there", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "transfer": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - } - }, - "required": [ - "after_year", - "to", - "transfer", - "total", - "saving" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "after_year": { + "type": "integer" + }, + "saving": { + "description": "total without the switch minus total with it", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "to": { + "properties": { + "id": { + "examples": [ + "porkbun" + ], + "type": "string" + }, + "name": { + "examples": [ + "Porkbun" + ], + "type": "string" + }, + "note": { + "anyOf": [ + { + "description": "A short, sourced note about the registrar's prices (not a price we rank by).", + "properties": { + "checked_on": { + "anyOf": [ + { + "examples": [ + "2026-11-05" + ], + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "text": { + "examples": [ + "NameSilo's free discount program prices .com at $12.00 (retail $19.99)." + ], + "type": "string" + }, + "url": { + "description": "where the note's facts come from", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "text", + "url", + "checked_on" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "pricing_tier": { + "description": "retail: anyone can buy at these prices; reseller: the prices are a reseller account's tier (eNom's Silver), left out of consumer rankings unless include_resellers=true", + "enum": [ + "retail", + "reseller" + ], + "type": "string" + }, + "url": { + "description": "the registrar's website (a plain link, no affiliate code)", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "url" + ], + "type": "object" + }, + "total": { + "description": "register at `registrar`, transfer to `to` after `after_year` years, renew there", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "transfer": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + } + }, + "required": [ + "after_year", + "to", + "transfer", + "total", + "saving" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / rows / items / properties / totals / anyOfPrevious value: -[ - { - "description": "The cost of owning the domain for `years` years (packages/core computeTco).", - "properties": { - "breakdown": { - "description": "year by year (in /v1/cheapest)", - "items": { - "properties": { - "amount": { - "description": "An amount in major units (12.99), in `currency`.", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "kind": { - "enum": [ - "register", - "transfer", - "renew" - ], - "type": "string" - }, - "promo": { - "type": "boolean" - }, - "year": { - "type": "integer" - } - }, - "required": [ - "year", - "amount", - "kind", - "promo" - ], - "type": "object" - }, - "type": "array" - }, - "first_payment": { - "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "per_year": { - "description": "total / years_paid", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "promo_applied": { - "type": "boolean" - }, - "start": { - "enum": [ - "register", - "transfer" - ], - "type": "string" - }, - "total": { - "description": "first payment plus every later year at the regular renew price", - "properties": { - "amount": { - "type": "number" - }, - "currency": { - "description": "ISO 4217", - "examples": [ - "USD" - ], - "pattern": "^[A-Z]{3}$", - "type": "string" - } - }, - "required": [ - "amount", - "currency" - ], - "type": "object" - }, - "years": { - "description": "the horizon asked for (?years=)", - "type": "integer" - }, - "years_paid": { - "description": "years paid for: at least min_years when starting with a registration", - "type": "integer" - } - }, - "required": [ - "years", - "years_paid", - "start", - "first_payment", - "total", - "per_year", - "promo_applied" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "The cost of owning the domain for `years` years (packages/core computeTco).", + "properties": { + "breakdown": { + "description": "year by year (in /v1/cheapest)", + "items": { + "properties": { + "amount": { + "description": "An amount in major units (12.99), in `currency`.", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "kind": { + "enum": [ + "register", + "transfer", + "renew" + ], + "type": "string" + }, + "promo": { + "type": "boolean" + }, + "year": { + "type": "integer" + } + }, + "required": [ + "year", + "amount", + "kind", + "promo" + ], + "type": "object" + }, + "type": "array" + }, + "estimated": { + "description": "a year whose regular price is unknown was priced at the regular renewal: the total is an estimate", + "type": "boolean" + }, + "first_payment": { + "description": "charged at checkout: year 1 (promotional price if one runs) plus the rest of the minimum term at the regular price; for a transfer, the transfer price x its term", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "limited_promo_skipped": { + "description": "a limited promotion runs (per customer, first-time customers) and was not counted: year 1 is the regular price", + "type": "boolean" + }, + "per_year": { + "description": "total / years_paid", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "promo_applied": { + "description": "year 1 is a promotional price", + "type": "boolean" + }, + "start": { + "enum": [ + "register", + "transfer" + ], + "type": "string" + }, + "total": { + "description": "first payment plus every later year at the regular renew price (never a renewal promotion)", + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "description": "ISO 4217", + "examples": [ + "USD" + ], + "pattern": "^[A-Z]{3}$", + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "years": { + "description": "the horizon asked for (?years=)", + "type": "integer" + }, + "years_paid": { + "description": "years paid for: at least min_years when starting with a registration", + "type": "integer" + } + }, + "required": [ + "years", + "years_paid", + "start", + "first_payment", + "total", + "per_year", + "promo_applied" + ], + "type": "object" + }, + { + "type": "null" + } +]
10 tool updates
- First observed
cheapest_registrar - First observed
check_availability - First observed
compare_tld_prices - First observed
get_registrar - First observed
get_tld - First observed
list_coupons - First observed
price_history - First observed
search_name_across_tlds - First observed
suggest_names - First observed
total_cost_of_ownership
Related MCP Connectors
Compare domain prices across 145+ registrars and 1,100+ TLDs, find promo codes, check availability.
Live domain availability and prices across registrars, ranked by true two-year cost.
Compare domain registration and renewal prices across registrars and check exact-name availability.
Domain availability and prices from 40+ registrars, name checks, DNS setup, and a domain broker
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables AI assistants to compare live domain registration, renewal, and transfer prices across many registrars and TLDs, find promo codes, and check domain availability.47 npmMIT- AlicenseNot gradedqualityDmaintenanceEnables checking domain availability and registration prices across multiple TLDs and providers. Users can find available domain names and compare pricing through natural language.11 npm10MIT
- AlicenseAqualityAmaintenanceEnables 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.818 npmMIT
- AlicenseAqualityAmaintenanceDomain availability + registrar price comparison across 52 TLDs — see not just if a domain is free, but where it's cheapest (7 registrars, renewal traps exposed). Honest: shows an Unverified state instead of guessing. Free, no API key. For Claude, ChatGPT, Cursor & any MCP client.475 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.