<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="content_v2_1.html">Content API for Shopping</a> . <a href="content_v2_1.datafeeds.html">datafeeds</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#custombatch">custombatch(body=None)</a></code></p>
<p class="firstline">Deletes, fetches, gets, inserts and updates multiple datafeeds in a single request.</p>
<p class="toc_element">
  <code><a href="#delete">delete(merchantId, datafeedId)</a></code></p>
<p class="firstline">Deletes a datafeed configuration from your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#fetchnow">fetchnow(merchantId, datafeedId)</a></code></p>
<p class="firstline">Invokes a fetch for the datafeed in your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#get">get(merchantId, datafeedId)</a></code></p>
<p class="firstline">Retrieves a datafeed configuration from your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#insert">insert(merchantId, body=None)</a></code></p>
<p class="firstline">Registers a datafeed configuration with your Merchant Center account.</p>
<p class="toc_element">
  <code><a href="#list">list(merchantId, maxResults=None, pageToken=None)</a></code></p>
<p class="firstline">Lists the configurations for datafeeds in your Merchant Center account.</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>
<p class="toc_element">
  <code><a href="#update">update(merchantId, datafeedId, body=None)</a></code></p>
<p class="firstline">Updates a datafeed configuration of your Merchant Center account.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="custombatch">custombatch(body=None)</code>
  <pre>Deletes, fetches, gets, inserts and updates multiple datafeeds in a single request.

Args:
  body: object, The request body.
    The object takes the form of:

{
    &quot;entries&quot;: [ # The request entries to be processed in the batch.
      { # A batch entry encoding a single non-batch datafeeds request.
        &quot;batchId&quot;: 42, # An entry ID, unique within the batch request.
        &quot;datafeed&quot;: { # Datafeed configuration data. # The data feed to insert.
          &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
          &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
              #
              # Acceptable values are:
              # - &quot;`local products`&quot;
              # - &quot;`product inventory`&quot;
              # - &quot;`products`&quot;
          &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
            &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
            &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
            &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
            &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
            &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
            &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
            &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
            &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
            &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
                #
                # Acceptable values are:
                # - &quot;`monday`&quot;
                # - &quot;`tuesday`&quot;
                # - &quot;`wednesday`&quot;
                # - &quot;`thursday`&quot;
                # - &quot;`friday`&quot;
                # - &quot;`saturday`&quot;
                # - &quot;`sunday`&quot;
          },
          &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
          &quot;format&quot;: { # Format of the feed file.
            &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
                #
                # Acceptable values are:
                # - &quot;`pipe`&quot;
                # - &quot;`tab`&quot;
                # - &quot;`tilde`&quot;
            &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
                #
                # Acceptable values are:
                # - &quot;`latin-1`&quot;
                # - &quot;`utf-16be`&quot;
                # - &quot;`utf-16le`&quot;
                # - &quot;`utf-8`&quot;
                # - &quot;`windows-1252`&quot;
            &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
                #
                # Acceptable values are:
                # - &quot;`normal character`&quot;
                # - &quot;`value quoting`&quot;
          },
          &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
          &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
          &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
          &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
            {
              &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
              &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
                &quot;A String&quot;,
              ],
              &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
                  #
                  # List of supported destinations (if available to the account):
                  # - DisplayAds
                  # - Shopping
                  # - ShoppingActions
                  # - SurfacesAcrossGoogle
                &quot;A String&quot;,
              ],
              &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
            },
          ],
        },
        &quot;datafeedId&quot;: &quot;A String&quot;, # The ID of the data feed to get, delete or fetch.
        &quot;merchantId&quot;: &quot;A String&quot;, # The ID of the managing account.
        &quot;method&quot;: &quot;A String&quot;, # The method of the batch entry.
            #
            # Acceptable values are:
            # - &quot;`delete`&quot;
            # - &quot;`fetchNow`&quot;
            # - &quot;`get`&quot;
            # - &quot;`insert`&quot;
            # - &quot;`update`&quot;
      },
    ],
  }


Returns:
  An object of the form:

    {
    &quot;entries&quot;: [ # The result of the execution of the batch requests.
      { # A batch entry encoding a single non-batch datafeeds response.
        &quot;batchId&quot;: 42, # The ID of the request entry this entry responds to.
        &quot;datafeed&quot;: { # Datafeed configuration data. # The requested data feed. Defined if and only if the request was successful.
          &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
          &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
              #
              # Acceptable values are:
              # - &quot;`local products`&quot;
              # - &quot;`product inventory`&quot;
              # - &quot;`products`&quot;
          &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
            &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
            &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
            &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
            &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
            &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
            &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
            &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
            &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
            &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
                #
                # Acceptable values are:
                # - &quot;`monday`&quot;
                # - &quot;`tuesday`&quot;
                # - &quot;`wednesday`&quot;
                # - &quot;`thursday`&quot;
                # - &quot;`friday`&quot;
                # - &quot;`saturday`&quot;
                # - &quot;`sunday`&quot;
          },
          &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
          &quot;format&quot;: { # Format of the feed file.
            &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
                #
                # Acceptable values are:
                # - &quot;`pipe`&quot;
                # - &quot;`tab`&quot;
                # - &quot;`tilde`&quot;
            &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
                #
                # Acceptable values are:
                # - &quot;`latin-1`&quot;
                # - &quot;`utf-16be`&quot;
                # - &quot;`utf-16le`&quot;
                # - &quot;`utf-8`&quot;
                # - &quot;`windows-1252`&quot;
            &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
                #
                # Acceptable values are:
                # - &quot;`normal character`&quot;
                # - &quot;`value quoting`&quot;
          },
          &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
          &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
          &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
          &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
            {
              &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
              &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
                &quot;A String&quot;,
              ],
              &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
                  #
                  # List of supported destinations (if available to the account):
                  # - DisplayAds
                  # - Shopping
                  # - ShoppingActions
                  # - SurfacesAcrossGoogle
                &quot;A String&quot;,
              ],
              &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
            },
          ],
        },
        &quot;errors&quot;: { # A list of errors returned by a failed batch entry. # A list of errors defined if and only if the request failed.
          &quot;code&quot;: 42, # The HTTP status of the first error in `errors`.
          &quot;errors&quot;: [ # A list of errors.
            { # An error returned by the API.
              &quot;domain&quot;: &quot;A String&quot;, # The domain of the error.
              &quot;message&quot;: &quot;A String&quot;, # A description of the error.
              &quot;reason&quot;: &quot;A String&quot;, # The error code.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # The message of the first error in `errors`.
        },
      },
    ],
    &quot;kind&quot;: &quot;content#datafeedsCustomBatchResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#datafeedsCustomBatchResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(merchantId, datafeedId)</code>
  <pre>Deletes a datafeed configuration from your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeed. This account cannot be a multi-client account. (required)
  datafeedId: string, The ID of the datafeed. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="fetchnow">fetchnow(merchantId, datafeedId)</code>
  <pre>Invokes a fetch for the datafeed in your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeed. This account cannot be a multi-client account. (required)
  datafeedId: string, The ID of the datafeed to be fetched. (required)

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#datafeedsFetchNowResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#datafeedsFetchNowResponse&quot;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(merchantId, datafeedId)</code>
  <pre>Retrieves a datafeed configuration from your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeed. This account cannot be a multi-client account. (required)
  datafeedId: string, The ID of the datafeed. (required)

Returns:
  An object of the form:

    { # Datafeed configuration data.
    &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
    &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
        #
        # Acceptable values are:
        # - &quot;`local products`&quot;
        # - &quot;`product inventory`&quot;
        # - &quot;`products`&quot;
    &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
      &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
      &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
      &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
      &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
      &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
      &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
      &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
      &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
      &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
          #
          # Acceptable values are:
          # - &quot;`monday`&quot;
          # - &quot;`tuesday`&quot;
          # - &quot;`wednesday`&quot;
          # - &quot;`thursday`&quot;
          # - &quot;`friday`&quot;
          # - &quot;`saturday`&quot;
          # - &quot;`sunday`&quot;
    },
    &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
    &quot;format&quot;: { # Format of the feed file.
      &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`pipe`&quot;
          # - &quot;`tab`&quot;
          # - &quot;`tilde`&quot;
      &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
          #
          # Acceptable values are:
          # - &quot;`latin-1`&quot;
          # - &quot;`utf-16be`&quot;
          # - &quot;`utf-16le`&quot;
          # - &quot;`utf-8`&quot;
          # - &quot;`windows-1252`&quot;
      &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`normal character`&quot;
          # - &quot;`value quoting`&quot;
    },
    &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
    &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
    &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
    &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
      {
        &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
        &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
          &quot;A String&quot;,
        ],
        &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
            #
            # List of supported destinations (if available to the account):
            # - DisplayAds
            # - Shopping
            # - ShoppingActions
            # - SurfacesAcrossGoogle
          &quot;A String&quot;,
        ],
        &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(merchantId, body=None)</code>
  <pre>Registers a datafeed configuration with your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeed. This account cannot be a multi-client account. (required)
  body: object, The request body.
    The object takes the form of:

{ # Datafeed configuration data.
  &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
  &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
      # 
      # Acceptable values are:
      # - &quot;`local products`&quot;
      # - &quot;`product inventory`&quot;
      # - &quot;`products`&quot;
  &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
    &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
    &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
    &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
    &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
    &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
    &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
    &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
    &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
    &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
        #
        # Acceptable values are:
        # - &quot;`monday`&quot;
        # - &quot;`tuesday`&quot;
        # - &quot;`wednesday`&quot;
        # - &quot;`thursday`&quot;
        # - &quot;`friday`&quot;
        # - &quot;`saturday`&quot;
        # - &quot;`sunday`&quot;
  },
  &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
  &quot;format&quot;: { # Format of the feed file.
    &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
        #
        # Acceptable values are:
        # - &quot;`pipe`&quot;
        # - &quot;`tab`&quot;
        # - &quot;`tilde`&quot;
    &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
        #
        # Acceptable values are:
        # - &quot;`latin-1`&quot;
        # - &quot;`utf-16be`&quot;
        # - &quot;`utf-16le`&quot;
        # - &quot;`utf-8`&quot;
        # - &quot;`windows-1252`&quot;
    &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
        #
        # Acceptable values are:
        # - &quot;`normal character`&quot;
        # - &quot;`value quoting`&quot;
  },
  &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
  &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
  &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
  &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
    {
      &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
      &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
        &quot;A String&quot;,
      ],
      &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
          #
          # List of supported destinations (if available to the account):
          # - DisplayAds
          # - Shopping
          # - ShoppingActions
          # - SurfacesAcrossGoogle
        &quot;A String&quot;,
      ],
      &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
    },
  ],
}


Returns:
  An object of the form:

    { # Datafeed configuration data.
    &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
    &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
        #
        # Acceptable values are:
        # - &quot;`local products`&quot;
        # - &quot;`product inventory`&quot;
        # - &quot;`products`&quot;
    &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
      &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
      &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
      &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
      &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
      &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
      &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
      &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
      &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
      &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
          #
          # Acceptable values are:
          # - &quot;`monday`&quot;
          # - &quot;`tuesday`&quot;
          # - &quot;`wednesday`&quot;
          # - &quot;`thursday`&quot;
          # - &quot;`friday`&quot;
          # - &quot;`saturday`&quot;
          # - &quot;`sunday`&quot;
    },
    &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
    &quot;format&quot;: { # Format of the feed file.
      &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`pipe`&quot;
          # - &quot;`tab`&quot;
          # - &quot;`tilde`&quot;
      &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
          #
          # Acceptable values are:
          # - &quot;`latin-1`&quot;
          # - &quot;`utf-16be`&quot;
          # - &quot;`utf-16le`&quot;
          # - &quot;`utf-8`&quot;
          # - &quot;`windows-1252`&quot;
      &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`normal character`&quot;
          # - &quot;`value quoting`&quot;
    },
    &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
    &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
    &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
    &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
      {
        &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
        &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
          &quot;A String&quot;,
        ],
        &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
            #
            # List of supported destinations (if available to the account):
            # - DisplayAds
            # - Shopping
            # - ShoppingActions
            # - SurfacesAcrossGoogle
          &quot;A String&quot;,
        ],
        &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(merchantId, maxResults=None, pageToken=None)</code>
  <pre>Lists the configurations for datafeeds in your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeeds. This account cannot be a multi-client account. (required)
  maxResults: integer, The maximum number of products to return in the response, used for paging.
  pageToken: string, The token returned by the previous request.

Returns:
  An object of the form:

    {
    &quot;kind&quot;: &quot;content#datafeedsListResponse&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;content#datafeedsListResponse&quot;.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for the retrieval of the next page of datafeeds.
    &quot;resources&quot;: [
      { # Datafeed configuration data.
        &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
        &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
            #
            # Acceptable values are:
            # - &quot;`local products`&quot;
            # - &quot;`product inventory`&quot;
            # - &quot;`products`&quot;
        &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
          &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
          &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
          &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
          &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
          &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
          &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
          &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
          &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
          &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
              #
              # Acceptable values are:
              # - &quot;`monday`&quot;
              # - &quot;`tuesday`&quot;
              # - &quot;`wednesday`&quot;
              # - &quot;`thursday`&quot;
              # - &quot;`friday`&quot;
              # - &quot;`saturday`&quot;
              # - &quot;`sunday`&quot;
        },
        &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
        &quot;format&quot;: { # Format of the feed file.
          &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
              #
              # Acceptable values are:
              # - &quot;`pipe`&quot;
              # - &quot;`tab`&quot;
              # - &quot;`tilde`&quot;
          &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
              #
              # Acceptable values are:
              # - &quot;`latin-1`&quot;
              # - &quot;`utf-16be`&quot;
              # - &quot;`utf-16le`&quot;
              # - &quot;`utf-8`&quot;
              # - &quot;`windows-1252`&quot;
          &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
              #
              # Acceptable values are:
              # - &quot;`normal character`&quot;
              # - &quot;`value quoting`&quot;
        },
        &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
        &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
        &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
        &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
          {
            &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
            &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
              &quot;A String&quot;,
            ],
            &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
                #
                # List of supported destinations (if available to the account):
                # - DisplayAds
                # - Shopping
                # - ShoppingActions
                # - SurfacesAcrossGoogle
              &quot;A String&quot;,
            ],
            &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
          },
        ],
      },
    ],
  }</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>

<div class="method">
    <code class="details" id="update">update(merchantId, datafeedId, body=None)</code>
  <pre>Updates a datafeed configuration of your Merchant Center account.

Args:
  merchantId: string, The ID of the account that manages the datafeed. This account cannot be a multi-client account. (required)
  datafeedId: string, The ID of the datafeed. (required)
  body: object, The request body.
    The object takes the form of:

{ # Datafeed configuration data.
  &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
  &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
      # 
      # Acceptable values are:
      # - &quot;`local products`&quot;
      # - &quot;`product inventory`&quot;
      # - &quot;`products`&quot;
  &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
    &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
    &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
    &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
    &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
    &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
    &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
    &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
    &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
    &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
        #
        # Acceptable values are:
        # - &quot;`monday`&quot;
        # - &quot;`tuesday`&quot;
        # - &quot;`wednesday`&quot;
        # - &quot;`thursday`&quot;
        # - &quot;`friday`&quot;
        # - &quot;`saturday`&quot;
        # - &quot;`sunday`&quot;
  },
  &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
  &quot;format&quot;: { # Format of the feed file.
    &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
        #
        # Acceptable values are:
        # - &quot;`pipe`&quot;
        # - &quot;`tab`&quot;
        # - &quot;`tilde`&quot;
    &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
        #
        # Acceptable values are:
        # - &quot;`latin-1`&quot;
        # - &quot;`utf-16be`&quot;
        # - &quot;`utf-16le`&quot;
        # - &quot;`utf-8`&quot;
        # - &quot;`windows-1252`&quot;
    &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
        #
        # Acceptable values are:
        # - &quot;`normal character`&quot;
        # - &quot;`value quoting`&quot;
  },
  &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
  &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
  &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
  &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
    {
      &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
      &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
        &quot;A String&quot;,
      ],
      &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
          #
          # List of supported destinations (if available to the account):
          # - DisplayAds
          # - Shopping
          # - ShoppingActions
          # - SurfacesAcrossGoogle
        &quot;A String&quot;,
      ],
      &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
    },
  ],
}


Returns:
  An object of the form:

    { # Datafeed configuration data.
    &quot;attributeLanguage&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language in which the attributes are defined in the data feed.
    &quot;contentType&quot;: &quot;A String&quot;, # Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online stores, are supported.
        #
        # Acceptable values are:
        # - &quot;`local products`&quot;
        # - &quot;`product inventory`&quot;
        # - &quot;`products`&quot;
    &quot;fetchSchedule&quot;: { # The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour is required. # Fetch schedule for the feed file.
      &quot;dayOfMonth&quot;: 42, # The day of the month the feed file should be fetched (1-31).
      &quot;fetchUrl&quot;: &quot;A String&quot;, # The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those four protocols.
      &quot;hour&quot;: 42, # The hour of the day the feed file should be fetched (0-23).
      &quot;minuteOfHour&quot;: 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
      &quot;password&quot;: &quot;A String&quot;, # An optional password for fetch_url.
      &quot;paused&quot;: True or False, # Whether the scheduled fetch is paused or not.
      &quot;timeZone&quot;: &quot;A String&quot;, # Time zone used for schedule. UTC by default. E.g., &quot;America/Los_Angeles&quot;.
      &quot;username&quot;: &quot;A String&quot;, # An optional user name for fetch_url.
      &quot;weekday&quot;: &quot;A String&quot;, # The day of the week the feed file should be fetched.
          #
          # Acceptable values are:
          # - &quot;`monday`&quot;
          # - &quot;`tuesday`&quot;
          # - &quot;`wednesday`&quot;
          # - &quot;`thursday`&quot;
          # - &quot;`friday`&quot;
          # - &quot;`saturday`&quot;
          # - &quot;`sunday`&quot;
    },
    &quot;fileName&quot;: &quot;A String&quot;, # Required. The filename of the feed. All feeds must have a unique file name.
    &quot;format&quot;: { # Format of the feed file.
      &quot;columnDelimiter&quot;: &quot;A String&quot;, # Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`pipe`&quot;
          # - &quot;`tab`&quot;
          # - &quot;`tilde`&quot;
      &quot;fileEncoding&quot;: &quot;A String&quot;, # Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected.
          #
          # Acceptable values are:
          # - &quot;`latin-1`&quot;
          # - &quot;`utf-16be`&quot;
          # - &quot;`utf-16le`&quot;
          # - &quot;`utf-8`&quot;
          # - &quot;`windows-1252`&quot;
      &quot;quotingMode&quot;: &quot;A String&quot;, # Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for non-DSV data feeds.
          #
          # Acceptable values are:
          # - &quot;`normal character`&quot;
          # - &quot;`value quoting`&quot;
    },
    &quot;id&quot;: &quot;A String&quot;, # Required for update. The ID of the data feed.
    &quot;kind&quot;: &quot;content#datafeed&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;`content#datafeed`&quot;
    &quot;name&quot;: &quot;A String&quot;, # Required for insert. A descriptive name of the data feed.
    &quot;targets&quot;: [ # The targets this feed should apply to (country, language, destinations).
      {
        &quot;country&quot;: &quot;A String&quot;, # The country where the items in the feed will be included in the search index, represented as a  CLDR territory code.
        &quot;excludedDestinations&quot;: [ # The list of destinations to exclude for this target (corresponds to unchecked check boxes in Merchant Center).
          &quot;A String&quot;,
        ],
        &quot;includedDestinations&quot;: [ # The list of destinations to include for this target (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless provided in `excludedDestinations`.
            #
            # List of supported destinations (if available to the account):
            # - DisplayAds
            # - Shopping
            # - ShoppingActions
            # - SurfacesAcrossGoogle
          &quot;A String&quot;,
        ],
        &quot;language&quot;: &quot;A String&quot;, # The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for `targets[].country`.
      },
    ],
  }</pre>
</div>

</body></html>