<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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get traffic statistics for a domain on a specific date.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, startDate_month=None, startDate_day=None, pageSize=None, pageToken=None, startDate_year=None, endDate_day=None, endDate_year=None, endDate_month=None, x__xgafv=None)</a></code></p>
<p class="firstline">List traffic statistics for all available days.</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="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;outboundEncryptionRatio&quot;: 3.14, # The ratio of outgoing mail (from Gmail) that was accepted over secure
        # transport (TLS).
    &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;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;domainReputation&quot;: &quot;A String&quot;, # Reputation of the domain.
    &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;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;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;errorClass&quot;: &quot;A String&quot;, # The class of delivery error.
        &quot;errorType&quot;: &quot;A String&quot;, # The type of delivery error.
        &quot;errorRatio&quot;: 3.14, # The ratio of messages where the error occurred vs all authenticated
            # traffic.
      },
    ],
    &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;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;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;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;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;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/).
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, startDate_month=None, startDate_day=None, pageSize=None, pageToken=None, startDate_year=None, endDate_day=None, endDate_year=None, endDate_month=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)
  startDate_month: integer, Month of year. Must be from 1 to 12, or 0 if specifying a year without a
month and day.
  startDate_day: integer, Day of month. Must be from 1 to 31 and valid for the year and month, or 0
if specifying a year by itself or a year and month where the day is not
significant.
  pageSize: integer, Requested page size. Server may return fewer TrafficStats than
requested. If unspecified, server will pick an appropriate default.
  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.
  startDate_year: integer, Year of date. Must be from 1 to 9999, or 0 if specifying a date without
a year.
  endDate_day: integer, Day of month. Must be from 1 to 31 and valid for the year and month, or 0
if specifying a year by itself or a year and month where the day is not
significant.
  endDate_year: integer, Year of date. Must be from 1 to 9999, or 0 if specifying a date without
a year.
  endDate_month: integer, Month of year. Must be from 1 to 12, or 0 if specifying a year without a
month and day.
  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;outboundEncryptionRatio&quot;: 3.14, # The ratio of outgoing mail (from Gmail) that was accepted over secure
            # transport (TLS).
        &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;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;domainReputation&quot;: &quot;A String&quot;, # Reputation of the domain.
        &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;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;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;errorClass&quot;: &quot;A String&quot;, # The class of delivery error.
            &quot;errorType&quot;: &quot;A String&quot;, # The type of delivery error.
            &quot;errorRatio&quot;: 3.14, # The ratio of messages where the error occurred vs all authenticated
                # traffic.
          },
        ],
        &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;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;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;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;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;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/).
      },
    ],
  }</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>