<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.autnum.html">autnum</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(autnumId, 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(autnumId, 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:
  autnumId: 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>