<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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (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;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 site type. Can be SITE or INET_DOMAIN (domain name).
  },
}</pre>
</div>

</body></html>