Skip to content

fix(domain): say quoted prices exclude taxes and fees, and show the order after purchase [GDDEVPLAT-389] - #349

Merged
jpage-godaddy merged 1 commit into
mainfrom
icann-and-taxes
Oct 23, 2026
Merged

jpage-godaddy merged 1 commit into
mainfrom
icann-and-taxes

Conversation

@jpage-godaddy

Copy link
Copy Markdown
Collaborator

Why

The price shown by domain suggest, available and quote is the registration price only. The ICANN fee and any tax are added when you register. In a test-environment purchase, a .com quoted at 9.19 USD was charged 9.39 USD (ICANN fee 0.20, tax 0 on that account). Until now nothing in the CLI said so:

  • domain quote presented the price as final, and the guide said "you're charged exactly what the quote showed".
  • The Fees column was blank for ordinary domains, which reads as "no fees". It only ever lists a premium domain's extra cost.
  • domain purchase printed price: 9.19 after the charge, which looks like a receipt but is the quote echoed back.

Fixes GDDEVPLAT-389. Follows GDDEVPLAT-388 (API docs now state that v3 prices exclude taxes and fees).

What changed

  • Wording: the quote next step now reads "Register at the quoted price (plus applicable taxes and fees) within ~10 minutes — requires --agree and --confirm." The quote price is labelled Price (before taxes and fees). The available and suggest next steps say "Prices exclude applicable taxes and fees." Command help, the domain-purchase guide and the --confirm prompt say the same, and the false "exactly what the quote showed" claim is gone.
  • Premium fees: the Fees columns are now Premium Fees in quote, available and suggest. JSON field names are unchanged.
  • After purchase: domain purchase returns the orderId and a note saying price is the quoted price, not the amount charged. price and currency keep their names, so existing scripts are unaffected. Its next steps include shopping order get <order-id> --wait, which shows the total charged. domain operation status offers the same next step once an order exists.
  • AI assistants: the shared purchase-confirmation instruction now tells them to say that taxes and fees are added on top before asking for consent.

Design note

purchase does not look up the order total itself. shopping.order:read is a step-up-only scope, so adding it would make every domain buyer re-consent, and calling the order API without it would fail for most users. The total is one suggested command away, and only users who run it step up.

Testing

  • cargo check, cargo clippy --workspace -- -D warnings, cargo fmt --check, cargo test --workspace and check-module-size.sh all pass.
  • New tests cover the quote next step in its human and AI-assistant forms, the price label, the purchase result (order ID and note, no JSON nulls when absent), and the order next step.
  • Verified against the test environment: a purchase returned orderId, the note and the order next step, and shopping order get showed a total of 9.39 USD against the 9.19 USD quote.
  • Not covered: a non-US billing address (tax) and premium inventory (neither is available in the test environment).

🤖 Generated with Claude Code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The shared order next action uses a parameter key that does not match the target command’s argument, violating the documented structured-action contract.

1 open issue
What changed in this PR

Clarifies that domain registration quotes exclude taxes and fees, and connects purchase results to the order showing the actual charge without adding order-read authorization to the purchase flow.

Changes:

  • Updates price labels, premium-fee headings, help, and consent guidance.
  • Adds an optional order ID and quoted-price note to purchase output.
  • Adds order lookup next actions and regression tests.
File Description
rust/​src/​domain/​suggest.rs Clarifies price exclusions and premium-fee headings.
rust/​src/​domain/​quote.rs Updates price labels, purchase guidance, and tests.
rust/​src/​domain/​purchase.rs Returns order details and clarifies quoted prices and consent.
rust/​src/​domain/​operation.rs Adds an order lookup next action.
rust/​src/​domain/​mod.rs Updates shared AI-assistant purchase confirmation guidance.
rust/​src/​domain/​guides/​domain-purchase.md Explains additional charges and post-purchase order lookup.
rust/​src/​domain/​common.rs Adds shared price wording and an order-action helper with tests.
rust/​src/​domain/​available.rs Clarifies premium fees and price exclusions.

Review effort: Balanced

Comment thread rust/src/domain/common.rs
…rder after purchase [GDDEVPLAT-389]

The price shown by `domain suggest`, `available` and `quote` is the registration price only. The ICANN fee and any tax are added when you register, so the total charged is higher (a test purchase quoted at 9.19 USD was charged 9.39 USD).

- Say so where the price appears: the `quote` next step ("plus applicable taxes and fees"), the `Price` label, the `available` and `suggest` next steps, command help, the purchase guide and the `--confirm` prompt. The guide no longer claims you are charged exactly what the quote showed.
- Rename the `Fees` columns to `Premium Fees`. They list only a premium domain's extra cost and are empty for an ordinary domain, which previously read as "no fees".
- `domain purchase` now returns the `orderId` and notes that `price` is the quoted price, not the amount charged. Its next steps point to `shopping order get <order-id>`, which shows the total charged. `domain operation status` does the same once an order exists.
- Tell AI assistants to relay that taxes and fees are added on top of the quoted price before they ask for consent.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jpage-godaddy
jpage-godaddy merged commit 9671f97 into main Oct 23, 2026
5 checks passed
@jpage-godaddy
jpage-godaddy deleted the icann-and-taxes branch October 23, 2026 00:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants