Unstoppable Domains Portfolio API

Manage owned domains (requires authentication)

Operations 2

POST /mcp/v1/actions/ud_portfolio_list List portfolio domains #
POST /mcp/v1/actions/ud_domain_get Get comprehensive portfolio domain info #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/unstoppable-domains-portfolio-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

unstoppable-domains-portfolio-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: User Portfolio API
  description: 'Search, check availability, and purchase traditional DNS domains. This API enables AI assistants to help users find and buy domain names.


    When using the API directly, you will need an API key. See [API Key setup](/user-api/overview#api-key-advanced) for instructions.'
  version: 1.0.0
  contact:
    name: Unstoppable Domains
    url: https://unstoppabledomains.com
    email: support@unstoppabledomains.com
  x-logo:
    url: https://unstoppabledomains.com/images/logos/ud-logo-icon.svg
servers:
- url: https://api.unstoppabledomains.com
  description: Production server
tags:
- name: Portfolio
  description: Manage owned domains (requires authentication)
paths:
  /mcp/v1/actions/ud_portfolio_list:
    post:
      operationId: portfolioList
      summary: List portfolio domains
      description: List domains in the authenticated user's portfolio with filtering, sorting, and pagination. By default, only ICANN (DNS) domains are returned. Returns 50 domains per page by default. If hasMore is true in the pagination response, increment the page parameter to fetch additional results.
      tags:
      - Portfolio
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                page:
                  type: number
                  minimum: 1
                  description: 'Page number, 1-indexed (default: 1)'
                  example: 1
                pageSize:
                  type: number
                  minimum: 1
                  maximum: 100
                  description: 'Number of domains per page, 1-100 (default: 50)'
                  example: 50
                searchTerm:
                  type: string
                  description: Optional search term to filter domains by name
                status:
                  type: string
                  enum:
                  - all
                  - for-sale
                  - unlisted
                  description: 'Filter by listing status: "all" (default), "for-sale", or "unlisted"'
                registryType:
                  type: string
                  enum:
                  - dns
                  - web3
                  description: 'Filter by registry type: "dns" (ICANN/Web2 domains, default) or "web3" (blockchain domains only)'
                expiringWithinDays:
                  type: number
                  minimum: 1
                  maximum: 365
                  description: Filter domains expiring within the specified number of days (1-365)
                  example: 30
                expired:
                  type: boolean
                  description: Filter for domains that have already expired
                minLength:
                  type: number
                  minimum: 1
                  description: Filter domains with label length >= this value
                maxLength:
                  type: number
                  minimum: 1
                  description: Filter domains with label length <= this value
                autoRenewal:
                  type: string
                  enum:
                  - 'true'
                  - 'false'
                  description: Filter by auto-renewal status
                tagFilters:
                  type: array
                  items:
                    type: string
                  description: Filter domains by tag names (e.g., ["personal", "business"])
                orderBy:
                  type: string
                  enum:
                  - name
                  - length
                  - purchasedAt
                  - expiresAt
                  - listingPrice
                  - offers
                  - leads
                  - watchlistCount
                  description: 'Sort by: "name", "length", "purchasedAt", "expiresAt", "listingPrice", "offers", "leads", or "watchlistCount"'
                orderDirection:
                  type: string
                  enum:
                  - asc
                  - desc
                  description: 'Sort direction: "asc" (ascending, default) or "desc" (descending)'
      responses:
        '200':
          description: Portfolio domains list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListDomainsResponse'
        '401':
          description: Authentication required
  /mcp/v1/actions/ud_domain_get:
    post:
      operationId: domainGet
      summary: Get comprehensive portfolio domain info
      description: 'Get comprehensive information for specific domains in your portfolio. Returns all data from ud_portfolio_list plus additional detail: renewal pricing, flags, DNS configuration (nameservers, hosting, DNSSEC), marketplace metrics, and pending operations. Supports bulk lookups for up to 50 domains.'
      tags:
      - Portfolio
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domains
              properties:
                domains:
                  type: array
                  items:
                    type: string
                    minLength: 1
                  minItems: 1
                  maxItems: 50
                  description: Array of domain names to get info for (e.g., ["example.com", "mysite.io"])
                  example:
                  - example.com
                  - mysite.io
      responses:
        '200':
          description: Portfolio domain details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPortfolioDomainsResponse'
        '401':
          description: Authentication required
components:
  schemas:
    GetPortfolioDomainsResponse:
      type: object
      properties:
        domains:
          type: array
          description: Comprehensive info for each requested domain
          items:
            type: object
            properties:
              domain:
                type: string
                description: The domain name
              found:
                type: boolean
                description: Whether the domain was found in your portfolio
              extension:
                type: string
                description: TLD (e.g., "com")
              label:
                type: string
                description: Domain label without TLD
              sld:
                type:
                - string
                - 'null'
                description: Second-level domain
              punycode:
                type: boolean
                description: Whether domain uses punycode encoding
              lifecycle:
                type: object
                description: 'Domain lifecycle: dates, ownership, renewal, auto-renewal'
                properties:
                  purchasedAt:
                    type:
                    - string
                    - 'null'
                    description: Purchase date (ISO 8601)
                  expiresAt:
                    type:
                    - string
                    - 'null'
                    description: Expiration date (ISO 8601)
                  transferStatus:
                    type: string
                    description: 'Transfer status: "none" or "pending"'
                  isExternallyOwned:
                    type: boolean
                    description: Whether domain is in registrar custody (externally owned)
                  reverse:
                    type: boolean
                    description: Whether reverse resolution is enabled
                  renewal:
                    type:
                    - object
                    - 'null'
                    description: Renewal eligibility and pricing
                    properties:
                      isEligible:
                        type: boolean
                        description: Whether domain is eligible for renewal
                      period:
                        type: object
                        properties:
                          min:
                            type: number
                            description: Minimum renewal years
                          max:
                            type: number
                            description: Maximum renewal years
                          increments:
                            type: number
                            description: Renewal year increments
                      pricePerYear:
                        type: number
                        description: Renewal price per year in cents (USD)
                      pricePerYearFormatted:
                        type: string
                        description: Formatted price (e.g., "$12.99")
                  autoRenewal:
                    type:
                    - object
                    - 'null'
                    description: Auto-renewal subscription status
                    properties:
                      status:
                        type: string
                        description: Subscription status
                      expiresAt:
                        type:
                        - string
                        - 'null'
                        description: Next renewal date (ISO 8601)
              flags:
                type:
                - object
                - 'null'
                description: Domain-level flags (WHOIS privacy, transfer lock, etc.)
                properties:
                  DNS_TRANSFER_OUT:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
                    description: Transfer lock status
                  DNS_WHOIS_PROXY:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
                    description: WHOIS privacy status
                  DNS_RESOLUTION:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
                  DNS_DELETE:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
                  DNS_UPDATE:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
                  DNS_UNS_TOKENIZATION:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                        - ENABLED
                        - DISABLED
              dns:
                type: object
                description: DNS configuration from cache (nameservers, hosting, DNSSEC)
                properties:
                  nameservers:
                    type:
                    - object
                    - 'null'
                    properties:
                      status:
                        type: string
                        enum:
                        - default
                        - custom
                        - none
                        description: 'Nameserver status: default (UD-managed), custom (external), none'
                      nameservers:
                        type: array
                        items:
                          type: string
                        description: Nameserver hostnames
                  hosting:
                    type:
                    - array
                    - 'null'
                    items:
                      type: object
                      properties:
                        subName:
                          type: string
                          description: Subdomain name
                        type:
                          type: string
                          description: Hosting type (REDIRECT_301, REDIRECT_302, UD_PROFILE)
                        targetUrl:
                          type:
                          - string
                          - 'null'
                          description: Target URL for redirect
                        status:
                          type: string
                          description: Hosting status (ACTIVE, INACTIVE, PENDING)
                    description: URL redirects and hosting rules
                  dnssec:
                    type:
                    - object
                    - 'null'
                    properties:
                      enabled:
                        type: boolean
                        description: Whether DNSSEC is enabled
                      valid:
                        type: boolean
                        description: Whether DNSSEC validation passes
              marketplace:
                type: object
                description: Marketplace listing and engagement metrics
                properties:
                  listing:
                    type:
                    - object
                    - 'null'
                    description: Active listing details
                    properties:
                      id:
                        type: number
                      price:
                        type: number
                        description: Listing price in cents
                      status:
                        type: string
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                      views:
                        type: number
                      listingSettings:
                        type:
                        - object
                        - 'null'
                  offersCount:
                    type: number
                    description: Number of active offers
                  leadsCount:
                    type: number
                    description: Number of buyer leads
                  watchlistCount:
                    type: number
                    description: Number of users watching this domain
              tags:
                type: array
                items:
                  type: string
                description: Tags applied to this domain
              pendingOperations:
                type: array
                description: Pending DNS/domain operations
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    type:
                      type: string
                    status:
                      type: string
                    createdAt:
                      type: string
              error:
                type: string
                description: Error message if retrieval failed
        availableTags:
          type: array
          items:
            type: string
          description: All tags you've created (useful for adding tags to other domains)
    PortfolioDomain:
      type: object
      properties:
        name:
          type: string
          description: Full domain name (e.g., "example.com")
        extension:
          type: string
          description: TLD (e.g., "com")
        label:
          type: string
          description: Domain label without TLD
        sld:
          type:
          - string
          - 'null'
          description: Second-level domain
        punycode:
          type: boolean
          description: Whether domain uses punycode
        purchasedAt:
          type:
          - string
          - 'null'
          description: Purchase date (ISO string)
        expiresAt:
          type:
          - string
          - 'null'
          description: Expiration date for DNS domains (ISO string)
        transferStatus:
          type: string
          description: 'Domain transfer status:

            • "none" - No active transfer

            • "pending" - Transfer in progress'
        isExternallyOwned:
          type: boolean
          description: Whether domain is externally owned
        tags:
          type: array
          items:
            type: string
          description: User-defined tags
        reverse:
          type: boolean
          description: Whether this is set as reverse resolution
        offersCount:
          type: number
          description: Number of active offers on this domain
        leadsCount:
          type: number
          description: Number of buyer inquiries/messages about this domain
        watchlistCount:
          type: number
          description: Number of users watching this domain
        listing:
          type:
          - object
          - 'null'
          description: Listing details if domain is for sale
          properties:
            id:
              type: number
              description: Listing ID
            price:
              type: number
              description: Listing price in cents
            status:
              type: string
              description: 'Listing status:

                • "open" - Live on marketplace, ready for purchase (user-custodied domains)

                • "open-not-signed" - Live on marketplace, ready for purchase (UD-custodied domains, no user action needed)

                • "open-on-request" - Accepting offers only, no fixed price

                • "draft" - Not yet published

                • "waiting-for-approval" - Pending wallet signature from owner

                • "pending-admin-approval" - Under review (high-value listings)

                • "pending" - Sale in progress

                • "canceled" - Listing was canceled

                Note: Both "open" and "open-not-signed" mean the listing is active and purchasable.'
            createdAt:
              type: string
              description: ISO date string
            updatedAt:
              type: string
              description: ISO date string
            views:
              type: number
              description: Number of page views
        autoRenewal:
          type:
          - object
          - 'null'
          description: Auto-renewal subscription details if enabled
          properties:
            status:
              type: string
              description: 'Auto-renewal subscription status:

                • "active" - Subscription active, will auto-renew

                • "pending" - Payment collected, waiting for domain registration

                • "update_required" - Payment method needs updating (card expired/declined)

                • "expired" - Subscription expired, domain renewal overdue

                • "cancelled" - Subscription cancelled, will not auto-renew'
            expiresAt:
              type:
              - string
              - 'null'
              description: Subscription expiration date (ISO string)
    ListDomainsResponse:
      type: object
      properties:
        domains:
          type: array
          items:
            $ref: '#/components/schemas/PortfolioDomain'
        pagination:
          type: object
          properties:
            page:
              type: number
              description: Current page number
            pageSize:
              type: number
              description: Items per page
            totalPages:
              type: number
              description: Total number of pages
            total:
              type: number
              description: Total number of domains
            hasMore:
              type: boolean
              description: Whether more pages exist
            nextPage:
              type:
              - number
              - 'null'
              description: Next page number if more results exist, null otherwise
        truncated:
          type: boolean
          description: Whether results were truncated due to size limits
        truncationMessage:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key for authenticated operations. Obtain from your Unstoppable Domains account settings.