Properties
| Name | Type | Description |
|---|---|---|
| domain | string | Queried domain name (lowercase) |
| unicode_name | stringnull | Unicode form as the registry sends it; some send the ASCII name |
| handle | stringnull | Registry-assigned handle |
| status | array | Always lowercase and space-separated — a registry sending `clientDeleteProhibited` arrives as `client delete prohibited`. Values we do not recognise pass through unchanged. See [Terminology → Status v |
| registrar | object | |
| dates | object | |
| nameservers | array | List of nameserver hostnames |
| dnssec | booleannull | Whether the delegation is signed. `null` where the registry publishes no DNSSEC status, as `.tr`, `.gg` and `.nc` do not. |
| entities | object | Contact entities keyed by role (registrant, administrative, technical, billing, abuse). Keys depend on what the registry/registrar provides. See [Terminology → Entity roles](#tag/terminology) for what |
| redacted | object | |
| meta | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/rdapapi-io/json-schema/rdapapi-io-domain-response-schema.json",
"title": "DomainResponse",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/rdapapi-io-openapi.yaml#/components/schemas/DomainResponse",
"type": "object",
"required": [
"domain",
"unicode_name",
"handle",
"status",
"registrar",
"dates",
"nameservers",
"dnssec",
"entities"
],
"properties": {
"domain": {
"type": "string",
"description": "Queried domain name (lowercase)"
},
"unicode_name": {
"type": [
"string",
"null"
],
"description": "Unicode form as the registry sends it; some send the ASCII name"
},
"handle": {
"type": [
"string",
"null"
],
"description": "Registry-assigned handle"
},
"status": {
"type": "array",
"items": {
"type": "string"
},
"description": "Always lowercase and space-separated — a registry sending `clientDeleteProhibited` arrives as `client delete prohibited`. Values we do not recognise pass through unchanged. See [Terminology → Status values](#tag/terminology)."
},
"registrar": {
"$ref": "#/$defs/Registrar"
},
"dates": {
"$ref": "#/$defs/Dates"
},
"nameservers": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of nameserver hostnames"
},
"dnssec": {
"type": [
"boolean",
"null"
],
"description": "Whether the delegation is signed. `null` where the registry publishes no DNSSEC status, as `.tr`, `.gg` and `.nc` do not."
},
"entities": {
"type": "object",
"description": "Contact entities keyed by role (registrant, administrative, technical, billing, abuse). Keys depend on what the registry/registrar provides. See [Terminology → Entity roles](#tag/terminology) for what each role means.",
"properties": {
"registrant": {
"$ref": "#/$defs/Contact"
},
"administrative": {
"$ref": "#/$defs/Contact"
},
"technical": {
"$ref": "#/$defs/Contact"
},
"billing": {
"$ref": "#/$defs/Contact"
},
"abuse": {
"$ref": "#/$defs/Contact"
}
}
},
"redacted": {
"$ref": "#/$defs/Redaction"
},
"meta": {
"$ref": "#/$defs/Meta"
}
},
"$defs": {
"Contact": {
"type": "object",
"description": "One contact. Any field may be null or withheld.\n",
"required": [
"handle",
"name",
"organization",
"email",
"phone",
"address",
"contact_url",
"country_code"
],
"properties": {
"handle": {
"type": [
"string",
"null"
],
"description": "Registry handle for this entity"
},
"name": {
"type": [
"string",
"null"
]
},
"organization": {
"type": [
"string",
"null"
]
},
"email": {
"type": [
"string",
"null"
]
},
"phone": {
"type": [
"string",
"null"
],
"description": "Voice telephone number in E.164, with a `;ext=42` suffix when the registry supplies an extension."
},
"address": {
"type": [
"string",
"null"
]
},
"contact_url": {
"type": [
"string",
"null"
],
"description": "Where a server withholds `email` and publishes a web form instead, this carries it."
},
"country_code": {
"type": [
"string",
"null"
],
"description": "ISO 3166-1 alpha-2 country code from the address. Unlike the text fields, a redaction placeholder here is dropped to `null` rather than passed through — it is not a country code."
}
}
},
"Dates": {
"type": "object",
"required": [
"registered",
"expires",
"updated"
],
"properties": {
"registered": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"expires": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"updated": {
"type": [
"string",
"null"
],
"format": "date-time"
}
}
},
"Meta": {
"type": "object",
"description": "Where the answer came from, and how it was served.\n",
"required": [
"server",
"source"
],
"properties": {
"server": {
"type": [
"string",
"null"
],
"description": "Host that answered, as `/tlds` reports it (usable as `?server=`). May be null on old cached records."
},
"source": {
"type": "string",
"enum": [
"rdap",
"whois"
],
"description": "Which protocol answered. Always `rdap` except on domain lookups, where a TLD with no RDAP server is answered over [WHOIS](#tag/whois-fallback)."
},
"rdap_server": {
"type": "string",
"deprecated": true,
"description": "Base URL of the RDAP server, present only when `source` is `rdap`. Use `server` for the host that answered, or `raw_rdap_url` for the exact endpoint queried."
},
"raw_rdap_url": {
"type": "string",
"description": "Direct URL to the raw RDAP response. Absent when `source` is `whois`, which has no URL form, or when a stored snapshot answered."
},
"cached": {
"type": "boolean",
"description": "Whether the response was served from cache. Omitted from the partial `meta` of a failed bulk entry."
},
"cache_expires": {
"type": "string",
"format": "date-time",
"description": "Cache expiration time (ISO 8601). Omitted from the partial `meta` of a failed bulk entry."
},
"followed": {
"type": "boolean",
"description": "Whether the registrar's RDAP server was queried for richer data. Only present when `?follow=true` is used and `source` is `rdap`."
},
"registrar_rdap_server": {
"type": [
"string",
"null"
],
"description": "URL of the registrar's RDAP record the registry linked to. Only present when `?follow=true` is used."
},
"follow_error": {
"type": [
"string",
"null"
],
"description": "Error message if the follow request failed. Only present when `?follow=true` is used and the request fails."
}
}
},
"Redaction": {
"type": "object",
"minProperties": 1,
"description": "Fields the server declared withheld, at the same path as in the record. See [Redaction](#tag/terminology).\n",
"properties": {
"handle": {
"$ref": "#/$defs/RedactionMethod"
},
"registrar": {
"type": "object",
"description": "Claims about the top-level `registrar` object. Domain lookups only.",
"additionalProperties": {
"$ref": "#/$defs/RedactionMethod"
}
},
"entities": {
"type": "object",
"description": "Claims keyed by contact role, then by field within that contact.",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"$ref": "#/$defs/RedactionMethod"
}
}
}
}
},
"RedactionMethod": {
"type": "string",
"description": "`removal`, `emptyValue`, `partialValue` or `replacementValue`; see [Redaction](#tag/terminology).\n"
},
"Registrar": {
"type": "object",
"required": [
"name",
"iana_id",
"abuse_email",
"abuse_phone",
"url"
],
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"iana_id": {
"type": [
"string",
"null"
]
},
"abuse_email": {
"type": [
"string",
"null"
]
},
"abuse_phone": {
"type": [
"string",
"null"
],
"description": "Voice telephone number in E.164, with a `;ext=42` suffix when the registry supplies an extension."
},
"url": {
"type": [
"string",
"null"
]
}
}
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/rdapapi-io-domain-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.