<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="adsense_v2.html">AdSense Management API</a> . <a href="adsense_v2.accounts.html">accounts</a> . <a href="adsense_v2.accounts.reports.html">reports</a> . <a href="adsense_v2.accounts.reports.saved.html">saved</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="#generate">generate(name, currencyCode=None, dateRange=None, endDate_day=None, endDate_month=None, endDate_year=None, languageCode=None, reportingTimeZone=None, startDate_day=None, startDate_month=None, startDate_year=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a saved report.</p>
<p class="toc_element">
  <code><a href="#generateCsv">generateCsv(name, currencyCode=None, dateRange=None, endDate_day=None, endDate_month=None, endDate_year=None, languageCode=None, reportingTimeZone=None, startDate_day=None, startDate_month=None, startDate_year=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a csv formatted saved report.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists saved reports.</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="generate">generate(name, currencyCode=None, dateRange=None, endDate_day=None, endDate_month=None, endDate_year=None, languageCode=None, reportingTimeZone=None, startDate_day=None, startDate_month=None, startDate_year=None, x__xgafv=None)</code>
  <pre>Generates a saved report.

Args:
  name: string, Required. Name of the saved report. Format: accounts/{account}/reports/{report} (required)
  currencyCode: string, The [ISO-4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) to use when reporting on monetary metrics. Defaults to the account&#x27;s currency if not set.
  dateRange: string, Date range of the report, if unset the range will be considered CUSTOM.
    Allowed values
      REPORTING_DATE_RANGE_UNSPECIFIED - Unspecified date range.
      CUSTOM - A custom date range specified using the `start_date` and `end_date` fields. This is the default if no ReportingDateRange is provided.
      TODAY - Current day.
      YESTERDAY - Yesterday.
      MONTH_TO_DATE - From the start of the current month to the current day. e.g. if the current date is 2020-03-12 then the range will be [2020-03-01, 2020-03-12].
      YEAR_TO_DATE - From the start of the current year to the current day. e.g. if the current date is 2020-03-12 then the range will be [2020-01-01, 2020-03-12].
      LAST_7_DAYS - Last 7 days, excluding current day.
      LAST_30_DAYS - Last 30 days, excluding current day.
  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.
  endDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  endDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  languageCode: string, The language to use for translating report output. If unspecified, this defaults to English (&quot;en&quot;). If the given language is not supported, report output will be returned in English. The language is specified as an [IETF BCP-47 language code](https://en.wikipedia.org/wiki/IETF_language_tag).
  reportingTimeZone: string, Timezone in which to generate the report. If unspecified, this defaults to the account timezone. For more information, see [changing the time zone of your reports](https://support.google.com/adsense/answer/9830725).
    Allowed values
      REPORTING_TIME_ZONE_UNSPECIFIED - Unspecified timezone.
      ACCOUNT_TIME_ZONE - Use the account timezone in the report.
      GOOGLE_TIME_ZONE - Use the Google timezone in the report (America/Los_Angeles).
  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.
  startDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  startDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Result of a generated report.
  &quot;averages&quot;: { # Row representation. # The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.
    &quot;cells&quot;: [ # Cells in the row.
      { # Cell representation.
        &quot;value&quot;: &quot;A String&quot;, # Value in the cell. The dimension cells contain strings, and the metric cells contain numbers.
      },
    ],
  },
  &quot;endDate&quot;: { # Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Required. End date of the range (inclusive).
    &quot;day&quot;: 42, # 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.
    &quot;month&quot;: 42, # Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
    &quot;year&quot;: 42, # Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  },
  &quot;headers&quot;: [ # The header information; one for each dimension in the request, followed by one for each metric in the request.
    { # The header information of the columns requested in the report.
      &quot;currencyCode&quot;: &quot;A String&quot;, # The [ISO-4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) of this column. Only present if the header type is METRIC_CURRENCY.
      &quot;name&quot;: &quot;A String&quot;, # Required. Name of the header.
      &quot;type&quot;: &quot;A String&quot;, # Required. Type of the header.
    },
  ],
  &quot;rows&quot;: [ # The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request.
    { # Row representation.
      &quot;cells&quot;: [ # Cells in the row.
        { # Cell representation.
          &quot;value&quot;: &quot;A String&quot;, # Value in the cell. The dimension cells contain strings, and the metric cells contain numbers.
        },
      ],
    },
  ],
  &quot;startDate&quot;: { # Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Required. Start date of the range (inclusive).
    &quot;day&quot;: 42, # 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.
    &quot;month&quot;: 42, # Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
    &quot;year&quot;: 42, # Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  },
  &quot;totalMatchedRows&quot;: &quot;A String&quot;, # The total number of rows matched by the report request.
  &quot;totals&quot;: { # Row representation. # The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.
    &quot;cells&quot;: [ # Cells in the row.
      { # Cell representation.
        &quot;value&quot;: &quot;A String&quot;, # Value in the cell. The dimension cells contain strings, and the metric cells contain numbers.
      },
    ],
  },
  &quot;warnings&quot;: [ # Any warnings associated with generation of the report. These warnings are always returned in English.
    &quot;A String&quot;,
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="generateCsv">generateCsv(name, currencyCode=None, dateRange=None, endDate_day=None, endDate_month=None, endDate_year=None, languageCode=None, reportingTimeZone=None, startDate_day=None, startDate_month=None, startDate_year=None, x__xgafv=None)</code>
  <pre>Generates a csv formatted saved report.

Args:
  name: string, Required. Name of the saved report. Format: accounts/{account}/reports/{report} (required)
  currencyCode: string, The [ISO-4217 currency code](https://en.wikipedia.org/wiki/ISO_4217) to use when reporting on monetary metrics. Defaults to the account&#x27;s currency if not set.
  dateRange: string, Date range of the report, if unset the range will be considered CUSTOM.
    Allowed values
      REPORTING_DATE_RANGE_UNSPECIFIED - Unspecified date range.
      CUSTOM - A custom date range specified using the `start_date` and `end_date` fields. This is the default if no ReportingDateRange is provided.
      TODAY - Current day.
      YESTERDAY - Yesterday.
      MONTH_TO_DATE - From the start of the current month to the current day. e.g. if the current date is 2020-03-12 then the range will be [2020-03-01, 2020-03-12].
      YEAR_TO_DATE - From the start of the current year to the current day. e.g. if the current date is 2020-03-12 then the range will be [2020-01-01, 2020-03-12].
      LAST_7_DAYS - Last 7 days, excluding current day.
      LAST_30_DAYS - Last 30 days, excluding current day.
  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.
  endDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  endDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  languageCode: string, The language to use for translating report output. If unspecified, this defaults to English (&quot;en&quot;). If the given language is not supported, report output will be returned in English. The language is specified as an [IETF BCP-47 language code](https://en.wikipedia.org/wiki/IETF_language_tag).
  reportingTimeZone: string, Timezone in which to generate the report. If unspecified, this defaults to the account timezone. For more information, see [changing the time zone of your reports](https://support.google.com/adsense/answer/9830725).
    Allowed values
      REPORTING_TIME_ZONE_UNSPECIFIED - Unspecified timezone.
      ACCOUNT_TIME_ZONE - Use the account timezone in the report.
      GOOGLE_TIME_ZONE - Use the Google timezone in the report (America/Los_Angeles).
  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.
  startDate_month: integer, Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.
  startDate_year: integer, Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Message that represents an arbitrary HTTP body. It should only be used for payload formats that can&#x27;t be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.
  &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
  &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
  &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response for streaming APIs.
    {
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists saved reports.

Args:
  parent: string, Required. The account which owns the collection of reports. Format: accounts/{account} (required)
  pageSize: integer, The maximum number of reports to include in the response, used for paging. If unspecified, at most 10000 reports will be returned. The maximum value is 10000; values above 10000 will be coerced to 10000.
  pageToken: string, A page token, received from a previous `ListPayments` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListPayments` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response definition for the saved reports list rpc.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Continuation token used to page through reports. To retrieve the next page of the results, set the next request&#x27;s &quot;page_token&quot; value to this.
  &quot;savedReports&quot;: [ # The reports returned in this list response.
    { # Representation of a saved report.
      &quot;name&quot;: &quot;A String&quot;, # Resource name of the report. Format: accounts/{account}/reports/{report}
      &quot;title&quot;: &quot;A String&quot;, # Report title as specified by publisher.
    },
  ],
}</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>