---
title: "Update domain contacts"
method: PATCH
path: "/domains/{name}/dns/contacts"
tags: ["domain-contacts"]
---

# Update domain contacts

`PATCH /domains/{name}/dns/contacts`

## Request

- Base URL: `https://api.unstoppabledomains.com/partner/v3`
- URL: `https://api.unstoppabledomains.com/partner/v3/domains/{name}/dns/contacts`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/unstoppabledomains/apis/reseller-api/docs/domains/:name/dns/contacts/patch.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Path parameters

- `name` string, required

## Query parameters

- `$preview` boolean, required

## Request body

- DomainContactUpdatesRequestBody: 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.
  - `owner` DomainOwnerContactRequestBody: Provide EITHER an existing contact `id` (format: `ct-<uuid>`) 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.
    - `tldData` DomainOwnerContactTldSpecificRequestBody: TLD-specific owner contact data. Currently only `.ca` (CIRA) is supported. Include the relevant TLD key only when registering a domain under that TLD.
      - `ca` DomainContactCiraRequestBody: CIRA-specific data required for .ca domain registration. All fields are required.
        - `registrantAgreementAcknowledged` true, required: Must be `true` to acknowledge the CIRA registrant agreement. Submitting `false` will fail validation.
        - `preferredLanguageCode` 'en_US' | 'fr_CA' | 'en' | 'fr', required: CIRA preferred language code
        - `canadianPresenceRequirement` 'CCT' | 'LGR' | 'RES' | 'ABO' | 'CCO' | 'ASS' | 'PRT' | 'TDM' | 'TRD' | 'PLT' | 'TRS' | 'LAM' | 'EDU' | 'HOP' | 'GOV' | 'INB' | 'OMK' | 'MAJ', required: CIRA Canadian Presence Requirement category
    - `id` string: Existing contact ID. When provided, all other fields are ignored.
    - `firstName` string
    - `lastName` string
    - `organization` string
    - `countryCode` string: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact.
    - `street` string
    - `city` string
    - `postalCode` string: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact.
    - `stateProvince` string: State or province. Validated against the provided countryCode. Required when creating a new contact.
    - `phone` ContactPhoneRequestBody: Phone number with international dialing prefix.
      - `number` string, required: Phone number digits (numeric string, 6-14 characters).
      - `dialingPrefix` string, required: International dialing prefix (e.g., "+1" for US/CA, "+44" for UK).
    - `email` string, email
  - `admin` DomainContactRequestBody: Provide EITHER an existing contact `id` (format: `ct-<uuid>`) 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.
    - `id` string: Existing contact ID. When provided, all other fields are ignored.
    - `firstName` string
    - `lastName` string
    - `organization` string
    - `countryCode` string: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact.
    - `street` string
    - `city` string
    - `postalCode` string: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact.
    - `stateProvince` string: State or province. Validated against the provided countryCode. Required when creating a new contact.
    - `phone` ContactPhoneRequestBody: Phone number with international dialing prefix.
      - `number` string, required: Phone number digits (numeric string, 6-14 characters).
      - `dialingPrefix` string, required: International dialing prefix (e.g., "+1" for US/CA, "+44" for UK).
    - `email` string, email
  - `tech` DomainContactRequestBody: Provide EITHER an existing contact `id` (format: `ct-<uuid>`) 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.
    - `id` string: Existing contact ID. When provided, all other fields are ignored.
    - `firstName` string
    - `lastName` string
    - `organization` string
    - `countryCode` string: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact.
    - `street` string
    - `city` string
    - `postalCode` string: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact.
    - `stateProvince` string: State or province. Validated against the provided countryCode. Required when creating a new contact.
    - `phone` ContactPhoneRequestBody: Phone number with international dialing prefix.
      - `number` string, required: Phone number digits (numeric string, 6-14 characters).
      - `dialingPrefix` string, required: International dialing prefix (e.g., "+1" for US/CA, "+44" for UK).
    - `email` string, email
  - `billing` DomainContactRequestBody: Provide EITHER an existing contact `id` (format: `ct-<uuid>`) 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.
    - `id` string: Existing contact ID. When provided, all other fields are ignored.
    - `firstName` string
    - `lastName` string
    - `organization` string
    - `countryCode` string: ISO 3166-1 alpha-2 country code (e.g., "US", "CA", "GB"). Required when creating a new contact.
    - `street` string
    - `city` string
    - `postalCode` string: Postal/ZIP code. Validated against the provided countryCode. Required when creating a new contact.
    - `stateProvince` string: State or province. Validated against the provided countryCode. Required when creating a new contact.
    - `phone` ContactPhoneRequestBody: Phone number with international dialing prefix.
      - `number` string, required: Phone number digits (numeric string, 6-14 characters).
      - `dialingPrefix` string, required: International dialing prefix (e.g., "+1" for US/CA, "+44" for UK).
    - `email` string, email

## Response `200`

Contact update operation created

- DomainContactUpdatesOperationResponse
  - `@type` 'unstoppabledomains.com/partner.v3.DomainContactOperationResult', required
  - `operation` OperationCheckResponse, required
    - `@type` 'unstoppabledomains.com/partner.v3.Operation', required
    - `id` string, required: Operation ID
    - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required
    - `type` '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', required
    - `domain` string
    - `createdAtTimestamp` number, required
    - `lastUpdatedTimestamp` number, required
    - `validUntilTimestamp` number
    - `dependencies` PlatformOperationDependency[], required: List of platform operation dependencies that make up this operation
      - union: A platform operation dependency. Discriminated by the `type` field — each type has its own `parameters` and `result` shape.
        - PlatformOperationDomainRegister: Registers a new domain with the specified owner contact and optional role contacts
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_REGISTER', required
          - `parameters` object, required
            - `owner` ContactAssignment, required: Reference to an existing or newly created contact
              - …
            - `contacts` NonRegistrantContacts: Non-registrant contact role assignments (admin, billing, tech)
              - …
            - `period` integer: Registration period in years
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainDnsRenew: Renews a domain for the specified period
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_DNS_RENEW', required
          - `parameters` object, required
            - `period` integer, required: Renewal period in years
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDnsRecordCreate: Creates a new DNS record for the domain
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DNS_RECORD_CREATE', required
          - `parameters` object, required
            - `subName` string: Subdomain name (empty for apex domain)
            - `type` 'A' | 'AAAA' | 'ALIAS' | 'CAA' | 'CNAME' | 'DNSKEY' | 'DS' | 'HTTPS' | 'IPSECKEY' | 'MX' | 'NAPTR' | 'NS' | 'PTR' | 'SOA' | 'SPF' | 'SRV' | 'SSHFP' | 'SVCB' | 'TLSA' | 'TXT', required
            - `values` string[], required
            - `ttl` integer, required: Time-to-live in seconds
          - `result` object
            - `id` string, required: ID of the created DNS record
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDnsRecordUpdate: Updates an existing DNS record
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DNS_RECORD_UPDATE', required
          - `parameters` object, required
            - `id` string, required: DNS record ID to update
            - `values` string[]
            - `ttl` integer: Time-to-live in seconds
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDnsRecordDelete: Deletes a DNS record
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DNS_RECORD_DELETE', required
          - `parameters` object, required
            - `id` string, required: DNS record ID to delete
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainSetNameServers: Sets the nameservers for a domain (external nameservers or revert to UD-managed)
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_SET_NAMESERVERS', required
          - `parameters` object, required
            - `items` string[]: Nameserver hostnames
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainDnsSecuritySetDnssec: Configures DNSSEC DS records at the registry for a domain
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_DNS_SECURITY_SET_DNSSEC', required
          - `parameters` object, required
            - `domain` string: Domain name
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainDnsSecurityDeleteDnssec: Removes DNSSEC DS records from the registry for a domain
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_DNS_SECURITY_DELETE_DNSSEC', required
          - `parameters` object, required
            - `domain` string: Domain name
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainDnsSecurityUpdateZone: Updates the DNS zone configuration for DNSSEC signing
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_DNS_SECURITY_UPDATE_ZONE', required
          - `parameters` object, required
            - `domain` string: Domain name
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainFlagLockUpdate: Updates domain flag lock settings (e.g., transfer lock, delete lock)
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_FLAG_LOCK_UPDATE', required
          - `parameters` object, required
            - `locks` DomainFlagLocks: Map of domain flag names to boolean lock values. Keys are DomainFlagType values.
            - `policyLocks` DomainFlagLocks: Map of domain flag names to boolean lock values. Keys are DomainFlagType values.
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationDomainDnsContactSet: Updates contact role assignments for the domain
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'DOMAIN_DNS_CONTACT_SET', required
          - `parameters` object, required
            - `owner` ContactAssignment: Reference to an existing or newly created contact
              - …
            - `admin` ContactAssignment: Reference to an existing or newly created contact
              - …
            - `billing` ContactAssignment: Reference to an existing or newly created contact
              - …
            - `tech` ContactAssignment: Reference to an existing or newly created contact
              - …
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationContactCreate: Creates a new contact for use in domain registration or management
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'CONTACT_CREATE', required
          - `parameters` object, required
            - `purposes` ContactPurpose[], required: Intended roles for this contact
          - `result` object
            - `id` string, required: ID of the created contact
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationWebhookCreate: Creates a webhook subscription
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'WEBHOOK_CREATE', required
          - `parameters` object, required
            - `url` string, required: Webhook callback URL
            - `type` 'OPERATION_FINISHED' | 'OPERATION_ACTION_REQUIRED' | 'OPERATION_CREATED', required
          - `result` object
            - `id` string, required: ID of the created webhook
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description
        - PlatformOperationWebhookDelete: Deletes a webhook subscription
          - `id` string, required
          - `@type` 'unstoppabledomains.com/partner.v3.PlatformOperation', required
          - `status` 'PREVIEW' | 'QUEUED' | 'PROCESSING' | 'FAILED' | 'COMPLETED' | 'CANCELLED' | 'AWAITING_UPDATES', required: Status of a platform operation dependency
          - `type` 'WEBHOOK_DELETE', required
          - `parameters` object, required
            - `id` string, required: Webhook ID to delete
          - `error` OperationDependencyError: Error details for a failed operation dependency
            - `code` string, required: Error code identifying the failure type
            - `message` string, required: Human-readable error description

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `500`: Internal server error

## Changes

- **2026-02-27** `64f751be432d`: 2 breaking, 1 warning, 5 info
  - the `registrantAgreementAcknowledged` request property const value `true` was added
  - removed the enum value `true` of the request property `owner/tldData/ca/registrantAgreementAcknowledged`
  - added the new `DOMAIN_ADMIN_DNS_ZONE_MIGRATE` enum value to the `operation/type` response property for the response status `200`
  - added the non-success response with the status `400`
  - …4 more
- **2026-02-21** `acf7620da368`: 2 breaking, 2 warning, 2 info
  - request property `owner/tldData/ca/registrantAgreementAcknowledged` was restricted to a list of enum values
  - added `#/components/schemas/PlatformOperationDomainSetNameServers, #/components/schemas/PlatformOperationDomainDnsSecuritySetDnssec, #/components/schemas/PlatformOperationDomainDnsSecurityDeleteDnssec, #/components/schemas/PlatformOperationDomainDnsSecurityUpdateZone` to the `operation/dependencies/items/` response property `oneOf` list for the response status `200`
  - removed the optional property `operation/suggestionJobId` from the response with the `200` status
  - added the new `DOMAIN_DNS_NAME_SERVER_UPDATE` enum value to the `operation/type` response property for the response status `200`
  - …2 more

[Operation history](https://skmtc.dev/unstoppabledomains/apis/reseller-api/changes/domains/:name/dns/contacts/patch.md)

---

[API](https://skmtc.dev/unstoppabledomains/apis/reseller-api.md) - [All operations](https://skmtc.dev/unstoppabledomains/apis/reseller-api/llms.txt) - [OpenAPI document](https://skmtc.dev/unstoppabledomains/apis/reseller-api/revisions/e0ac88d02fe7?raw)
