<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="siteVerification_v1.html">Google Site Verification API</a> . <a href="siteVerification_v1.webResource.html">webResource</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="#delete">delete(id)</a></code></p>
<p class="firstline">Relinquish ownership of a website or domain.</p>
<p class="toc_element">
  <code><a href="#get">get(id)</a></code></p>
<p class="firstline">Get the most current data for a website or domain.</p>
<p class="toc_element">
  <code><a href="#getToken">getToken(body=None)</a></code></p>
<p class="firstline">Get a verification token for placing on a website or domain.</p>
<p class="toc_element">
  <code><a href="#insert">insert(verificationMethod, body=None)</a></code></p>
<p class="firstline">Attempt verification of a website or domain.</p>
<p class="toc_element">
  <code><a href="#list">list()</a></code></p>
<p class="firstline">Get the list of your verified websites and domains.</p>
<p class="toc_element">
  <code><a href="#patch">patch(id, body=None)</a></code></p>
<p class="firstline">Modify the list of owners for your website or domain. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(id, body=None)</a></code></p>
<p class="firstline">Modify the list of owners for your website or domain.</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="delete">delete(id)</code>
  <pre>Relinquish ownership of a website or domain.

Args:
  id: string, The id of a verified site or domain. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(id)</code>
  <pre>Get the most current data for a website or domain.

Args:
  id: string, The id of a verified site or domain. (required)

Returns:
  An object of the form:

    {
    &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
    &quot;owners&quot;: [ # The email addresses of all verified owners.
      &quot;A String&quot;,
    ],
    &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
      &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
      &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="getToken">getToken(body=None)</code>
  <pre>Get a verification token for placing on a website or domain.

Args:
  body: object, The request body.
    The object takes the form of:

{
    &quot;site&quot;: { # The site for which a verification token will be generated.
      &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
      &quot;type&quot;: &quot;A String&quot;, # The type of resource to be verified. Can be SITE or INET_DOMAIN (domain name).
    },
    &quot;verificationMethod&quot;: &quot;A String&quot;, # The verification method that will be used to verify this site. For sites, &#x27;FILE&#x27; or &#x27;META&#x27; methods may be used. For domains, only &#x27;DNS&#x27; may be used.
  }


Returns:
  An object of the form:

    {
    &quot;method&quot;: &quot;A String&quot;, # The verification method to use in conjunction with this token. For FILE, the token should be placed in the top-level directory of the site, stored inside a file of the same name. For META, the token should be placed in the HEAD tag of the default page that is loaded for the site. For DNS, the token should be placed in a TXT record of the domain.
    &quot;token&quot;: &quot;A String&quot;, # The verification token. The token must be placed appropriately in order for verification to succeed.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(verificationMethod, body=None)</code>
  <pre>Attempt verification of a website or domain.

Args:
  verificationMethod: string, The method to use for verifying a site or domain. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
  &quot;owners&quot;: [ # The email addresses of all verified owners.
    &quot;A String&quot;,
  ],
  &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
    &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
    &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
  },
}


Returns:
  An object of the form:

    {
    &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
    &quot;owners&quot;: [ # The email addresses of all verified owners.
      &quot;A String&quot;,
    ],
    &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
      &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
      &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list()</code>
  <pre>Get the list of your verified websites and domains.

Args:

Returns:
  An object of the form:

    {
    &quot;items&quot;: [ # The list of sites that are owned by the authenticated user.
      {
        &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
        &quot;owners&quot;: [ # The email addresses of all verified owners.
          &quot;A String&quot;,
        ],
        &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
          &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
          &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(id, body=None)</code>
  <pre>Modify the list of owners for your website or domain. This method supports patch semantics.

Args:
  id: string, The id of a verified site or domain. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
  &quot;owners&quot;: [ # The email addresses of all verified owners.
    &quot;A String&quot;,
  ],
  &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
    &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
    &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
  },
}


Returns:
  An object of the form:

    {
    &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
    &quot;owners&quot;: [ # The email addresses of all verified owners.
      &quot;A String&quot;,
    ],
    &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
      &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
      &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(id, body=None)</code>
  <pre>Modify the list of owners for your website or domain.

Args:
  id: string, The id of a verified site or domain. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
  &quot;owners&quot;: [ # The email addresses of all verified owners.
    &quot;A String&quot;,
  ],
  &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
    &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
    &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
  },
}


Returns:
  An object of the form:

    {
    &quot;id&quot;: &quot;A String&quot;, # The string used to identify this site. This value should be used in the &quot;id&quot; portion of the REST URL for the Get, Update, and Delete operations.
    &quot;owners&quot;: [ # The email addresses of all verified owners.
      &quot;A String&quot;,
    ],
    &quot;site&quot;: { # The address and type of a site that is verified or will be verified.
      &quot;type&quot;: &quot;A String&quot;, # The site type. Can be SITE or INET_DOMAIN (domain name).
      &quot;identifier&quot;: &quot;A String&quot;, # The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name.
    },
  }</pre>
</div>

</body></html>