<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="searchconsole_v1.html">Google Search Console API</a> . <a href="searchconsole_v1.sitemaps.html">sitemaps</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(siteUrl, feedpath, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a sitemap from this site.</p>
<p class="toc_element">
  <code><a href="#get">get(siteUrl, feedpath, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves information about a specific sitemap.</p>
<p class="toc_element">
  <code><a href="#list">list(siteUrl, sitemapIndex=None, x__xgafv=None)</a></code></p>
<p class="firstline"> Lists the [sitemaps-entries](/webmaster-tools/v3/sitemaps) submitted for this site, or included in the sitemap index file (if `sitemapIndex` is specified in the request).</p>
<p class="toc_element">
  <code><a href="#submit">submit(siteUrl, feedpath, x__xgafv=None)</a></code></p>
<p class="firstline">Submits a sitemap for a site.</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(siteUrl, feedpath, x__xgafv=None)</code>
  <pre>Deletes a sitemap from this site.

Args:
  siteUrl: string, The site&#x27;s URL, including protocol. For example: `http://www.example.com/`. (required)
  feedpath: string, The URL of the actual sitemap. For example: `http://www.example.com/sitemap.xml`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(siteUrl, feedpath, x__xgafv=None)</code>
  <pre>Retrieves information about a specific sitemap.

Args:
  siteUrl: string, The site&#x27;s URL, including protocol. For example: `http://www.example.com/`. (required)
  feedpath: string, The URL of the actual sitemap. For example: `http://www.example.com/sitemap.xml`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Contains detailed information about a specific URL submitted as a [sitemap](https://support.google.com/webmasters/answer/156184).
  &quot;contents&quot;: [ # The various content types in the sitemap.
    { # Information about the various content types in the sitemap.
      &quot;indexed&quot;: &quot;A String&quot;, # *Deprecated; do not use.*
      &quot;submitted&quot;: &quot;A String&quot;, # The number of URLs in the sitemap (of the content type).
      &quot;type&quot;: &quot;A String&quot;, # The specific type of content in this sitemap. For example: `web`.
    },
  ],
  &quot;errors&quot;: &quot;A String&quot;, # Number of errors in the sitemap. These are issues with the sitemap itself that need to be fixed before it can be processed correctly.
  &quot;isPending&quot;: True or False, # If true, the sitemap has not been processed.
  &quot;isSitemapsIndex&quot;: True or False, # If true, the sitemap is a collection of sitemaps.
  &quot;lastDownloaded&quot;: &quot;A String&quot;, # Date &amp; time in which this sitemap was last downloaded. Date format is in RFC 3339 format (yyyy-mm-dd).
  &quot;lastSubmitted&quot;: &quot;A String&quot;, # Date &amp; time in which this sitemap was submitted. Date format is in RFC 3339 format (yyyy-mm-dd).
  &quot;path&quot;: &quot;A String&quot;, # The url of the sitemap.
  &quot;type&quot;: &quot;A String&quot;, # The type of the sitemap. For example: `rssFeed`.
  &quot;warnings&quot;: &quot;A String&quot;, # Number of warnings for the sitemap. These are generally non-critical issues with URLs in the sitemaps.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(siteUrl, sitemapIndex=None, x__xgafv=None)</code>
  <pre> Lists the [sitemaps-entries](/webmaster-tools/v3/sitemaps) submitted for this site, or included in the sitemap index file (if `sitemapIndex` is specified in the request).

Args:
  siteUrl: string, The site&#x27;s URL, including protocol. For example: `http://www.example.com/`. (required)
  sitemapIndex: string,  A URL of a site&#x27;s sitemap index. For example: `http://www.example.com/sitemapindex.xml`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # List of sitemaps.
  &quot;sitemap&quot;: [ # Contains detailed information about a specific URL submitted as a [sitemap](https://support.google.com/webmasters/answer/156184).
    { # Contains detailed information about a specific URL submitted as a [sitemap](https://support.google.com/webmasters/answer/156184).
      &quot;contents&quot;: [ # The various content types in the sitemap.
        { # Information about the various content types in the sitemap.
          &quot;indexed&quot;: &quot;A String&quot;, # *Deprecated; do not use.*
          &quot;submitted&quot;: &quot;A String&quot;, # The number of URLs in the sitemap (of the content type).
          &quot;type&quot;: &quot;A String&quot;, # The specific type of content in this sitemap. For example: `web`.
        },
      ],
      &quot;errors&quot;: &quot;A String&quot;, # Number of errors in the sitemap. These are issues with the sitemap itself that need to be fixed before it can be processed correctly.
      &quot;isPending&quot;: True or False, # If true, the sitemap has not been processed.
      &quot;isSitemapsIndex&quot;: True or False, # If true, the sitemap is a collection of sitemaps.
      &quot;lastDownloaded&quot;: &quot;A String&quot;, # Date &amp; time in which this sitemap was last downloaded. Date format is in RFC 3339 format (yyyy-mm-dd).
      &quot;lastSubmitted&quot;: &quot;A String&quot;, # Date &amp; time in which this sitemap was submitted. Date format is in RFC 3339 format (yyyy-mm-dd).
      &quot;path&quot;: &quot;A String&quot;, # The url of the sitemap.
      &quot;type&quot;: &quot;A String&quot;, # The type of the sitemap. For example: `rssFeed`.
      &quot;warnings&quot;: &quot;A String&quot;, # Number of warnings for the sitemap. These are generally non-critical issues with URLs in the sitemaps.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="submit">submit(siteUrl, feedpath, x__xgafv=None)</code>
  <pre>Submits a sitemap for a site.

Args:
  siteUrl: string, The site&#x27;s URL, including protocol. For example: `http://www.example.com/`. (required)
  feedpath: string, The URL of the actual sitemap. For example: `http://www.example.com/sitemap.xml`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

</body></html>