schemas/registrar-ownership.schema.json

registrar-ownership.schema.json

JSON Schema for the registrar_ownership dataset. Versioned alongside the data.

Download registrar-ownership.schema.jsonView dataset

Overview#overview

nameregistrar-ownership
version2026.08
fields11
used_byregistrar_ownership
draft2020-12
licenseCC-BY-4.0

Field definitions#fields

FieldTypeRequiredDescription
idstringrequiredStable slug identifier for the brand.
registrar_idstring | nulloptionalForeign key to registrars.id when the brand has a canonical registrar record; null otherwise.
brand_namestringrequiredConsumer-facing brand name.
relationshipenumrequiredsubsidiary | brand | independent.
parent_group_idstring | nulloptionalSlug of the owning corporate group; null when independent.
parent_group_namestring | nulloptionalName of the owning corporate group; null when independent.
parent_typeenum | nulloptionalpublic | private; null when unknown or independent.
source_urlstring · urioptionalPrimary source for the ownership claim.
sourcesarray · enumrequiredProvenance.
verification_statusenumrequiredSee verification statuses.
last_checkedstring · date-timerequiredISO 8601 timestamp.

JSON Schema#preview

{
  "$id": "https://opendomaindata.org/schemas/registrar-ownership.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "RegistrarOwnership",
  "description": "Corporate ownership record for a retail registrar brand. Facts about who owns which brand — never a judgement about whether that ownership is good or bad.",
  "version": "2026.08",
  "type": "object",
  "required": ["id", "brand_name", "relationship", "sources", "verification_status", "last_checked"],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]*$",
      "description": "Stable slug identifier for the brand."
    },
    "registrar_id": {
      "type": ["string", "null"],
      "description": "Foreign key to registrars.id when the brand has a canonical registrar record; null for brands not (yet) in the registrars dataset."
    },
    "brand_name": { "type": "string", "description": "Consumer-facing brand name." },
    "relationship": {
      "type": "string",
      "enum": ["subsidiary", "brand", "independent"],
      "description": "subsidiary/brand: operated by a parent group; independent: the brand and the owner are the same entity."
    },
    "parent_group_id": {
      "type": ["string", "null"],
      "pattern": "^[a-z0-9][a-z0-9-]*$",
      "description": "Slug of the owning corporate group; null when independent."
    },
    "parent_group_name": { "type": ["string", "null"], "description": "Name of the owning corporate group; null when independent." },
    "parent_type": {
      "type": ["string", "null"],
      "enum": ["public", "private", null],
      "description": "Whether the owning group is publicly listed or privately held; null when unknown or independent."
    },
    "source_url": {
      "type": "string",
      "format": "uri",
      "description": "Primary source for the ownership claim (corporate filing, acquisition announcement, or canonical cross-site feed record)."
    },
    "sources": {
      "type": "array",
      "minItems": 1,
      "items": { "type": "string", "enum": ["iana", "rdap", "registrar_docs", "submission", "cross_site_feed"] }
    },
    "verification_status": {
      "type": "string",
      "enum": ["unknown", "public_sources", "independently_tested", "registrar_submitted", "registrar_verified", "deprecated"]
    },
    "last_checked": { "type": "string", "format": "date-time" }
  },
  "additionalProperties": false
}

Validation example#validation

Validate a record locally using any JSON Schema validator. The schema is draft 2020-12; for ajv use the 2020 import.

import Ajv from "ajv/dist/2020";
import schema from "https://opendomaindata.org/schemas/registrar-ownership.schema.json" assert { type: "json" };

const ajv = new Ajv();
const validate = ajv.compile(schema);
const ok = validate(record);
if (!ok) console.error(validate.errors);

Changelog#changelog

Schema changes are recorded in the project changelog and follow the dataset release tag.