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: 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.