<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.ip.html">ip</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(ipId, ipId1, x__xgafv=None)</a></code></p>
<p class="firstline">The RDAP API recognizes this command from the RDAP specification but does not support it. The response is a formatted 501 error.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(ipId, ipId1, 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:
  ipId: string, A parameter (required)
  ipId1: 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;jsonResponse&quot;: { # Message that represents an arbitrary HTTP body. It should only be used for 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. # HTTP response with content type set to &quot;application/json+rdap&quot;.
      &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;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;errorCode&quot;: 42, # Error HTTP code. Example: &quot;501&quot;.
    &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;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;hreflang&quot;: &quot;A String&quot;, # Language code of a link. Example: &quot;en&quot;.
            &quot;href&quot;: &quot;A String&quot;, # Target URL of a link. Example: &quot;http://example.com/previous&quot;.
            &quot;rel&quot;: &quot;A String&quot;, # Relation type of a link. Example: &quot;previous&quot;.
            &quot;type&quot;: &quot;A String&quot;, # Content type of the link. Example: &quot;application/json&quot;.
            &quot;title&quot;: &quot;A String&quot;, # Title of this link. Example: &quot;title&quot;.
            &quot;value&quot;: &quot;A String&quot;, # URL giving context for the link. Example: &quot;http://example.com/current&quot;.
            &quot;media&quot;: &quot;A String&quot;, # Media type of the link destination. Example: &quot;screen&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;description&quot;: [ # Error description.
      &quot;A String&quot;,
    ],
    &quot;rdapConformance&quot;: [ # RDAP conformance level.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

</body></html>