<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;title&quot;: &quot;A String&quot;, # Error title.
    &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;title&quot;: &quot;A String&quot;, # Title of a notice. Example: &quot;Terms of Service&quot;.
        &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;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;title&quot;: &quot;A String&quot;, # Title of this link. Example: &quot;title&quot;.
            &quot;href&quot;: &quot;A String&quot;, # Target URL of a link. Example: &quot;http://example.com/previous&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;media&quot;: &quot;A String&quot;, # Media type of the link destination. Example: &quot;screen&quot;.
            &quot;value&quot;: &quot;A String&quot;, # URL giving context for the link. Example: &quot;http://example.com/current&quot;.
            &quot;rel&quot;: &quot;A String&quot;, # Relation type of a link. Example: &quot;previous&quot;.
          },
        ],
      },
    ],
    &quot;description&quot;: [ # Error description.
      &quot;A String&quot;,
    ],
    &quot;rdapConformance&quot;: [ # RDAP conformance level.
      &quot;A String&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;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;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;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
      &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;.
  }</pre>
</div>

</body></html>