{"openapi":"3.1.0","info":{"title":"ENS Indexer API","description":"Read-only REST API over indexed ENS and Basenames state (Bigname v2-compatible wire shapes). Data responses are wrapped in `{data, page?, meta}` where `meta.as_of` reports the indexed chain heads and `meta.source` is `indexed`. Errors use `{error: {code, message, details}}`; unknown routes return 404 `not_found`. Every `/v2/*` route also answers under `/v1/*` for Bigname path compatibility.","version":"0.1.0"},"paths":{"/enstate/a/{address}":{"get":{"tags":["enstate"],"summary":"Profile of an address's primary name","operationId":"get_address","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/bulk/a":{"get":{"tags":["enstate"],"summary":"Profiles of up to 10 addresses","operationId":"get_bulk_addresses","parameters":[{"name":"addresses[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResponse"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/bulk/n":{"get":{"tags":["enstate"],"summary":"Profiles of up to 10 names","operationId":"get_bulk_names","parameters":[{"name":"names[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResponse"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/bulk/u":{"get":{"tags":["enstate"],"summary":"Profiles of up to 10 names or addresses","operationId":"get_bulk_universal","parameters":[{"name":"queries[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResponse"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/h/{name_or_address}":{"get":{"tags":["enstate"],"summary":"Header image","operationId":"get_header","parameters":[{"name":"name_or_address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"303":{"description":"Redirect to the image"},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/i/{name_or_address}":{"get":{"tags":["enstate"],"summary":"Avatar image","operationId":"get_avatar","parameters":[{"name":"name_or_address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"303":{"description":"Redirect to the image"},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/n/{name}":{"get":{"tags":["enstate"],"summary":"Profile of a name","operationId":"get_name","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/enstate/u/{name_or_address}":{"get":{"tags":["enstate"],"summary":"Profile of a name or address","operationId":"get_universal","parameters":[{"name":"name_or_address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnstateError"}}}}}}},"/healthz":{"get":{"tags":["ops"],"summary":"Liveness and readiness probe","description":"Checks database reachability with a 2 second `SELECT 1`. Ignores query parameters.","operationId":"health","responses":{"200":{"description":"Database reachable; `status` is `ready`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Database unreachable; `status` is `degraded`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v2/addresses/{address}/history":{"get":{"tags":["addresses"],"summary":"Address history","description":"Chain-ordered events of the names an address currently relates to, plus the events that name the address directly: its primary-name claims (default relations and `scope=both`), its account approvals as owner or operator (`scope=both`), and its ENSv2 registry-root role changes (`role_holder` with `scope=both` or `scope=registration`). `relation` selects the related names: `owner` and `manager` from the current relation rows, `role_holder` from the address's current ENSv2 registry grants. Ended relations are not reproduced. `page.total_count` is null unless `include=total_count` asks for an exact count. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_address_history","parameters":[{"name":"address","in":"path","description":"EVM address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"One configured namespace; default `ens`.","required":false,"schema":{"type":"string"}},{"name":"relation","in":"query","description":"Comma-separated `owner`, `manager`, `role_holder`, or `any` (default, all three). `registrant`, `resolves_to` and `former_owner` return 400.","required":false,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"`name`, `registration`, or `both` (default).","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Comma-separated friendly event types to include.","required":false,"schema":{"type":"string"}},{"name":"exclude_type","in":"query","description":"Comma-separated friendly event types to exclude. Exclusion wins.","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"Comma-separated raw event kinds to include. Unbacked kinds return 422.","required":false,"schema":{"type":"string"}},{"name":"record_key","in":"query","description":"Exact stored record key. Keeps writes of that key plus record-version resets.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`desc` (default) or `asc`.","required":false,"schema":{"type":"string"}},{"name":"from_timestamp","in":"query","description":"Inclusive lower bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"to_timestamp","in":"query","description":"Inclusive upper bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated `data`, `raw`, `total_count`.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor`; must be replayed with the same address, namespace, relation, scope, order and filters.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of the address's events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_HistoryEvent"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, an invalid address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: an unbacked type or kind, or a namespace this deployment does not serve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/addresses/{address}/names":{"get":{"tags":["addresses"],"summary":"Names related to an address","description":"Paginated list of names where the address is the current owner (token holder), manager, or ENSv2 role holder; with `relation=resolves_to`, names whose current address record holds the address; with `relation=former_owner`, lapsed registrations the address last held. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_address_names","parameters":[{"name":"address","in":"path","description":"EVM address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Restrict to one configured namespace (`ens`, `basenames` by default). Default: all configured namespaces.","required":false,"schema":{"type":"string"}},{"name":"relation","in":"query","description":"Comma-separated subset of `owner`, `manager`, `role_holder`, or `any` for all three (default). `owner` is the token holder: the BaseRegistrar holder of an unwrapped ENSv1 `<label>.eth` name, else the NameWrapper or ENSv2 token holder, or the registry owner of a name without a token. A lapsed registration (an ENSv2 one from its expiry, any other once `released`) serves none of them. `role_holder` matches names whose current ENSv2 registration grants the address a registry role. `resolves_to` stands alone: resolution-supported names whose current `addr:<coin_type>` record holds the address. `former_owner` stands alone: lapsed registrations whose holder was the address, with `lapsed_registration`.","required":false,"schema":{"type":"string"}},{"name":"coin_type","in":"query","description":"Only with `relation=resolves_to`; any other relation returns 400. A decimal coin type from 1 to 4294967295 (default 60) adds `resolution: {coin_type, record_key}` to each row. The record key is `addr:2147483648` when the coin-60 answer is the ENSIP-19 default record. `evm` matches coin type 60 and every stored record from 2147483648 through 4294967295 and adds `resolutions`, one entry per matched stored record ascending by coin type.","required":false,"schema":{"type":"string"}},{"name":"authority","in":"query","description":"Comma-separated `ens_v0`, `ens_v1`, `ens_v2`: rows serving a listed `authority`. This deployment never serves `ens_v0`, so it matches nothing alone. Not accepted with `relation=former_owner`.","required":false,"schema":{"type":"string"}},{"name":"parent","in":"query","description":"A name: only names exactly one label below it (`parent=eth` lists `<label>.eth` names).","required":false,"schema":{"type":"string"}},{"name":"is_migrated","in":"query","description":"`true` keeps names migrated to ENSv2 (`migrated_at` set), `false` the others. Not accepted with `relation=resolves_to` or `relation=former_owner`.","required":false,"schema":{"type":"boolean"}},{"name":"expires_after","in":"query","description":"Only with `relation=former_owner`: inclusive lower bound on `expires_at`, decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"expires_before","in":"query","description":"Only with `relation=former_owner`: exclusive upper bound on `expires_at`, decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"ENSIP-15 name fragment. `match` selects prefix or contains matching. Not accepted with `relation=former_owner`.","required":false,"schema":{"type":"string"}},{"name":"match","in":"query","description":"`prefix` (default) or `contains`. Ignored without `q`.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"`name` (default), `expires_at`, `registered_at`, or `created_at`; `relation=former_owner` sorts by `expires_at` only. Rows without the timestamp sort first ascending and last descending. Ties break by name and namespace.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`asc` (default) or `desc`.","required":false,"schema":{"type":"string"}},{"name":"dedupe","in":"query","description":"`name` (default) or `registration`, which collapses rows sharing a registration to the one first by name. `relation=former_owner` accepts only `name`.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated `counts` (adds `subname_count` and `record_count`), `role_summary` (adds indexed permission grants and `record_count`), and `total_count`. `page.total_count` is exact while the address has at most 1,000 candidate names (10,000 with `total_count`) and `null` above; `resolves_to` and `former_owner` reads serve `null`. `total_count` with `relation=resolves_to` and any `include` with `relation=former_owner` return 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page. It must be replayed with the same filters, sort, and order.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of names.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_AddressName"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, an unsupported combination, an invalid address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: a `coin_type=evm` row with more than 100 matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/addresses/{address}/primary-name":{"get":{"tags":["addresses"],"summary":"Primary name of an address","description":"Indexed primary (reverse) name claim for an address, coin type, and namespace. A missing claim is an in-band `not_found` answer with HTTP 200. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_primary_name","parameters":[{"name":"address","in":"path","description":"EVM address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"coin_type","in":"query","description":"Default 60 for `ens`, 2147492101 for `basenames`.","required":false,"schema":{"type":"integer","format":"int64","maximum":4294967295,"minimum":1}},{"name":"namespace","in":"query","description":"A configured namespace; default `ens`.","required":false,"schema":{"type":"string"}},{"name":"source","in":"query","description":"`indexed` (default) or `verified`. Both serve the indexed answer.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Primary-name answers.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PrimaryName"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, or an invalid address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: no `namespace` was given and the default `ens` namespace is not configured on this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/events":{"get":{"tags":["events"],"summary":"Event search","description":"Chain-ordered events across the decoded journals, filtered by name, address, registration, resolver, emitting contract, type, and block or timestamp windows. Filters intersect. `name` keeps the name-history rows of that name. `address` keeps the address-history rows of that address with `scope=both` and every relation. `registration_id` keeps one registration's rows, from its grant up to the next grant on the same resource. `resolver=<chain_id>:<address>` keeps rows that resolver emitted plus resolver-pointer rows whose new pointer is that resolver. `contract_address` keeps rows that contract emitted. `namespace` is inferred from `name`, spans every configured namespace for a bare `resolver`, and is otherwise `ens`. `page.total_count` is exact up to 10,000 rows when `name`, `registration_id`, `address` or `resolver` anchors the read, and null for unanchored reads. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_events","parameters":[{"name":"namespace","in":"query","description":"One configured namespace.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"ENS or Basenames name; must be a valid ENSIP-15 name.","required":false,"schema":{"type":"string"}},{"name":"address","in":"query","description":"EVM address, `0x` + 40 hex (any case).","required":false,"schema":{"type":"string"}},{"name":"resolver","in":"query","description":"`<chain_id>:<address>` with chain 1, 8453, 11155111, or 84532.","required":false,"schema":{"type":"string"}},{"name":"contract_address","in":"query","description":"Emitting contract, `0x` + 40 hex (any case).","required":false,"schema":{"type":"string"}},{"name":"registration_id","in":"query","description":"Opaque registration handle, as `registration_id` on name and history rows.","required":false,"schema":{"type":"string"}},{"name":"from_block","in":"query","description":"Inclusive block lower bound.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"to_block","in":"query","description":"Inclusive block upper bound.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"type","in":"query","description":"Comma-separated friendly event types to include.","required":false,"schema":{"type":"string"}},{"name":"exclude_type","in":"query","description":"Comma-separated friendly event types to exclude. Exclusion wins.","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"Comma-separated raw event kinds to include. Unbacked kinds return 422.","required":false,"schema":{"type":"string"}},{"name":"record_key","in":"query","description":"Exact stored record key. Keeps writes of that key plus record-version resets.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`desc` (default) or `asc`.","required":false,"schema":{"type":"string"}},{"name":"from_timestamp","in":"query","description":"Inclusive lower bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"to_timestamp","in":"query","description":"Inclusive upper bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated `data`, `raw`, `total_count`. `total_count` makes anchored counts exact, and counts `resolver`-only or `contract_address`-only reads up to 10,000 rows.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor`; must be replayed with the same filters and order.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_HistoryEvent"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: an unbacked type or kind, or a namespace this deployment does not serve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/lookup":{"post":{"tags":["lookup"],"summary":"Batch forward and reverse lookup","description":"Resolves up to 1000 name and/or address inputs in one call, returning one result per input in request order with an in-band `status`. Accepts no query parameters. A body that is not valid JSON, is not sent as `application/json`, or does not match the schema returns 400 `malformed JSON request body`.","operationId":"get_lookup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupRequest"}}},"required":true},"responses":{"200":{"description":"One result per input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_LookupResult"}}}},"400":{"description":"`invalid_input`: any query parameter, a malformed body, or an invalid input value.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: a reverse result row belongs to a namespace this deployment does not serve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/names":{"get":{"tags":["names"],"summary":"Names by expiry or grace deadline","description":"Current names of one namespace whose finite `expires_at` or `grace_ends_at` falls in a half-open window, ordered by that deadline, then name bytes and namehash. Supply exactly one date family: scalar expiry bounds, repeated `expires_window`, or scalar grace bounds. `order=desc` reverses only the deadline. Names without an expiry, or with a classified null expiry, never match; active, expired, and released names all do. Unknown query parameters, and repeats of any parameter but `expires_window`, return 400. Empty query values are treated as absent.","operationId":"get_names","parameters":[{"name":"namespace","in":"query","description":"Required. One configured namespace (`ens`, `basenames` by default).","required":true,"schema":{"type":"string"}},{"name":"expires_after","in":"query","description":"Inclusive expiry lower bound, decimal Unix seconds or RFC 3339. One bound of one family is required.","required":false,"schema":{"type":"string"}},{"name":"expires_before","in":"query","description":"Exclusive expiry upper bound, decimal Unix seconds or RFC 3339. Must be later than `expires_after`.","required":false,"schema":{"type":"string"}},{"name":"expires_window","in":"query","description":"Repeat for 1 to 32 disjoint half-open expiry windows, each `after..before` in decimal Unix seconds or RFC 3339 (whitespace around a bound is ignored). Adjacent windows are allowed. Overlap, duplicates, a missing or malformed bound, `after >= before`, more than 32 windows, or any scalar expiry bound or grace parameter (even blank) return 400. Rows come in one sorted walk over every window and carry `expires_window_index`, the zero-based input position of their window.","required":false,"schema":{"type":"array","items":{"type":"string"}},"explode":true},{"name":"grace_ends_after","in":"query","description":"Inclusive grace-deadline lower bound, decimal Unix seconds or RFC 3339. Cannot combine with expiry bounds.","required":false,"schema":{"type":"string"}},{"name":"grace_ends_before","in":"query","description":"Exclusive grace-deadline upper bound, decimal Unix seconds or RFC 3339. Must be later than `grace_ends_after`. Cannot combine with expiry bounds.","required":false,"schema":{"type":"string"}},{"name":"grace_ends_window","in":"query","description":"Not supported; returns 422 (400 when combined with another date parameter).","required":false,"schema":{"type":"string"}},{"name":"authority","in":"query","description":"Comma-separated set of `ens_v0`, `ens_v1`, `ens_v2`; keeps rows whose served `authority` is listed. This deployment never serves `ens_v0`, and Basenames rows serve no authority, so they match no set. Blank segments are skipped; an empty set or another value returns 400.","required":false,"schema":{"type":"string"}},{"name":"parent","in":"query","description":"A name. Only names exactly one label below it, by normalized name spelling, are listed. `parent=eth` lists every `<label>.eth` name and no deeper subname. An invalid name returns 400.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"`expires_at` or `grace_ends_at`. Defaults to the supplied date family and must match it.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`asc` (default) or `desc`.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page; must be replayed with the same namespace, bounds or windows (in the same order), authority, parent, and order.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of names. `page.total_count` is null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_SearchName"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a missing namespace or bound, mixed date families or windows with scalar bounds, invalid windows, a sort that does not match the bounds, bounds out of order, an invalid authority set or parent, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the namespace chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `grace_ends_window`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/names/{name}":{"get":{"tags":["names"],"summary":"Name detail","description":"Current indexed state of one name in bigname's `NameRecord` shape: lifecycle `status`, `authority`, token-holder `owner`, `manager`, `ens_v1` facts, `lapsed_registration`, `migrated_at`, the ENSv2 `subregistry`, and grouped resolver `records`. `read_status` is `ok` for every served name; a custom resolver omits `records` and carries `resolution_unsupported_reason`, and a lapsed registration omits `owner`, `manager`, `resolver`, and `records`. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_name_record","parameters":[{"name":"name","in":"path","description":"ENS or Basenames name; must be a valid ENSIP-15 name (normalized server-side).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Override the namespace; default is inferred from the name (`*.base.eth` subdomains are `basenames`, everything else `ens`).","required":false,"schema":{"type":"string"}},{"name":"source","in":"query","description":"`indexed` (default) or `verified`. Both serve indexed state.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector; any non-empty value is rejected with 422 (snapshot reads not supported).","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served; `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `counts`. `counts` adds `subname_count` (direct children) and, when `records` is served, `record_count` (known record keys: address coin types, text keys, and contenthash). Other values return 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"The name record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_NameRecord"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, or an invalid name.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: the name is not indexed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the inferred namespace is not served.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/names/{name}/history":{"get":{"tags":["names"],"summary":"Name history","description":"Chain-ordered events of one name from the decoded journals: its registry, resolver, record and NameWrapper events and its registration resource events. `scope=name` and `scope=both` keep all of them; `scope=registration` drops ENSv2 reservations, which no registration carries. An ENSv1 `NewOwner` yields an `authority` row and a `subregistry` row; an ENSv2 registration emitted by the mainnet migration controller yields a `registration` row and a `migration` row. ENSv1 names match by namehash and registrar token. ENSv2 names match the registry entry of their current registration and its registry role resources. Basenames match by namehash and BaseRegistrar token. Primary-name, account-approval, registry-root and contract events never belong to a name. `name` is the requested name on every row. `page.total_count` is exact up to 10,000 rows and null above, unless `include=total_count` asks for an uncapped count. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_name_history","parameters":[{"name":"name","in":"path","description":"ENS or Basenames name; must be a valid ENSIP-15 name (normalized server-side).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Override the namespace; default is inferred from the name.","required":false,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"`name`, `registration`, or `both` (default). `registration` drops ENSv2 reservations.","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Comma-separated friendly event types to include.","required":false,"schema":{"type":"string"}},{"name":"exclude_type","in":"query","description":"Comma-separated friendly event types to exclude. Exclusion wins.","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"Comma-separated raw event kinds to include. `PermissionScopeChanged`, `RolesChanged`, `RegistryCreated` and `Upgraded` return 422.","required":false,"schema":{"type":"string"}},{"name":"record_key","in":"query","description":"Exact stored record key such as `addr:60`, `text:avatar`, `contenthash` or `name`. Keeps writes of that key plus record-version resets.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`desc` (default) or `asc`.","required":false,"schema":{"type":"string"}},{"name":"from_timestamp","in":"query","description":"Inclusive lower bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"to_timestamp","in":"query","description":"Inclusive upper bound on the block timestamp: decimal Unix seconds or RFC 3339.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated `data`, `raw`, `total_count`, `child_registrations`. `child_registrations` merges the ENSv2 grants of registries the name's entry linked as its subregistry while linked (ENSv1 and Basenames subnames have no registration rows) and adds `subject` to every row; it returns 400 on `eth` and `base.eth`.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor`; must be replayed with the same name, namespace, scope, order and filters.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of the name's events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_HistoryEvent"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, an invalid name, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: the name is not indexed (first page only).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: an unbacked type or kind, or a namespace this deployment does not serve.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/names/{name}/records":{"get":{"tags":["names"],"summary":"Name resolver records","description":"Current indexed resolver records of one name as per-key answers. Without `keys`, `records` answers every stored key; with `keys`, each requested key answers `ok` with its value or `not_found`. A lapsed registration serves `resolver: null` and no stored value. A custom resolver (records not indexed) answers each requested key `unsupported`. `include=inventory` or `values=false` adds the record inventory. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_name_records","parameters":[{"name":"name","in":"path","description":"ENS or Basenames name; must be a valid ENSIP-15 name (normalized server-side).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Override the namespace; default is inferred from the name (`*.base.eth` subdomains are `basenames`, everything else `ens`).","required":false,"schema":{"type":"string"}},{"name":"source","in":"query","description":"`indexed` (default) or `verified`. Both serve indexed state.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector; any non-empty value is rejected with 422 (snapshot reads not supported).","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served; `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"keys","in":"query","description":"Comma-separated record keys (at most 200, no duplicates): `addr:<coin_type>`, `text:<key>`, `avatar`, or `contenthash`. `records` answers exactly these keys. Must be omitted with `values=false` (400).","required":false,"schema":{"type":"string"}},{"name":"values","in":"query","description":"`true` (default) or `false`. `false` answers `records: {}` with the record inventory. Other values return 400.","required":false,"schema":{"type":"boolean"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `inventory`. Adds `inventory` (omitted for a lapsed registration): `known_keys` lists every stored record key (`addr:<coin_type>`, `text:<key>`, `contenthash`), `unset_keys` and `unsupported_keys` are empty, and `abi_content_types` is null because ABI records are not indexed. For a custom resolver `known_keys` is empty, `unsupported_keys` lists the requested keys, and `abi_unsupported_reason` is `inventory_not_authoritative`. Other values return 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"The name's records.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_NameRecords"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, an invalid name, or invalid `keys`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: the name is not indexed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the inferred namespace is not served.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/names/{name}/subnames":{"get":{"tags":["names"],"summary":"Direct subnames","description":"Direct children of one name (one label deep), sorted by `sort` and then byte-wise by name. `page.total_count` counts every child matching the `q`, `match`, and `include_expired` filters; it is exact up to 10,000 and `null` above. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_name_subnames","parameters":[{"name":"name","in":"path","description":"Parent name; must be a valid ENSIP-15 name (normalized server-side).","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Namespace of the children; default is inferred from a child name (children of `base.eth` are `basenames`, everything else follows the parent).","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Child name text, normalized as an ENSIP-15 name fragment. One trailing dot marks a label boundary (`q=alpha.` matches `alpha.parent.eth` but not `alphax.parent.eth`). With `match=contains`, one leading dot is also kept. Input the normalizer rejects returns 400.","required":false,"schema":{"type":"string"}},{"name":"match","in":"query","description":"`prefix` (default) matches the start of the child name. `contains` matches `q` anywhere in it. Other values return 400. Ignored without `q`.","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"`name` (default), `expires_at`, or `registered_at`. Timestamp sorts use the child's own timestamp. A child without it sorts first ascending and last descending. Ties break by name. Other values return 400.","required":false,"schema":{"type":"string"}},{"name":"order","in":"query","description":"`asc` (default) or `desc`.","required":false,"schema":{"type":"string"}},{"name":"include_expired","in":"query","description":"`true` (default) lists every child. `false` omits children whose `status` is `expired` or `released` at the chain head timestamp, with the same expiry and grace boundaries as `status`.","required":false,"schema":{"type":"boolean"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `counts`, which adds each row's `subname_count`. Other values return 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page; must be replayed with the same name, namespace, q, match, sort, include_expired, and order.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of direct subnames.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_Subname"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, an invalid name or q, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: the name is not indexed and has no indexed children.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: the namespace is not served.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/permissions":{"get":{"tags":["permissions"],"summary":"Current permission rows by name, registration, address, or ENSv2 registry","description":"At least one selector is required. Name selects only its current registration. Explicit registration and address reads are resource audits. Registry selects the current holders of the registry's root resource and cannot be combined with name or registration_id. Latest state only, with no as-of claim. ENSv1 registry, registrar, wrapper, and supported resolver authorities are combined with ENSv2 roles. Argument-scoped ENSv2 resolver grants are not represented. `meta.completeness=partial` with `unsupported_reason=permissions_partially_listed` lists in `meta.unlisted_permission_surfaces` the surfaces the rows do not enumerate: a RootRegistry or ETHRegistry read lists none and omits the three fields; another registry reports `ens_v2_registry_operators`; an ENSv2 registration `resolver_approvals` (plus `ens_v2_registry_operators` on a discovered registry); a NameWrapper registration `resolver_approvals` and `wrapper_parent_control`; any other registration `registrar_approvals` and `resolver_approvals`; an address-only read all four. A name or registration_id that selects no current registration keeps `unsupported_reason=permission_support_unknown`.","operationId":"get_permissions","parameters":[{"name":"name","in":"query","description":"Normalized ENS name selecting its current registration.","required":false,"schema":{"type":"string"}},{"name":"registration_id","in":"query","description":"Exact registration event id, including retained historical registrations.","required":false,"schema":{"type":"string"}},{"name":"address","in":"query","description":"Holder EVM address, combinable with the other selectors.","required":false,"schema":{"type":"string"}},{"name":"registry","in":"query","description":"ENSv2 registry as `<chain_id>:<address>` with a supported numeric chain ID. Selects the grants on its root resource.","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Configured namespace.","required":false,"schema":{"type":"string"}},{"name":"include","in":"query","description":"lineage adds bounded grant and inheritance summaries.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Next cursor, bound to all selectors and include.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Rejected. This collection reads latest state.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only latest is accepted.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"A latest-state permission page. Completeness remains partial.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_Permission"}}}},"400":{"description":"Invalid selectors or cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/registries/{chain_id}/{address}":{"get":{"tags":["registries"],"summary":"ENSv2 registry overview","description":"One ENSv2 registry contract: the earliest current name that points to it, the registry that emitted that pointer, its creation evidence (its first role assignment, `registry_created`, or its first pointer, `subregistry_pointer`, whichever is earlier), its current label count, and every current name that points to it (`referenced_by`, sorted by display name, with an exact `total_count`). A registry is known once an ENSv2 `SubregistryUpdated` pointed a name at it. Other addresses return 404. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_registry","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Registry address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `counts`, which adds `counts.roles` and `counts.events`. Other values return 400.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector. Any non-empty value returns 422.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served. `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `referenced_by.page.next_cursor` from a previous page of the same registry.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Referencing names per page from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}}],"responses":{"200":{"description":"The registry overview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_RegistryOverview"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a malformed chain ID or address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no ENSv2 subregistry pointer ever named this address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/registries/{chain_id}/{address}/labels":{"get":{"tags":["registries"],"summary":"ENSv2 registry labels","description":"The labels one ENSv2 registry currently holds: the served direct subnames of the registry's representative name whose latest registration the registry emitted, sorted by display name, in the subnames row shape. A registry that serves no name returns an empty page. Released labels are not listed. A reserved label has no owner. Unknown or repeated query parameters return 400. Empty or whitespace-only query values are treated as absent.","operationId":"get_registry_labels","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Registry address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `counts`, which adds each row's `subname_count` and `role_holder_count`. Other values return 400.","required":false,"schema":{"type":"string"}},{"name":"owner","in":"query","description":"Keep labels held by this address (any case). Cannot be combined with `exclude_owner`.","required":false,"schema":{"type":"string"}},{"name":"exclude_owner","in":"query","description":"Keep labels not held by this address, including ownerless labels. Cannot be combined with `owner`.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Not supported. Any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`. Any other value returns 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page with the same registry and owner filter.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}}],"responses":{"200":{"description":"One page of labels. `page.total_count` is the exact number of labels the owner filter admits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_RegistryLabel"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, `owner` with `exclude_owner`, a malformed chain ID or address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no ENSv2 subregistry pointer ever named this address.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/resolvers/{chain_id}/{address}":{"get":{"tags":["resolvers"],"summary":"Resolver overview","description":"One resolver contract with the names whose current resolver it is (`bound_names`), sorted by name, then namespace and namehash, in the name record shape without record values. A resolver that no current name uses returns 404 unless it is an ENSv2 record-ID resolver, which answers an empty `bound_names`. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_resolver","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Resolver address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector. Any non-empty value returns 422.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served. `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `bound_names.page.next_cursor` from a previous page of the same resolver.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Bound names per page from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"include","in":"query","description":"`total_count` fills `bound_names.page.total_count` with the number of bound names: exact up to 10,000, null above. Without it the count is null.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"The resolver overview.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ResolverOverview"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a malformed chain ID or address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no current name uses this resolver and it is not an ENSv2 record-ID resolver.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/resolvers/{chain_id}/{address}/links":{"get":{"tags":["resolvers"],"summary":"Resolver record links","description":"The record links of an ENSv2 record-ID resolver: one row per node whose latest `Linked` event names a non-zero record, sorted by numeric record ID, then namehash. The empty-name node's link is the resolver's default record (`default: true`). Rows carry the node's name when a served name has that namehash. Any other resolver a current name uses answers an empty page with `page.total_count: null`, `meta.completeness: unsupported` and `meta.unsupported_reason: record_links_not_applicable`. Unknown or repeated query parameters return 400.","operationId":"get_resolver_links","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Resolver address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector. Any non-empty value returns 422.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served. `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page of the same resolver.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}}],"responses":{"200":{"description":"One page of links. `page.total_count` is the exact number of current links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_ResolverLink"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a malformed chain ID or address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no current name uses this resolver and it is not an ENSv2 record-ID resolver.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/resolvers/{chain_id}/{address}/records":{"get":{"tags":["resolvers"],"summary":"One name's records at a resolver","description":"The indexed records of one name, read through this resolver. Records are indexed for a name's current resolver only: when the name's current resolver is this one the answer is the name records answer with `data.resolver` set to this resolver. A name whose current resolver is another one answers 422 `unsupported`. Query semantics of `keys`, `values` and `include` follow `GET /v2/names/{name}/records`. Unknown or repeated query parameters return 400.","operationId":"get_resolver_records","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Resolver address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Required ENSIP-15 name whose records are read.","required":true,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Namespace of the name; inferred from the name when omitted.","required":false,"schema":{"type":"string"}},{"name":"source","in":"query","description":"`indexed` (default) or `verified`. Both serve indexed state.","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector. Any non-empty value returns 422.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served. `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"keys","in":"query","description":"Comma-separated record keys (at most 200): `addr:<coin_type>`, `text:<key>`, `avatar`, or `contenthash`. Must be omitted with `values=false`.","required":false,"schema":{"type":"string"}},{"name":"values","in":"query","description":"`true` (default) or `false`. `false` returns `records: {}` and the inventory.","required":false,"schema":{"type":"boolean"}},{"name":"include","in":"query","description":"Comma-separated expansions; only `inventory`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"The name's records at this resolver.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_NameRecords"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a missing or invalid name, invalid `keys`, or an unknown `source`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no current name uses this resolver and it is not an ENSv2 record-ID resolver, or the name is not indexed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: the name's current resolver is another one, `at` set, `finality` is `safe`/`finalized`, or the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/resolvers/{chain_id}/{address}/roles":{"get":{"tags":["resolvers"],"summary":"Resolver role grants","description":"The current EAC grants of an ENSv2 resolver: one row per holder and resource whose latest role bitmap holds at least one resolver power, sorted by holder address, then resource. `registration_id` is the registration that stands for the resolver: the ENSv2 registration that set it as its resolver in the transaction that deployed the resolver proxy, else the earliest registered current name that selects it; `name` is that registration's current name. Grants of a resolver no registration stands for are left out and `meta.completeness` is `partial`. Any other resolver a current name uses answers an empty page with `page.total_count: null`, `meta.completeness: unsupported` and `meta.unsupported_reason: binding_enumeration_not_supported`. Unknown or repeated query parameters return 400.","operationId":"get_resolver_roles","parameters":[{"name":"chain_id","in":"path","description":"Numeric EVM chain ID. It must be the chain of a configured namespace.","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"address","in":"path","description":"Resolver address, `0x` + 40 hex (any case).","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Snapshot selector. Any non-empty value returns 422.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"`latest` (default) is served. `safe` and `finalized` return 422, other values 400.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page of the same resolver.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}}],"responses":{"200":{"description":"One page of grants. `page.total_count` is the exact number of listed grants.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_ResolverRole"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a malformed chain ID or address, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"`not_found`: no current name uses this resolver and it is not an ENSv2 record-ID resolver.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: the chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"`unsupported`: `at` set, `finality` is `safe`/`finalized`, or the chain is not served by this deployment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/search":{"get":{"tags":["search"],"summary":"Search names","description":"Current names whose stored normalized name starts with (`match=prefix`) or contains (`match=contains`) the normalized `q`, ordered by name bytes, then namespace and namehash. `q` is normalized as an ENSIP-15 name fragment. One trailing dot is kept as a label boundary. With `match=contains`, one leading dot is also kept. Names longer than 2000 bytes are never results. Rows omit `lapsed_registration` and `expires_window_index`. Unknown or repeated query parameters return 400. Empty query values are treated as absent.","operationId":"get_search","parameters":[{"name":"q","in":"query","description":"Required. Non-empty name search text.","required":true,"schema":{"type":"string"}},{"name":"match","in":"query","description":"`prefix` (default) or `contains`.","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Restrict to one configured namespace (`ens`, `basenames` by default). Default: all configured namespaces.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque `next_cursor` from a previous page; must be replayed with the same q, match, and namespace.","required":false,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Page size from 1 to 200, default 50.","required":false,"schema":{"type":"integer","format":"int64","maximum":200,"minimum":1}},{"name":"at","in":"query","description":"Not supported; any non-empty value returns 400.","required":false,"schema":{"type":"string"}},{"name":"finality","in":"query","description":"Only `latest`; any other value returns 400.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"One page of names. `page.total_count` is null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_Vec_SearchName"}}}},"400":{"description":"`invalid_input`: unknown, repeated, or malformed query parameters, a missing or invalid `q`, or an invalid cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"`stale`: a required chain has no complete indexed head, or its head is older than `MAX_AS_OF_AGE_SECONDS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v2/status":{"get":{"tags":["ops"],"summary":"Indexing status per chain","description":"Reports the indexed head of every chain in `chain_heads`. Accepts no query parameters.","operationId":"get_status","responses":{"200":{"description":"Indexing status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_StatusData"}}}},"400":{"description":"`invalid_input`: any query parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"`internal_error`: database failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"AddressName":{"type":"object","required":["name","display_name","namespace","namehash","status","relations","is_primary"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority"}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts"}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"grace_ends_at":{"type":["string","null"]},"is_primary":{"type":"boolean"},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration"}]},"manager":{"type":["string","null"]},"migrated_at":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"permission_resource_id":{"type":["string","null"],"description":"The `registration_id` that `GET /v1/permissions?registration_id=`\nreads; omitted on a row without a current registration."},"record_count":{"type":["integer","null"],"format":"int64","description":"`include=counts` or `include=role_summary`: stored record keys of a\nresolution-supported row that has not lapsed.","minimum":0},"registered_at":{"type":["string","null"]},"relations":{"type":"array","items":{"$ref":"#/components/schemas/Relation"}},"resolution":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AddressNameResolution","description":"On a `relation=resolves_to` row read for one decimal `coin_type`."}]},"resolutions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressNameResolution"},"description":"On a `relation=resolves_to` row read with `coin_type=evm`: every\nmatched stored record, ascending by coin type."},"role_summary":{"type":["array","null"],"items":{"$ref":"#/components/schemas/RoleSummary"}},"status":{"$ref":"#/components/schemas/LifecycleStatus"},"subname_count":{"type":["integer","null"],"format":"int64","description":"`include=counts`: direct subnames.","minimum":0}}},"AddressNameResolution":{"type":"object","description":"The coin type a `resolves_to` row matched and the record key that\nanswered.","required":["coin_type","record_key"],"properties":{"coin_type":{"type":"integer","format":"int64"},"record_key":{"type":"string"}}},"AsOf":{"type":"object","description":"Point-in-time snapshot of one indexed source.","required":["block_number","block_hash","timestamp"],"properties":{"block_hash":{"type":"string"},"block_number":{"type":"integer","format":"int64","minimum":0},"timestamp":{"type":"string","description":"Block timestamp, decimal Unix seconds."}}},"Authority":{"type":"string","description":"Registry generation that holds a name's current registration (bigname\n`Authority`). This index never proves the 2017 registry, so it serves\n`ens_v1` and `ens_v2` only.","enum":["ens_v0","ens_v1","ens_v2"]},"BoundNames":{"type":"object","description":"Nested page of the names whose current resolver is this resolver.","required":["data","page"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/NameRecord"}},"page":{"$ref":"#/components/schemas/Page"}}},"BulkItem":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/Profile"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["success"]}}}]},{"allOf":[{"$ref":"#/components/schemas/EnstateError"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["error"]}}}]}]},"BulkResponse":{"type":"object","required":["response_length","response"],"properties":{"response":{"type":"array","items":{"$ref":"#/components/schemas/BulkItem"}},"response_length":{"type":"integer","minimum":0}}},"ChainStatus":{"type":"object","required":["network_head_status","status"],"properties":{"finalized_block":{"type":["integer","null"],"format":"int64"},"indexed_block":{"type":["integer","null"],"format":"int64"},"ingestion_lag_blocks":{"type":["integer","null"],"format":"int64"},"ingestion_lag_seconds":{"type":["integer","null"],"format":"int64"},"lag_blocks":{"type":["integer","null"],"format":"int64"},"lag_seconds":{"type":["integer","null"],"format":"int64"},"latest_block":{"type":["integer","null"],"format":"int64"},"network_block":{"type":["integer","null"],"format":"int64"},"network_head_age_seconds":{"type":["integer","null"],"format":"int64"},"network_head_observed_at":{"type":["string","null"]},"network_head_status":{"type":"string"},"safe_block":{"type":["integer","null"],"format":"int64"},"status":{"$ref":"#/components/schemas/OpsStatus"}}},"Completeness":{"type":"string","description":"Completeness of the served data for a snapshot.","enum":["full","partial","unsupported"]},"ContractRef":{"type":"object","description":"A contract on a numeric chain.","required":["chain_id","address"],"properties":{"address":{"type":"string"},"chain_id":{"type":"integer","format":"int64","minimum":0}}},"EnsV1Facts":{"type":"object","description":"What only ENSv1 holds about a name (bigname `EnsV1Facts`). Present\nexactly while the name's authority is `ens_v1`.","properties":{"expires_at":{"type":["string","null"],"description":"The BaseRegistrar lease of a `<label>.eth` name; `null` on a subname."},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"The ENSv1 registry resolver; `null` when none is set."}]},"wrapper_expires_at":{"type":["string","null"],"description":"Stored NameWrapper expiry; omitted for an unwrapped name, `null` with\n`wrapper_expires_at_reason` when the wrapper set none."},"wrapper_expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason"}]},"wrapper_fuses":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperFuses","description":"Present exactly when `wrapper_state` is `wrapped`, `emancipated`, or\n`locked`."}]},"wrapper_state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperState","description":"Omitted for an unwrapped name whose registration lapsed."}]}}},"EnstateError":{"type":"object","description":"enstate error body: `{\"status\": 404, \"error\": \"Not Found\"}`.","required":["status","error"],"properties":{"error":{"type":"string"},"status":{"type":"integer","format":"int32","minimum":0}}},"Envelope_NameRecord":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","description":"Current state of one name.","required":["status","name","display_name","namespace","namehash","read_status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"chain_id":{"type":["integer","null"],"format":"int64","minimum":0},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts"}]},"expires_at":{"type":["string","null"],"description":"Finite expiry, or `null` for a classified absent expiry that\n`expires_at_reason` explains. Omitted when nothing is known."},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"failure_reason":{"type":["string","null"]},"grace_ends_at":{"type":["string","null"]},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration"}]},"manager":{"type":["string","null"]},"migrated_at":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"network":{"type":["string","null"]},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"primary_address":{"type":["string","null"]},"primary_name":{"type":["string","null"]},"read_status":{"$ref":"#/components/schemas/Status"},"record_count":{"type":["integer","null"],"format":"int64","description":"Known record-selector count; only with `include=counts` when\n`records` is served.","minimum":0},"records":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RecordGroups","description":"Present when the resolver's records are indexed and the\nregistration has not lapsed."}]},"registered_at":{"type":["string","null"]},"registration_id":{"type":["string","null"]},"resolution_unsupported_reason":{"type":["string","null"],"description":"Why the name's resolver records are not indexed (a custom resolver)."},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"Omitted once the registration lapsed."}]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the indexed head."},"subname_count":{"type":["integer","null"],"format":"int64","description":"Direct subname count; only with `include=counts`.","minimum":0},"subregistry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"Current ENSv2 subregistry pointer (`{chain_id, address}`)."}]},"token_id":{"type":["string","null"]},"unsupported_fields":{"type":"array","items":{"type":"string"}},"unsupported_reason":{"type":["string","null"]}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_NameRecords":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","required":["namespace","records"],"properties":{"inventory":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RecordInventory"}]},"namespace":{"type":"string"},"records":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RecordAnswer"},"propertyNames":{"type":"string"}},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"`null` once the registration lapsed or when no resolver is set."}]}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_PrimaryName":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","description":"Primary-name answers for one (address, coin_type, namespace) query.","required":["address","coin_type","namespace","answers"],"properties":{"address":{"type":"string"},"answers":{"type":"array","items":{"$ref":"#/components/schemas/PrimaryNameAnswer"}},"coin_type":{"type":"integer","format":"int64","minimum":0},"namespace":{"type":"string"},"verification":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PrimaryNameVerification"}]}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_RegistryOverview":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","required":["chain_id","address","created_basis","counts","referenced_by"],"properties":{"address":{"type":"string"},"chain_id":{"type":"integer","format":"int64","minimum":0},"counts":{"$ref":"#/components/schemas/RegistryCounts"},"created_at":{"type":["string","null"]},"created_basis":{"type":"string","description":"`registry_created` when the registry's first role assignment (made by\nits constructor) is the earliest evidence, else `subregistry_pointer`:\nthe earliest pointer to the registry."},"created_block_number":{"type":["integer","null"],"format":"int64","minimum":0},"created_transaction_hash":{"type":["string","null"]},"name":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RegistryName"}]},"parent_registry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"referenced_by":{"$ref":"#/components/schemas/ReferencedBy"}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_ResolverOverview":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","required":["chain_id","address","bound_names"],"properties":{"address":{"type":"string"},"bound_names":{"$ref":"#/components/schemas/BoundNames"},"chain_id":{"type":"integer","format":"int64","minimum":0}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_StatusData":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"object","required":["status","pending_invalidation_count","pending_invalidation_count_capped","dead_letter_count","chains"],"properties":{"chains":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ChainStatus"},"propertyNames":{"type":"string"}},"dead_letter_count":{"type":"integer","format":"int64"},"pending_invalidation_count":{"type":"integer","format":"int64"},"pending_invalidation_count_capped":{"type":"boolean"},"status":{"$ref":"#/components/schemas/OpsStatus"}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_AddressName":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["name","display_name","namespace","namehash","status","relations","is_primary"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority"}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts"}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"grace_ends_at":{"type":["string","null"]},"is_primary":{"type":"boolean"},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration"}]},"manager":{"type":["string","null"]},"migrated_at":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"permission_resource_id":{"type":["string","null"],"description":"The `registration_id` that `GET /v1/permissions?registration_id=`\nreads; omitted on a row without a current registration."},"record_count":{"type":["integer","null"],"format":"int64","description":"`include=counts` or `include=role_summary`: stored record keys of a\nresolution-supported row that has not lapsed.","minimum":0},"registered_at":{"type":["string","null"]},"relations":{"type":"array","items":{"$ref":"#/components/schemas/Relation"}},"resolution":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AddressNameResolution","description":"On a `relation=resolves_to` row read for one decimal `coin_type`."}]},"resolutions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressNameResolution"},"description":"On a `relation=resolves_to` row read with `coin_type=evm`: every\nmatched stored record, ascending by coin type."},"role_summary":{"type":["array","null"],"items":{"$ref":"#/components/schemas/RoleSummary"}},"status":{"$ref":"#/components/schemas/LifecycleStatus"},"subname_count":{"type":["integer","null"],"format":"int64","description":"`include=counts`: direct subnames.","minimum":0}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_HistoryEvent":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One history row. `kind` needs `include=raw`; `contract_address` and\n`data` need `include=data`.","required":["id","type","namespace","block_number","timestamp","transaction_hash","log_index"],"properties":{"block_number":{"type":"integer","format":"int64","minimum":0},"contract_address":{"type":["string","null"]},"data":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistoryEventData"}]},"id":{"type":"string","description":"Opaque 64-character row identity, the same on every history route."},"kind":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistoryEventKind"}]},"log_index":{"type":"integer","format":"int64","minimum":0},"name":{"type":["string","null"],"description":"Name history: the requested name. Other routes: the name the event's\nnode or registry entry is known by, when there is one."},"namespace":{"type":"string"},"registration_id":{"type":["string","null"]},"subject":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistorySubject","description":"`include=child_registrations` only: `child` on a direct child's\nregistration, `name` on every other row."}]},"timestamp":{"type":"string","description":"Block timestamp, decimal Unix seconds."},"transaction_hash":{"type":"string"},"type":{"$ref":"#/components/schemas/HistoryEventType"}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_LookupResult":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One batch lookup result. For name lookups `record`/`records` carry the\nanswers; for address lookups `inputs` echo the request and `page` paginates\nthe reverse results.","required":["input","kind","status"],"properties":{"failure_reason":{"type":["string","null"]},"input":{"$ref":"#/components/schemas/LookupResultInput"},"kind":{"$ref":"#/components/schemas/LookupKind"},"normalization":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NormalizationInfo"}]},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]},"record":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LookupRecord"}]},"records":{"type":["array","null"],"items":{"$ref":"#/components/schemas/LookupRecord"}},"status":{"$ref":"#/components/schemas/Status"},"unsupported_reason":{"type":["string","null"]}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_Permission":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","required":["address","grant_scope","powers","registration_id","authority_context"],"properties":{"address":{"type":"string"},"authority_context":{"type":"string"},"grant_scope":{"$ref":"#/components/schemas/GrantScope"},"lineage":{},"name":{"type":["string","null"]},"powers":{"type":"array","items":{"type":"string"}},"registration_id":{"type":"string"},"wrapper_fuses":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperFuses"}]},"wrapper_state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperState"}]}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_RegistryLabel":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Subname"},{"type":"object","properties":{"role_holder_count":{"type":["integer","null"],"format":"int64","description":"`include=counts` only: distinct accounts holding a nonzero role on\nthe label's registration resource.","minimum":0}}}],"description":"One label in the subnames row shape."}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_ResolverLink":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One node's current link to a record of an ENSv2 record-ID resolver.","required":["record_id","namehash","default","link_event"],"properties":{"default":{"type":"boolean","description":"True for the empty-name node, whose record answers every unlinked node."},"display_name":{"type":["string","null"]},"link_event":{"$ref":"#/components/schemas/EventPosition"},"name":{"type":["string","null"],"description":"Present when a served name has this namehash."},"namehash":{"type":"string"},"namespace":{"type":["string","null"]},"record_id":{"type":"string","description":"Decimal record ID."}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_ResolverRole":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One holder's current EAC grant on the resolver for one registration\nwhose name selects the resolver.","required":["address","registration_id","powers","eac_resource"],"properties":{"address":{"type":"string"},"eac_resource":{"type":"string","description":"Decimal EAC resource the grant targets; `0` is the resolver root."},"grant_event":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EventPosition","description":"Earliest assignment event of the grant that no later revocation undid."}]},"name":{"type":["string","null"]},"powers":{"type":"array","items":{"type":"string"},"description":"Resolver powers of the current role bitmap."},"registration_id":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_SearchName":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"Current name summary served by search and the expiry list (bigname\n`SearchName`), built through [`super::name_semantics`].","required":["name","display_name","namespace","namehash","status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts","description":"Present exactly while `authority` is `ens_v1`."}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"expires_window_index":{"type":["integer","null"],"description":"Zero-based input position of the matching `expires_window`; present\non every repeated-window `/names` row only.","minimum":0},"grace_ends_at":{"type":["string","null"]},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration","description":"The holder of a registration that lapsed by expiry; `/names` only."}]},"manager":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"registered_at":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the chain head timestamp."}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"Envelope_Vec_Subname":{"type":"object","description":"Standard JSON response wrapper: `data` plus optional `page` and required\n`meta`.","required":["data","meta"],"properties":{"data":{"type":"array","items":{"type":"object","description":"One direct child of a name (bigname `Subname`), built through\n[`super::name_semantics`].","required":["name","display_name","namespace","namehash","labelhash","status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts","description":"Present exactly while `authority` is `ens_v1`."}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"grace_ends_at":{"type":["string","null"]},"labelhash":{"type":"string","description":"keccak-256 of the child's own label."},"manager":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"registered_at":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the chain head timestamp."},"subname_count":{"type":["integer","null"],"format":"int64","description":"Direct subname count, only with `include=counts`.","minimum":0}}}},"meta":{"$ref":"#/components/schemas/Meta"},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]}}},"ErrorBody":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"One of `invalid_input` (400), `not_found` (404), `unsupported` (422),\n`stale` or `conflict` (409), `internal_error` (500)."},"details":{"type":"object"},"message":{"type":"string"}}},"ErrorEnvelope":{"type":"object","description":"Error response body for every non-2xx data route response.","required":["error"],"properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}}},"EventPosition":{"type":"object","description":"Where and when an event was emitted.","required":["block_number","timestamp","transaction_hash","log_index"],"properties":{"block_number":{"type":"integer","format":"int64","minimum":0},"log_index":{"type":"integer","format":"int64","minimum":0},"timestamp":{"type":"string","description":"Decimal Unix seconds."},"transaction_hash":{"type":"string"}}},"ExpiryReason":{"type":"string","description":"Why a registration serves `expires_at: null` (bigname `ExpiryReason`).","enum":["no_expiry","not_set","released"]},"GrantScope":{"type":"object","required":["kind","detail"],"properties":{"detail":{},"kind":{"type":"string"}}},"HealthDatabaseResponse":{"type":"object","required":["status","reachable","check"],"properties":{"check":{"type":"string"},"error":{"type":["string","null"]},"reachable":{"type":"boolean"},"status":{"type":"string"}}},"HealthIdentityResponse":{"type":"object","required":["version","build_sha","normalizer_version"],"properties":{"build_sha":{"type":"string"},"normalizer_version":{"type":"string"},"version":{"type":"string"}}},"HealthLoopResponse":{"type":"object","required":["status","max_age_seconds"],"properties":{"heartbeat_age_seconds":{"type":["integer","null"],"format":"int64"},"heartbeat_at":{"type":["string","null"]},"max_age_seconds":{"type":"integer","format":"int64"},"phase":{"type":["string","null"]},"started_at":{"type":["string","null"]},"status":{"type":"string"}}},"HealthLoopsResponse":{"type":"object","required":["phase_runner"],"properties":{"phase_runner":{"$ref":"#/components/schemas/HealthLoopResponse"}}},"HealthProcessResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}}},"HealthResponse":{"type":"object","required":["service","identity","status","api_status","process","database","loops"],"properties":{"api_status":{"type":"string"},"database":{"$ref":"#/components/schemas/HealthDatabaseResponse"},"identity":{"$ref":"#/components/schemas/HealthIdentityResponse"},"loops":{"$ref":"#/components/schemas/HealthLoopsResponse"},"process":{"$ref":"#/components/schemas/HealthProcessResponse"},"service":{"type":"string"},"status":{"type":"string"}}},"HeldThrough":{"type":"string","description":"Which ENSv1 contract held a lapsed `.eth` lease.","enum":["registrar","wrapper"]},"HistoryAction":{"type":"string","description":"Explicit action a history row represents.","enum":["registration_granted","registration_renewed","registration_released","expiry_changed","token_transferred","authority_changed","resolver_changed","record_changed","primary_name_recorded","permission_changed","subregistry_changed","name_wrapped","name_unwrapped","operator_approval_changed","registration_reserved","resolver_record_linked","token_regenerated","reverse_claimed","record_version_changed","registry_parent_changed","migration_applied"]},"HistoryEvent":{"type":"object","description":"One history row. `kind` needs `include=raw`; `contract_address` and\n`data` need `include=data`.","required":["id","type","namespace","block_number","timestamp","transaction_hash","log_index"],"properties":{"block_number":{"type":"integer","format":"int64","minimum":0},"contract_address":{"type":["string","null"]},"data":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistoryEventData"}]},"id":{"type":"string","description":"Opaque 64-character row identity, the same on every history route."},"kind":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistoryEventKind"}]},"log_index":{"type":"integer","format":"int64","minimum":0},"name":{"type":["string","null"],"description":"Name history: the requested name. Other routes: the name the event's\nnode or registry entry is known by, when there is one."},"namespace":{"type":"string"},"registration_id":{"type":["string","null"]},"subject":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HistorySubject","description":"`include=child_registrations` only: `child` on a direct child's\nregistration, `name` on every other row."}]},"timestamp":{"type":"string","description":"Block timestamp, decimal Unix seconds."},"transaction_hash":{"type":"string"},"type":{"$ref":"#/components/schemas/HistoryEventType"}}},"HistoryEventData":{"type":"object","description":"Friendly payload of one history row (`include=data`). Absent source\nvalues are omitted.","required":["action"],"properties":{"action":{"$ref":"#/components/schemas/HistoryAction"},"added_powers":{"type":["array","null"],"items":{"type":"string"}},"address":{"type":["string","null"]},"approved":{"type":["boolean","null"]},"base_cost":{"type":["string","null"]},"canonical_id":{"type":["string","null"]},"coin_type":{"type":["integer","null"],"format":"int64","minimum":0},"cost":{"type":["string","null"]},"dns_encoded_name":{"type":["string","null"]},"expires_at":{"type":["string","null"],"description":"Decimal Unix-second deadline, or null with `expires_at_reason`."},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason"}]},"from":{"type":["string","null"]},"fuses":{"type":["integer","null"],"format":"int32","minimum":0},"grant_scope":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GrantScope"}]},"key":{"type":["string","null"]},"label":{"type":["string","null"]},"name":{"type":["string","null"]},"name_status":{"type":["string","null"]},"new_role_bitmap":{"type":["string","null"]},"new_token_id":{"type":["string","null"]},"node":{"type":["string","null"]},"old_role_bitmap":{"type":["string","null"]},"old_token_id":{"type":["string","null"]},"operator":{"type":["string","null"]},"owner":{"type":["string","null"]},"parent":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"parent_cleared":{"type":["boolean","null"]},"powers":{"type":["array","null"],"items":{"type":"string"}},"premium":{"type":["string","null"]},"record_id":{"type":["string","null"]},"record_version":{"type":["string","null"]},"referrer":{"type":["string","null"]},"registrant":{"type":["string","null"]},"registry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"removed_powers":{"type":["array","null"],"items":{"type":"string"}},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"reverse_node":{"type":["string","null"]},"sender":{"type":["string","null"]},"subregistry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"to":{"type":["string","null"]},"token_id":{"type":["string","null"]},"value":{"type":["string","null"]}}},"HistoryEventKind":{"type":"string","description":"Raw product event kind, in the canonical vocabulary order.","enum":["RegistrationGranted","LabelRegistered","RegistrationRenewed","RegistrationReleased","ExpiryChanged","TokenControlTransferred","AuthorityTransferred","AuthorityEpochChanged","ResolverChanged","RecordChanged","RecordVersionChanged","ReverseChanged","PermissionChanged","RootPermissionChanged","PermissionScopeChanged","RolesChanged","EACRolesChanged","SubregistryChanged","MigrationApplied","AccountPermissionChanged","RegistrationReserved","ResolverRecordLinked","TokenRegenerated","RegistryCreated","ParentChanged","Upgraded"]},"HistoryEventType":{"type":"string","description":"Friendly event type, in the canonical vocabulary order.","enum":["registration","renewal","release","expiry","transfer","authority","resolver","record","primary_name","permission","subregistry","migration","reservation","token","contract"]},"HistorySubject":{"type":"string","description":"Whose row a name-history row is under `include=child_registrations`.","enum":["name","child"]},"LapsedRegistration":{"type":"object","description":"The holder a registration had when it lapsed (bigname\n`LapsedRegistration`).","required":["owner","release_kind"],"properties":{"held_through":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HeldThrough"}]},"owner":{"type":"string"},"release_kind":{"$ref":"#/components/schemas/ReleaseKind"}}},"LifecycleStatus":{"type":"string","description":"Bigname registration lifecycle at the publication timestamp\n(bigname's `RegistrationStatus` vocabulary).","enum":["active","expired","released","unregistered"]},"LookupAddressInput":{"type":"object","required":["address"],"properties":{"address":{"type":"string"},"coin_type":{"type":["integer","null"],"format":"int64","minimum":0},"cursor":{"type":["string","null"]},"id":{"type":["string","null"]},"page_size":{"type":["integer","null"],"format":"int64","minimum":0},"relation":{"type":["string","null"]}},"additionalProperties":false},"LookupInput":{"oneOf":[{"$ref":"#/components/schemas/LookupNameInput"},{"$ref":"#/components/schemas/LookupAddressInput"}]},"LookupKind":{"type":"string","enum":["name","address"]},"LookupNameInput":{"type":"object","required":["name"],"properties":{"id":{"type":["string","null"]},"name":{"type":"string"}},"additionalProperties":false},"LookupRecord":{"type":"object","description":"A name inside a lookup result (bigname `LookupRecord`). `profile=feed`\ncarries the identity, expiry, lifecycle, `subregistry`, chain, and\n`ens_v1` subset.","required":["name","display_name","namespace","namehash","status","read_status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority"}]},"chain_id":{"type":["integer","null"],"format":"int64","minimum":0},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts"}]},"expires_at":{"type":["string","null"],"description":"Finite expiry, or `null` for a classified absent expiry that\n`expires_at_reason` explains. Omitted when nothing is known."},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"failure_reason":{"type":["string","null"]},"grace_ends_at":{"type":["string","null"]},"is_primary":{"type":["boolean","null"],"description":"Reverse rows only."},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration"}]},"manager":{"type":["string","null"]},"migrated_at":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"network":{"type":["string","null"]},"owner":{"type":["string","null"]},"primary_address":{"type":["string","null"]},"primary_name":{"type":["string","null"]},"read_status":{"$ref":"#/components/schemas/Status"},"records":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RecordGroups","description":"`profile=detail` only, when the resolver's records are indexed and\nthe registration has not lapsed."}]},"registered_at":{"type":["string","null"]},"registration_id":{"type":["string","null"]},"relations":{"type":"array","items":{"$ref":"#/components/schemas/Relation"},"description":"Reverse rows only; omitted when empty."},"resolution_unsupported_reason":{"type":["string","null"]},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver"}]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the indexed head."},"subregistry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver"}]},"token_id":{"type":["string","null"]},"unsupported_fields":{"type":"array","items":{"type":"string"}},"unsupported_reason":{"type":["string","null"]}}},"LookupRequest":{"type":"object","description":"A batch lookup request: either forward (name → records) or reverse\n(address → names) inputs, or a mix.","required":["inputs"],"properties":{"inputs":{"type":"array","items":{"$ref":"#/components/schemas/LookupInput"}},"namespace":{"type":["string","null"]},"normalized_only":{"type":["boolean","null"]},"profile":{"type":["string","null"]}},"additionalProperties":false},"LookupResult":{"type":"object","description":"One batch lookup result. For name lookups `record`/`records` carry the\nanswers; for address lookups `inputs` echo the request and `page` paginates\nthe reverse results.","required":["input","kind","status"],"properties":{"failure_reason":{"type":["string","null"]},"input":{"$ref":"#/components/schemas/LookupResultInput"},"kind":{"$ref":"#/components/schemas/LookupKind"},"normalization":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NormalizationInfo"}]},"page":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Page"}]},"record":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LookupRecord"}]},"records":{"type":["array","null"],"items":{"$ref":"#/components/schemas/LookupRecord"}},"status":{"$ref":"#/components/schemas/Status"},"unsupported_reason":{"type":["string","null"]}}},"LookupResultInput":{"type":"object","description":"Echo of the query that produced a [`LookupResult`].","properties":{"address":{"type":["string","null"]},"coin_type":{"type":["integer","null"],"format":"int64","minimum":0},"cursor":{"type":["string","null"]},"id":{"type":["string","null"]},"name":{"type":["string","null"]},"page_size":{"type":["integer","null"],"format":"int64","minimum":0},"relation":{"type":["string","null"]}}},"Meta":{"type":"object","description":"Read snapshot metadata. `as_of` is keyed by chain (numeric chain id string)\nor other named scope.","properties":{"as_of":{"type":["object","null"],"additionalProperties":{"$ref":"#/components/schemas/AsOf"},"propertyNames":{"type":"string"}},"as_of_token":{"type":["string","null"]},"completeness":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Completeness"}]},"source":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Source"}]},"unlisted_permission_surfaces":{"type":["array","null"],"items":{"type":"string"},"description":"Permission reads: the sorted surfaces whose holders the rows do not\nlist (`ens_v2_registry_operators`, `registrar_approvals`,\n`resolver_approvals`, `wrapper_parent_control`)."},"unsupported_fields":{"type":["array","null"],"items":{"type":"string"}},"unsupported_reason":{"type":["string","null"]}}},"NameRecord":{"type":"object","description":"Current state of one name.","required":["status","name","display_name","namespace","namehash","read_status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"chain_id":{"type":["integer","null"],"format":"int64","minimum":0},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts"}]},"expires_at":{"type":["string","null"],"description":"Finite expiry, or `null` for a classified absent expiry that\n`expires_at_reason` explains. Omitted when nothing is known."},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"failure_reason":{"type":["string","null"]},"grace_ends_at":{"type":["string","null"]},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration"}]},"manager":{"type":["string","null"]},"migrated_at":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"network":{"type":["string","null"]},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"primary_address":{"type":["string","null"]},"primary_name":{"type":["string","null"]},"read_status":{"$ref":"#/components/schemas/Status"},"record_count":{"type":["integer","null"],"format":"int64","description":"Known record-selector count; only with `include=counts` when\n`records` is served.","minimum":0},"records":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RecordGroups","description":"Present when the resolver's records are indexed and the\nregistration has not lapsed."}]},"registered_at":{"type":["string","null"]},"registration_id":{"type":["string","null"]},"resolution_unsupported_reason":{"type":["string","null"],"description":"Why the name's resolver records are not indexed (a custom resolver)."},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"Omitted once the registration lapsed."}]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the indexed head."},"subname_count":{"type":["integer","null"],"format":"int64","description":"Direct subname count; only with `include=counts`.","minimum":0},"subregistry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"Current ENSv2 subregistry pointer (`{chain_id, address}`)."}]},"token_id":{"type":["string","null"]},"unsupported_fields":{"type":"array","items":{"type":"string"}},"unsupported_reason":{"type":["string","null"]}}},"NameRecords":{"type":"object","required":["namespace","records"],"properties":{"inventory":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RecordInventory"}]},"namespace":{"type":"string"},"records":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/RecordAnswer"},"propertyNames":{"type":"string"}},"resolver":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Resolver","description":"`null` once the registration lapsed or when no resolver is set."}]}}},"NormalizationInfo":{"type":"object","description":"Report of ENSIP-15 normalization applied to a requested name.","required":["changed","input_name","reason"],"properties":{"changed":{"type":"boolean"},"input_name":{"type":"string"},"reason":{"type":"string"}}},"OpsStatus":{"type":"string","description":"Overall service/chain readiness.","enum":["ready","degraded","stale"]},"Page":{"type":"object","description":"Cursor-based pagination state.","required":["page_size","has_more"],"properties":{"cursor":{"type":["string","null"]},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]},"page_size":{"type":"integer","format":"int64","minimum":0},"total_count":{"type":["integer","null"],"format":"int64","minimum":0}}},"Permission":{"type":"object","required":["address","grant_scope","powers","registration_id","authority_context"],"properties":{"address":{"type":"string"},"authority_context":{"type":"string"},"grant_scope":{"$ref":"#/components/schemas/GrantScope"},"lineage":{},"name":{"type":["string","null"]},"powers":{"type":"array","items":{"type":"string"}},"registration_id":{"type":"string"},"wrapper_fuses":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperFuses"}]},"wrapper_state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WrapperState"}]}}},"PrimaryName":{"type":"object","description":"Primary-name answers for one (address, coin_type, namespace) query.","required":["address","coin_type","namespace","answers"],"properties":{"address":{"type":"string"},"answers":{"type":"array","items":{"$ref":"#/components/schemas/PrimaryNameAnswer"}},"coin_type":{"type":"integer","format":"int64","minimum":0},"namespace":{"type":"string"},"verification":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PrimaryNameVerification"}]}}},"PrimaryNameAnswer":{"type":"object","description":"One source's answer within a [`PrimaryName`] lookup.","required":["source","status"],"properties":{"failure_reason":{"type":["string","null"]},"name":{"type":["string","null"]},"raw_claim_name":{"type":["string","null"]},"source":{"$ref":"#/components/schemas/Source"},"status":{"$ref":"#/components/schemas/Status"},"unsupported_reason":{"type":["string","null"]}}},"PrimaryNameVerification":{"type":"object","description":"Live verbatim-claim check accompanying indexed primary-name answers.","required":["status"],"properties":{"failure_reason":{"type":["string","null"]},"name":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/Status"},"unsupported_reason":{"type":["string","null"]}}},"Profile":{"type":"object","description":"An enstate profile. Optional fields are omitted when empty.","required":["name","display","records","chains","fresh","resolver","errors"],"properties":{"address":{"type":["string","null"],"description":"EIP-55 ETH address (coin type 60)."},"avatar":{"type":["string","null"]},"chains":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"contenthash":{"type":["string","null"]},"display":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"fresh":{"type":"integer","format":"int64","description":"Timestamp of the indexed head block, in milliseconds."},"header":{"type":["string","null"]},"name":{"type":"string"},"records":{"type":"object","description":"Every indexed text record of the name.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"resolver":{"type":"string","description":"EIP-55 resolver address."}}},"RecordAnswer":{"type":"object","required":["status"],"properties":{"failure_reason":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/Status"},"unsupported_reason":{"type":["string","null"]},"value":{"type":["string","null"]}}},"RecordGroups":{"type":"object","description":"Resolver keys and known values of one name, grouped (bigname\n`RecordGroups`). A seen key absent from its value map has an unknown\nvalue.","required":["seen_addresses","addresses","seen_texts","texts","abi_unsupported_reason","abis","seen_singletons"],"properties":{"abi_unsupported_reason":{"type":"string","description":"ABI records are not indexed, so `seen_abis` is absent, `abis` is\nalways empty, and `abi_unsupported_reason` explains it."},"abis":{"type":"object","additionalProperties":{"type":["string","null"]},"propertyNames":{"type":"string"}},"addresses":{"type":"object","additionalProperties":{"type":["string","null"]},"propertyNames":{"type":"string"}},"contenthash":{"type":["string","null"],"description":"The stored contenthash; absent when none is stored (a cleared\nrecord and a never-set one are indistinguishable in the index)."},"seen_addresses":{"type":"array","items":{"type":"string"},"description":"Canonical decimal coin types with a stored address record, ascending."},"seen_singletons":{"type":"array","items":{"$ref":"#/components/schemas/RecordSingleton"}},"seen_texts":{"type":"array","items":{"type":"string"}},"texts":{"type":"object","additionalProperties":{"type":["string","null"]},"propertyNames":{"type":"string"}}}},"RecordInventory":{"type":"object","required":["known_keys","unset_keys","unsupported_keys"],"properties":{"abi_content_types":{"type":["array","null"],"items":{"type":"string"},"description":"Known decimal ABI content types, or `null` with\n`abi_unsupported_reason` when they cannot be listed."},"abi_unsupported_reason":{"type":["string","null"]},"known_keys":{"type":"array","items":{"type":"string"}},"unset_keys":{"type":"array","items":{"type":"string"}},"unsupported_keys":{"type":"array","items":{"type":"string"}}}},"RecordSingleton":{"type":"string","description":"A singleton resolver record observed for a name.","enum":["contenthash"]},"ReferencedBy":{"type":"object","description":"Nested page of the names whose current subregistry pointer targets the\nregistry.","required":["data","page"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RegistryName"}},"page":{"$ref":"#/components/schemas/Page"}}},"RegistryCounts":{"type":"object","properties":{"events":{"type":["integer","null"],"format":"int64","description":"`include=counts` only: events the registry emitted that the event\nfeed serves, exact up to 10,000 and null above.","minimum":0},"labels":{"type":["integer","null"],"format":"int64","description":"Current label count of the registry's representative name: exact up\nto 10,000 and null above.","minimum":0},"roles":{"type":["integer","null"],"format":"int64","description":"`include=counts` only: current (resource, account) role assignments\nwith a nonzero role bitmap the registry declares, not distinct holders.","minimum":0}}},"RegistryLabel":{"allOf":[{"$ref":"#/components/schemas/Subname"},{"type":"object","properties":{"role_holder_count":{"type":["integer","null"],"format":"int64","description":"`include=counts` only: distinct accounts holding a nonzero role on\nthe label's registration resource.","minimum":0}}}],"description":"One label in the subnames row shape."},"RegistryName":{"type":"object","required":["name","display_name","namespace","namehash"],"properties":{"display_name":{"type":"string"},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"}}},"RegistryOverview":{"type":"object","required":["chain_id","address","created_basis","counts","referenced_by"],"properties":{"address":{"type":"string"},"chain_id":{"type":"integer","format":"int64","minimum":0},"counts":{"$ref":"#/components/schemas/RegistryCounts"},"created_at":{"type":["string","null"]},"created_basis":{"type":"string","description":"`registry_created` when the registry's first role assignment (made by\nits constructor) is the earliest evidence, else `subregistry_pointer`:\nthe earliest pointer to the registry."},"created_block_number":{"type":["integer","null"],"format":"int64","minimum":0},"created_transaction_hash":{"type":["string","null"]},"name":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RegistryName"}]},"parent_registry":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContractRef"}]},"referenced_by":{"$ref":"#/components/schemas/ReferencedBy"}}},"Relation":{"type":"string","description":"Role an address holds over a name.","enum":["owner","manager","role_holder","resolves_to","former_owner"]},"ReleaseKind":{"type":"string","description":"Why a registration lapsed. Expiry is the only cause the index proves.","enum":["expired"]},"Resolver":{"type":"object","description":"The resolver bound to a name, on a specific chain.","required":["chain_id","address"],"properties":{"address":{"type":"string"},"chain_id":{"type":"integer","format":"int64","minimum":0}}},"ResolverLink":{"type":"object","description":"One node's current link to a record of an ENSv2 record-ID resolver.","required":["record_id","namehash","default","link_event"],"properties":{"default":{"type":"boolean","description":"True for the empty-name node, whose record answers every unlinked node."},"display_name":{"type":["string","null"]},"link_event":{"$ref":"#/components/schemas/EventPosition"},"name":{"type":["string","null"],"description":"Present when a served name has this namehash."},"namehash":{"type":"string"},"namespace":{"type":["string","null"]},"record_id":{"type":"string","description":"Decimal record ID."}}},"ResolverOverview":{"type":"object","required":["chain_id","address","bound_names"],"properties":{"address":{"type":"string"},"bound_names":{"$ref":"#/components/schemas/BoundNames"},"chain_id":{"type":"integer","format":"int64","minimum":0}}},"ResolverRole":{"type":"object","description":"One holder's current EAC grant on the resolver for one registration\nwhose name selects the resolver.","required":["address","registration_id","powers","eac_resource"],"properties":{"address":{"type":"string"},"eac_resource":{"type":"string","description":"Decimal EAC resource the grant targets; `0` is the resolver root."},"grant_event":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EventPosition","description":"Earliest assignment event of the grant that no later revocation undid."}]},"name":{"type":["string","null"]},"powers":{"type":"array","items":{"type":"string"},"description":"Resolver powers of the current role bitmap."},"registration_id":{"type":"string"}}},"RoleGrant":{"type":"object","required":["grant_scope","powers"],"properties":{"grant_scope":{"$ref":"#/components/schemas/GrantScope"},"powers":{"type":"array","items":{"type":"string"}}}},"RoleSummary":{"type":"object","required":["address","grants"],"properties":{"address":{"type":"string"},"grants":{"type":"array","items":{"$ref":"#/components/schemas/RoleGrant"}}}},"SearchName":{"type":"object","description":"Current name summary served by search and the expiry list (bigname\n`SearchName`), built through [`super::name_semantics`].","required":["name","display_name","namespace","namehash","status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts","description":"Present exactly while `authority` is `ens_v1`."}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"expires_window_index":{"type":["integer","null"],"description":"Zero-based input position of the matching `expires_window`; present\non every repeated-window `/names` row only.","minimum":0},"grace_ends_at":{"type":["string","null"]},"lapsed_registration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LapsedRegistration","description":"The holder of a registration that lapsed by expiry; `/names` only."}]},"manager":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"registered_at":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the chain head timestamp."}}},"Source":{"type":"string","description":"Provenance of a read: indexed chain data or live provider verification.","enum":["indexed","verified"]},"Status":{"type":"string","description":"Outcome of a single-name lookup or record read.","enum":["ok","not_found","invalid_name","mismatch","unsupported","stale","failed"]},"StatusData":{"type":"object","required":["status","pending_invalidation_count","pending_invalidation_count_capped","dead_letter_count","chains"],"properties":{"chains":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ChainStatus"},"propertyNames":{"type":"string"}},"dead_letter_count":{"type":"integer","format":"int64"},"pending_invalidation_count":{"type":"integer","format":"int64"},"pending_invalidation_count_capped":{"type":"boolean"},"status":{"$ref":"#/components/schemas/OpsStatus"}}},"Subname":{"type":"object","description":"One direct child of a name (bigname `Subname`), built through\n[`super::name_semantics`].","required":["name","display_name","namespace","namehash","labelhash","status"],"properties":{"authority":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Authority","description":"Omitted for Basenames."}]},"created_at":{"type":["string","null"]},"display_name":{"type":"string"},"ens_v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EnsV1Facts","description":"Present exactly while `authority` is `ens_v1`."}]},"expires_at":{"type":["string","null"]},"expires_at_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExpiryReason","description":"Present exactly when `expires_at` is `null`."}]},"grace_ends_at":{"type":["string","null"]},"labelhash":{"type":"string","description":"keccak-256 of the child's own label."},"manager":{"type":["string","null"]},"name":{"type":"string"},"namehash":{"type":"string"},"namespace":{"type":"string"},"owner":{"type":["string","null"],"description":"Token holder; omitted once the registration lapsed."},"registered_at":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/LifecycleStatus","description":"Registration lifecycle at the chain head timestamp."},"subname_count":{"type":["integer","null"],"format":"int64","description":"Direct subname count, only with `include=counts`.","minimum":0}}},"WrapperFuses":{"type":"object","description":"The expiry-effective NameWrapper fuse word (bigname `WrapperFuses`).","required":["fuses","cannot_unwrap","cannot_burn_fuses","cannot_transfer","cannot_set_resolver","cannot_set_ttl","cannot_create_subdomain","cannot_approve","parent_cannot_control","is_dot_eth","can_extend_expiry"],"properties":{"can_extend_expiry":{"type":"boolean"},"cannot_approve":{"type":"boolean"},"cannot_burn_fuses":{"type":"boolean"},"cannot_create_subdomain":{"type":"boolean"},"cannot_set_resolver":{"type":"boolean"},"cannot_set_ttl":{"type":"boolean"},"cannot_transfer":{"type":"boolean"},"cannot_unwrap":{"type":"boolean"},"fuses":{"type":"integer","format":"int32","minimum":0},"is_dot_eth":{"type":"boolean"},"parent_cannot_control":{"type":"boolean"}}},"WrapperState":{"type":"string","description":"ENSv1 NameWrapper state of a name (bigname `ens_v1.wrapper_state`).","enum":["wrapped","emancipated","locked","lapsed","unwrapped","unknown"]}}},"tags":[{"name":"ops"},{"name":"lookup"},{"name":"names"},{"name":"search"},{"name":"addresses"},{"name":"permissions"},{"name":"resolvers"},{"name":"registries"},{"name":"events","description":"Chain-ordered event history"},{"name":"enstate","description":"enstate-compatible profile routes"}]}