<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="domainsrdap_v1.html">Domains RDAP API</a> . <a href="domainsrdap_v1.nameserver.html">nameserver</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(nameserverId, x__xgafv=None)</a></code></p>
<p class="firstline">The RDAP API recognizes this command from the RDAP specification but</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(nameserverId, x__xgafv=None)</code>
  <pre>The RDAP API recognizes this command from the RDAP specification but
does not support it. The response is a formatted 501 error.

Args:
  nameserverId: string, A parameter (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to a general RDAP query.
    &quot;notices&quot;: [ # Notices applying to this response.
      { # Notices object defined in [section 4.3 of RFC
          # 7483](https://tools.ietf.org/html/rfc7483#section-4.3).
        &quot;description&quot;: [ # Description of the notice.
          &quot;A String&quot;,
        ],
        &quot;type&quot;: &quot;A String&quot;, # Type values defined in [section 10.2.1 of RFC
            # 7483](https://tools.ietf.org/html/rfc7483#section-10.2.1) specific to a
            # whole response: &quot;result set truncated due to authorization&quot;, &quot;result set
            # truncated due to excessive load&quot;, &quot;result set truncated due to
            # unexplainable reasons&quot;.
        &quot;title&quot;: &quot;A String&quot;, # Title of a notice. Example: &quot;Terms of Service&quot;.
        &quot;links&quot;: [ # Link to a document containing more information.
          { # Links object defined in [section 4.2 of RFC
              # 7483](https://tools.ietf.org/html/rfc7483#section-4.2).
            &quot;media&quot;: &quot;A String&quot;, # Media type of the link destination. Example: &quot;screen&quot;.
            &quot;href&quot;: &quot;A String&quot;, # Target URL of a link. Example: &quot;http://example.com/previous&quot;.
            &quot;value&quot;: &quot;A String&quot;, # URL giving context for the link. Example: &quot;http://example.com/current&quot;.
            &quot;title&quot;: &quot;A String&quot;, # Title of this link. Example: &quot;title&quot;.
            &quot;hreflang&quot;: &quot;A String&quot;, # Language code of a link. Example: &quot;en&quot;.
            &quot;type&quot;: &quot;A String&quot;, # Content type of the link. Example: &quot;application/json&quot;.
            &quot;rel&quot;: &quot;A String&quot;, # Relation type of a link. Example: &quot;previous&quot;.
          },
        ],
      },
    ],
    &quot;jsonResponse&quot;: { # Message that represents an arbitrary HTTP body. It should only be used for # HTTP response with content type set to &quot;application/json+rdap&quot;.
        # payload formats that can&#x27;t be represented as JSON, such as raw binary or
        # an HTML page.
        #
        #
        # This message can be used both in streaming and non-streaming API methods in
        # the request as well as the response.
        #
        # It can be used as a top-level request field, which is convenient if one
        # wants to extract parameters from either the URL or HTTP template into the
        # request fields and also want access to the raw HTTP body.
        #
        # Example:
        #
        #     message GetResourceRequest {
        #       // A unique request id.
        #       string request_id = 1;
        #
        #       // The raw HTTP body is bound to this field.
        #       google.api.HttpBody http_body = 2;
        #     }
        #
        #     service ResourceService {
        #       rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);
        #       rpc UpdateResource(google.api.HttpBody) returns
        #       (google.protobuf.Empty);
        #     }
        #
        # Example with streaming methods:
        #
        #     service CaldavService {
        #       rpc GetCalendar(stream google.api.HttpBody)
        #         returns (stream google.api.HttpBody);
        #       rpc UpdateCalendar(stream google.api.HttpBody)
        #         returns (stream google.api.HttpBody);
        #     }
        #
        # Use of this type only changes how the request and response bodies are
        # handled, all other features will continue to work unchanged.
      &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
      &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response
          # for streaming APIs.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
    },
    &quot;errorCode&quot;: 42, # Error HTTP code. Example: &quot;501&quot;.
    &quot;lang&quot;: &quot;A String&quot;, # Error language code. Error response info fields are defined in [section 6
        # of RFC 7483](https://tools.ietf.org/html/rfc7483#section-6).
    &quot;description&quot;: [ # Error description.
      &quot;A String&quot;,
    ],
    &quot;title&quot;: &quot;A String&quot;, # Error title.
    &quot;rdapConformance&quot;: [ # RDAP conformance level.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

</body></html>