Domain

Owned domain with its nameservers, contacts, EPP statuses, DNSSEC, RGP statuses, registry timestamps, and latest-version metadata.

  • Resource type identifier

  • Sponsorship classification. One of managed, external, backorder. Determines which other fields are populated.

  • Lifecycle state. Valid values depend on kind.

  • Whether the domain auto-renews at expiry

  • Registered term as a typed (count, unit) pair. Omitted when unknown.

    Properties: 3
  • True when the domain was registered at a premium tier price

  • External registrar holding the domain. Populated for kind=external rows when RDAP returns it; nil on managed rows and on externals where the registrar is unknown.

    Properties: 2
  • Contact assignments by role (registrant, admin, tech, billing). One entry per assigned slot; empty when no contacts are bound (typical for kind=external and kind=backorder).

    Properties: 4
  • Delegation set ordered by position. Empty array on rows that have not had nameservers configured yet.

    Properties: 5
  • RFC 5731 EPP status codes currently applied to the domain. Verbatim registry strings (e.g. clientTransferProhibited, serverHold).

  • The RFC 5910 DNSSEC section: the DS record set and, when the registry reports one, the maximum signature lifetime. ds_records is empty when DNSSEC is not configured.

    Properties: 4
  • Domain typeid (prefix dom_)

  • RFC 3915 Registry Grace Period status codes currently applied. Empty outside active grace/redemption windows.

  • Whether a transfer authorization code is stored for this domain. The code itself is never returned.

  • Whether the registration can change registrar right now, estimated from the last-synced data. The direction follows kind: on a managed row it is whether the domain could leave us, on an external row whether it could be transferred in. Always false on backorder. A read-only derivation, never a permission: the registry decides the actual transfer.

  • Why the domain cannot change registrar. One of not_registered, expired, redemption, pending_delete, pending_transfer, locked, too_recently_registered, too_recently_transferred, registrant_recently_changed, not_sponsored, mechanism_unsupported, tld_not_serviced. Omitted when is_transferable is true. See the endpoint description for what each value means and what clears it.

  • When the reason stops applying, for the three reasons that are time windows: too_recently_registered, too_recently_transferred and registrant_recently_changed. Null for every other reason, because they end on an act rather than a moment (locked clears when the lock is cleared) or have no knowable end at all. Also null when the domain is already transferable.

  • Monotonically-incrementing version of the domain. Bumps once per change; matches the version whose actor attribution is reported in last_changed_by.

  • Immutable creator attribution. Polymorphic by method.

    Properties: 6
  • Actor responsible for the live version. Polymorphic by method; omitted on rows that pre-date the version table (none in v1).

    Properties: 6
  • Timestamp of the live version's creation

  • Original registry create date. Null for backorder probes and some external-monitoring rows.

  • Owning organisation

  • Last update date reported by the registry

  • Registry expiry timestamp

  • When auto-renewal first attempts this domain: the configured renewal window before expires_at. A value in the past means the renewal is due now or overdue. Null when the domain does not auto-renew, is not a managed registration, is not active, has no expiry, or auto-renewal is disabled platform-wide.

  • Last successful transfer date. Null when never transferred.

  • How many change requests on this domain are still running. Zero means nothing is in flight and a write will not hit a conflict on that account. Read GET /changes?domain_id={id} for what they are.

  • When the transfer authorization code was last handed out, and who asked for it. Null until somebody asks. On an extension whose registry issues codes on demand a reveal also replaces the code, so these move together with the two auth_code_last_rotated_* fields.

  • Who last asked for the transfer authorization code. Always a user acting through a session; the code cannot be requested with an API key. Null until somebody asks, and null again if that user is later removed.

    Properties: 6
  • When the transfer authorization code was last replaced, and so when every copy handed out before that stopped working. Null until it is replaced.

  • Who last replaced the transfer authorization code. Always a user acting through a session; the code cannot be replaced with an API key. Null until it is replaced, and null again if that user is later removed.

    Properties: 6
  • What another registrar has asked for on this domain. The registry announces such a request rather than this API accepting it, so it can appear with nothing having happened here, and the domain's own status does not move while it is merely pending. open says one is live at the registry; display_status says whether it needs somebody, and action_required is the only value that does. Always rendered, so a client reads the block unconditionally. Read GET /domains/{id}/transfers for the record behind it.

    Properties: 3
  • Primary team responsible for the domain. Drives contact resolution (team-level registrant/admin/tech/billing) and is the team a user-bearing caller must be a member of to read the row by default.

  • Row creation timestamp (when we first tracked this domain)

  • Row last-update timestamp (any column change)

  • Additional teams granted access to the domain. Excludes the primary team. Empty array when no extra grants are in effect.

  • Fully-qualified domain name

  • Label portion of the FQDN (everything left of the TLD)

  • Top-level domain

  • Upstream EPP registry sponsoring the TLD. Embedded as a typed handle so SDK consumers can render the registry without dereferencing config; nil only when the row has no resolved registry (should not happen for valid managed/external rows).

    Properties: 2