<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="gmailpostmastertools_v1beta1.html">Gmail Postmaster Tools API</a> . <a href="gmailpostmastertools_v1beta1.domains.html">domains</a> . <a href="gmailpostmastertools_v1beta1.domains.trafficStats.html">trafficStats</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(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get traffic statistics for a domain on a specific date. Returns PERMISSION_DENIED if user does not have permission to access TrafficStats for the domain.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, endDate_month=None, startDate_day=None, pageSize=None, endDate_year=None, startDate_year=None, startDate_month=None, pageToken=None, endDate_day=None, x__xgafv=None)</a></code></p>
<p class="firstline">List traffic statistics for all available days. Returns PERMISSION_DENIED if user does not have permission to access TrafficStats for the domain.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</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(name, x__xgafv=None)</code>
  <pre>Get traffic statistics for a domain on a specific date. Returns PERMISSION_DENIED if user does not have permission to access TrafficStats for the domain.

Args:
  name: string, The resource name of the traffic statistics to get. E.g., domains/mymail.mydomain.com/trafficStats/20160807. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Email traffic statistics pertaining to a specific date.
    &quot;dmarcSuccessRatio&quot;: 3.14, # The ratio of mail that passed [DMARC](https://dmarc.org/) alignment checks vs all mail received from the domain that successfully authenticated with either of [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
    &quot;inboundEncryptionRatio&quot;: 3.14, # The ratio of incoming mail (to Gmail), that passed secure transport (TLS) vs all mail received from that domain. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
    &quot;userReportedSpamRatio&quot;: 3.14, # The ratio of user-report spam vs. email that was sent to the inbox. This metric only pertains to emails authenticated by [DKIM](http://www.dkim.org/).
    &quot;spfSuccessRatio&quot;: 3.14, # The ratio of mail that successfully authenticated with SPF vs. all mail that attempted to authenticate with [SPF](http://www.openspf.org/). Spoofed mail is excluded.
    &quot;spammyFeedbackLoops&quot;: [ # Spammy [Feedback loop identifiers] (https://support.google.com/mail/answer/6254652) with their individual spam rates. This metric only pertains to traffic that is authenticated by [DKIM](http://www.dkim.org/).
      { # [Feedback loop](https://support.google.com/mail/answer/6254652) identifier information.
        &quot;spamRatio&quot;: 3.14, # The ratio of user marked spam messages with the identifier vs the total number of inboxed messages with that identifier.
        &quot;id&quot;: &quot;A String&quot;, # Feedback loop identifier that uniquely identifies individual campaigns.
      },
    ],
    &quot;deliveryErrors&quot;: [ # Delivery errors for the domain. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
      { # Metric on a particular delivery error type.
        &quot;errorRatio&quot;: 3.14, # The ratio of messages where the error occurred vs all authenticated traffic.
        &quot;errorType&quot;: &quot;A String&quot;, # The type of delivery error.
        &quot;errorClass&quot;: &quot;A String&quot;, # The class of delivery error.
      },
    ],
    &quot;ipReputations&quot;: [ # Reputation information pertaining to the IP addresses of the email servers for the domain. There is exactly one entry for each reputation category except REPUTATION_CATEGORY_UNSPECIFIED.
      { # IP Reputation information for a set of IPs in a specific reputation category.
        &quot;reputation&quot;: &quot;A String&quot;, # The reputation category this IP reputation represents.
        &quot;sampleIps&quot;: [ # A sample of IPs in this reputation category.
          &quot;A String&quot;,
        ],
        &quot;numIps&quot;: &quot;A String&quot;, # Total number of unique IPs in this reputation category. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the traffic statistics. Traffic statistic names have the form `domains/{domain}/trafficStats/{date}`, where domain_name is the fully qualified domain name (i.e., mymail.mydomain.com) of the domain this traffic statistics pertains to and date is the date in yyyymmdd format that these statistics corresponds to. For example: domains/mymail.mydomain.com/trafficStats/20160807
    &quot;outboundEncryptionRatio&quot;: 3.14, # The ratio of outgoing mail (from Gmail) that was accepted over secure transport (TLS).
    &quot;dkimSuccessRatio&quot;: 3.14, # The ratio of mail that successfully authenticated with DKIM vs. all mail that attempted to authenticate with [DKIM](http://www.dkim.org/). Spoofed mail is excluded.
    &quot;domainReputation&quot;: &quot;A String&quot;, # Reputation of the domain.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, endDate_month=None, startDate_day=None, pageSize=None, endDate_year=None, startDate_year=None, startDate_month=None, pageToken=None, endDate_day=None, x__xgafv=None)</code>
  <pre>List traffic statistics for all available days. Returns PERMISSION_DENIED if user does not have permission to access TrafficStats for the domain.

Args:
  parent: string, The resource name of the domain whose traffic statistics we&#x27;d like to list. It should have the form `domains/{domain_name}`, where domain_name is the fully qualified domain name. (required)
  endDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  startDate_day: integer, Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn&#x27;t significant.
  pageSize: integer, Requested page size. Server may return fewer TrafficStats than requested. If unspecified, server will pick an appropriate default.
  endDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  startDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  startDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  pageToken: string, The next_page_token value returned from a previous List request, if any. This is the value of ListTrafficStatsResponse.next_page_token returned from the previous call to `ListTrafficStats` method.
  endDate_day: integer, Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn&#x27;t significant.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for ListTrafficStats.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
    &quot;trafficStats&quot;: [ # The list of TrafficStats.
      { # Email traffic statistics pertaining to a specific date.
        &quot;dmarcSuccessRatio&quot;: 3.14, # The ratio of mail that passed [DMARC](https://dmarc.org/) alignment checks vs all mail received from the domain that successfully authenticated with either of [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
        &quot;inboundEncryptionRatio&quot;: 3.14, # The ratio of incoming mail (to Gmail), that passed secure transport (TLS) vs all mail received from that domain. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
        &quot;userReportedSpamRatio&quot;: 3.14, # The ratio of user-report spam vs. email that was sent to the inbox. This metric only pertains to emails authenticated by [DKIM](http://www.dkim.org/).
        &quot;spfSuccessRatio&quot;: 3.14, # The ratio of mail that successfully authenticated with SPF vs. all mail that attempted to authenticate with [SPF](http://www.openspf.org/). Spoofed mail is excluded.
        &quot;spammyFeedbackLoops&quot;: [ # Spammy [Feedback loop identifiers] (https://support.google.com/mail/answer/6254652) with their individual spam rates. This metric only pertains to traffic that is authenticated by [DKIM](http://www.dkim.org/).
          { # [Feedback loop](https://support.google.com/mail/answer/6254652) identifier information.
            &quot;spamRatio&quot;: 3.14, # The ratio of user marked spam messages with the identifier vs the total number of inboxed messages with that identifier.
            &quot;id&quot;: &quot;A String&quot;, # Feedback loop identifier that uniquely identifies individual campaigns.
          },
        ],
        &quot;deliveryErrors&quot;: [ # Delivery errors for the domain. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
          { # Metric on a particular delivery error type.
            &quot;errorRatio&quot;: 3.14, # The ratio of messages where the error occurred vs all authenticated traffic.
            &quot;errorType&quot;: &quot;A String&quot;, # The type of delivery error.
            &quot;errorClass&quot;: &quot;A String&quot;, # The class of delivery error.
          },
        ],
        &quot;ipReputations&quot;: [ # Reputation information pertaining to the IP addresses of the email servers for the domain. There is exactly one entry for each reputation category except REPUTATION_CATEGORY_UNSPECIFIED.
          { # IP Reputation information for a set of IPs in a specific reputation category.
            &quot;reputation&quot;: &quot;A String&quot;, # The reputation category this IP reputation represents.
            &quot;sampleIps&quot;: [ # A sample of IPs in this reputation category.
              &quot;A String&quot;,
            ],
            &quot;numIps&quot;: &quot;A String&quot;, # Total number of unique IPs in this reputation category. This metric only pertains to traffic that passed [SPF](http://www.openspf.org/) or [DKIM](http://www.dkim.org/).
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the traffic statistics. Traffic statistic names have the form `domains/{domain}/trafficStats/{date}`, where domain_name is the fully qualified domain name (i.e., mymail.mydomain.com) of the domain this traffic statistics pertains to and date is the date in yyyymmdd format that these statistics corresponds to. For example: domains/mymail.mydomain.com/trafficStats/20160807
        &quot;outboundEncryptionRatio&quot;: 3.14, # The ratio of outgoing mail (from Gmail) that was accepted over secure transport (TLS).
        &quot;dkimSuccessRatio&quot;: 3.14, # The ratio of mail that successfully authenticated with DKIM vs. all mail that attempted to authenticate with [DKIM](http://www.dkim.org/). Spoofed mail is excluded.
        &quot;domainReputation&quot;: &quot;A String&quot;, # Reputation of the domain.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>