@unstoppabledomains/ud-cli 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: ud-cli
3
+ description: Domain registrar CLI — search, register, and manage domains via Unstoppable Domains. Use when the user needs domain registration, DNS record management, marketplace listings, cart/checkout, domain transfers, or any domain management task.
4
+ allowed-tools: Bash(ud:*)
5
+ ---
6
+
7
+ # Domain Management with ud-cli
8
+
9
+ ## Prerequisites
10
+
11
+ ```bash
12
+ ud auth login # OAuth (opens browser)
13
+ ud auth login -k <key> # API key (ud_mcp_ + 64 hex chars)
14
+ ud auth status # Check current auth
15
+ ```
16
+
17
+ ## Global Options
18
+
19
+ ```
20
+ --format json|table|csv Output format (default: table)
21
+ --fields [cols] Show available fields or select columns (e.g., name,expiresAt)
22
+ --data <json> JSON request body for complex operations
23
+ --file <path> Read JSON request body from file
24
+ --domains-file <path> Read domain list from file (one per line)
25
+ --quiet Suppress output except errors
26
+ --env production|sandbox Override environment
27
+ ```
28
+
29
+ ## Commands
30
+
31
+ ### Search & Discovery
32
+
33
+ ```bash
34
+ ud search <query> # Search for available domains
35
+ ud search <query> --tlds com,io --limit 20
36
+ ud tlds # List available TLDs
37
+ ```
38
+
39
+ ### Portfolio
40
+
41
+ ```bash
42
+ ud domains list # List your domains
43
+ ud domains get <domains...> # Detailed domain info
44
+ ud domains push <domains...> # Transfer to another user (requires --otp-code)
45
+ ud domains operations <domains...> # Check pending operations
46
+ ```
47
+
48
+ ### Domain Settings
49
+
50
+ ```bash
51
+ ud domains tags add <domains...> --tags tag1,tag2
52
+ ud domains tags remove <domains...> --tags tag1,tag2
53
+ ud domains flags update <domains...> # WHOIS privacy, transfer lock
54
+ ud domains auto-renewal update <domains...> --enabled true|false
55
+ ```
56
+
57
+ ### DNS Records
58
+
59
+ ```bash
60
+ ud domains dns records list <domain>
61
+ ud domains dns records add <domain> --type A --values 1.2.3.4
62
+ ud domains dns records update # Update by record ID (use --data)
63
+ ud domains dns records remove # Remove by record ID (use --data)
64
+ ud domains dns records remove-all <domains...> --confirm
65
+ ```
66
+
67
+ ### DNS Nameservers
68
+
69
+ ```bash
70
+ ud domains dns nameservers list <domain>
71
+ ud domains dns nameservers set-custom # 2-12 hostnames (use --data)
72
+ ud domains dns nameservers set-default # Re-enable UD DNS management
73
+ ```
74
+
75
+ ### Hosting
76
+
77
+ ```bash
78
+ ud domains hosting redirects list <domain>
79
+ ud domains hosting redirects add # 301/302 redirects (use --data)
80
+ ud domains hosting redirects remove # Remove redirect config
81
+ ud domains hosting landers generate <domains...> # AI landing page
82
+ ud domains hosting landers status <domains...> # Check generation
83
+ ud domains hosting landers remove <domains...> # Remove landing page
84
+ ```
85
+
86
+ ### ICANN Contacts
87
+
88
+ ```bash
89
+ ud domains contacts list # List contacts (needed for DNS domain checkout)
90
+ ud domains contacts create # Create ICANN contact (use --data)
91
+ ```
92
+
93
+ ### Cart
94
+
95
+ ```bash
96
+ ud cart add [domain...] # Smart add — auto-detects source type
97
+ ud cart add registration <domains...> # Fresh registration
98
+ ud cart add listed <domains...> # UD marketplace listing
99
+ ud cart add afternic <domains...> # Afternic marketplace
100
+ ud cart add sedo <domains...> # Sedo marketplace
101
+ ud cart add renewal <domains...> # Renew owned domains
102
+ ud cart get # View cart with pricing
103
+ ud cart remove # Remove items
104
+ ud cart checkout --confirm # Complete purchase
105
+ ud cart url # Get browser checkout URL
106
+ ud cart payment-methods # List payment methods
107
+ ud cart add-payment-method # Get URL to add payment method
108
+ ```
109
+
110
+ ### Marketplace
111
+
112
+ ```bash
113
+ ud marketplace listings create <domains...> --price 99.99
114
+ ud marketplace listings update # Update price/settings (use --data)
115
+ ud marketplace listings cancel --confirm
116
+ ud marketplace offers list
117
+ ud marketplace offers respond # Accept/reject offers (use --data)
118
+ ud marketplace leads list
119
+ ud marketplace leads get <domain> # Get or create conversation
120
+ ud marketplace leads messages # List messages (--conversation-id)
121
+ ud marketplace leads send # Send message (--conversation-id --content)
122
+ ```
123
+
124
+ ## Key Workflows
125
+
126
+ ### Search and Purchase (most common)
127
+
128
+ Search results include `marketplace.source` and `marketplace.status` — these determine which cart tool to use. See [references/search-and-purchase.md](references/search-and-purchase.md) for the full decision table.
129
+
130
+ Quick version with smart add:
131
+ ```bash
132
+ ud search mybusiness --format json # Check availability + marketplace info
133
+ ud cart add mybusiness.com mybusiness.io # Auto-detects correct cart type
134
+ ud cart get # Review pricing
135
+ ud cart checkout --confirm # Purchase
136
+ ```
137
+
138
+ ### DNS Domain Registration
139
+
140
+ DNS domains (.com, .org, .net) require an ICANN contact before checkout.
141
+ ```bash
142
+ ud domains contacts list # Check for existing contacts
143
+ ud domains contacts create --data '...' # Create if needed
144
+ ud cart add registration example.com
145
+ ud cart checkout --confirm
146
+ ```
147
+
148
+ ### DNS Setup
149
+
150
+ ```bash
151
+ ud domains dns nameservers list example.com # Verify UD nameservers
152
+ ud domains dns records list example.com
153
+ ud domains dns records add example.com --type A --values 1.2.3.4
154
+ ud domains operations example.com # Track propagation
155
+ ```
156
+
157
+ See detailed guides:
158
+ - [Search & Purchase](references/search-and-purchase.md)
159
+ - [DNS Management](references/dns-management.md)
160
+ - [Cart & Checkout](references/cart-and-checkout.md)
161
+ - [Marketplace](references/marketplace.md)
162
+
163
+ ## Key Constraints
164
+
165
+ | Constraint | Limit |
166
+ |---|---|
167
+ | Max domains per bulk operation | 50 |
168
+ | Max search queries per request | 10 |
169
+ | Max TLDs per search | 5 (default: com, net, org, ai, io) |
170
+ | Prices | In **cents (USD)** — `5000` = $50.00 |
171
+ | Registration/renewal quantity | 1–10 years |
172
+ | Custom nameservers | 2–12 hostnames; disables DNS record management |
173
+
174
+ ### Safety Confirmations
175
+
176
+ | Operation | Required Flag |
177
+ |---|---|
178
+ | `ud cart checkout` | `--confirm` |
179
+ | `ud domains dns records remove-all` | `--confirm` |
180
+ | `ud marketplace listings cancel` | `--confirm` |
181
+ | `ud domains push` | `--otp-code` (6-digit MFA) |
182
+
183
+ ## Error Handling
184
+
185
+ - **401/403**: Re-authenticate with `ud auth login`
186
+ - **Wrong cart tool**: Most common error. Check `marketplace.source` from search results. Use `ud cart add` (smart) to avoid this.
187
+ - **Missing ICANN contact**: Required for DNS domains. Create with `ud domains contacts create`.
188
+ - **DNS changes not appearing**: Changes are async. Check with `ud domains operations`.
189
+ - **Checkout fails with no payment**: Use `ud cart payment-methods` to check, or `ud cart add-payment-method` to add one.
@@ -0,0 +1,108 @@
1
+ # Cart & Checkout
2
+
3
+ ## Cart Operations
4
+
5
+ ```bash
6
+ ud cart get # View cart contents and pricing
7
+ ud cart remove # Remove items (use --data for item IDs)
8
+ ud cart url # Get browser checkout URL
9
+ ud cart payment-methods # List saved cards and account balance
10
+ ud cart add-payment-method # Get URL to add a payment method
11
+ ```
12
+
13
+ ## Adding to Cart
14
+
15
+ ### Smart Add (Recommended)
16
+
17
+ `ud cart add` auto-detects the domain source and routes to the correct subcommand:
18
+
19
+ ```bash
20
+ ud cart add mybusiness.com mybusiness.io
21
+ ```
22
+
23
+ ### Explicit Subcommands
24
+
25
+ ```bash
26
+ ud cart add registration <domains...> # Fresh registration
27
+ ud cart add listed <domains...> # UD marketplace listing
28
+ ud cart add afternic <domains...> # Afternic marketplace
29
+ ud cart add sedo <domains...> # Sedo marketplace
30
+ ud cart add renewal <domains...> # Renew owned domains
31
+ ```
32
+
33
+ ### Options
34
+
35
+ - `--quantity <years>`: Registration or renewal period (1–10 years, default: 1)
36
+ - `--domains-file <path>`: Read domain list from file (one per line)
37
+ - Max 50 domains per cart-add call
38
+
39
+ ## ICANN Contact Requirement
40
+
41
+ DNS domains (.com, .org, .net, etc.) **require an ICANN contact before checkout**. Checkout fails without one.
42
+
43
+ ```bash
44
+ # Check for existing contacts
45
+ ud domains contacts list
46
+
47
+ # Create if needed
48
+ ud domains contacts create --data '{
49
+ "firstName": "Jane",
50
+ "lastName": "Doe",
51
+ "email": "jane@example.com",
52
+ "phone": {"dialingPrefix": "+1", "number": "5551234567"},
53
+ "street": "123 Main St",
54
+ "city": "Austin",
55
+ "stateProvince": "TX",
56
+ "postalCode": "78701",
57
+ "countryCode": "US"
58
+ }'
59
+ ```
60
+
61
+ Using the account email for the contact enables instant verification. Otherwise, the contact enters `draft` state — wait a few seconds and re-check with `ud domains contacts list`.
62
+
63
+ ## Checkout
64
+
65
+ ```bash
66
+ # Requires --confirm
67
+ ud cart checkout --confirm
68
+ ```
69
+
70
+ - Uses account credits by default
71
+ - If balance is insufficient, pass a payment method: `--data '{"paymentMethodId":"pm_xxx"}'`
72
+ - `contactId` auto-selects the most recent ICANN contact if omitted
73
+ - Cart is cleared after successful checkout
74
+
75
+ ### Browser Checkout
76
+
77
+ For users who prefer to review and pay in the browser:
78
+
79
+ ```bash
80
+ ud cart url
81
+ ```
82
+
83
+ ## Pricing
84
+
85
+ All prices are in **cents (USD)**: `5000` = $50.00.
86
+
87
+ ## Renewals
88
+
89
+ ```bash
90
+ # Check expiration dates
91
+ ud domains list --fields name,expiresAt
92
+
93
+ # Add renewals (1–10 years per domain)
94
+ ud cart add renewal mysite.com --quantity 2
95
+ ud cart add renewal mysite.com othersite.com
96
+
97
+ # Check payment and complete
98
+ ud cart payment-methods
99
+ ud cart checkout --confirm
100
+ ```
101
+
102
+ ## Troubleshooting
103
+
104
+ - **Wrong cart tool**: Check `marketplace.source` from search results. Use smart `ud cart add` to avoid this.
105
+ - **Missing ICANN contact**: Create one with `ud domains contacts create` before checkout.
106
+ - **Contact in draft**: ID starts with `draft-`. Wait a few seconds and re-check with `ud domains contacts list`.
107
+ - **No payment method**: Use `ud cart payment-methods` to verify, or `ud cart add-payment-method` to add one.
108
+ - **Insufficient balance**: Pass `paymentMethodId` in checkout `--data`.
@@ -0,0 +1,141 @@
1
+ # DNS Management
2
+
3
+ ## Prerequisites
4
+
5
+ DNS record management only works when the domain uses UD default nameservers. Always check first:
6
+
7
+ ```bash
8
+ ud domains dns nameservers list example.com
9
+ ```
10
+
11
+ If the domain uses custom nameservers, switch back to UD defaults to manage records:
12
+
13
+ ```bash
14
+ ud domains dns nameservers set-default --data '{"domains":["example.com"]}'
15
+ ```
16
+
17
+ ## Listing Records
18
+
19
+ ```bash
20
+ ud domains dns records list example.com
21
+ ud domains dns records list example.com --format json
22
+ ```
23
+
24
+ ## Adding Records
25
+
26
+ ### Single Record (shorthand flags)
27
+
28
+ ```bash
29
+ # A record
30
+ ud domains dns records add example.com --type A --values 1.2.3.4
31
+
32
+ # CNAME with subdomain
33
+ ud domains dns records add example.com --type CNAME --sub-name www --values example.com
34
+
35
+ # MX record
36
+ ud domains dns records add example.com --type MX --values "10 mail.example.com"
37
+
38
+ # TXT record
39
+ ud domains dns records add example.com --type TXT --values "v=spf1 include:_spf.google.com ~all"
40
+ ```
41
+
42
+ ### Bulk Records (--data)
43
+
44
+ ```bash
45
+ ud domains dns records add example.com --data '{
46
+ "records": [
47
+ {"domain": "example.com", "type": "A", "values": ["1.2.3.4"]},
48
+ {"domain": "example.com", "type": "CNAME", "subName": "www", "values": ["example.com"]},
49
+ {"domain": "example.com", "type": "MX", "values": ["10 mail.example.com"]}
50
+ ]
51
+ }'
52
+ ```
53
+
54
+ ### Upsert Modes
55
+
56
+ If a record already exists, use `--upsert-mode`:
57
+
58
+ ```bash
59
+ # Append new values alongside existing ones
60
+ ud domains dns records add example.com --type A --values 5.6.7.8 --upsert-mode append
61
+
62
+ # Replace existing values entirely
63
+ ud domains dns records add example.com --type A --values 5.6.7.8 --upsert-mode replace
64
+ ```
65
+
66
+ Without `--upsert-mode`, adding a duplicate record type returns a `NO_CHANGE` error.
67
+
68
+ ## Updating Records
69
+
70
+ Get the record ID from `ud domains dns records list` first:
71
+
72
+ ```bash
73
+ ud domains dns records update --data '{
74
+ "records": [{"recordId": "rec_abc123", "values": ["5.6.7.8"]}]
75
+ }'
76
+ ```
77
+
78
+ ## Removing Records
79
+
80
+ ```bash
81
+ # Remove specific record by ID
82
+ ud domains dns records remove --data '{
83
+ "records": [{"recordId": "rec_abc123"}]
84
+ }'
85
+
86
+ # Remove ALL records (requires --confirm)
87
+ ud domains dns records remove-all example.com --confirm
88
+ ```
89
+
90
+ ## Tracking Changes
91
+
92
+ DNS changes are asynchronous. Track propagation:
93
+
94
+ ```bash
95
+ ud domains operations example.com
96
+ ```
97
+
98
+ ## Custom Nameservers
99
+
100
+ ```bash
101
+ # Set custom nameservers (disables DNS record management)
102
+ ud domains dns nameservers set-custom --data '{
103
+ "domains": ["example.com"],
104
+ "nameservers": ["ns1.custom.com", "ns2.custom.com"]
105
+ }'
106
+
107
+ # Reset to UD defaults (re-enables DNS record management)
108
+ ud domains dns nameservers set-default --data '{"domains":["example.com"]}'
109
+ ```
110
+
111
+ Custom nameservers require 2–12 hostnames. DNSSEC DS records are optional.
112
+
113
+ ## Hosting & Redirects
114
+
115
+ ```bash
116
+ # List hosting config
117
+ ud domains hosting redirects list example.com
118
+
119
+ # Add a redirect
120
+ ud domains hosting redirects add --data '{
121
+ "records": [{"domain": "example.com", "type": "redirect-301", "target": "https://newsite.com"}]
122
+ }'
123
+
124
+ # Remove redirect
125
+ ud domains hosting redirects remove --data '{
126
+ "records": [{"domain": "example.com"}]
127
+ }'
128
+ ```
129
+
130
+ ## AI Landing Pages
131
+
132
+ ```bash
133
+ # Generate an AI landing page (async)
134
+ ud domains hosting landers generate example.com
135
+
136
+ # Check status (pending → generating → hosted)
137
+ ud domains hosting landers status example.com
138
+
139
+ # Remove (destructive — deletes content and hosting config)
140
+ ud domains hosting landers remove example.com
141
+ ```
@@ -0,0 +1,113 @@
1
+ # Marketplace
2
+
3
+ ## Listing Domains for Sale
4
+
5
+ ```bash
6
+ # List a domain with a price
7
+ ud marketplace listings create mydomain.com --price 99.99
8
+
9
+ # Bulk listing with --data
10
+ ud marketplace listings create mydomain.com otherdomain.com --price 50.00
11
+
12
+ # Update listing price
13
+ ud marketplace listings update --price 75.00 --data '{
14
+ "listings": [{"listingId": "l123"}]
15
+ }'
16
+
17
+ # Cancel listings (requires --confirm)
18
+ ud marketplace listings cancel --confirm --data '{
19
+ "listingIds": ["l123"]
20
+ }'
21
+ ```
22
+
23
+ ### Listing Options
24
+
25
+ Prices are specified in dollars via `--price` (converted to cents automatically). For advanced settings, use `--data`:
26
+
27
+ ```bash
28
+ ud marketplace listings create mydomain.com --data '{
29
+ "domains": [{
30
+ "name": "mydomain.com",
31
+ "priceInCents": 9999,
32
+ "acceptOffers": true,
33
+ "validityInDays": 365
34
+ }]
35
+ }'
36
+ ```
37
+
38
+ ## Offers
39
+
40
+ ```bash
41
+ # List incoming offers
42
+ ud marketplace offers list
43
+
44
+ # Filter by status
45
+ ud marketplace offers list --data '{"status": "pending"}'
46
+
47
+ # Accept an offer
48
+ ud marketplace offers respond --data '{
49
+ "offers": [{"offerId": "o123", "action": "accept"}]
50
+ }'
51
+
52
+ # Reject an offer
53
+ ud marketplace offers respond --data '{
54
+ "offers": [{"offerId": "o123", "action": "reject"}]
55
+ }'
56
+ ```
57
+
58
+ ## Domain Conversations (Leads)
59
+
60
+ Leads are buyer-seller conversations about domains.
61
+
62
+ ```bash
63
+ # List all conversation leads
64
+ ud marketplace leads list
65
+
66
+ # Get or create a conversation for a domain
67
+ ud marketplace leads get mydomain.com
68
+
69
+ # List messages in a conversation
70
+ ud marketplace leads messages --conversation-id 42
71
+
72
+ # Send a message
73
+ ud marketplace leads send --conversation-id 42 --content "Thanks for your interest!"
74
+ ```
75
+
76
+ ### When to Use Leads
77
+
78
+ - When a domain is `registered-listed-for-offers`, direct users to the `purchaseUrl` or use leads to contact the seller.
79
+ - When a domain is `registered-not-for-sale` and `listingSettings.contactSellerEnabled` is true, use `ud marketplace leads get <domain>` to contact the owner.
80
+
81
+ ## Workflow: List → Sell
82
+
83
+ ```bash
84
+ # 1. Verify ownership
85
+ ud domains list --fields name
86
+
87
+ # 2. Create listing
88
+ ud marketplace listings create mydomain.com --price 99.99
89
+
90
+ # 3. Monitor offers
91
+ ud marketplace offers list
92
+
93
+ # 4. Respond to offers
94
+ ud marketplace offers respond --data '{
95
+ "offers": [{"offerId": "o123", "action": "accept"}]
96
+ }'
97
+ ```
98
+
99
+ ## Workflow: Browse → Buy via Marketplace
100
+
101
+ ```bash
102
+ # 1. Search for listed domains
103
+ ud search premium-name --format json
104
+
105
+ # 2. Check marketplace.source and marketplace.status
106
+
107
+ # 3. Add to cart (use smart add)
108
+ ud cart add premium-name.com
109
+
110
+ # 4. Checkout
111
+ ud cart get
112
+ ud cart checkout --confirm
113
+ ```
@@ -0,0 +1,144 @@
1
+ # Search & Purchase Domains
2
+
3
+ The most common workflow: search for domains, add to cart, and purchase.
4
+
5
+ ## Quick Path (Smart Add)
6
+
7
+ `ud cart add` auto-detects the marketplace source, so you can skip the decision table:
8
+
9
+ ```bash
10
+ ud search mybusiness --format json
11
+ ud cart add mybusiness.com mybusiness.io
12
+ ud cart get
13
+ ud cart checkout --confirm
14
+ ```
15
+
16
+ ## Full Decision Table
17
+
18
+ After `ud search`, each result includes `marketplace.source` and `marketplace.status`. These determine which cart command to use:
19
+
20
+ | `marketplace.source` | `marketplace.status` | Cart command |
21
+ |---|---|---|
22
+ | `unstoppable_domains` | `available` | `ud cart add registration <domain>` |
23
+ | `unstoppable_domains` | `registered-listed-for-sale` | `ud cart add listed <domain>` |
24
+ | `unstoppable_domains` | `registered-listed-for-offers` | Cannot cart. Direct user to `purchaseUrl` to make an offer. |
25
+ | `afternic` | `registered-listed-for-sale` | `ud cart add afternic <domain>` |
26
+ | `sedo` | `registered-listed-for-sale` | `ud cart add sedo <domain>` |
27
+ | any | `registered-not-for-sale` | Not purchasable. Contact seller via `ud marketplace leads get <domain>`. |
28
+ | any | `unavailable` or `invalid` | Not purchasable. Suggest alternatives. |
29
+
30
+ Using the wrong cart command is the most common error. Smart `ud cart add` avoids this.
31
+
32
+ ## Step-by-Step
33
+
34
+ ### 1. Search
35
+
36
+ ```bash
37
+ # Basic search
38
+ ud search mybusiness
39
+
40
+ # With options
41
+ ud search mybusiness --tlds com,io,org --limit 20
42
+
43
+ # JSON for scripting
44
+ ud search mybusiness --format json
45
+ ```
46
+
47
+ Default TLDs when none specified: com, net, org, ai, io. Max 5 TLDs, max 10 queries per request.
48
+
49
+ ### 2. Add to Cart
50
+
51
+ ```bash
52
+ # Smart add (recommended) — auto-detects source
53
+ ud cart add mybusiness.com mybusiness.io
54
+
55
+ # Or explicit type
56
+ ud cart add registration mybusiness.com
57
+ ud cart add listed premium-domain.com
58
+ ud cart add afternic afternic-domain.com
59
+ ud cart add sedo sedo-domain.com
60
+
61
+ # Renewals (domains you already own)
62
+ ud cart add renewal mysite.com --quantity 2 # 2-year renewal
63
+
64
+ # Multi-year registration
65
+ ud cart add registration mybusiness.com --quantity 3
66
+ ```
67
+
68
+ ### 3. Review Cart
69
+
70
+ ```bash
71
+ ud cart get
72
+ ```
73
+
74
+ All prices are in **cents (USD)**: `5000` = $50.00.
75
+
76
+ ### 4. Payment
77
+
78
+ ```bash
79
+ # Check available payment methods
80
+ ud cart payment-methods
81
+
82
+ # Add a payment method if needed
83
+ ud cart add-payment-method # Returns URL to add card in browser
84
+ ```
85
+
86
+ ### 5. Checkout
87
+
88
+ ```bash
89
+ # Complete purchase (requires --confirm)
90
+ ud cart checkout --confirm
91
+
92
+ # Or get a browser checkout URL
93
+ ud cart url
94
+ ```
95
+
96
+ If using account credits but the balance is insufficient, pass `--data '{"paymentMethodId":"pm_xxx"}'` to use a card.
97
+
98
+ ## Lease-to-Own (LTO)
99
+
100
+ Only UD marketplace listings (`ud cart add listed`) support LTO. Check search results for `listingSettings.leaseToOwnOptions`:
101
+
102
+ ```bash
103
+ ud cart add listed premium.com --data '{
104
+ "domains": [{
105
+ "name": "premium.com",
106
+ "leaseToOwnOptions": {
107
+ "type": "equal_installments",
108
+ "termLength": 12
109
+ }
110
+ }]
111
+ }'
112
+ ```
113
+
114
+ - `type`: `equal_installments` or `down_payment_plus_equal_installments`
115
+ - `termLength`: 2–120 months (must not exceed `maxTermLength` from search results)
116
+ - `downPaymentPercentage`: 10–90% (only for `down_payment_plus_equal_installments`)
117
+
118
+ ## DNS Domain Registration
119
+
120
+ DNS domains (.com, .org, .net, etc.) require an ICANN contact before checkout. Checkout will fail without one.
121
+
122
+ ```bash
123
+ # Check for existing contacts
124
+ ud domains contacts list
125
+
126
+ # Create one if needed (use account email for instant verification)
127
+ ud domains contacts create --data '{
128
+ "firstName": "Jane",
129
+ "lastName": "Doe",
130
+ "email": "jane@example.com",
131
+ "phone": {"dialingPrefix": "+1", "number": "5551234567"},
132
+ "street": "123 Main St",
133
+ "city": "Austin",
134
+ "stateProvince": "TX",
135
+ "postalCode": "78701",
136
+ "countryCode": "US"
137
+ }'
138
+
139
+ # Then add and checkout
140
+ ud cart add registration example.com
141
+ ud cart checkout --confirm
142
+ ```
143
+
144
+ Contacts created with the user's account email are auto-verified. Otherwise the contact enters `draft` state — wait a few seconds and re-check with `ud domains contacts list`.