Unstoppable Domains

Search and register domains while managing your entire domain portfolio and DNS settings in one place.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Ud Domains Search: Search for ICANN domain availability and pricing. Can check a specific domain or search terms across multiple TLDs. Supports multiple queries in a single request. **Use Cases:** - *
  • Ud Tld List: List all available ICANN TLDs (top-level domains) supported by our registrar. **Inputs:** None required **Returns:** - tlds: Array of TLD extension strings (e.g., ["com", "io", "org"]) -
  • Ud Portfolio List: List domains in the authenticated user's portfolio with filtering, sorting, and pagination. **Inputs:** - page (number, optional): Page number, 1-indexed (default: 1) - pageSize (nu

What data it sees

Do you need an account

No: the server works without sign-in

Search and register domains while managing your entire domain portfolio and DNS settings in one place. Secure your assets with WHOIS privacy, transfer locks, and automated renewals. Buy or sell domains through an integrated marketplace featuring direct buyer-seller messaging.

Server tool list (43)

Raw names from tools/list. Only developers need these.

ud_domains_searchSearch for ICANN domain availability and pricing. Can check a specific domain or search terms across multiple TLDs. Supports multiple queries in a single request. **Use Cases:** - **Single domain availability check**: Pass the full domain name (e.g., "example.com") to check if that specific domain is available - **Domain search**: Pass a search term (e.g., "mybusiness") to find available domains across multiple TLDs **IMPORTANT - Purchasing Marketplace Domains:** When search results include domains listed for sale (marketplace.status = "registered-listed-for-sale"): - **Unstoppable Domains marketplace** (marketplace.source = "unstoppable_domains"): Use `ud_cart_add_domain_listed` to add to cart and purchase directly, including lease-to-own options if available in listingSettings. - **Afternic marketplace** (marketplace.source = "afternic"): Use `ud_cart_add_domain_afternic` to add to cart and purchase directly. - **Sedo marketplace** (marketplace.source = "sedo"): Use `ud_cart_add_domain_sedo` to add to cart and purchase directly. **Note on Make-Offer Domains:** For domains with marketplace.status = "registered-listed-for-offers" (no fixed buy-now price), direct the user to the `purchaseUrl` from search results to make an offer. If `listingSettings.contactSellerEnabled` is true, the user can also use `ud_lead_get` to contact the seller directly. **IMPORTANT - TLD Support:** Not all ICANN TLDs are supported. Common supported TLDs include: com, net, org, io, ai, app, dev, xyz, co.uk, etc. Before searching with specific TLDs, use `ud_tld_list` to verify they are supported. Unsupported TLDs will return errors. **Inputs:** - query (string | string[], required): Domain name(s) to search - single string or array of up to 10 terms. Can be: - A full domain name like "example.com" (TLD is inferred, checks that specific domain) - A search term like "mybusiness" (searches across default or specified TLDs) - An array for batch operations: ["mybrand.com", "mycompany", "myproject.io"] - tlds (string[], optional): Up to 5 TLDs to search (e.g., ["com", "org", "io"]). Defaults to popular TLDs (com, net, org, ai, io) or inferred from query. Must be supported TLDs (use `ud_tld_list` to check). - limit (number, optional): Max results to return (1-100, default: 20) - offset (number, optional): Results to skip for pagination (default: 0) **Returns:** - results: Array of domains with name, available (boolean), pricing, purchaseUrl, searchQuery, listingSettings - purchaseUrl: For fresh registrations, links to cart (/cart?domain=...). For marketplace listings (UD, Sedo, Afternic), links to the domain lander page (/d/domain.com) where users can buy, make offers, or contact the seller. - pricing.amount/formatted: Current price (includes promo discount if applicable) - pricing.listAmount/listFormatted: Original price before discount (only if promo active) - searchQuery: Which query term produced this result - listingSettings: Present for UD marketplace listings, contains: - contactSellerEnabled: Whether seller has enabled email proxy for contact (always present for UD listings) - leaseToOwnOptions: { type, maxTermLength, downPaymentPercentage } or null - Payment plan options (only if configured) - type: "equal_installments" (split into equal monthly payments) or "down_payment_plus_equal_installments" (down payment + equal installments) - maxTermLength: Maximum term length in months that seller allows (e.g., 12, 24, 36) - downPaymentPercentage: Required down payment as percentage (0-100), only present for down_payment_plus_equal_installments type - Note: Additional settings (minOfferAmountInCents, isOfferFeatureEnabled, domainDisplayName) are available via ud_portfolio_list for owned domains - pagination: { total, count, offset, limit, hasMore, nextOffset } - searchQuery (single query) or searchQueries (multiple queries): Sanitized search term(s) used - searchedTlds: TLDs that were searched **Examples:** Check specific domain: { "query": "example.com" } Search across TLDs: { "query": "acme", "tlds": ["com", "io"] } Batch check: { "query": ["acme.com", "acmecorp.io", "acmeinc.net"] } Multiple search terms: { "query": ["acme", "acmecorp", "acmeinc"], "tlds": ["com", "io"] } Output: { "results": [{"name": "acme.com", "available": true, "searchQuery": "acme", "pricing": {"formatted": "$12.99"}, "purchaseUrl": "..."}], "pagination": {"total": 6, "hasMore": false} }
ud_tld_listList all available ICANN TLDs (top-level domains) supported by our registrar. **Inputs:** None required **Returns:** - tlds: Array of TLD extension strings (e.g., ["com", "io", "org"]) - count: Total number of supported TLDs **Example:** Input: {} Output: { "tlds": ["com", "io", "org", ...], "count": 200 }
ud_portfolio_listList domains in the authenticated user's portfolio with filtering, sorting, and pagination. **Inputs:** - page (number, optional): Page number, 1-indexed (default: 1) - pageSize (number, optional): Number of domains per page, 1-100 (default: 50) - searchTerm (string, optional): Filter domains by name - status (string, optional): Filter by listing status - "all" (default), "for-sale", or "unlisted" - registryType (string, optional): Filter by type - "dns" (ICANN/Web2 domains, default) or "web3" (blockchain domains only) - expiringWithinDays (number, optional): Filter domains expiring within N days (1-365) - expired (boolean, optional): Filter for domains that have already expired - minLength (number, optional): Filter domains with label length >= this value - maxLength (number, optional): Filter domains with label length <= this value - autoRenewal (string, optional): Filter by auto-renewal status - "true" or "false" - tagFilters (array, optional): Filter by tag names (e.g., ["personal", "business"]) - orderBy (string, optional): Sort by - "name", "length", "purchasedAt", "expiresAt", "listingPrice", "offers", "leads", "watchlistCount" - orderDirection (string, optional): Sort direction - "asc" (default) or "desc" **Returns:** - domains: Array of portfolio domains with: - name, extension, label, sld, punycode - purchasedAt, expiresAt - transferStatus: "none" (no transfer) or "pending" (transfer in progress) - tags (array of tag names), reverse (boolean) - offersCount, leadsCount, watchlistCount (engagement metrics) - listing: { id, price, status, createdAt, updatedAt, views, listingSettings } or null - status values and how to present them to users: - "open" or "open-not-signed" → Present as "Open" (live listing, accepting purchases) - "open-on-request" → Present as "Accepting Offers" (offers only, no fixed price) - "draft" → Present as "Draft" (not yet published) - "waiting-for-approval", "pending-admin-approval", "pending" → Present as "Pending" (being processed) - "canceled" → Present as "Canceled" - Note: "open-not-signed" is an internal state identical to "open" from the user's perspective; always display both as simply "Open" - listingSettings: { minOfferAmountInCents, isOfferFeatureEnabled, domainDisplayName, contactSellerEnabled, leaseToOwnOptions } or null - minOfferAmountInCents: Minimum offer amount seller will consider - isOfferFeatureEnabled: Whether offers are accepted for this listing - domainDisplayName: Custom capitalization for display (e.g., "MyDomain.Crypto") - contactSellerEnabled: Whether buyers can contact the seller directly about this listing - leaseToOwnOptions: { type, maxTermLength, downPaymentPercentage } or null - Payment plan options - type: "equal_installments" (split into equal monthly payments) or "down_payment_plus_equal_installments" (down payment + equal installments) - maxTermLength: Maximum term length in months that seller allows (e.g., 12, 24, 36) - downPaymentPercentage: Required down payment as percentage (0-100), only present for down_payment_plus_equal_installments type - autoRenewal: { status, expiresAt } or null - status: "active" (renewing), "update_required" (payment issue), "pending", "expired", "cancelled" - pagination: { page, pageSize, totalPages, total, hasMore, nextPage } **Pagination:** The response includes a "pagination" object with "total" (total domains matching filters), "hasMore" (boolean), "totalPages", and "nextPage" (the next page number if more results exist, or null). If hasMore is true, use nextPage for the next request. **Examples:** List all DNS domains: { } Domains expiring in 30 days: { "expiringWithinDays": 30 } Domains expiring this week: { "expiringWithinDays": 7, "orderBy": "expiresAt", "orderDirection": "asc" } Already expired domains: { "expired": true } Listed domains (for sale): { "status": "for-sale" } Unlisted domains: { "status": "unlisted" } Newest domains first: { "orderBy": "purchasedAt", "orderDirection": "desc" } Oldest domains first: { "orderBy": "purchasedAt", "orderDirection": "asc" } Expiring soonest: { "orderBy": "expiresAt", "orderDirection": "asc" } Domains with most offers: { "orderBy": "offers", "orderDirection": "desc" } Domains with most leads: { "orderBy": "leads", "orderDirection": "desc" } Most watched domains: { "orderBy": "watchlistCount", "orderDirection": "desc" } Highest priced listings: { "status": "for-sale", "orderBy": "listingPrice", "orderDirection": "desc" } Short domains (3 chars or less): { "maxLength": 3, "orderBy": "length", "orderDirection": "asc" } Premium length domains (4-5 chars): { "minLength": 4, "maxLength": 5 } Domains with auto-renewal enabled: { "autoRenewal": "true" } Domains without auto-renewal: { "autoRenewal": "false" } Domains tagged "business": { "tagFilters": ["business"] } Search within portfolio: { "searchTerm": "crypto" } Web3/blockchain domains only: { "registryType": "web3" } Custom page size: { "pageSize": 100 } Page 2 with 50 per page: { "page": 2, "pageSize": 50 } **Note:** Requires authentication. Returns 50 domains per page by default. By default, only ICANN/Web2 (DNS) domains are returned. Use registryType "web3" to see blockchain domains. All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times.
ud_contacts_listList ICANN contacts configured for the authenticated user's account. **Inputs:** - includeDisabled (boolean, optional): Include disabled contacts. Default: false **Returns:** - contacts: Array of contact summaries with: - id: Contact ID (use this for checkout) - firstName, lastName: Contact name - email: Partially masked email (e.g., "joh***@example.com") - phone: Partially masked phone (e.g., "+1 ***-4567") - city, stateProvince, countryCode: Address info - organization: Company name (if provided) - status: Contact status (see below) - count: Total number of contacts - accountEmail: User's account email (masked) - suggest using this for new contacts - accountEmailHint: Tip about automatic verification when contact email matches account email **Contact Status:** - "active": Contact is fully verified with registrar - "draft": Contact is synced with registrar but pending email verification - "admin_disabled": Contact has been disabled by admin and cannot be used **Contact ID Format (important for checkout):** - Alphanumeric ID (e.g., "abc123"): Contact is synced with registrar and CAN be used for checkout - "draft-*" ID (e.g., "draft-456"): Contact is still syncing with registrar and CANNOT be used yet. Wait a few seconds and call this tool again. **IMPORTANT:** The ID format determines checkout eligibility, not the status. Both "active" and "draft" contacts with alphanumeric IDs can be used for checkout. Only contacts with "draft-*" IDs are still syncing and need to wait. **Example:** Input: {} Output: { "contacts": [{ "id": "abc123", "firstName": "John", "lastName": "Doe", "email": "joh***@example.com", "phone": "+1 ***-4567", "city": "San Francisco", "stateProvince": "CA", "countryCode": "US", "status": "active" }], "count": 1 } **Why you need this:** ICANN contacts are required for DNS domain registration (.com, .org, .net, etc.). Before checkout, verify the user has at least one contact with an alphanumeric ID (not "draft-*"). If all contacts have "draft-*" IDs, wait a few seconds for sync to complete. **Note:** Requires authentication. Email and phone are partially masked for privacy.
ud_contact_createCreate a new ICANN contact for DNS domain registration. **Required for:** Registering DNS domains (.com, .org, .net, etc.) **Not required for:** Web3 domains (.crypto, .nft, .x, etc.) **Inputs:** - firstName (string): Contact first name - lastName (string): Contact last name - email (string): Contact email address - phone (object): - dialingPrefix (string): Phone country code (e.g., "1") - number (string): Phone number (e.g., "5551234567") - street (string): Street address - city (string): City - stateProvince (string): State/province code (e.g., "CA", "NY", "ON") - postalCode (string): Postal/ZIP code - countryCode (string): Two-letter ISO country code (e.g., "US", "CA", "GB") - organization (string, optional): Company name **Returns on success:** - success: true - contact: { operationId, status: "draft" } - message: Instructions to check status before checkout **Example:** Input: { "firstName": "John", "lastName": "Doe", "email": "john@example.com", "phone": { "dialingPrefix": "1", "number": "5551234567" }, "street": "123 Main St", "city": "San Francisco", "stateProvince": "CA", "postalCode": "94102", "countryCode": "US" } Output: { "success": true, "contact": { "operationId": "op_abc123", "status": "draft" }, "message": "Contact created successfully. The contact is syncing..." } **Important notes:** 1. Contact starts in "draft" status while syncing with the registrar 2. Sync typically completes within a few seconds 3. **Contact ID determines checkout eligibility**: Alphanumeric ID = can use for checkout, "draft-*" ID = still syncing 4. **AUTO-VERIFICATION**: If the contact email matches the user's account email, the contact is automatically verified (no manual email verification needed). This is the fastest path. 5. State/province should use standard codes (CA, NY, TX for US; ON, BC, QC for Canada) **Workflow:** 1. First call ud_contacts_list to get the user's account email (in accountEmail field) 2. When collecting contact info, SUGGEST the user use their account email for instant verification: "If you use [accountEmail], your contact will be automatically verified." 3. Collect remaining contact information from the user 4. Call this tool to create the contact 5. Call ud_contacts_list to verify the contact has an alphanumeric ID (not "draft-*") - should take only a few seconds 6. Proceed to checkout with ud_cart_checkout **Note:** Requires authentication with portfolio:write scope.
ud_cart_getGet the authenticated user's shopping cart with comprehensive pricing breakdown. **Inputs:** - discountCode (string, optional): Promo/discount code to apply for pricing calculation **Returns:** - items: Array of cart items with per-item pricing breakdown: - productId: Unique product identifier - domain: Domain name (e.g., "example.com") - originalPrice/originalPriceFormatted: Item price before discounts - discountAmount/discountAmountFormatted: Discount applied to this item - promoCreditsApplied, accountBalanceApplied, salesTax, fees - itemCount: Total number of items in cart - pricing: Detailed pricing breakdown: - totalOrderValue: Full price before discounts - preTaxAmountDue: After discounts, before tax - salesTax, taxRate: Tax amounts - promoCreditsUsed, storeCreditsUsed, accountBalanceUsed: Credits applied - totalAmountDue: Final amount to pay - discounts: Array of applied discounts with type, title, code, amount - totalDiscounts/totalDiscountsFormatted: Sum of all discounts **Example:** Input: {} Output: { "items": [{"domain": "example.com", "originalPriceFormatted": "$12.99"}], "itemCount": 1, "pricing": {"totalAmountDueFormatted": "$12.99"} } **Example with discount:** Input: { "discountCode": "SAVE10" } Output: { "pricing": {"totalOrderValueFormatted": "$25.98", "totalAmountDueFormatted": "$23.38"}, "discounts": [{"title": "10% Off", "amountFormatted": "$2.60"}] } **Note:** Requires authentication.
ud_cart_add_domain_registrationAdd one or more primary (unregistered) domains to the authenticated user's shopping cart. **IMPORTANT:** This tool is ONLY for domains with "Available" status (marketplace.source = "unstoppable_domains", marketplace.status = "available"). For other domain types: - **UD Marketplace listings**: Use `ud_cart_add_domain_listed` - **Afternic listings**: Use `ud_cart_add_domain_afternic` - **Sedo listings**: Use `ud_cart_add_domain_sedo` **Inputs:** - domains (array, required): Array of domain objects to add: - name (string, required): Full domain name (e.g., "mybusiness.com") - quantity (number, optional): Registration years, 1-10 (default: 1) **Returns:** - addedProducts: Array with success/failure status for each domain, including "years" for successful additions - successCount: Number of domains successfully added - failureCount: Number of domains that failed to add - cart: Current cart summary (itemCount, subtotal, subtotalFormatted) **Example:** Input: { "domains": [{"name": "example.com", "quantity": 2}, {"name": "example.io"}] } Output: { "addedProducts": [{"domain": "example.com", "success": true, "productId": 123, "years": 2}], "cart": {"itemCount": 2, "subtotalFormatted": "$37.98"} } **Note:** Requires authentication.
ud_cart_add_domain_listedAdd marketplace-listed domains to the authenticated user's shopping cart. **IMPORTANT:** This tool is ONLY for Unstoppable Domains secondary marketplace listings (marketplace.source = "unstoppable_domains", marketplace.status = "registered-listed-for-sale" or "registered-listed-for-offers"). For external marketplaces: - **Afternic listings**: Use `ud_cart_add_domain_afternic` - **Sedo listings**: Use `ud_cart_add_domain_sedo` **Purchase Types:** 1. **Buy It Now** - Purchase at the full listing price immediately. Simply provide the domain name without leaseToOwnOptions. 2. **Lease to Own (LTO)** - Pay in monthly installments over time. Requires leaseToOwnOptions matching the listing's configuration. **Inputs:** - domains (array, required): Array of listed domain objects to add: - name (string, required): Full domain name (e.g., "premium.com") - leaseToOwnOptions (object, optional): For LTO purchases: - type: "equal_installments" or "down_payment_plus_equal_installments" - termLength: Number of months (2-120) - downPaymentPercentage: Required for down_payment type (10-90%) **Returns:** - addedProducts: Array with detailed status for each domain - successCount: Number of domains successfully added - failureCount: Number of domains that failed - cart: Current cart summary (itemCount, subtotal) **Example - Buy It Now:** Input: { "domains": [{"name": "premium.com"}] } **Example - Lease to Own:** Input: { "domains": [{"name": "premium.com", "leaseToOwnOptions": {"type": "equal_installments", "termLength": 12}}] } **Common Errors:** - Domain not listed: The domain is not available on the marketplace - Own domain: Cannot purchase domains you already own - LTO mismatch: Lease-to-own options don't match listing configuration **Note:** Requires authentication. After adding to cart, use ud_cart_checkout to complete the purchase.
ud_cart_add_domain_afternicAdd Afternic marketplace domains to the authenticated user's shopping cart. **IMPORTANT:** This tool is ONLY for domains from the Afternic marketplace (marketplace.source = "afternic" in search results). The domain must have a buy-now price available. **When to Use:** Use this tool when search results show a domain with: - marketplace.source = "afternic" - marketplace.status = "registered-listed-for-sale" (has a fixed buy-now price) **Note on Make-Offer Domains:** Domains with marketplace.status = "registered-listed-for-offers" (make-offer only) cannot be directly purchased. For these, direct the user to the purchaseUrl from search results. **Inputs:** - domains (array, required): Array of Afternic domain objects to add: - name (string, required): Full domain name (e.g., "premium.com") **Returns:** - addedProducts: Array with detailed status for each domain - domain: The domain name - success: Whether the domain was added successfully - productId: Product ID (when successful) - price: Formatted price (e.g., "$5,000.00") when available - error: Error message (when failed) - successCount: Number of domains successfully added - failureCount: Number of domains that failed - cart: Current cart summary (itemCount, subtotal) **Example:** Input: { "domains": [{"name": "premium.com"}, {"name": "business.io"}] } **Common Errors:** - Feature not available: Afternic purchases may be temporarily disabled - Own domain: Cannot purchase domains you already own - Cart size limit: Cart has reached maximum capacity **Note:** Requires authentication. After adding to cart, use ud_cart_checkout to complete the purchase.
ud_cart_add_domain_sedoAdd Sedo marketplace domains to the authenticated user's shopping cart. **IMPORTANT:** This tool is ONLY for domains from the Sedo marketplace (marketplace.source = "sedo" in search results). The domain must have a buy-now price available. **When to Use:** Use this tool when search results show a domain with: - marketplace.source = "sedo" - marketplace.status = "registered-listed-for-sale" (has a fixed buy-now price) **Note on Make-Offer Domains:** Domains with marketplace.status = "registered-listed-for-offers" (make-offer only) cannot be directly purchased. For these, direct the user to the purchaseUrl from search results. **Inputs:** - domains (array, required): Array of Sedo domain objects to add: - name (string, required): Full domain name (e.g., "premium.com") **Returns:** - addedProducts: Array with detailed status for each domain - domain: The domain name - success: Whether the domain was added successfully - productId: Product ID (when successful) - price: Formatted price (e.g., "$5,000.00") when available - error: Error message (when failed) - successCount: Number of domains successfully added - failureCount: Number of domains that failed - cart: Current cart summary (itemCount, subtotal) **Example:** Input: { "domains": [{"name": "premium.com"}, {"name": "business.io"}] } **Common Errors:** - Feature not available: Sedo purchases may be temporarily disabled - Own domain: Cannot purchase domains you already own - Cart size limit: Cart has reached maximum capacity **Note:** Requires authentication. After adding to cart, use ud_cart_checkout to complete the purchase.
ud_cart_add_domain_renewalAdd one or more domain renewals to the authenticated user's shopping cart. This tool is for renewing domains that the user already owns. The user must own the domain to renew it. **Inputs:** - domains (array, required): Array of domain objects to renew: - name (string, required): Full domain name (e.g., "mydomain.com") - quantity (number, optional): Renewal period in years, 1-10 (default: 1) **Returns:** - addedRenewals: Array with success/failure status for each domain - successCount: Number of renewals successfully added - failureCount: Number of renewals that failed to add - cart: Current cart summary (itemCount, subtotal, subtotalFormatted) **Example:** Input: { "domains": [{"name": "example.com", "quantity": 2}, {"name": "mysite.io"}] } Output: { "addedRenewals": [{"domain": "example.com", "success": true, "productId": 123, "renewalPeriodYears": 2}], "cart": {"itemCount": 2, "subtotalFormatted": "$17.98"} } **Note:** Requires authentication. User must own the domains to renew them.
ud_cart_removeRemove items from the authenticated user's shopping cart by product ID. **Inputs:** - productIds (number[], required): Array of product IDs to remove (get IDs from ud_cart_get) **Returns:** - removedProductIds: Array of IDs that were removed - removedCount: Number of items removed - cart: Updated cart with: - itemCount: Remaining items - subtotal/subtotalFormatted: Updated totals - items: Remaining cart items **Example:** Input: { "productIds": [123, 456] } Output: { "removedCount": 2, "cart": {"itemCount": 1, "subtotalFormatted": "$12.99"} } **Note:** Requires authentication. Product IDs can be obtained from ud_cart_get or ud_cart_add_domain_registration responses.
ud_cart_get_payment_methodsGet available payment methods for checkout including saved credit cards, account balance, and promo credits. **Inputs:** None required **Returns:** - savedCards: Array of saved credit cards with: - id: Payment method ID (use this for checkout) - brand: Card brand (e.g., "visa", "mastercard") - last4: Last 4 digits of card number - expMonth/expYear: Card expiration - isExpired: Whether the card has expired - isDefault: Whether this is the default card - accountBalance: Prepaid account balance: - amount: Balance in cents - amountFormatted: Balance as formatted string (e.g., "$10.00") - promoCredits: Promotional credits (applied automatically at checkout): - amount: Credits in cents - amountFormatted: Credits as formatted string (e.g., "$5.00") - summary: Quick reference for checkout capability: - hasValidCards: Whether user has non-expired cards - validCardCount: Number of non-expired cards - hasAccountBalance: Whether user has any account balance - hasPromoCredits: Whether user has any promo credits - totalCredits: Combined account balance + promo credits in cents - totalCreditsFormatted: Combined credits as formatted string - canCheckout: Whether user can complete checkout (has cards or credits) **Example:** Output: { "savedCards": [{"id": "pm_xxx", "brand": "visa", "last4": "4242", "isDefault": true}], "accountBalance": {"amount": 2500, "amountFormatted": "$25.00"}, "promoCredits": {"amount": 500, "amountFormatted": "$5.00"}, "summary": {"canCheckout": true, "hasValidCards": true, "totalCreditsFormatted": "$30.00"} } **Note:** Requires authentication. Use the card "id" for checkout. Promo credits and account balance are automatically applied during checkout.
ud_cart_add_payment_method_urlGet a URL to add a new payment method to the user's account. **Purpose:** Returns a link to the Unstoppable Domains payment management page where users can securely add a new credit card to their account. **Inputs:** None required **Returns:** - url: Link to the payment management page - instructions: Guidance for the user **Security:** Card data is collected directly by Stripe on the website - it never touches intermediate servers. This ensures PCI compliance. **Flow:** 1. Call this tool to get the payment management URL 2. Direct the user to open the URL in their browser 3. User adds their card on the secure Unstoppable Domains website 4. After completion, use ud_cart_get_payment_methods to verify the card was added **Note:** Requires authentication.
ud_cart_checkoutComplete checkout for items in the cart using saved payment method or account balance. **IMPORTANT - DNS Domain Requirements:** For DNS/ICANN domains (.com, .org, .net, .io, etc.), an ICANN contact must be configured before checkout. 1. Call ud_contacts_list to check if user has contacts 2. If no contacts exist, use ud_contact_create to add one first 3. Then proceed with checkout Web3 domains (.crypto, .nft, .x, .blockchain, etc.) do NOT require ICANN contacts. **Inputs:** - paymentMethodId (string, optional): Stripe payment method ID for card payment (e.g., "pm_xxx"). Get this from ud_cart_get_payment_methods. Required if cart total exceeds available credits. - useAccountBalance (boolean, optional): Apply account balance/credits to reduce total. Default: true - discountCode (string, optional): Promo/discount code to apply - contactId (string, optional): ICANN contact ID for DNS domain registration. Get IDs from ud_contacts_list. If user has multiple contacts and none is specified, the most recent contact is used automatically. **Returns on success:** - success: true - orderId: The order ID for reference - paymentId: The payment ID for reference - summary: Detailed breakdown: - itemCount: Number of items purchased - domains: Array of domain names purchased - subtotal: Original price before discounts - discounts: Total discount amount - creditsUsed: Account credits applied - totalCharged: Final amount charged to card - paymentMethod: "credits", "stripe", or "free" - note (optional): Present when user has multiple ICANN contacts and didn't specify one **Returns on error:** - error: Description of what went wrong **Example (credits cover full amount):** Input: {} Output: {"success": true, "orderId": 12345, "summary": {"domains": ["example.com"], "totalChargedFormatted": "$0.00", "paymentMethod": "credits"}} **Example (card payment required):** Input: {"paymentMethodId": "pm_xxx"} Output: {"success": true, "orderId": 12345, "summary": {"domains": ["example.com"], "totalChargedFormatted": "$12.99", "paymentMethod": "stripe"}} **Workflow for DNS domains (.com, .org, etc.):** 1. Call ud_contacts_list to verify user has ICANN contacts 2. If no contacts, call ud_contact_create to add one 3. Call ud_cart_get_payment_methods to see available payment options 4. Call ud_cart_get to preview pricing 5. Call this tool with paymentMethodId if card payment needed - If user has multiple contacts, optionally specify contactId to choose which one to use **Workflow for Web3 domains (.crypto, .nft, etc.):** 1. Call ud_cart_get_payment_methods to see available payment options 2. Call ud_cart_get to preview pricing 3. Call this tool with paymentMethodId if card payment needed **Note:** Requires authentication. Cart is cleared after successful checkout.
ud_cart_get_urlGenerate a checkout URL for completing the purchase in a browser. **Inputs:** - discountCode (string, optional): Promo code to apply at checkout **Returns:** - checkoutUrl: URL to complete purchase in browser - cartSummary: Current cart contents: - itemCount: Number of items - subtotal/subtotalFormatted: Cart total - items: Array with domain names and prices - discountCode: Applied discount code (if any) - instructions: Guidance for completing checkout **Example:** Input: { "discountCode": "SAVE10" } Output: { "checkoutUrl": "https://unstoppabledomains.com/cart?discountCode=SAVE10", "cartSummary": {"itemCount": 2, "subtotalFormatted": "$25.98"} } **Note:** Requires authentication. Cart must not be empty. Use ud_cart_add_domain_registration to add items first.
ud_listing_createCreate marketplace listings to sell one or more domains. **Inputs:** - domains (array, required): Array of domain listing objects (1-50): - domainName (string, required): The domain to list - priceInCents (number, optional): Buy-now price in cents (0 for offers-only). Range: $11-$2000000 - expiresAt (string, optional): Listing expiration date as ISO 8601 string (e.g., "2025-12-31"). Must be 1-36500 days from now. Default: 90 days. - isEmailAliasUsed (boolean, optional): Enable "message seller" feature - listingSettings (object, optional): - isOfferFeatureEnabled (boolean): Accept offers (default: true) - minOfferAmountInCents (number): Minimum offer amount - domainDisplayName (string): Custom display name - leaseToOwnOptions (object, optional): Lease-to-own payment plan settings - type: "equal_installments" or "down_payment_plus_equal_installments" - maxTermLength: Maximum term length in months (2-120, required) - downPaymentPercentage: 10-90% (required for down_payment type) **Returns:** - results: Array of results per domain with: - domainName, success, listingId, status, isLazy, error - successCount, failureCount, message - signatureRequired: If true, visit website to sign and activate listings **Examples:** List single domain at $1000: { "domains": [{ "domainName": "example.com", "priceInCents": 100000 }] } Offers-only listing: { "domains": [{ "domainName": "example.com", "priceInCents": 0, "listingSettings": { "isOfferFeatureEnabled": true } }] } Multiple domains: { "domains": [{ "domainName": "one.com", "priceInCents": 50000 }, { "domainName": "two.com", "priceInCents": 75000 }] } **Note:** - Requires authentication - Domains must be in your portfolio on Polygon/UNS - All domains in a single request must have the same owner address - At least one sale option required (price, offers, or message seller)
ud_listing_updateUpdate one or more existing marketplace listings. **Inputs:** - listings (array, required): Array of listing updates (1-50): - id (number, required): The listing ID to update - priceInCents (number, optional): New buy-now price in cents - expiresAt (string, optional): New listing expiration date as ISO 8601 string (e.g., "2025-12-31"). Must be 1-36500 days from now. - isEmailAliasUsed (boolean, optional): Enable/disable "message seller" - listingSettings (object, optional): - isOfferFeatureEnabled (boolean): Accept offers - minOfferAmountInCents (number): Minimum offer amount - domainDisplayName (string): Custom display name - leaseToOwnOptions (object, optional): Lease-to-own settings **Returns:** - results: Array of results per listing with: - listingId, domainName, success, status, isLazy, error - successCount, failureCount, message - signatureRequired: If true, visit website to re-sign listings **Examples:** Update price: { "listings": [{ "id": 12345, "priceInCents": 150000 }] } Disable offers: { "listings": [{ "id": 12345, "listingSettings": { "isOfferFeatureEnabled": false } }] } Multiple updates: { "listings": [{ "id": 12345, "priceInCents": 100000 }, { "id": 12346, "priceInCents": 200000 }] } **Note:** - Requires authentication - Only open/editable listings can be updated - All listings in a request must have the same owner address - Get listing IDs from ud_portfolio_list (in the listing.id field)
ud_listing_cancelCancel one or more marketplace listings. **Inputs:** - listingIds (array of numbers, required): Array of listing IDs to cancel (1-50) **Returns:** - results: Array of cancellation results with: - listingId: The listing ID - domainName: The domain name - success: Whether cancellation succeeded - error: Error message if failed - successCount: Number of successfully cancelled listings - failureCount: Number of failed cancellations - message: Summary message **Examples:** Cancel single listing: { "listingIds": [12345] } Cancel multiple listings: { "listingIds": [12345, 12346, 12347] } **Note:** - Requires authentication - Only open, pending, or draft listings can be cancelled - Get listing IDs from ud_portfolio_list (in the listing.id field)
ud_offers_listList incoming offers on domains you own. **Inputs:** - domainName (string, optional): Filter offers by specific domain name - group (string, optional): Filter by group - "active" (pending offers, default) or "sold" (completed sales) - page (number, optional): Page number, 1-indexed (default: 1) **Returns:** - offers: Array of offers with: - id: Offer ID (use for accept/reject) - domainName: The domain the offer is for - priceInCents: Offer amount in cents - priceFormatted: Formatted price (e.g., "$1,000.00") - buyerUserId: Encoded buyer user ID - buyerStatus: Buyer-side status (Open, Pending, Accepted, etc.) - sellerStatus: Seller-side status (Pending, Accepted, Rejected, etc.) - expiresAt, createdAt, updatedAt: ISO date strings - pagination: { page, pageSize, totalPages, total, hasMore } **Examples:** All active offers: { } Offers for specific domain: { "domainName": "example.com" } Completed sales: { "group": "sold" } Page 2 of results: { "page": 2 } **Note:** Requires authentication. Returns 20 offers per page. All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times.
ud_offer_respondAccept or reject incoming offers on your domains. **Inputs:** - offers (array, required): Array of offer responses (1-50): - id (number, required): The offer ID - action (string, required): "accept" or "reject" **Returns:** - results: Array of results per offer with: - offerId, domainName, action, success - priceInCents, priceFormatted: The offer amount - newStatus: Updated seller status - error: Error message if failed - successCount, failureCount, message - signatureRequired: If true for acceptances, visit website to sign **Examples:** Reject an offer: { "offers": [{ "id": 12345, "action": "reject" }] } Accept an offer: { "offers": [{ "id": 12345, "action": "accept" }] } Multiple responses: { "offers": [{ "id": 12345, "action": "accept" }, { "id": 12346, "action": "reject" }] } **Note:** - Requires authentication - Get offer IDs from ud_offers_list - Rejections are immediate and final - Acceptances may require signing on the website for non-custodial domains - All offers being accepted must have the same owner address
ud_leads_listList your domain conversation leads (buyer-seller messages). **Inputs:** - domain (string, optional): Filter by specific domain name - skipEmpty (boolean, optional): Skip conversations with no messages (default: true) - skip (number, optional): Pagination offset (default: 0) - take (number, optional): Number of results (1-100, default: 20) **Returns:** - leads: Array of conversations with: - id: Conversation ID (use for ud_lead_messages_list) - domainName: The domain being discussed - domainId: Domain database ID - createdAt, updatedAt: Timestamps - shortLatestMessageContent: Preview of latest message (truncated to 100 chars) - unreadMessageCount: Number of unread messages - participants: Array of {id, role} where role is "BUYER" or "SELLER" - total: Total number of conversations matching filters - skip, take: Pagination info **Examples:** List all leads: { } Filter by domain: { "domain": "example.crypto" } Paginate: { "skip": 20, "take": 10 } **Note:** - Requires authentication - Returns conversations where you are either buyer or seller - Use conversation ID with ud_lead_messages_list to get full message history - All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times
ud_lead_getContact the seller of a domain to start a conversation. **Inputs:** - domain (string, required): The domain name to inquire about - buyerId (string, optional): Encoded buyer ID for sellers responding to an offer **Returns:** - conversation: The conversation details with: - id: Conversation ID (use with ud_lead_messages_list, ud_lead_message_send) - domainName: The domain being discussed - domainId: Domain database ID - createdAt: Timestamp - participants: Array of {id, role} where role is "BUYER" or "SELLER" - isExisting: true if returning existing conversation, false if newly created - message: Status message **Examples:** Contact seller about a domain: { "domain": "example.crypto" } Seller responds to buyer: { "domain": "example.crypto", "buyerId": "abc123" } **Note:** - Requires authentication - If a conversation already exists between you and the domain owner, returns the existing one - Buyers can initiate conversations on any domain - Sellers can only initiate conversations with buyers who have pending offers - Domain owners cannot initiate conversations on their own domains - All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times
ud_lead_messages_listGet messages in a domain conversation (lead). **Inputs:** - conversationId (number, required): The conversation ID from ud_leads_list or ud_lead_get - cursor (string, optional): Pagination cursor for loading older messages **Returns:** - messages: Array of messages (newest first) with: - id: Message ID - content: Decrypted message text - senderUserId: User ID who sent the message - createdAt: Timestamp - hasMore: true if more messages available - nextCursor: Use in next request to load older messages - conversationId: The conversation ID for reference **Examples:** Get messages: { "conversationId": 123 } Load older messages: { "conversationId": 123, "cursor": "456" } **Note:** - Requires authentication - You must be a participant in the conversation - Messages are returned newest-first (most recent at top) - Reading messages marks the conversation as viewed (resets unread count) - Use nextCursor to paginate through older messages - All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times
ud_lead_message_sendSend a message in a domain conversation (lead). **Inputs:** - conversationId (number, required): The conversation ID from ud_leads_list or ud_lead_get - content (string, required): Message content (1-1000 characters) **Returns:** - message: The sent message with: - id: Message ID - content: Message text - senderUserId: Your user ID - createdAt: Timestamp - conversationId: The conversation ID for reference **Examples:** Send a message: { "conversationId": 123, "content": "Hello, I'm interested in this domain!" } Reply to seller: { "conversationId": 123, "content": "Would you accept $500?" } **Note:** - Requires authentication - You must be a participant in the conversation - Messages are encrypted at rest - First create a conversation with ud_lead_get if one doesn't exist - Use ud_leads_list to find existing conversation IDs - All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times
ud_dns_records_listList DNS records for a domain in your portfolio. **Inputs:** - domain (string, required): The domain name (e.g., "example.com") - type (string, optional): Filter by record type (A, AAAA, CNAME, MX, TXT, NS, etc.) - subName (string, optional): Filter by subdomain/host ("www", "@" for root, "*" for wildcard) - cursor (string, optional): Pagination cursor from previous response **Returns:** - domain: The domain name - records: Array of DNS records: - id: Record identifier (used for updates/deletes) - type: Record type (A, AAAA, CNAME, MX, TXT, NS, etc.) - subName: Subdomain/host ("www", "@" for root, "*" for wildcard) - values: Array of record values - ttl: Time-to-live in seconds - readonly: Whether the record is managed by the system - readonlyReasons: Why the record is read-only (ADMIN, HOSTING, DNS_PROVIDER) - pagination: { hasMore, nextCursor } - dnsStatus (optional): Present when DNS is not managed by UD - configured: Whether nameservers are set up - provider: "ud" or "external" - message: Explanation and suggested next steps **Examples:** List all records: { "domain": "example.com" } List A records only: { "domain": "example.com", "type": "A" } List www subdomain records: { "domain": "example.com", "subName": "www" } List root domain records: { "domain": "example.com", "subName": "@" } Paginate results: { "domain": "example.com", "cursor": "abc123" } **Common Record Types:** - A: IPv4 address (e.g., "192.0.2.1") - AAAA: IPv6 address (e.g., "2001:db8::1") - CNAME: Canonical name/alias (e.g., "www.example.com") - MX: Mail server (e.g., "10 mail.example.com") - TXT: Text record (e.g., "v=spf1 include:_spf.google.com ~all") - NS: Nameserver (e.g., "ns1.example.com") **Note:** Requires authentication. Only domains in your portfolio can be managed.
ud_dns_record_addAdd DNS records to one or more domains in your portfolio. Supports bulk operations for up to 50 records across multiple domains. **Inputs:** - records (array, required): Array of DNS record configurations (1-50): - domain (string, required): The domain name (e.g., "example.com") - type (string, required): Record type (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA) - subName (string, default: "@"): Subdomain/host. Use "@" for root, "www" for www, "*" for wildcard - values (array, required): Record values. Format varies by type: - A: ["192.0.2.1"] - AAAA: ["2001:db8::1"] - CNAME: ["target.example.com"] - MX: ["10 mail.example.com"] (priority + hostname) - TXT: ["v=spf1 include:_spf.google.com ~all"] - ttl (number, default: 3600): Time-to-live in seconds (60-86400) - upsertMode (string, optional): Applies to all records - "append" adds to existing, "replace" overwrites, "disallowed" fails if exists **Returns:** - results: Array of results per record: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - record: The created record details - error: Error message (if failed) - successCount: Number of successfully added records - failureCount: Number of failed records **Examples:** Add single A record: { "records": [{"domain": "example.com", "type": "A", "subName": "@", "values": ["192.0.2.1"]}] } Add multiple records to one domain: { "records": [ {"domain": "example.com", "type": "A", "subName": "@", "values": ["192.0.2.1"]}, {"domain": "example.com", "type": "A", "subName": "www", "values": ["192.0.2.1"]}, {"domain": "example.com", "type": "MX", "subName": "@", "values": ["10 mail.example.com"]} ] } Add same record to multiple domains: { "records": [ {"domain": "example.com", "type": "A", "subName": "@", "values": ["192.0.2.1"]}, {"domain": "example.net", "type": "A", "subName": "@", "values": ["192.0.2.1"]}, {"domain": "example.org", "type": "A", "subName": "@", "values": ["192.0.2.1"]} ] } Replace existing records: { "records": [ {"domain": "example.com", "type": "A", "subName": "www", "values": ["192.0.2.2"]} ], "upsertMode": "replace" } **Note:** Requires authentication. Changes may take a few minutes to propagate.
ud_dns_record_updateUpdate existing DNS records for one or more domains in your portfolio. Supports bulk operations for up to 50 record updates. **Inputs:** - records (array, required): Array of record updates (1-50): - domain (string, required): The domain name (e.g., "example.com") - recordId (string, required): The record ID from ud_dns_records_list - values (array, required): New record values - ttl (number, default: 3600): Time-to-live in seconds (60-86400) **Returns:** - results: Array of results per record: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - recordId: The updated record ID - values: The new values - ttl: The TTL value used - error: Error message (if failed) - successCount: Number of successfully updated records - failureCount: Number of failed updates **Examples:** Update single record: { "records": [{"domain": "example.com", "recordId": "rec_abc123", "values": ["192.0.2.2"]}] } Update multiple records on same domain: { "records": [ {"domain": "example.com", "recordId": "rec_abc123", "values": ["192.0.2.2"]}, {"domain": "example.com", "recordId": "rec_def456", "values": ["5 mail.example.com"]} ] } Update records across multiple domains: { "records": [ {"domain": "example.com", "recordId": "rec_abc123", "values": ["192.0.2.1"]}, {"domain": "example.net", "recordId": "rec_xyz789", "values": ["192.0.2.1"]} ] } Update with custom TTL: { "records": [{"domain": "example.com", "recordId": "rec_ghi789", "values": ["192.0.2.1"], "ttl": 300}] } **Workflow:** 1. Use ud_dns_records_list to find record IDs 2. Use this tool to update values 3. Use ud_domain_pending_operations to track the changes **Note:** Requires authentication. Record type and subName cannot be changed - create a new record instead.
ud_dns_record_removeRemove specific DNS records from one or more domains in your portfolio. Supports bulk operations for up to 50 record removals. **Inputs:** - records (array, required): Array of records to remove (1-50): - domain (string, required): The domain name (e.g., "example.com") - recordId (string, required): The record ID from ud_dns_records_list **Returns:** - results: Array of results per record: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - recordId: The removed record ID - removed: Confirmation of removal - error: Error message (if failed) - successCount: Number of successfully removed records - failureCount: Number of failed removals **Examples:** Remove single record: { "records": [{"domain": "example.com", "recordId": "rec_abc123"}] } Remove multiple records from same domain: { "records": [ {"domain": "example.com", "recordId": "rec_abc123"}, {"domain": "example.com", "recordId": "rec_def456"} ] } Remove records from multiple domains: { "records": [ {"domain": "example.com", "recordId": "rec_abc123"}, {"domain": "example.net", "recordId": "rec_xyz789"} ] } **Workflow:** 1. Use ud_dns_records_list to find record IDs you want to remove 2. Use this tool to remove the specific records 3. Use ud_domain_pending_operations to track the changes **Warning:** This is a destructive operation. DNS records will be permanently deleted. To remove ALL records from a domain, use ud_dns_records_remove_all instead. **Note:** Requires authentication. Some records (marked as readonly) cannot be removed.
ud_dns_records_remove_allRemove ALL user-created DNS records from one or more domains in your portfolio. **DANGER:** This is a highly destructive operation that removes all DNS records you have created from ALL specified domains. System-managed records (marked as readonly) are preserved. Supports bulk operations for up to 50 domains. **Inputs:** - domains (array, required): Array of domains to remove all records from (1-50): - name (string, required): Domain name (e.g., "example.com") - confirmDeleteAll (boolean, required): Must be exactly `true` to proceed **Returns:** - results: Array of results per domain: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - error: Error message (if failed) - successCount: Number of successfully processed domains - failureCount: Number of failed domains **Examples:** Remove all records from single domain: { "domains": [{"name": "example.com"}], "confirmDeleteAll": true } Remove all records from multiple domains: { "domains": [ {"name": "example.com"}, {"name": "example.net"}, {"name": "example.org"} ], "confirmDeleteAll": true } **What Gets Removed (per domain):** - All A, AAAA, CNAME, MX, TXT records you created - All subdomain records (www, blog, mail, etc.) - Wildcard records **What Is Preserved:** - System-managed NS records (nameserver configuration) - Records marked as readonly (ADMIN, HOSTING, DNS_PROVIDER reasons) **Use Cases:** - Resetting DNS configuration to start fresh - Bulk cleanup of multiple domains before transfer - Cleaning up after removing services from multiple domains **Warning:** This cannot be undone. Consider using ud_dns_records_list first to review records. For removing specific records, use ud_dns_record_remove instead. **Note:** Requires authentication.
ud_dns_nameservers_listList nameservers for a domain in your portfolio. **Inputs:** - domain (string, required): The domain name (e.g., "example.com") - includeDnssec (boolean, optional): Include DNSSEC info if available **Returns:** - domain: The domain name - nameservers: Array of nameserver hostnames (e.g., ["ns1.unstoppabledomains.com", "ns2.unstoppabledomains.com"]) - isUsingDefaultNameservers: Whether using UD's default nameservers (true) or custom external nameservers (false) - dnssec (optional): DNSSEC configuration if includeDnssec=true - enabled: Whether DNSSEC is active - records: Array of DS records with keyTag, algorithm, digestType, digest **Examples:** List nameservers: { "domain": "example.com" } List nameservers with DNSSEC info: { "domain": "example.com", "includeDnssec": true } **Understanding Nameservers:** - **Default UD Nameservers**: UD uses Google Cloud DNS (ns-cloud-*.googledomains.com) - Full DNS management through UD - **Custom Nameservers**: External nameservers (e.g., Cloudflare, Route 53) - DNS managed elsewhere **When to Use Custom Nameservers:** - Using Cloudflare, AWS Route 53, or other DNS providers - Advanced DNS features not available through UD - Consolidating DNS management for multiple domains **Note:** Requires authentication. DNSSEC provides cryptographic security for DNS responses.
ud_dns_nameservers_set_customSet custom (external) nameservers for one or more domains in your portfolio. This switches DNS management from Unstoppable Domains to your external DNS provider (Cloudflare, Route 53, etc.). Supports bulk operations for up to 50 domains. **Inputs:** - domains (array, required): Array of domain configurations (1-50): - name (string, required): Domain name (e.g., "example.com") - nameservers (array, required): 2-12 nameserver hostnames - dnssec (object, optional): DNSSEC DS records for secure delegation. Most users don't need this - only include if your DNS provider gave you DS record details. **Returns:** - results: Array of results per domain: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - nameservers: The configured nameservers - hasDnssec: Whether DNSSEC records were included - error: Error message (if failed) - successCount: Number of successfully updated domains - failureCount: Number of failed updates **Examples:** Set Cloudflare nameservers for single domain: { "domains": [{ "name": "example.com", "nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"] }] } Set nameservers for multiple domains: { "domains": [ { "name": "example.com", "nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"] }, { "name": "example.net", "nameservers": ["ns-123.awsdns-45.com", "ns-678.awsdns-90.net"] } ] } Set nameservers with DNSSEC: { "domains": [{ "name": "example.com", "nameservers": ["ns1.cloudflare.com", "ns2.cloudflare.com"], "dnssec": { "items": [{ "keyTag": 12345, "algorithm": 13, "digestType": 2, "digest": "abc123..." }] } }] } **Common DNS Providers:** - **Cloudflare**: ns1.cloudflare.com, ns2.cloudflare.com - **AWS Route 53**: Check your hosted zone for specific nameservers - **Google Cloud DNS**: ns-cloud-*.googledomains.com - **DigitalOcean**: ns1-3.digitalocean.com **Important:** - After changing nameservers, configure DNS records at your new provider - Propagation can take up to 48 hours - To switch back to UD, use ud_dns_nameservers_set_default - Partial success is supported: some domains may succeed while others fail **Note:** Requires authentication.
ud_dns_nameservers_set_defaultReset one or more domains to use Unstoppable Domains' default nameservers. This switches DNS management back to Unstoppable Domains from an external DNS provider. Supports bulk operations for up to 50 domains. **Inputs:** - domains (array, required): Array of domains to reset (1-50): - name (string, required): Domain name (e.g., "example.com") **Returns:** - results: Array of results per domain: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - error: Error message (if failed) - successCount: Number of successfully updated domains - failureCount: Number of failed updates **Examples:** Reset single domain: { "domains": [{"name": "example.com"}] } Reset multiple domains: { "domains": [{"name": "example.com"}, {"name": "example.net"}, {"name": "example.org"}] } **What Happens:** 1. Domain nameservers are changed to UD's Google Cloud DNS infrastructure 2. DNS management returns to Unstoppable Domains 3. You can use ud_dns_record_* tools to manage records 4. Any records configured at external provider will no longer apply **When to Use:** - Switching back from Cloudflare, Route 53, or other providers - Want to use UD's built-in DNS management - Setting up hosting with UD Profile or redirects - Bulk operations when managing multiple domains **Important:** - Propagation can take up to 48 hours - Existing DNS records at external provider won't transfer - You'll need to recreate records using ud_dns_record_add - Partial success is supported: some domains may succeed while others fail **Note:** Requires authentication.
ud_dns_hosting_listList hosting/forwarding configurations for a domain in your portfolio. Hosting configurations control what happens when someone visits your domain. **Inputs:** - domain (string, required): The domain name (e.g., "example.com") - cursor (string, optional): Pagination cursor from previous response **Returns:** - domain: The domain name - configs: Array of hosting configurations: - type: Hosting type (LISTING_PAGE, REDIRECT_301, REDIRECT_302, UD_PROFILE, STOREFRONT) - subName: Subdomain ("@" for root, "www", etc.) or undefined for all - targetUrl: Redirect destination URL (for redirects) - status: ACTIVE or INACTIVE - certificateStatus: SSL certificate status - pagination: { hasMore, nextCursor } **Hosting Types:** - **LISTING_PAGE**: Display a for-sale landing page for the domain on the UD marketplace - **REDIRECT_301**: Permanent redirect to another URL (SEO-friendly) - **REDIRECT_302**: Temporary redirect to another URL - **UD_PROFILE**: UD profile page (legacy, being phased out) - **STOREFRONT**: UD storefront page **Examples:** List all hosting configs: { "domain": "example.com" } Paginate results: { "domain": "example.com", "cursor": "abc123" } **Use Cases:** - View current domain forwarding setup - Check if listing page is enabled - Verify redirect configurations **Note:** Requires authentication. Domain must use UD nameservers for hosting to work.
ud_dns_hosting_addAdd or update hosting configurations for one or more domains in your portfolio. This tool uses an **upsert pattern**: if a domain already has hosting configured, calling this tool will **replace** the existing configuration with the new one. Use this to both set up new hosting and modify existing configurations. Configure how your domains respond to web requests - show for-sale landing pages or redirect to other sites. Supports bulk operations for up to 50 domains. **Inputs:** - domains (array, required): Array of domain configurations (1-50): - name (string, required): Domain name (e.g., "example.com") - type (string, required): Hosting type: - "LISTING_PAGE": Display a for-sale landing page - "REDIRECT_301": Permanent redirect (SEO-friendly) - "REDIRECT_302": Temporary redirect - targetUrl (string, required for redirects): Destination URL - subName (string, optional): Subdomain to configure - forceCompatibility (boolean, optional): Auto-configure UD nameservers if needed **Returns:** - results: Array of results per domain: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - config: The configured hosting settings - error: Error message (if failed) - successCount: Number of successfully configured domains - failureCount: Number of failed configurations **Examples:** Enable landing page for single domain: { "domains": [{"name": "example.com", "type": "LISTING_PAGE"}] } Configure multiple domains with different settings: { "domains": [ {"name": "example.com", "type": "LISTING_PAGE"}, {"name": "example.net", "type": "REDIRECT_301", "targetUrl": "https://mysite.com"}, {"name": "example.org", "type": "REDIRECT_302", "targetUrl": "https://promo.mysite.com"} ] } Configure www subdomain redirect: { "domains": [{ "name": "example.com", "type": "REDIRECT_301", "targetUrl": "https://mysite.com", "subName": "www" }] } Update existing redirect to point to a new URL: { "domains": [{"name": "example.com", "type": "REDIRECT_301", "targetUrl": "https://newsite.com"}] } **When to Use Each Type:** - **LISTING_PAGE**: Showcase your domain for sale with a professional landing page - **REDIRECT_301**: Point domain permanently to another site (good for SEO) - **REDIRECT_302**: Temporary campaigns or testing **Requirements:** - Domain must use UD nameservers (use forceCompatibility or ud_dns_nameservers_set_default) - SSL certificates are automatically provisioned **Note:** Requires authentication. Changes typically propagate within minutes.
ud_dns_hosting_removeRemove hosting/forwarding configurations from one or more domains in your portfolio. This disables web hosting features (listing pages or redirects) for domains. Supports bulk operations for up to 50 domains. **Inputs:** - domains (array, required): Array of domains to remove hosting from (1-50): - name (string, required): Domain name (e.g., "example.com") - subName (string, optional): Subdomain to remove. Omit for root domain. - deleteAll (boolean, optional): Remove ALL hosting configs including subdomains for this domain - confirmDeleteAll (boolean, required when any domain has deleteAll: true): Must be `true` to confirm bulk deletion **Returns:** - results: Array of results per domain: - domain: The domain name - success: Whether the operation succeeded - operationId: Track with ud_domain_pending_operations (if successful) - subName: The subdomain that was removed (if specified) - deletedAll: Whether all configurations were removed for this domain - error: Error message (if failed) - successCount: Number of successfully removed configurations - failureCount: Number of failed removals **Examples:** Remove root domain hosting for single domain: { "domains": [{"name": "example.com"}] } Remove hosting from multiple domains: { "domains": [ {"name": "example.com"}, {"name": "example.net"}, {"name": "example.org"} ] } Remove www subdomain hosting: { "domains": [{"name": "example.com", "subName": "www"}] } Remove ALL hosting configurations (requires confirmation): { "domains": [{"name": "example.com", "deleteAll": true}], "confirmDeleteAll": true } Mixed operations: { "domains": [ {"name": "example.com"}, {"name": "example.net", "subName": "www"}, {"name": "example.org", "deleteAll": true} ], "confirmDeleteAll": true } **What Happens:** - Listing page will no longer be displayed - Redirects will stop working - Domain will show default DNS response - SSL certificate may be removed **Use Cases:** - Disable listing pages temporarily - Remove old redirect configurations - Clean up before setting up new hosting - Bulk clean-up of multiple domains **Note:** Requires authentication. This is a destructive operation.
ud_domain_pending_operationsCheck for pending DNS operations across multiple domains in your portfolio. DNS changes are processed asynchronously. Use this tool to: - Track the status of recent DNS changes across multiple domains - Check if domains are ready for new changes - Debug why changes might be queued - Monitor progress after bulk DNS record updates **Inputs:** - domains (array, required): Array of domain objects with name field (1-50 domains) - includeCompleted (boolean, optional): Include completed/failed operations from last 24h **Returns:** - results: Array of per-domain results: - domain: The domain name - success: Whether the lookup succeeded - hasPendingOperations: Whether any operations are still in progress - operations: Array of operations with id, type, status, timestamps, etc. - error: Error message if lookup failed - successCount: Number of domains successfully queried - failureCount: Number of domains that failed - summary: Aggregate summary: - totalPendingCount: Total pending operations across all domains - domainsWithPending: List of domain names with pending operations **Operation Statuses:** - PENDING: Operation submitted, awaiting processing - PENDING_SIGNATURE: Requires user signature (blockchain domains) - PENDING_TRANSMISSION: Being transmitted to DNS provider - COMPLETED: Successfully finished - FAILED: Operation failed (check errorCode) - CANCELLED: Operation was cancelled **Examples:** Check single domain: { "domains": [{"name": "example.com"}] } Check multiple domains after bulk update: { "domains": [{"name": "domain1.com"}, {"name": "domain2.com"}, {"name": "domain3.com"}] } Include recent history: { "domains": [{"name": "example.com"}], "includeCompleted": true } **Workflow:** 1. Make DNS changes using ud_dns_record_* or ud_dns_nameservers_* tools 2. Use this tool with the same domains to track operation progress 3. Check summary.totalPendingCount - wait until 0 before making more changes **Note:** Requires authentication. Operations typically complete within minutes. All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times.
ud_domain_auto_renewal_updateEnable or disable auto renewal for ICANN DNS domains that the user owns. This tool manages auto renewal subscriptions for ICANN DNS domains (.com, .net, .org, .io, etc.). When auto renewal is enabled, the domain will be automatically renewed before expiration using the saved payment method. **Inputs:** - action (string, required): Either "enable" or "disable" - domains (array, required): Array of domain objects: - name (string, required): Full domain name (e.g., "example.com") - paymentMethodId (string, optional): Stripe payment method ID for enabling. Use the ud_cart_get_payment_methods tool to retrieve available payment methods. If not provided, uses user's default card. **Returns:** - results: Array with success/failure status for each domain - successCount: Number of domains successfully updated - failureCount: Number of domains that failed to update **Enable Example:** Input: { "action": "enable", "domains": [{"name": "example.com"}, {"name": "mysite.io"}] } Output: { "results": [{"domain": "example.com", "success": true}, {"domain": "mysite.io", "success": true}], "successCount": 2, "failureCount": 0 } **Disable Example:** Input: { "action": "disable", "domains": [{"name": "example.com"}] } Output: { "results": [{"domain": "example.com", "success": true}], "successCount": 1, "failureCount": 0 } **Notes:** - Requires authentication - User must own the domains - Only ICANN DNS domains are supported (e.g., .com, .net, .org, .io, .xyz) - Enable action requires a valid payment method (credit card) on file - Maximum 50 domains per request
ud_domain_getGet comprehensive information about domains in your portfolio. Returns all data from ud_portfolio_list plus additional detail per domain. This tool retrieves aggregated information for domains you own, including: - **Identity**: Domain name parts (extension, label, SLD), punycode status - **Lifecycle**: Purchase date, expiration, transfer status, external ownership, reverse resolution, renewal pricing/eligibility, auto-renewal status - **Flags**: WHOIS privacy, transfer lock, and other domain configuration flags - **DNS**: Nameservers (default/custom/none), hosting redirects, DNSSEC status - **Marketplace**: Active listing details, offer/lead/watchlist counts - **Tags**: Organization tags applied to your domains - **Pending Operations**: Any in-progress DNS or domain operations **Inputs:** - domains (array, required): Array of domain names to look up (e.g., ["example.com", "mysite.io"]) **Returns:** - domains: Array with detailed info for each domain: - domain, found, extension, label, sld, punycode, error - lifecycle: { purchasedAt, expiresAt, transferStatus, isExternallyOwned, reverse, renewal, autoRenewal } - flags: { DNS_WHOIS_PROXY, DNS_TRANSFER_OUT, ... } - dns: { nameservers: { status, nameservers[] }, hosting[], dnssec: { enabled, valid } } - marketplace: { listing, offersCount, leadsCount, watchlistCount } - tags: string[] - pendingOperations: { id, type, status, createdAt }[] - availableTags: All tags you've created (useful for adding tags to other domains) **Example:** Input: { "domains": ["example.com"] } Output: { "domains": [ { "domain": "example.com", "found": true, "extension": "com", "label": "example", "sld": null, "punycode": false, "lifecycle": { "purchasedAt": "2024-01-15T00:00:00.000Z", "expiresAt": "2025-06-15T00:00:00.000Z", "transferStatus": "none", "isExternallyOwned": false, "reverse": false, "renewal": { "isEligible": true, "period": { "min": 1, "max": 10, "increments": 1 }, "pricePerYear": 1299, "pricePerYearFormatted": "$12.99" }, "autoRenewal": { "status": "active", "expiresAt": "2025-06-15T00:00:00.000Z" } }, "flags": { "DNS_TRANSFER_OUT": { "status": "DISABLED" }, "DNS_WHOIS_PROXY": { "status": "ENABLED" } }, "dns": { "nameservers": { "status": "default", "nameservers": ["ns-cloud-a1.googledomains.com", "ns-cloud-a2.googledomains.com"] }, "hosting": null, "dnssec": { "enabled": true, "valid": true } }, "marketplace": { "listing": null, "offersCount": 2, "leadsCount": 1, "watchlistCount": 5 }, "tags": ["Work", "Important"], "pendingOperations": [] } ], "availableTags": ["Work", "Personal", "Important", "For Sale"] } **Notes:** - Requires authentication - Only ICANN DNS domains are fully supported - Maximum 50 domains per request - DNS data (nameservers, hosting, DNSSEC) comes from cache and may be briefly delayed after changes - All timestamps are returned in UTC (ISO 8601 format). Convert to the user's local timezone when displaying dates and times.
ud_domain_tags_addAdd tags to domains in your portfolio. Creates new tags automatically if they don't exist. **Inputs:** - domains (array, required): Array of domain names to add tags to (e.g., ["example.com", "mysite.io"]) - tags (array, required): Array of tag names to add (e.g., ["Work", "Important"]). Max 20 characters each. **Returns:** - results: Array with result for each domain: - domain: The domain name - success: Whether tags were applied successfully - tagsApplied: Tags that were applied - error: Error message if failed - newTagsCreated: Tags that were newly created during this request (didn't exist in your account before) - successCount: Number of domains with tags applied - failureCount: Number of domains that failed **Example:** Input: { "domains": ["example.com", "mysite.io"], "tags": ["Work", "Important"] } Output: { "results": [ { "domain": "example.com", "success": true, "tagsApplied": ["Work", "Important"] }, { "domain": "mysite.io", "success": true, "tagsApplied": ["Work", "Important"] } ], "newTagsCreated": ["Important"], "successCount": 2, "failureCount": 0 } **Notes:** - Requires authentication - Maximum 50 domains per request - Maximum 10 tags per request - Tag names must be 20 characters or less - Tags are automatically created if they don't exist - If a tag is already applied to a domain, it's silently skipped
ud_domain_tags_removeRemove tags from domains in your portfolio. **Inputs:** - domains (array, required): Array of domain names to remove tags from (e.g., ["example.com", "mysite.io"]) - tags (array, required): Array of tag names to remove (e.g., ["Work", "Old"]) **Returns:** - results: Array with result for each domain: - domain: The domain name - success: Whether tags were removed successfully - tagsRemoved: Tags that were removed - error: Error message if failed - successCount: Number of domains with tags removed - failureCount: Number of domains that failed **Example:** Input: { "domains": ["example.com"], "tags": ["Old", "Temp"] } Output: { "results": [ { "domain": "example.com", "success": true, "tagsRemoved": ["Old", "Temp"] } ], "successCount": 1, "failureCount": 0 } **Notes:** - Requires authentication - Maximum 50 domains per request - Maximum 10 tags per request - Tags that don't exist or aren't applied to the domain are silently skipped
ud_domain_flags_updateUpdate domain flags (WHOIS privacy, transfer lock) for domains in your portfolio. **Inputs:** - domains (array, required): Array of domain names to update (e.g., ["example.com", "mysite.io"]) - flags (object, required): Flags to update: - DNS_TRANSFER_OUT: Transfer lock. ENABLED = transfers allowed, DISABLED = transfers blocked. - DNS_WHOIS_PROXY: WHOIS privacy. ENABLED = personal info hidden, DISABLED = personal info public. **Returns:** - results: Array with result for each domain: - domain: The domain name - success: Whether flags were updated successfully - updatedFlags: Flags that were updated - error: Error message if failed - successCount: Number of domains updated - failureCount: Number of domains that failed **Example:** Input: { "domains": ["example.com"], "flags": { "DNS_WHOIS_PROXY": { "status": "ENABLED" }, "DNS_TRANSFER_OUT": { "status": "DISABLED" } } } Output: { "results": [ { "domain": "example.com", "success": true, "updatedFlags": ["DNS_WHOIS_PROXY", "DNS_TRANSFER_OUT"] } ], "successCount": 1, "failureCount": 0 } **Notes:** - Requires authentication - Maximum 50 domains per request - Only ICANN DNS domains are supported - At least one flag must be specified
ud_domain_pushPush domains to another Unstoppable Domains user. Requires MFA (two-factor authentication) verification. **IMPORTANT:** You must have MFA enabled on your account to use this feature. The recipient must accept the transfer. **Inputs:** - domains (array, required): Array of domain names to push (e.g., ["example.com", "mysite.io"]) - targetAccountId (string, required): Recipient's account ID in format "adjective-noun-xxx" (e.g., "brave-tiger-k7m"). Found in account settings. - otpCode (string, required): 6-digit OTP code from your authenticator app **Returns:** - success: Whether any domains were pushed - pushedDomains: Domains that were successfully initiated for push - failedDomains: Domains that could not be pushed (with reason) - targetAccountId: The target account ID - message: Human-readable summary **Example:** Input: { "domains": ["example.com", "mysite.io"], "targetAccountId": "brave-tiger-k7m", "otpCode": "123456" } Output: { "success": true, "pushedDomains": ["example.com", "mysite.io"], "failedDomains": [], "targetAccountId": "brave-tiger-k7m", "message": "Push initiated for 2 domain(s). The recipient will need to accept the transfer." } **Notes:** - Requires authentication with MFA enabled - Maximum 50 domains per request - Only ICANN DNS domains can be pushed - Cannot push expired domains or domains with pending transfers - Cannot push domains to yourself - Recipient must accept the transfer within 4 hours