openapi: 3.1.0 info: title: Reseller API version: 1.0.0 contact: name: Unstoppable Domains (Reseller Engineering) email: partnerengineering@unstoppabledomains.com description: | # Feature Overview The Reseller API provides domain reseller partners with the ability to search, register and manage traditional DNS domains. The API exposes a RESTful interface for domain registration, DNS management, and domain lifecycle operations. - **Domain Discovery**: Search for specific domains or find suggested alternatives, determine pricing, availability and registration details - **Domain Registration**: Register domains with full control over registration period, contacts, and initial DNS configuration - **DNS Management**: Create, update and delete DNS records for your domains - **Domain Lifecycle**: Manage renewals, transfers, contacts, and domain flags through a simple API interface - **Marketplace**: Browse secondary marketplace listings to find premium domains available for purchase from existing owners For access, authentication, environments, and your first request, start with the [Quick Start](/apis/reseller/quick-start). For implementation guidance on operations, flags, registration flows, contact management, DNS management, webhooks, and lifecycle operations, see the [Implementation Guide](/apis/reseller/implementation-guide). servers: - url: https://api.unstoppabledomains.com/partner/v3 description: Production - url: https://api.ud-sandbox.com/partner/v3 description: Sandbox tags: - name: domain-search description: | Search for domain availability and retrieve details for one or more domains. Use the `$expand` parameter to include registration details and flags in the response. x-displayName: Search & Lookup - name: domain-registration description: | Register new domains and manage renewals. Use `$preview=true` to validate requests and get price quotes before committing. x-displayName: Registration & Renewals - name: domain-management description: | Comprehensive domain updates — modify nameservers, DNSSEC, contacts, flags, and DNS records in a single request. x-displayName: Domain Management - name: dns-records description: | Create, read, update and delete DNS records for your domains. Also includes DNS metadata, nameserver management, and DNSSEC configuration. x-displayName: DNS Records - name: domain-transfers description: | Check transfer eligibility and retrieve authorization codes for transferring domains to another registrar. x-displayName: Transfers - name: domain-flags description: | View and manage domain flags that control behavior and security settings such as DNS resolution, transfer locks, WHOIS privacy, and more. x-displayName: Domain Flags - name: domain-contacts description: | View and update the ICANN-required contacts (owner, admin, tech, billing) assigned to a specific domain. x-displayName: Domain Contacts - name: suggestions description: Find available domain alternatives based on keywords and preferences. x-displayName: Suggestions - name: pricing description: Retrieve pricing information for domain registration, renewal, transfer, and restoration by domain name or TLD. x-displayName: Pricing - name: tlds description: Browse available top-level domains (TLDs), their details, and DNS security configuration. x-displayName: TLDs - name: contacts description: | Create and manage ICANN-required contacts for domain registration. Contacts represent individuals or organizations associated with domain roles (owner, admin, tech, billing). New contacts are automatically sent a verification email upon creation. Contacts can be used in domain registrations immediately, but domains associated with unverified contacts may become unmanageable after a certain period. x-displayName: Contacts - name: operations description: | All asynchronous processes handled by the API are represented as Operations. This includes registering a domain, updating DNS records, renewing a domain, and more. Operations contain dependencies that represent the individual units of work. Each dependency has its own status, parameters, and result data. x-displayName: Operations - name: hosting description: | Configure how your domains serve content on the web. Hosting configurations control what happens when someone visits your domain — whether it redirects to another URL or proxies content from another server. Available hosting types: - `REDIRECT_301` — Permanent redirect to another URL - `REDIRECT_302` — Temporary redirect to another URL - `REVERSE_PROXY` — Proxy requests to a backend server All hosting configurations require SSL certificate provisioning. When a configuration is created or updated, the `certificateStatus` field will be `PENDING` until the certificate is issued and active. This process typically completes within a few minutes but may take longer in some cases. x-displayName: Hosting - name: marketplace description: | Browse and search the Unstoppable Domains secondary marketplace. Retrieve paginated listings of domains available for purchase from existing owners, with filtering by TLD and sorting options. x-displayName: Marketplace - name: account description: Manage your account details, authentication tokens, and webhook subscriptions. x-displayName: Account x-tagGroups: - name: Domains tags: - domain-search - suggestions - domain-registration - domain-management - dns-records - domain-transfers - domain-flags - domain-contacts - name: Marketplace tags: - marketplace - name: Discovery tags: - pricing - tlds - name: Contacts tags: - contacts - name: Operations tags: - operations - name: Hosting tags: - hosting - name: Account tags: - account paths: /domains: get: operationId: getMultipleDomains parameters: - name: $expand required: false in: query schema: type: array items: $ref: '#/components/schemas/DomainExpandField' - name: ending required: false in: query schema: default: [] type: array items: type: string description: TLD or domain endings to combine with unqualified query labels (e.g. `com`, `net`). Required when any `query` value is an unqualified label. - name: query required: true in: query schema: maxItems: 50 type: array items: type: string description: Domain names or labels to search. Fully qualified names (e.g. `example.com`) are looked up directly. Unqualified labels (e.g. `example`) are combined with each `ending` value to produce domain names. responses: '200': description: List of domains matching search query content: application/json: schema: $ref: '#/components/schemas/MultipleDomainSearchResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-search summary: Lookup multiple domains description: | Get domain availability and details for multiple domains. Optionally, use the `$expand` query parameter to include additional data in the response (e.g. `?$expand=registration&$expand=flags`). If a domain is available for registration it will have an `availability.status` of `AVAILABLE` and will include an `availability.price` object. **Search constraints:** - Each `query` value must be a fully qualified domain name (e.g. `example.com`), OR at least one `ending` parameter must be provided. - The total number of domains resolved (queries × endings) must not exceed **50**. - If a `query` value already contains a valid TLD (e.g. `example.com`), it is looked up directly and is not combined with `ending` values. post: operationId: registerDomain parameters: - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainRegistrationRequestBody' responses: '201': description: Domain registration operation created content: application/json: schema: $ref: '#/components/schemas/DomainOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-registration summary: Register or transfer in a domain description: | Register a new domain or transfer an existing domain into your account. The request body specifies the domain name and optional DNS configuration including registration period, contacts, and nameserver settings. To **register** a new domain, submit the request without an authorization code. To **transfer in** an existing domain from another registrar, include the `dns.authorizationCode` field — the presence of this field determines that this is a transfer-in rather than a new registration. Use `$preview=true` to validate the request and get a price quote without executing the operation. /domains/{name}: get: operationId: getSingleDomain parameters: - name: name required: true in: path schema: type: string - name: $expand required: false in: query schema: type: array items: $ref: '#/components/schemas/DomainExpandField' responses: '200': description: Domain details content: application/json: schema: $ref: '#/components/schemas/DomainSearchResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-search summary: Lookup a single domain description: | Get availability and details for a single domain. Optionally, use the `$expand` query parameter to include additional data such as registration details and flags. patch: operationId: updateDomain summary: Update a domain description: Comprehensive domain update — modify nameservers, DNSSEC, contacts, flags, and DNS records in a single operation. All fields are optional; only include the sections you want to change. Returns an operation that tracks all the resulting changes. tags: - domain-management parameters: - name: name required: true in: path schema: type: string description: Domain name - name: $preview required: true in: query schema: type: boolean default: false description: Preview mode — validate the request without executing changes. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainUpdateRequestBody' responses: '200': description: Update operation created content: application/json: schema: $ref: '#/components/schemas/DomainOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' /domains/{name}/pending-operations: get: operationId: getDomainPendingOperations parameters: - name: name required: true in: path schema: type: string responses: '200': description: List of pending operations for domain content: application/json: schema: $ref: '#/components/schemas/DomainPendingOperationsListResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - operations summary: Get pending operations for a domain description: | Retrieve a list of operations that are currently in progress for the specified domain. Useful for checking if there are any active operations before initiating new changes. /domains/{name}/renewals: get: operationId: getDomainRenewalInfo parameters: - name: name required: true in: path schema: type: string responses: '200': description: Domain renewal pricing and eligibility content: application/json: schema: $ref: '#/components/schemas/IcannDomainRenewalInfoResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-registration summary: Get domain renewal info description: | Retrieve renewal eligibility and pricing for the specified domain, including the current expiration date, grace period expiration, and available renewal periods. post: operationId: postDomainRenewal parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainRenewalRequestBody' responses: '201': description: Domain renewal operation created content: application/json: schema: $ref: '#/components/schemas/DomainOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-registration summary: Renew a domain description: | Renew the specified domain for a given period (in years). Use `$preview=true` to get a renewal price quote without executing the renewal. /domains/{name}/dns: get: operationId: getDomainDnsMetadata parameters: - name: name required: true in: path schema: type: string responses: '200': description: DNS metadata for domain content: application/json: schema: $ref: '#/components/schemas/IcannDomainDnsMetadataResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Get DNS metadata description: | Retrieve DNS metadata for the specified domain, including the DNS provider and registration status. /domains/{name}/dns/authorization-code: get: operationId: getAuthorizationCode parameters: - name: name required: true in: path schema: type: string responses: '200': description: Transfer authorization code content: application/json: schema: $ref: '#/components/schemas/DomainTransferAuthorizationCodeResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-transfers summary: Get transfer authorization code description: | Retrieve the authorization (EPP) code required to transfer the domain to another registrar. The domain must be eligible for transfer before requesting this code. /domains/{name}/dns/records: get: operationId: getDnsRecords parameters: - name: name required: true in: path schema: type: string - name: $cursor required: false in: query schema: type: string - name: type required: false in: query schema: maxItems: 50 type: array items: $ref: '#/components/schemas/DnsRecordType' - name: subName required: false in: query schema: maxItems: 50 type: array items: type: string responses: '200': description: List of DNS records content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordsResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: List DNS records description: | Retrieve DNS records for the specified domain. Supports filtering by record type and subdomain name, and cursor-based pagination. post: operationId: createDnsRecord parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordCreateRequestBody' responses: '201': description: DNS record creation operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Create a DNS record description: | Create a new DNS record for the specified domain. Supports all standard DNS record types. Use `$preview=true` to validate the request without creating the record. The `$upsert` option controls behavior when a matching record already exists: `REPLACE` overwrites, `APPEND` adds values, `DISALLOWED` rejects the request. /domains/{name}/dns/records/{id}: patch: operationId: updateDomainRecord parameters: - name: name required: true in: path schema: type: string - name: id required: true in: path schema: type: string pattern: ^rr-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: rr-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'DNS record ID (format: rr-)' - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordUpdateRequestBody' responses: '200': description: DNS record update operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Update a DNS record description: | Update an existing DNS record by ID. You can modify the record values and TTL. Use `$preview=true` to validate the request without applying the change. delete: operationId: deleteDomainRecord parameters: - name: name required: true in: path schema: type: string - name: id required: true in: path schema: type: string pattern: ^rr-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: rr-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'DNS record ID (format: rr-)' - name: $preview required: true in: query schema: default: false type: boolean responses: '200': description: DNS record deletion operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsRecordOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Delete a DNS record description: | Delete a DNS record by ID. Use `$preview=true` to validate the request without deleting the record. /domains/{name}/dns/security: get: operationId: getDnsSecurityStatus parameters: - name: name required: true in: path schema: type: string responses: '200': description: DNSSEC status content: application/json: schema: $ref: '#/components/schemas/DomainDnsSecurityStatusResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Get DNSSEC status description: | Retrieve the current DNSSEC status for the specified domain. post: operationId: enableDnsSecurity parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainDnsSecurityEnableRequestBody' responses: '201': description: DNSSEC enable operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsSecurityOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Enable DNSSEC description: | Enable DNSSEC for the specified domain. Use `$preview=true` to validate without applying changes. Set `$forceCompatibility` to override compatibility warnings. delete: operationId: deleteDnsSecurity parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean responses: '200': description: DNSSEC disable operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsSecurityOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Disable DNSSEC description: | Disable DNSSEC for the specified domain. Use `$preview=true` to validate without applying changes. /domains/{name}/dns/nameservers: put: operationId: addDomainExternalNameServers parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainDnsNameServersCreateRequestBody' responses: '200': description: Nameserver update operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsNameServersOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Set external nameservers description: | Set external (custom) nameservers for the specified domain, replacing the default UD-managed nameservers. Use `$preview=true` to validate without applying changes. delete: operationId: removeExternalNameServers parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean responses: '200': description: Nameserver revert operation created content: application/json: schema: $ref: '#/components/schemas/DomainDnsNameServersOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Remove external nameservers description: | Remove external nameservers and revert to UD-managed nameservers. Use `$preview=true` to validate without applying changes. get: operationId: getDomainNameServers parameters: - name: name required: true in: path schema: type: string - name: $expand required: false in: query schema: default: [] type: array items: type: string enum: - dnssec responses: '200': description: Current nameserver configuration content: application/json: schema: $ref: '#/components/schemas/DomainDnsNameServersResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - dns-records summary: Get nameservers description: | Retrieve the current nameserver configuration for the specified domain. Use `$expand=dnssec` to include DNSSEC details in the response. /domains/{name}/dns/hosting: get: operationId: getDomainDnsHosting summary: List hosting configurations description: | Retrieve all hosting configurations for the specified domain. Each configuration represents how a domain or subdomain serves content (e.g., redirect, reverse proxy). Use the `subName` parameter to filter results to specific subdomains. Results are paginated — use the `$cursor` parameter to retrieve subsequent pages. parameters: - name: name required: true in: path schema: type: string description: Domain name - name: $cursor required: false in: query schema: type: string description: Pagination cursor for retrieving the next page of results. - name: subName required: false in: query schema: maxItems: 50 type: array items: type: string description: Filter results by subdomain name(s). responses: '200': description: List of hosting configurations content: application/json: schema: $ref: '#/components/schemas/DomainHostingDetailsResponses' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - hosting put: operationId: putDomainDnsHosting summary: Create or update hosting configuration description: | Set or update the hosting configuration for a domain or subdomain. This controls how the domain serves content — whether via redirect or reverse proxy. Use the `subName` field in the request body to target a specific subdomain. If omitted, the configuration applies to the root domain. All hosting configurations require an SSL certificate. After creating or updating a configuration, the `certificateStatus` will initially be `PENDING` while the certificate is provisioned. This typically completes within a few minutes. Use `$preview=true` to validate the request and see the expected result without applying changes. parameters: - name: name required: true in: path schema: type: string description: Domain name - name: $preview required: true in: query schema: default: false type: boolean description: Preview mode — validate the request without executing changes. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainHostingUpdateRequestBody' responses: '200': description: Hosting update operation created content: application/json: schema: $ref: '#/components/schemas/DomainHostingUpdateOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - hosting delete: operationId: deleteDomainDnsHosting summary: Delete hosting configuration description: | Remove the hosting configuration for a domain or subdomain. This stops the domain from serving content through the configured hosting type and releases the associated SSL certificate. Use the `subName` field in the request body to target a specific subdomain's configuration. If omitted, the root domain configuration is removed. Use `$preview=true` to validate the request without applying changes. parameters: - name: name required: true in: path schema: type: string description: Domain name - name: $preview required: true in: query schema: default: false type: boolean description: Preview mode — validate the request without executing changes. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainHostingDeleteRequestBody' responses: '200': description: Hosting delete operation created content: application/json: schema: $ref: '#/components/schemas/DomainHostingDeleteOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - hosting /suggestions/domains: get: operationId: getSuggestions parameters: - name: query required: true in: query schema: maxItems: 10 maxLength: 200 type: array items: type: string - name: ending required: true in: query schema: default: [] type: array items: type: string responses: '200': description: List of domain suggestions content: application/json: schema: $ref: '#/components/schemas/SuggestionsResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - suggestions summary: Get domain suggestions description: | Get suggested available domain names based on your search queries. Supports multiple suggestion modes: - `EXACT`: Exact match lookups - `PREFIX_SUFFIX`: Variations with prefixes and suffixes added - `RELATED`: Semantically related domain name suggestions - `RELATED_PARTIAL`: Partial matches from related suggestions /operations/{id}: get: operationId: checkOperation parameters: - name: id required: true in: path schema: type: string pattern: ^op-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: op-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'Operation ID (format: op-)' responses: '200': description: Operation details content: application/json: schema: $ref: '#/components/schemas/OperationCheckResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - operations summary: Get operation details description: | Retrieve the full details of an operation by ID, including its current status and all dependency details. Use this to poll for operation completion after initiating a change. /operations: get: operationId: getOperationList parameters: - name: domain required: true in: query schema: maxItems: 50 maxLength: 300 default: [] type: array items: type: string - name: status required: true in: query schema: type: array items: type: string - name: type required: true in: query schema: type: array items: type: string - name: $cursor required: false in: query schema: format: int64 type: integer responses: '200': description: List of operations content: application/json: schema: $ref: '#/components/schemas/OperationListResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - operations summary: List operations description: | Retrieve a paginated list of operations. Filter by domain name, status, or type. Supports cursor-based pagination. /account: get: operationId: getAccount parameters: [] responses: '200': description: Account summary content: application/json: schema: $ref: '#/components/schemas/AccountSummaryResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: Get account details description: | Retrieve your account summary including account ID and default wallet address. /account/billing: get: operationId: getBilling parameters: [] responses: '200': description: Account billing balance content: application/json: schema: $ref: '#/components/schemas/AccountBillingResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: Get account billing balance description: | Retrieve the current billing balance for your account in USD cents. Negative values represent credits available; positive values represent amounts owed. /account/billing/transactions: get: operationId: getTransactions parameters: - name: $cursor required: false in: query schema: type: string description: Opaque cursor for paginating through results. Use the value from `next.$cursor` in a previous response. - name: type required: false in: query schema: type: array items: $ref: '#/components/schemas/BalanceChangeType' description: Filter transactions by type. Repeat the parameter or pass a comma-separated list to filter on multiple types. - name: groupBy required: false in: query schema: type: string enum: - operationId description: When set to `operationId`, transactions are grouped by their originating operation and returned as `BillingTransactionGroup` items. responses: '200': description: List of billing transactions content: application/json: schema: oneOf: - $ref: '#/components/schemas/BillingTransactionListResponse' - $ref: '#/components/schemas/BillingTransactionGroupListResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: List billing transactions description: | List billing transactions for your account. Each transaction represents a credit or debit applied to your balance (orders, refunds, settlements, grants, revenue share, etc.). Filter by `type` to narrow results to specific balance-change categories. Pass `groupBy=operationId` to receive transactions grouped by their originating operation, with each group reporting the total amount and associated domain. Results are paginated — use the `$cursor` parameter to retrieve subsequent pages. /account/domain-registrations: get: operationId: getAccountDomainRegistrations parameters: - name: $cursor required: false in: query schema: type: string description: Opaque cursor for paginating through results. Omit it to fetch the first page, then pass the value from `next.$cursor` in the previous response to fetch each subsequent page. - name: $expand required: false in: query schema: type: array items: type: string enum: - flags description: Use `$expand=flags` to additionally include the EPP domain flags for each returned domain. responses: '200': description: A page of domains in your account content: application/json: schema: $ref: '#/components/schemas/AccountDomainListResponse' examples: AccountDomains: summary: A page of domains in your account value: '@type': unstoppabledomains.com/partner.v3.CursorList items: - '@type': unstoppabledomains.com/partner.v3.AccountDomain name: example.com status: REGISTERED namingSystem: ICANN expirationTimestamp: 1684356429790 - '@type': unstoppabledomains.com/partner.v3.AccountDomain name: example.org status: REGISTERED namingSystem: ICANN expirationTimestamp: null next: $cursor: k7Hs9Lm2Pq4Rt6Vw8Xz0Yb1Nc3Df5Gh AccountDomainsWithFlags: summary: A page of domains expanded with EPP domain flags via `$expand=flags` value: '@type': unstoppabledomains.com/partner.v3.CursorList items: - '@type': unstoppabledomains.com/partner.v3.AccountDomain name: example.com status: REGISTERED namingSystem: ICANN expirationTimestamp: 1684356429790 flags: DNS_RESOLUTION: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: ENABLED DNS_TRANSFER_OUT: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: DISABLED readonly: state: true reasons: - type: REGISTRY id: LOCKED_REGISTRY status: ENABLED DNS_DELETE: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: DISABLED DNS_UPDATE: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: ENABLED DNS_RENEW: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: ENABLED DNS_WHOIS_PROXY: '@type': unstoppabledomains.com/partner.v3.DomainFlag status: ENABLED next: null '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: List account domains description: | Retrieve a paginated list of the domains in your account. Results are returned using cursor-based pagination. Omit `$cursor` to fetch the first page, then pass the `next.$cursor` value from the previous page response to fetch each subsequent page. When `next` is `null` there are no more pages. Use `$expand=flags` to additionally include the EPP domain flags for each returned domain. /account/webhooks: get: operationId: getWebhooks parameters: [] responses: '200': description: List of webhooks content: application/json: schema: $ref: '#/components/schemas/WebhookListResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: List webhooks description: | Retrieve all webhook subscriptions configured for your account. post: operationId: createWebhook parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookCreateRequestBody' responses: '201': description: Webhook created content: application/json: schema: $ref: '#/components/schemas/WebhookCreateResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: Create a webhook description: | Create a new webhook subscription. Webhooks notify your server of asynchronous events such as operation completions and status changes. You can follow our getting started guide here: [Webhooks in the Reseller API](https://docs.unstoppabledomains.com/domain-distribution-and-management/guides/implementing-webhooks/) /account/webhooks/{id}: get: operationId: getWebhook parameters: - name: id required: true in: path schema: type: string pattern: ^wh-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: wh-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'Webhook ID (format: wh-)' responses: '200': description: Webhook details content: application/json: schema: $ref: '#/components/schemas/WebhookResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: Get a webhook description: | Retrieve details of a specific webhook subscription by ID. delete: operationId: deleteWebhook parameters: - name: id required: true in: path schema: type: string pattern: ^wh-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: wh-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'Webhook ID (format: wh-)' responses: '200': description: Webhook deleted content: application/json: schema: $ref: '#/components/schemas/WebhookDeleteResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - account summary: Delete a webhook description: | Delete a webhook subscription by ID. /domains/{name}/flags: get: operationId: getDomainFlags parameters: - name: name required: true in: path schema: type: string responses: '200': description: Domain flag settings content: application/json: schema: $ref: '#/components/schemas/DomainFlagsStandaloneResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-flags summary: Get domain flags description: | Retrieve the current flag settings for the specified domain, including resolution, transfer lock, delete lock, update lock, renewal, and WHOIS privacy status. patch: operationId: patchDomainFlags parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainFlagUpdateRequestBody' responses: '200': description: Flag update operation created content: application/json: schema: $ref: '#/components/schemas/DomainFlagUpdateOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-flags summary: Update domain flags description: | Update one or more flags for the specified domain. Use this to toggle transfer lock, auto-renew, WHOIS privacy, and other domain settings. Use `$preview=true` to validate without applying changes. /domains/{name}/dns/contacts: get: operationId: getDomainContacts parameters: - name: name required: true in: path schema: type: string responses: '200': description: Domain contact assignments content: application/json: schema: $ref: '#/components/schemas/DomainContactsResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-contacts summary: Get domain contacts description: | Retrieve the contacts associated with the specified domain, including owner, admin, tech, and billing roles. patch: operationId: patchDomainContacts parameters: - name: name required: true in: path schema: type: string - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainContactUpdatesRequestBody' responses: '200': description: Contact update operation created content: application/json: schema: $ref: '#/components/schemas/DomainContactUpdatesOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-contacts summary: Update domain contacts description: | Update the contacts associated with the specified domain. You can update any combination of owner, admin, tech, and billing contacts. Use `$preview=true` to validate without applying changes. /contacts/{contactId}: get: operationId: getContact parameters: - name: contactId required: true in: path schema: type: string pattern: ^ct-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: ct-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: 'Contact ID (format: ct-)' responses: '200': description: Contact details content: application/json: schema: $ref: '#/components/schemas/ContactResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - contacts summary: Get a contact description: | Retrieve the details of a specific contact by ID, including personal information, address, phone, email, and verification status. /contacts: post: operationId: createContact parameters: - name: $preview required: true in: query schema: default: false type: boolean requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContactCreateRequestBody' responses: '201': description: Contact creation operation content: application/json: schema: $ref: '#/components/schemas/ContactCreateOperationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - contacts summary: Create a contact description: | Create a new contact for use in domain registration and management. A verification email will be sent to the contact's email address. Use `$preview=true` to validate without creating the contact. /tlds/{tld}/dns/security: get: operationId: getTldDnsSecurityConfiguration parameters: - name: tld required: true in: path schema: type: string responses: '200': description: TLD DNSSEC configuration content: application/json: schema: $ref: '#/components/schemas/TldDnsSecurityConfigurationResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - tlds summary: Get TLD DNSSEC configuration description: | Retrieve the supported DNSSEC algorithms and digest types for the specified TLD. /domains/{name}/dns/transfers/inbound-eligibility: post: operationId: postDomainDnsTransferInboundEligibility parameters: - name: name required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DomainDnsTransferInboundEligibilityRequestBody' responses: '201': description: Transfer eligibility check result content: application/json: schema: $ref: '#/components/schemas/DomainDnsTransferInboundEligibilityResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '409': description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - domain-transfers summary: Check inbound transfer eligibility description: | Check whether a domain is eligible for inbound transfer to your account. Provide the authorization code to validate the transfer. /pricing/dns/domains/{name}: get: operationId: getPricingDnsDomain parameters: - name: name required: true in: path schema: type: string responses: '200': description: Domain pricing content: application/json: schema: $ref: '#/components/schemas/DomainDnsPricingResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - pricing summary: Get domain pricing description: | Retrieve pricing for a specific domain name, including registration, renewal, transfer, and restoration costs. /pricing/dns/tlds: get: operationId: getPricingDnsTlds parameters: [] responses: '200': description: List of TLD pricing content: application/json: schema: $ref: '#/components/schemas/TldDnsPricingListResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - pricing summary: List TLD pricing description: | Retrieve pricing information for all available TLDs, including registration, renewal, transfer, and restoration costs. /pricing/dns/tlds/{tld}: get: operationId: getPricingDnsSingleTld parameters: - name: tld required: true in: path schema: type: string responses: '200': description: TLD pricing details content: application/json: schema: $ref: '#/components/schemas/TldDnsPricingResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - pricing summary: Get single TLD pricing description: | Retrieve pricing information for a specific TLD, including registration, renewal, transfer, and restoration costs. /tlds: get: operationId: getTldList parameters: [] responses: '200': description: List of available TLDs content: application/json: schema: $ref: '#/components/schemas/TldListResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - tlds summary: List available TLDs description: | Retrieve a list of all available top-level domains (TLDs) including their naming system and registration availability. /tlds/{tld}: get: operationId: getSingleTld parameters: - name: tld required: true in: path schema: maxLength: 63 type: string responses: '200': description: TLD details content: application/json: schema: $ref: '#/components/schemas/TldResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Resource not found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - tlds summary: Get TLD details description: | Retrieve details for a specific top-level domain (TLD) including its naming system and registration availability. /marketplace/domains/listings: get: operationId: getMarketplaceDomainsListings parameters: - name: q required: false in: query description: Search query to filter listings by domain name. Supports partial matching. schema: type: string - name: tlds required: true in: query description: One or more TLD extensions to filter listings (e.g., `com`, `xyz`). At least one TLD must be provided. schema: uniqueItems: true default: [] type: array items: type: string - name: orderBy required: false in: query description: Field to sort results by. schema: type: string enum: - price - name - listedAt - name: orderDirection required: false in: query description: Sort direction. Defaults to ascending. schema: type: string enum: - ASC - DESC - name: perPage required: false in: query description: Number of results per page (1–100). schema: minimum: 1 maximum: 100 type: number - name: $page required: false in: query description: Page number for pagination (1-indexed). schema: minimum: 1 type: number responses: '200': description: Paginated list of marketplace domain listings content: application/json: schema: $ref: '#/components/schemas/MarketplaceDomainsListingsResponse' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Authentication required content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Insufficient permissions content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' tags: - marketplace summary: List marketplace domain listings description: | Retrieve a paginated list of domains currently listed for sale on the Unstoppable Domains secondary marketplace. Use this endpoint to browse available domains, filter by TLD, and sort by price, name, or listing date. Results are paginated — use the `$page` and `perPage` parameters to navigate through results. webhooks: OPERATION_FINISHED: post: security: [] operationId: webhook_OperationFinished summary: Operation Finished description: | Receive a request when an asynchronous operation completes to registered webhooks of type `OPERATION_FINISHED` parameters: - name: x-ud-timestamp in: header required: true description: Timestamp when the webhook payload was created schema: type: string example: 1686587938683 - name: x-ud-signature in: header required: true description: | Base64 encoded HMAC-SHA256 of the raw payload body bytes using the account's primary API key as the secret. Used to verify authenticity of the request. schema: type: string example: awqOJeH/5GSSesvPYgS2z62BFTYurPduEfJjUBTRzPg= requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookDeliveryRequestBody' responses: 200: description: Success tags: - operations OPERATION_ACTION_REQUIRED: post: security: [] operationId: webhook_OperationActionRequired summary: Operation Action Required description: | Receive a request when an asynchronous operation reaches a status that requires an action to be taken for it to proceed. For example, when an operation changes to the `SIGNATURE_REQUIRED` status, a webhook would be delivered since the operation cannot continue with collecting a signature. Requests are sent to registered webhooks of type `OPERATION_ACTION_REQUIRED` parameters: - name: x-ud-timestamp in: header required: true description: Timestamp when the webhook payload was created schema: type: string example: 1686587938683 - name: x-ud-signature in: header required: true description: | Base64 encoded HMAC-SHA256 of the raw payload body bytes using the account's primary API key as the secret. Used to verify authenticity of the request. schema: type: string example: awqOJeH/5GSSesvPYgS2z62BFTYurPduEfJjUBTRzPg= requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookDeliveryRequestBody' responses: 200: description: Success tags: - operations OPERATION_CREATED: post: security: [] operationId: webhook_OperationCreated summary: Operation Created description: | Receive a request when a new asynchronous operation is created to registered webhooks of type `OPERATION_CREATED` parameters: - name: x-ud-timestamp in: header required: true description: Timestamp when the webhook payload was created schema: type: string example: 1686587938683 - name: x-ud-signature in: header required: true description: | Base64 encoded HMAC-SHA256 of the raw payload body bytes using the account's primary API key as the secret. Used to verify authenticity of the request. schema: type: string example: awqOJeH/5GSSesvPYgS2z62BFTYurPduEfJjUBTRzPg= requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookDeliveryRequestBody' responses: 200: description: Success tags: - operations components: securitySchemes: bearer: scheme: bearer bearerFormat: JWT type: http schemas: DomainOwnerResponse: type: object properties: type: type: string enum: - NONE - UD - UNKNOWN contactId: type: string required: - type PriceItemResponse: type: object properties: usdCents: type: number required: - usdCents DomainPriceAdjustmentResponse: type: object properties: usdCents: type: number type: type: string enum: [] required: - usdCents - type DomainPriceResponse: type: object properties: type: type: string enum: - STANDARD - PREMIUM - DEFERRED listPrice: $ref: '#/components/schemas/PriceItemResponse' adjustments: type: array items: $ref: '#/components/schemas/DomainPriceAdjustmentResponse' subTotal: $ref: '#/components/schemas/PriceItemResponse' validUntilTimestamp: type: number required: - type - listPrice - subTotal DomainOfferPriceResponse: type: object properties: min: $ref: '#/components/schemas/DomainPriceResponse' required: - min DomainAvailabilityAdditionalPricingResponse: type: object properties: extendedRegistration: $ref: '#/components/schemas/DomainPriceResponse' transfer: $ref: '#/components/schemas/DomainPriceResponse' IcannDomainRenewalInfoPeriodResponse: type: object properties: min: type: number max: type: number increments: type: number required: - min - max - increments DomainAvailabilityRegistrationConstraintsResponse: type: object properties: period: $ref: '#/components/schemas/IcannDomainRenewalInfoPeriodResponse' required: - period DomainAvailabilityConstraintsResponse: type: object properties: registration: $ref: '#/components/schemas/DomainAvailabilityRegistrationConstraintsResponse' SingleDomainAvailabilityResponse: type: object properties: source: type: string enum: - UD - SEDO - AFTERNIC status: type: string enum: - AVAILABLE - AVAILABLE_BACKORDER - REGISTERED - PROTECTED - COMING_SOON - DISALLOWED - RESERVED - AVAILABLE_FROM_ISSUER - AVAILABLE_FROM_SELLER - EXCEEDS_PRICE_LIMIT - REGISTRATION_PENDING - UNKNOWN_MAINTENANCE issuer: $ref: '#/components/schemas/DomainOwnerResponse' price: $ref: '#/components/schemas/DomainPriceResponse' offer: $ref: '#/components/schemas/DomainOfferPriceResponse' additionalPricing: $ref: '#/components/schemas/DomainAvailabilityAdditionalPricingResponse' constraints: $ref: '#/components/schemas/DomainAvailabilityConstraintsResponse' availableAfterTimestamp: type: number required: - source - status DomainPostRegistrationPricingResponse: type: object properties: renewal: $ref: '#/components/schemas/DomainPriceResponse' DomainRegistrationIcannRegistrarResponse: type: object properties: type: type: string enum: - SELF - EXTERNAL - NONE required: - type DomainRegistrationIcannResponse: type: object properties: registrar: $ref: '#/components/schemas/DomainRegistrationIcannRegistrarResponse' ownershipVerification: type: string enum: - COMPLETED - REVERIFICATION_REQUIRED required: - registrar DomainRegistrationResponse: type: object properties: status: $ref: '#/components/schemas/DomainRegistrationStatus' tokenId: type: string tokenType: type: string enum: - ERC721 - ERC1155 - ENSRecord - TOKEN2022 pricing: $ref: '#/components/schemas/DomainPostRegistrationPricingResponse' registryCreatedDate: type: string expirationDate: type: string expirationGracePeriodDate: type: string deletionAtTimestamp: type: number icann: $ref: '#/components/schemas/DomainRegistrationIcannResponse' DomainFlagConfigurationReadonlyResponse: type: object properties: state: type: boolean reasons: type: array items: type: object required: - state - reasons DomainFlagConfigurationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainFlag status: $ref: '#/components/schemas/DomainFlagStatus' readonly: $ref: '#/components/schemas/DomainFlagConfigurationReadonlyResponse' required: - '@type' - status DomainFlagsSubResponse: type: object properties: DNS_RESOLUTION: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_TRANSFER_OUT: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_DELETE: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_UPDATE: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_RENEW: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_WHOIS_PROXY: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_UNS_TOKENIZATION: $ref: '#/components/schemas/DomainFlagConfigurationResponse' required: - DNS_RESOLUTION - DNS_TRANSFER_OUT - DNS_DELETE - DNS_UPDATE - DNS_RENEW - DNS_WHOIS_PROXY - DNS_UNS_TOKENIZATION DomainSearchResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.Domain name: type: string owner: $ref: '#/components/schemas/DomainOwnerResponse' availability: $ref: '#/components/schemas/SingleDomainAvailabilityResponse' registration: nullable: true allOf: - $ref: '#/components/schemas/DomainRegistrationResponse' flags: $ref: '#/components/schemas/DomainFlagsSubResponse' required: - '@type' - name - owner - availability MultipleDomainSearchResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.List items: type: array items: $ref: '#/components/schemas/DomainSearchResponse' required: - '@type' - items DomainContactCiraRequestBody: type: object properties: registrantAgreementAcknowledged: type: boolean description: Must be `true` to acknowledge the CIRA registrant agreement. Submitting `false` will fail validation. const: true preferredLanguageCode: $ref: '#/components/schemas/CiraLanguageCode' canadianPresenceRequirement: $ref: '#/components/schemas/CiraCanadianPresenceRequirement' required: - registrantAgreementAcknowledged - preferredLanguageCode - canadianPresenceRequirement description: CIRA-specific data required for .ca domain registration. All fields are required. DomainOwnerContactTldSpecificRequestBody: type: object properties: ca: $ref: '#/components/schemas/DomainContactCiraRequestBody' description: TLD-specific owner contact data. Currently only `.ca` (CIRA) is supported. Include the relevant TLD key only when registering a domain under that TLD. ContactPhoneRequestBody: type: object properties: number: type: string minLength: 6 maxLength: 14 description: Phone number digits (numeric string, 6-14 characters). dialingPrefix: type: string description: International dialing prefix (e.g., "+1" for US/CA, "+44" for UK). example: '+1' required: - number - dialingPrefix description: Phone number with international dialing prefix. DomainOwnerContactRequestBody: type: object properties: tldData: $ref: '#/components/schemas/DomainOwnerContactTldSpecificRequestBody' description: TLD-specific data required for certain TLDs (e.g., CIRA requirements for .ca). Only applicable when creating a new contact (id is absent). id: type: string description: Existing contact ID. When provided, all other fields are ignored. pattern: ^ct-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: ct-a1b2c3d4-e5f6-7890-abcd-ef1234567890 firstName: type: string maxLength: 100 lastName: type: string maxLength: 100 organization: type: string maxLength: 100 countryCode: type: string description: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact. street: type: string maxLength: 100 city: type: string maxLength: 100 postalCode: type: string description: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact. stateProvince: type: string description: State or province. Validated against the provided countryCode. Required when creating a new contact. phone: $ref: '#/components/schemas/ContactPhoneRequestBody' email: type: string maxLength: 100 format: email description: 'Provide EITHER an existing contact `id` (format: `ct-`) OR the full set of inline contact fields to create a new contact. When `id` is provided, all other fields are ignored. When `id` is absent, the following fields are required: firstName, lastName, countryCode, street, city, postalCode, stateProvince, phone, email. For the owner (registrant) contact, an optional `tldData` field can provide TLD-specific data (e.g., CIRA requirements for .ca domains) when creating a new contact.' DomainContactRequestBody: type: object properties: id: type: string description: Existing contact ID. When provided, all other fields are ignored. pattern: ^ct-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: ct-a1b2c3d4-e5f6-7890-abcd-ef1234567890 firstName: type: string maxLength: 100 lastName: type: string maxLength: 100 organization: type: string maxLength: 100 countryCode: type: string description: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact. street: type: string maxLength: 100 city: type: string maxLength: 100 postalCode: type: string description: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact. stateProvince: type: string description: State or province. Validated against the provided countryCode. Required when creating a new contact. phone: $ref: '#/components/schemas/ContactPhoneRequestBody' email: type: string maxLength: 100 format: email description: 'Provide EITHER an existing contact `id` (format: `ct-`) OR the full set of inline contact fields to create a new contact. When `id` is provided, all other fields are ignored. When `id` is absent, the following fields are required: firstName, lastName, countryCode, street, city, postalCode, stateProvince, phone, email.' DomainDnsContactsRequestBody: type: object properties: admin: $ref: '#/components/schemas/DomainContactRequestBody' tech: $ref: '#/components/schemas/DomainContactRequestBody' billing: $ref: '#/components/schemas/DomainContactRequestBody' description: Non-registrant contact role assignments for a domain. Each role (admin, tech, billing) accepts either an existing contact ID or inline contact fields. Only include roles you want to update — omitted roles remain unchanged. DomainFlagUpdateRequestBodyFlag: type: object properties: status: $ref: '#/components/schemas/DomainFlagStatus' required: - status DomainFlagUpdateRequestBody: type: object properties: DNS_RESOLUTION: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' DNS_TRANSFER_OUT: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' DNS_DELETE: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' DNS_UPDATE: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' DNS_RENEW: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' DNS_WHOIS_PROXY: $ref: '#/components/schemas/DomainFlagUpdateRequestBodyFlag' description: Update domain flag settings. Only include the flags you want to change — omitted flags remain unchanged. OperationCheckResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.Operation id: type: string description: Operation ID pattern: ^op-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: op-a1b2c3d4-e5f6-7890-abcd-ef1234567890 status: enum: - PREVIEW - QUEUED - PROCESSING - FAILED - COMPLETED - CANCELLED - AWAITING_UPDATES type: string type: type: string enum: - ADMIN_GENERIC - DOMAIN_ADMIN_UPDATE - DOMAIN_RENEW - ACCOUNT_UPDATE - DOMAIN_DNS_RECORD_CREATE - DOMAIN_DNS_RECORD_UPDATE - DOMAIN_DNS_RECORD_DELETE - DOMAIN_DNS_RECORD_BATCH - DOMAIN_DNS_SECURITY_ENABLE - DOMAIN_DNS_SECURITY_DELETE - DOMAIN_DNS_NAME_SERVER_UPDATE - DOMAIN_HOSTING_UPDATE - DOMAIN_HOSTING_DISABLE - DOMAIN_TRANSFER_OUT - DOMAIN_TRANSFER_OUT_TOGGLE - DOMAIN_FLAGS_UPDATE - DOMAIN_CONTACTS_UPDATE - CONTACT_CREATE - DOMAIN_SUGGESTION_CREATE - DOMAIN_SUGGESTION_REFRESH - DOMAIN_ADMIN_DNS_ZONE_MIGRATE domain: type: string createdAtTimestamp: type: number lastUpdatedTimestamp: type: number validUntilTimestamp: type: number dependencies: type: array description: List of platform operation dependencies that make up this operation items: $ref: '#/components/schemas/PlatformOperationDependency' required: - '@type' - id - status - type - createdAtTimestamp - lastUpdatedTimestamp - dependencies DomainOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainPendingOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainPendingOperation type: type: string enum: - ADMIN_GENERIC - DOMAIN_ADMIN_UPDATE - DOMAIN_RENEW - ACCOUNT_UPDATE - DOMAIN_DNS_RECORD_CREATE - DOMAIN_DNS_RECORD_UPDATE - DOMAIN_DNS_RECORD_DELETE - DOMAIN_DNS_RECORD_BATCH - DOMAIN_DNS_SECURITY_ENABLE - DOMAIN_DNS_SECURITY_DELETE - DOMAIN_DNS_NAME_SERVER_UPDATE - DOMAIN_HOSTING_UPDATE - DOMAIN_HOSTING_DISABLE - DOMAIN_TRANSFER_OUT - DOMAIN_TRANSFER_OUT_TOGGLE - DOMAIN_FLAGS_UPDATE - DOMAIN_CONTACTS_UPDATE - CONTACT_CREATE - DOMAIN_SUGGESTION_CREATE - DOMAIN_SUGGESTION_REFRESH - DOMAIN_ADMIN_DNS_ZONE_MIGRATE - UNKNOWN description: The type of the pending operation id: type: string required: - '@type' DomainPendingOperationsListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.List items: type: array items: $ref: '#/components/schemas/DomainPendingOperationResponse' required: - '@type' - items IcannDomainRenewalInfoResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainRenewalInfo isEligible: type: boolean expirationDate: type: string gracePeriodExpirationDate: type: string price: $ref: '#/components/schemas/DomainPriceResponse' period: $ref: '#/components/schemas/IcannDomainRenewalInfoPeriodResponse' required: - '@type' - isEligible - expirationDate - period DomainRenewalRequestBody: type: object properties: period: type: number minimum: 1 maximum: 10 description: Renewal period in years (1-10). required: - period description: Renew a domain for the specified period. DomainDnsPricingResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsPricing registration: $ref: '#/components/schemas/DomainPriceResponse' renewal: $ref: '#/components/schemas/DomainPriceResponse' transfer: $ref: '#/components/schemas/DomainPriceResponse' restoration: $ref: '#/components/schemas/DomainPriceResponse' constraints: $ref: '#/components/schemas/DomainAvailabilityConstraintsResponse' required: - '@type' DomainRegistrationMinimalResponse: type: object properties: status: $ref: '#/components/schemas/DomainRegistrationStatus' icann: $ref: '#/components/schemas/DomainRegistrationIcannResponse' registryCreatedDate: type: string expirationDate: type: string expirationGracePeriodDate: type: string IcannDomainDnsMetadataResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.IcannDomainDnsMetadata provider: type: string enum: - UD - EXTERNAL - NONE registration: $ref: '#/components/schemas/DomainRegistrationMinimalResponse' required: - '@type' - provider - registration DomainTransferAuthorizationCodeResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.ICannDomainTransferAuthorizationCode code: type: string required: - '@type' - code DomainDnsRecordReadonlyResponse: type: object properties: state: type: boolean reasons: type: array items: type: string enum: - ADMIN - HOSTING - DNS_PROVIDER required: - state - reasons DomainDnsRecordResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsRecord subName: type: string type: $ref: '#/components/schemas/DnsRecordType' values: type: array items: type: string ttl: type: number readonly: $ref: '#/components/schemas/DomainDnsRecordReadonlyResponse' id: type: string description: DNS record ID pattern: ^rr-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: rr-a1b2c3d4-e5f6-7890-abcd-ef1234567890 required: - '@type' - type - values - ttl - id DomainDnsRecordsResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/DomainDnsRecordResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next DomainDnsRecordCreateRequestBody: type: object properties: subName: type: string description: Subdomain name (e.g., "www", "mail"). Omit or leave empty for the apex domain. type: enum: - A - AAAA - ALIAS - CAA - CNAME - DNSKEY - DS - HTTPS - IPSECKEY - MX - NAPTR - NS - PTR - SOA - SPF - SRV - SSHFP - SVCB - TLSA - TXT type: string description: DNS record type. Case-insensitive — values are uppercased automatically. values: minItems: 1 type: array items: type: string maxLength: 1000 ttl: type: number maximum: 2147483647 minimum: 1 $upsert: enum: - REPLACE - APPEND - DISALLOWED type: string description: 'Upsert mode for handling conflicts with existing records. Case-insensitive. REPLACE: overwrite existing record values. APPEND: add values to existing record. DISALLOWED: fail if record exists.' $forceCompatibility: type: boolean default: false required: - type - values - ttl - $forceCompatibility description: Create a DNS record. The `type` and `$upsert` fields are case-insensitive (automatically uppercased). DomainDnsRecordOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsRecordOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainDnsRecordUpdateRequestBody: type: object properties: values: minItems: 1 type: array items: type: string ttl: type: number maximum: 2147483647 minimum: 1 required: - values description: Update an existing DNS record. Only the fields provided will be changed. DomainDnsSecurityStatusResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsSecurityOperationResult status: type: string enum: - ENABLED - DISABLED - UNKNOWN required: - '@type' - status DomainDnsSecurityEnableRequestBody: type: object properties: $forceCompatibility: type: boolean default: false DomainDnsSecurityOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsSecurityOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainDnsSecruityCreateRequestBodyDnssecItem: type: object properties: keyTag: type: number minimum: 0 maximum: 65535 algorithm: $ref: '#/components/schemas/DnssecAlgorithm' digestType: $ref: '#/components/schemas/DnssecDigestType' digest: type: string minLength: 1 maxLength: 120 required: - keyTag - algorithm - digestType - digest DomainDnsSecruityCreateRequestBodyDnssec: type: object properties: items: type: array items: $ref: '#/components/schemas/DomainDnsSecruityCreateRequestBodyDnssecItem' required: - items DomainDnsNameServersCreateRequestBody: type: object properties: items: minItems: 1 uniqueItems: true maxItems: 20 type: array items: type: string dnssec: $ref: '#/components/schemas/DomainDnsSecruityCreateRequestBodyDnssec' required: - items DomainDnsNameServersOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainDnsNameServerOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainDnsNameServersResponseDnssecItem: type: object properties: keyTag: type: number algorithm: $ref: '#/components/schemas/DnssecAlgorithm' digestType: $ref: '#/components/schemas/DnssecDigestType' digest: type: string required: - keyTag - algorithm - digestType - digest DomainDnsNameServersResponseDnssec: type: object properties: enabled: type: boolean items: type: array items: $ref: '#/components/schemas/DomainDnsNameServersResponseDnssecItem' validation: type: object properties: valid: type: boolean required: - valid required: - enabled DomainDnsNameServersResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.NameServerListResult items: type: array items: type: string dnssec: $ref: '#/components/schemas/DomainDnsNameServersResponseDnssec' required: - '@type' - items - dnssec DomainHostingType: type: string enum: - REDIRECT_301 - REDIRECT_302 - REVERSE_PROXY DomainHostingDetailsItemResponse: type: object description: Represents a single hosting configuration for a domain or subdomain. properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainHostingDetails type: nullable: true $ref: '#/components/schemas/DomainHostingType' targetUrl: type: string nullable: true description: The target URL for redirect or reverse proxy configurations. subName: type: string description: The subdomain this configuration applies to. Empty string for root domain. status: type: string enum: - ACTIVE - INACTIVE - PENDING description: Current status of the hosting configuration. certificateStatus: type: string enum: - ACTIVE - INACTIVE - PENDING description: Status of the SSL certificate. Will be `PENDING` while the certificate is being provisioned. required: - '@type' - type - targetUrl - status - certificateStatus DomainHostingDetailsResponses: type: object description: Paginated list of hosting configurations for a domain. properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/DomainHostingDetailsItemResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next DomainHostingUpdateRequestBody: type: object description: Request body for creating or updating a hosting configuration. properties: subName: type: string description: The subdomain to configure. Omit or leave empty for the root domain. targetUrl: type: string description: The target URL for redirect or reverse proxy configurations. type: $ref: '#/components/schemas/DomainHostingType' $forceCompatibility: type: boolean default: false description: Force the update even if it may conflict with existing DNS records. required: - type - $forceCompatibility DomainHostingUpdateOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainHostingOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainHostingDeleteRequestBody: type: object description: Request body for deleting a hosting configuration. properties: subName: type: string description: The subdomain whose hosting configuration should be removed. Omit or leave empty for the root domain. DomainHostingDeleteOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainHostingOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation SuggestionsResponseItem: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainSuggestion name: type: string price: $ref: '#/components/schemas/DomainPriceResponse' required: - '@type' - name - price SuggestionsResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.List items: type: array items: $ref: '#/components/schemas/SuggestionsResponseItem' required: - '@type' - items OperationMinimalResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.OperationMinimal id: type: string description: Operation ID pattern: ^op-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: op-a1b2c3d4-e5f6-7890-abcd-ef1234567890 status: type: string enum: - PREVIEW - QUEUED - PROCESSING - SIGNATURE_REQUIRED - TRANSMISSION_REQUIRED - FAILED - COMPLETED - CANCELLED - AWAITING_UPDATES type: type: object domain: type: string suggestionJobId: type: string createdAtTimestamp: type: number lastUpdatedTimestamp: type: number required: - '@type' - id - status - type - createdAtTimestamp - lastUpdatedTimestamp OperationListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/OperationMinimalResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next AccountDomainStatus: type: string description: | The current registration status of the domain. enum: - REGISTERED - REGISTERED_EXTERNAL - REGISTRATION_PROCESSING - DEACTIVATED - EXPIRED_GRACE_PERIOD - EXPIRED_PENDING_DELETE - EXPIRED_REDEMPTION_PERIOD - TRANSFER_INBOUND_PROCESSING AccountDomainResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.AccountDomain name: type: string description: The fully qualified domain name. example: example.com status: $ref: '#/components/schemas/AccountDomainStatus' namingSystem: type: string description: The naming system the domain is registered under. enum: - UNS - ICANN - ENS blockchain: type: string description: The blockchain the domain is minted on. Present for tokenized (web3) domains only. enum: - MATIC - ETH - ZIL - BASE - SOL - SONIC expirationTimestamp: type: integer format: int64 nullable: true description: Unix epoch timestamp (milliseconds) when the domain expires, or `null` when the domain has no expiration. flags: description: EPP domain flags for the domain. Only included when `$expand=flags` is set. allOf: - $ref: '#/components/schemas/DomainFlagsSubResponse' required: - '@type' - name - status - namingSystem - expirationTimestamp AccountDomainListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/AccountDomainResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next AccountSummaryResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.AccountSummary id: type: string defaultWalletAddress: type: string nullable: true required: - '@type' - id - defaultWalletAddress AccountBillingResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.AccountBilling balanceUsdCents: type: integer description: Current account balance in USD cents. Negative values are credits available; positive values are amounts owed. required: - '@type' - balanceUsdCents description: Account billing summary including current balance. BalanceChangeType: type: string enum: - ORDER - ORDER_ADJUSTMENT - REFUND - SETTLEMENT - GRANT - DEBIT - REV_SHARE - REV_SHARE_REVOKE description: Type of billing balance change BillingTransactionResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.BillingTransaction id: type: string pattern: ^btx-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: btx-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: Billing transaction ID type: $ref: '#/components/schemas/BalanceChangeType' amountUsdCents: type: integer description: Transaction amount in USD cents. Negative for credits applied to the account; positive for debits charged against the account. operationId: type: string pattern: ^op-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: op-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: ID of the operation that produced this transaction createdAtTimestamp: type: integer format: int64 description: Unix epoch timestamp (milliseconds) when the transaction was created notes: type: string nullable: true description: Optional notes describing the transaction required: - '@type' - id - type - amountUsdCents - operationId - createdAtTimestamp - notes BillingTransactionListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/BillingTransactionResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next BillingTransactionGroupResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.BillingTransactionGroup operationId: type: string pattern: ^op-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: op-a1b2c3d4-e5f6-7890-abcd-ef1234567890 description: ID of the operation that produced these transactions operationType: type: string enum: - ADMIN_GENERIC - DOMAIN_ADMIN_UPDATE - DOMAIN_RENEW - DOMAIN_RESTORE - ACCOUNT_UPDATE - DOMAIN_DNS_RECORD_CREATE - DOMAIN_DNS_RECORD_UPDATE - DOMAIN_DNS_RECORD_DELETE - DOMAIN_DNS_RECORD_BATCH - DOMAIN_DNS_SECURITY_ENABLE - DOMAIN_DNS_SECURITY_DELETE - DOMAIN_DNS_NAME_SERVER_UPDATE - DOMAIN_HOSTING_UPDATE - DOMAIN_HOSTING_DISABLE - DOMAIN_TRANSFER_OUT - DOMAIN_TRANSFER_OUT_TOGGLE - DOMAIN_FLAGS_UPDATE - DOMAIN_CONTACTS_UPDATE - CONTACT_CREATE - DOMAIN_SUGGESTION_CREATE - DOMAIN_SUGGESTION_REFRESH - DOMAIN_ADMIN_DNS_ZONE_MIGRATE - LTO_INITIATE - LTO_COMPLETE - LTO_CANCEL - DOMAIN_AUCTION_INTERNAL_PUSH description: Type of the originating operation domain: type: string nullable: true description: Domain associated with the operation, if any createdAtTimestamp: type: integer format: int64 description: Unix epoch timestamp (milliseconds) when the operation was created totalAmountUsdCents: type: integer description: Sum of all transaction amounts in USD cents for this group transactions: type: array items: $ref: '#/components/schemas/BillingTransactionResponse' required: - '@type' - operationId - operationType - domain - createdAtTimestamp - totalAmountUsdCents - transactions BillingTransactionGroupListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/BillingTransactionGroupResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next WebhookResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.Webhook id: type: string description: Webhook ID pattern: ^wh-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: wh-a1b2c3d4-e5f6-7890-abcd-ef1234567890 url: type: string type: type: object required: - '@type' - id - url - type WebhookListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.CursorList items: type: array items: $ref: '#/components/schemas/WebhookResponse' next: nullable: true allOf: - $ref: '#/components/schemas/CursorListResponseNext' required: - '@type' - items - next WebhookCreateRequestBody: type: object properties: url: type: string type: type: object required: - url - type description: Create a webhook subscription to receive event notifications. WebhookCreateResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.WebhookCreateResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation WebhookDeleteResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.WebhookDeleteResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainFlagsStandaloneResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainFlagsResult DNS_RESOLUTION: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_TRANSFER_OUT: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_DELETE: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_RENEW: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_UPDATE: $ref: '#/components/schemas/DomainFlagConfigurationResponse' DNS_WHOIS_PROXY: $ref: '#/components/schemas/DomainFlagConfigurationResponse' required: - '@type' - DNS_RESOLUTION - DNS_TRANSFER_OUT - DNS_DELETE - DNS_RENEW - DNS_UPDATE - DNS_WHOIS_PROXY PaginatedListResponsePagination: type: object properties: totalItems: type: number page: type: number pageSize: type: number totalPages: type: number required: - totalItems - page - pageSize - totalPages DomainFlagUpdateOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainFlagOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation DomainContactUpdatesRequestBody: type: object properties: owner: $ref: '#/components/schemas/DomainOwnerContactRequestBody' admin: $ref: '#/components/schemas/DomainContactRequestBody' tech: $ref: '#/components/schemas/DomainContactRequestBody' billing: $ref: '#/components/schemas/DomainContactRequestBody' description: Update contact assignments for domain roles. Each role accepts either an existing contact ID or inline contact fields to create a new contact. Only include roles you want to update — omitted roles remain unchanged. DomainContactUpdatesOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainContactOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation ContactPhoneResponse: type: object properties: number: type: string dialingPrefix: type: string required: - number - dialingPrefix DomainContactCiraResponse: type: object properties: registrantAgreementAcknowledged: type: boolean preferredLanguageCode: $ref: '#/components/schemas/CiraLanguageCode' canadianPresenceRequirement: $ref: '#/components/schemas/CiraCanadianPresenceRequirement' required: - registrantAgreementAcknowledged - preferredLanguageCode - canadianPresenceRequirement DomainOwnerContactTldSpecificResponse: type: object properties: ca: $ref: '#/components/schemas/DomainContactCiraResponse' ContactVerificationResponse: type: object properties: status: type: string enum: - VERIFIED - FAILED - PENDING - REQUESTED - UNVERIFIED - SUSPENDED timestamp: type: number required: - status ContactResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.Contact id: type: string description: Contact ID pattern: ^ct-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ example: ct-a1b2c3d4-e5f6-7890-abcd-ef1234567890 firstName: type: string lastName: type: string organization: type: string countryCode: type: string street: type: string city: type: string postalCode: type: string stateProvince: type: string phone: $ref: '#/components/schemas/ContactPhoneResponse' email: type: string tldData: $ref: '#/components/schemas/DomainOwnerContactTldSpecificResponse' verification: $ref: '#/components/schemas/ContactVerificationResponse' required: - '@type' - id - firstName - lastName - countryCode - street - city - postalCode - stateProvince - phone - email DomainContactsResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.DomainContacts owner: $ref: '#/components/schemas/ContactResponse' admin: $ref: '#/components/schemas/ContactResponse' tech: $ref: '#/components/schemas/ContactResponse' billing: $ref: '#/components/schemas/ContactResponse' required: - '@type' - owner ContactCreateRequestBody: type: object properties: firstName: type: string maxLength: 100 lastName: type: string maxLength: 100 organization: type: string maxLength: 100 countryCode: type: string description: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB") street: type: string maxLength: 100 city: type: string maxLength: 100 postalCode: type: string description: Postal/ZIP code. Validated against the provided countryCode. stateProvince: type: string description: State or province. Validated against the provided countryCode. phone: $ref: '#/components/schemas/ContactPhoneRequestBody' email: type: string maxLength: 100 format: email required: - firstName - lastName - countryCode - street - city - postalCode - stateProvince - phone - email description: Create a standalone contact that can be referenced by ID in domain registration and contact update operations. ContactCreateOperationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.ContactOperationResult operation: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - operation TldDnsSecurityConfigurationDnssecAlgorithmResponse: type: object properties: id: $ref: '#/components/schemas/DnssecAlgorithm' name: type: string required: - id - name TldDnsSecurityConfigurationDnssecDigestTypeResponse: type: object properties: id: $ref: '#/components/schemas/DnssecDigestType' name: type: string required: - id - name TldDnsSecurityConfigurationDnssecResponse: type: object properties: supported: type: boolean algorithms: type: array items: $ref: '#/components/schemas/TldDnsSecurityConfigurationDnssecAlgorithmResponse' digestTypes: type: array items: $ref: '#/components/schemas/TldDnsSecurityConfigurationDnssecDigestTypeResponse' required: - supported - algorithms - digestTypes TldDnsSecurityConfigurationResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.TldDnsSecurityConfiguration dnssec: $ref: '#/components/schemas/TldDnsSecurityConfigurationDnssecResponse' required: - '@type' - dnssec DomainDnsTransferInboundEligibilityRequestBody: type: object properties: authorizationCode: type: string minLength: 3 maxLength: 250 required: - authorizationCode DomainDnsTransferInboundEligibilityResponse: type: object properties: isEligible: type: boolean reasons: type: array items: type: string enum: - REGISTRAR_LOCKED - NOT_REGISTERED - TRANSFER_DATE_NOT_REACHED - INVALID_AUTHORIZATION - ALREADY_TRANSFERRED - INVALID_TLD_FOR_TRANSFER - REGISTRY_LOCKED - REGISTRY_UPDATE_PROHIBITED - UNVERIFIED_OWNER_FOR_DNS - DOMAIN_EXPIRING_SOON expirationDate: type: string projectedExpirationDate: type: string projectedExtensionPeriod: type: number required: - isEligible - reasons TldDnsPricingResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.TldDnsPricing name: type: string registration: $ref: '#/components/schemas/DomainPriceResponse' renewal: $ref: '#/components/schemas/DomainPriceResponse' transfer: $ref: '#/components/schemas/DomainPriceResponse' restoration: $ref: '#/components/schemas/DomainPriceResponse' constraints: $ref: '#/components/schemas/DomainAvailabilityConstraintsResponse' required: - '@type' - name TldDnsPricingListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.List items: type: array items: $ref: '#/components/schemas/TldDnsPricingResponse' required: - '@type' - items TldResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.Tld name: type: string namingSystem: enum: - UNS - ICANN - ENS type: string canRegister: type: boolean required: - '@type' - name - namingSystem - canRegister TldListResponse: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.List items: type: array items: $ref: '#/components/schemas/TldResponse' required: - '@type' - items DomainRegistrationRequestBody: type: object properties: name: type: string description: Fully qualified domain name to register (e.g., "example.com"). Automatically lowercased and trimmed. owner: $ref: '#/components/schemas/DomainRegistrationRequestBodyOwner' description: Owner (registrant) for the domain. Includes ownership type and registrant contact information. dns: $ref: '#/components/schemas/DomainRegistrationRequestBodyDns' description: DNS configuration for the domain including registration period and contact role assignments. flags: $ref: '#/components/schemas/DomainFlagUpdateRequestBody' description: Initial domain flag settings (e.g., transfer lock, auto-renew). required: - name description: Register a new domain. The `name` field is automatically lowercased and trimmed. The domain must be available and the TLD must be accessible to your account. DomainRegistrationRequestBodyDns: type: object properties: authorizationCode: type: string minLength: 3 maxLength: 250 description: EPP authorization code for domain transfer. Only applicable for transfer-in operations. period: type: number minimum: 1 maximum: 10 description: Registration period in years (1-10). If omitted, defaults to the minimum period for the TLD. contacts: $ref: '#/components/schemas/DomainDnsContactsRequestBody' description: Non-registrant contact role assignments (admin, tech, billing). Each role accepts an existing contact ID or inline fields. $useExistingNameservers: type: boolean description: When true, retains the existing nameserver configuration instead of resetting to defaults. nameservers: type: array items: type: string minItems: 1 maxItems: 20 uniqueItems: true description: Custom nameserver hostnames to set during registration. If omitted, UD-managed nameservers are used. example: - ns1.example.com - ns2.example.com records: type: array items: $ref: '#/components/schemas/DomainDnsRecordCreateRequestBody' description: DNS records to create during registration. dnssec: $ref: '#/components/schemas/DomainDnsSecruityCreateRequestBodyDnssec' description: DNS configuration for domain registration. Includes registration period, contact assignments, and optional initial setup for nameservers, DNS records, and DNSSEC. DomainRegistrationRequestBodyOwner: type: object properties: type: type: string enum: - SELF contact: $ref: '#/components/schemas/DomainOwnerContactRequestBody' required: - type description: Domain owner configuration. For reseller registrations, `type` must be `SELF`. The `contact` field specifies the registrant — provide either an existing contact ID or inline contact fields. CursorListResponseNext: type: object properties: $cursor: type: string PaginatedListResponseNext: type: object properties: page: type: integer limit: type: integer DnssecAlgorithm: type: integer enum: - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 10 - 12 - 13 - 14 - 15 - 16 - 17 - 23 - 252 - 253 - 254 description: DNSSEC algorithm identifier (RFC 8624) DnssecDigestType: type: integer enum: - 1 - 2 - 3 - 4 - 5 - 6 description: DNSSEC digest type identifier (RFC 8624) DomainRegistrationStatus: type: string enum: - REGISTERED - REGISTERED_EXTERNAL - PENDING - EXPIRED_GRACE_PERIOD - EXPIRED_REDEMPTION_PERIOD - EXPIRED_PENDING_DELETE - INACTIVE DomainFlagStatus: type: string enum: - ENABLED - DISABLED CiraLanguageCode: type: string enum: - en_US - fr_CA - en - fr description: CIRA preferred language code CiraCanadianPresenceRequirement: type: string enum: - CCT - LGR - RES - ABO - CCO - ASS - PRT - TDM - TRD - PLT - TRS - LAM - EDU - HOP - GOV - INB - OMK - MAJ description: CIRA Canadian Presence Requirement category DomainExpandField: type: string enum: - registration - flags ErrorResponse: type: object description: Standard error response properties: code: type: string description: Machine-readable error code example: VALIDATION message: type: string description: Human-readable error description errors: type: array description: Individual errors when code is MULTIPLE_ERRORS items: type: object properties: code: type: string message: type: string required: - code required: - code DomainUpdateNameserversConfig: type: object description: Nameserver configuration. Provide `items` to switch to custom nameservers, or set `$revertToManaged` to switch back to UD-managed nameservers. These options are mutually exclusive. properties: items: type: array items: type: string minItems: 1 maxItems: 20 uniqueItems: true description: Custom nameserver hostnames. example: - ns1.example.com - ns2.example.com dnssec: $ref: '#/components/schemas/DomainDnsSecruityCreateRequestBodyDnssec' $revertToManaged: type: boolean description: Set to `true` to revert to UD-managed nameservers. Mutually exclusive with `items`. DomainUpdateDnssecConfig: type: object description: DNSSEC configuration for UD-managed nameservers. Enable or disable DNSSEC signing. properties: enabled: type: boolean description: Set to `true` to enable DNSSEC, `false` to disable. $forceCompatibility: type: boolean default: false description: Force compatibility mode when enabling DNSSEC. required: - enabled DomainUpdateRecordItem: type: object description: Update an existing DNS record by ID. properties: id: type: string pattern: ^rr-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ description: DNS record ID to update. example: rr-a1b2c3d4-e5f6-7890-abcd-ef1234567890 values: type: array items: type: string description: Updated record values. ttl: type: number minimum: 1 maximum: 2147483647 description: Updated TTL in seconds. $forceCompatibility: type: boolean default: false description: Force compatibility mode. required: - id DomainUpdateRecordsConfig: type: object description: Batch DNS record operations. Create, update, and/or delete records in a single request. properties: create: type: array items: $ref: '#/components/schemas/DomainDnsRecordCreateRequestBody' description: Records to create. update: type: array items: $ref: '#/components/schemas/DomainUpdateRecordItem' description: Records to update by ID. delete: type: array items: type: string pattern: ^rr-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ description: Record IDs to delete. DomainUpdateRequestBody: type: object description: Comprehensive domain update — change nameservers, DNSSEC, contacts, flags, and DNS records in a single request. All fields are optional; only include sections you want to change. properties: nameservers: $ref: '#/components/schemas/DomainUpdateNameserversConfig' dnssec: $ref: '#/components/schemas/DomainUpdateDnssecConfig' contacts: $ref: '#/components/schemas/DomainContactUpdatesRequestBody' flags: $ref: '#/components/schemas/DomainFlagUpdateRequestBody' records: $ref: '#/components/schemas/DomainUpdateRecordsConfig' PlatformOperationStatus: type: string enum: - PREVIEW - QUEUED - PROCESSING - FAILED - COMPLETED - CANCELLED - AWAITING_UPDATES description: Status of a platform operation dependency DnsRecordType: type: string enum: - A - AAAA - ALIAS - CAA - CNAME - DNSKEY - DS - HTTPS - IPSECKEY - MX - NAPTR - NS - PTR - SOA - SPF - SRV - SSHFP - SVCB - TLSA - TXT DomainFlagType: type: string enum: - DNS_RESOLUTION - DNS_TRANSFER_OUT - DNS_DELETE - DNS_UPDATE - DNS_RENEW - DNS_WHOIS_PROXY ContactPurpose: type: string enum: - OWNER - ADMIN - TECH - BILLING WebhookType: type: string enum: - OPERATION_FINISHED - OPERATION_ACTION_REQUIRED - OPERATION_CREATED ContactAssignment: type: object description: Reference to an existing or newly created contact properties: new: type: boolean description: Whether this contact is being newly created as part of this operation id: type: string description: Contact ID (present when new is false) example: con_abc12345-1234-1234-1234-abc123456789 required: - new NonRegistrantContacts: type: object description: Non-registrant contact role assignments (admin, billing, tech) properties: admin: $ref: '#/components/schemas/ContactAssignment' billing: $ref: '#/components/schemas/ContactAssignment' tech: $ref: '#/components/schemas/ContactAssignment' OperationDependencyError: type: object description: Error details for a failed operation dependency properties: code: type: string description: Error code identifying the failure type message: type: string description: Human-readable error description required: - code - message DomainFlagLocks: type: object description: Map of domain flag names to boolean lock values. Keys are DomainFlagType values. additionalProperties: type: boolean example: DNS_TRANSFER_OUT: true DNS_DELETE: false PlatformOperationDomainRegister: type: object description: Registers a new domain with the specified owner contact and optional role contacts properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_REGISTER parameters: type: object properties: owner: $ref: '#/components/schemas/ContactAssignment' contacts: $ref: '#/components/schemas/NonRegistrantContacts' period: type: integer description: Registration period in years example: 1 required: - owner error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainDnsRenew: type: object description: Renews a domain for the specified period properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_DNS_RENEW parameters: type: object properties: period: type: integer description: Renewal period in years example: 1 required: - period error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDnsRecordCreate: type: object description: Creates a new DNS record for the domain properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DNS_RECORD_CREATE parameters: type: object properties: subName: type: string description: Subdomain name (empty for apex domain) example: www type: $ref: '#/components/schemas/DnsRecordType' values: type: array items: type: string example: - 192.0.2.1 ttl: type: integer description: Time-to-live in seconds example: 300 required: - type - values - ttl result: type: object properties: id: type: string description: ID of the created DNS record required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDnsRecordUpdate: type: object description: Updates an existing DNS record properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DNS_RECORD_UPDATE parameters: type: object properties: id: type: string description: DNS record ID to update values: type: array items: type: string ttl: type: integer description: Time-to-live in seconds required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDnsRecordDelete: type: object description: Deletes a DNS record properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DNS_RECORD_DELETE parameters: type: object properties: id: type: string description: DNS record ID to delete required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainSetNameServers: type: object description: Sets the nameservers for a domain (external nameservers or revert to UD-managed) properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_SET_NAMESERVERS parameters: type: object properties: items: type: array items: type: string description: Nameserver hostnames example: - ns1.example.com - ns2.example.com error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainDnsSecuritySetDnssec: type: object description: Configures DNSSEC DS records at the registry for a domain properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_DNS_SECURITY_SET_DNSSEC parameters: type: object properties: domain: type: string description: Domain name error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainDnsSecurityDeleteDnssec: type: object description: Removes DNSSEC DS records from the registry for a domain properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_DNS_SECURITY_DELETE_DNSSEC parameters: type: object properties: domain: type: string description: Domain name error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainDnsSecurityUpdateZone: type: object description: Updates the DNS zone configuration for DNSSEC signing properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_DNS_SECURITY_UPDATE_ZONE parameters: type: object properties: domain: type: string description: Domain name error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainFlagLockUpdate: type: object description: Updates domain flag lock settings (e.g., transfer lock, delete lock) properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_FLAG_LOCK_UPDATE parameters: type: object properties: locks: $ref: '#/components/schemas/DomainFlagLocks' policyLocks: $ref: '#/components/schemas/DomainFlagLocks' error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDomainDnsContactSet: type: object description: Updates contact role assignments for the domain properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - DOMAIN_DNS_CONTACT_SET parameters: type: object properties: owner: $ref: '#/components/schemas/ContactAssignment' admin: $ref: '#/components/schemas/ContactAssignment' billing: $ref: '#/components/schemas/ContactAssignment' tech: $ref: '#/components/schemas/ContactAssignment' error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationContactCreate: type: object description: Creates a new contact for use in domain registration or management properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - CONTACT_CREATE parameters: type: object properties: purposes: type: array items: $ref: '#/components/schemas/ContactPurpose' description: Intended roles for this contact example: - OWNER - ADMIN required: - purposes result: type: object properties: id: type: string description: ID of the created contact example: ct-a1b2c3d4-e5f6-7890-abcd-ef1234567890 required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationWebhookCreate: type: object description: Creates a webhook subscription properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - WEBHOOK_CREATE parameters: type: object properties: url: type: string description: Webhook callback URL example: https://example.com/webhooks type: $ref: '#/components/schemas/WebhookType' required: - url - type result: type: object properties: id: type: string description: ID of the created webhook required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationWebhookDelete: type: object description: Deletes a webhook subscription properties: id: type: string example: plop_abc12345-1234-1234-1234-abc123456789 '@type': type: string enum: - unstoppabledomains.com/partner.v3.PlatformOperation status: $ref: '#/components/schemas/PlatformOperationStatus' type: type: string enum: - WEBHOOK_DELETE parameters: type: object properties: id: type: string description: Webhook ID to delete required: - id error: $ref: '#/components/schemas/OperationDependencyError' required: - id - '@type' - status - type - parameters PlatformOperationDependency: description: A platform operation dependency. Discriminated by the `type` field — each type has its own `parameters` and `result` shape. oneOf: - $ref: '#/components/schemas/PlatformOperationDomainRegister' - $ref: '#/components/schemas/PlatformOperationDomainDnsRenew' - $ref: '#/components/schemas/PlatformOperationDnsRecordCreate' - $ref: '#/components/schemas/PlatformOperationDnsRecordUpdate' - $ref: '#/components/schemas/PlatformOperationDnsRecordDelete' - $ref: '#/components/schemas/PlatformOperationDomainSetNameServers' - $ref: '#/components/schemas/PlatformOperationDomainDnsSecuritySetDnssec' - $ref: '#/components/schemas/PlatformOperationDomainDnsSecurityDeleteDnssec' - $ref: '#/components/schemas/PlatformOperationDomainDnsSecurityUpdateZone' - $ref: '#/components/schemas/PlatformOperationDomainFlagLockUpdate' - $ref: '#/components/schemas/PlatformOperationDomainDnsContactSet' - $ref: '#/components/schemas/PlatformOperationContactCreate' - $ref: '#/components/schemas/PlatformOperationWebhookCreate' - $ref: '#/components/schemas/PlatformOperationWebhookDelete' discriminator: propertyName: type mapping: DOMAIN_REGISTER: '#/components/schemas/PlatformOperationDomainRegister' DOMAIN_DNS_RENEW: '#/components/schemas/PlatformOperationDomainDnsRenew' DNS_RECORD_CREATE: '#/components/schemas/PlatformOperationDnsRecordCreate' DNS_RECORD_UPDATE: '#/components/schemas/PlatformOperationDnsRecordUpdate' DNS_RECORD_DELETE: '#/components/schemas/PlatformOperationDnsRecordDelete' DOMAIN_SET_NAMESERVERS: '#/components/schemas/PlatformOperationDomainSetNameServers' DOMAIN_DNS_SECURITY_SET_DNSSEC: '#/components/schemas/PlatformOperationDomainDnsSecuritySetDnssec' DOMAIN_DNS_SECURITY_DELETE_DNSSEC: '#/components/schemas/PlatformOperationDomainDnsSecurityDeleteDnssec' DOMAIN_DNS_SECURITY_UPDATE_ZONE: '#/components/schemas/PlatformOperationDomainDnsSecurityUpdateZone' DOMAIN_FLAG_LOCK_UPDATE: '#/components/schemas/PlatformOperationDomainFlagLockUpdate' DOMAIN_DNS_CONTACT_SET: '#/components/schemas/PlatformOperationDomainDnsContactSet' CONTACT_CREATE: '#/components/schemas/PlatformOperationContactCreate' WEBHOOK_CREATE: '#/components/schemas/PlatformOperationWebhookCreate' WEBHOOK_DELETE: '#/components/schemas/PlatformOperationWebhookDelete' WebhookDeliveryRequestBody: type: object properties: '@type': type: string enum: - unstoppabledomains.com/partner.v3.WebhookDelivery type: $ref: '#/components/schemas/WebhookType' data: $ref: '#/components/schemas/OperationCheckResponse' required: - '@type' - type - data MarketplaceDomainsListingListPriceResponse: type: object properties: usdCents: type: number description: Listing price in USD cents required: - usdCents MarketplaceDomainsListingPayoutResponse: type: object properties: address: type: string description: Wallet address designated to receive the payout required: - address MarketplaceDomainsListingOwnerResponse: type: object properties: address: type: string description: Wallet address of the domain owner required: - address MarketplaceDomainsListingItemResponse: type: object properties: domain: type: string description: The domain name listed for sale status: type: string description: Current listing status listPrice: $ref: '#/components/schemas/MarketplaceDomainsListingListPriceResponse' payout: $ref: '#/components/schemas/MarketplaceDomainsListingPayoutResponse' owner: $ref: '#/components/schemas/MarketplaceDomainsListingOwnerResponse' expiresAt: type: number description: Unix timestamp when the listing expires (if applicable) required: - domain - status - listPrice - payout - owner MarketplaceDomainsListingsResponse: type: object properties: items: type: array items: $ref: '#/components/schemas/MarketplaceDomainsListingItemResponse' next: nullable: true allOf: - $ref: '#/components/schemas/PaginatedListResponseNext' required: - items - next security: - bearer: []