Merchant API supports multiple types of data sources and input methods to
provide product-related information in line with your business needs. Data
sources can contain different types of data:

- product
- inventory
- promotion
- review

You can configure data sources using multiple methods, including:

- API calls
- file uploads
- [Autofeed](https://support.google.com/merchants/answer/7538732)

You can combine some data source types that are manageable through the
Data Sources sub-API (for example products or promotions) with multiple
supported input methods (API, file upload, or file fetch). For example, a
primary product data source can be any of the following:

- an API feed
- a fetched file feed
- an uploaded file feed
- an Autofeed

This guide provides examples for managing data sources with various types of
data and input methods.

## Special considerations

Take into account the following special considerations with some data source
types.

- **Read-only data sources** : Some data source types are read-only through the Data Sources sub-API. That means you can list them and view their details, but you cannot create, update, or delete them using this API. These include:
  - Data sources with products managed directly in the Merchant Center UI (input type `UI`).
  - Autofeeds (input type `AUTOFEED`). While Autofeeds themselves are read-only within the Data Sources sub-API, you can enable or disable the Autofeed feature for your account using the [`autofeedSettings`](https://developers.google.com/merchant/api/reference/rest/accounts_v1/accounts.autofeedSettings) methods in the Accounts sub-API. For more information, see [Configure
    Autofeed settings](https://developers.google.com/merchant/api/guides/data-sources/manage-various-data-sources#autofeed-settings) section.
- **Feed rules**: The Data Sources sub-API primarily supports default feed rules for linking supplemental data sources to primary data sources. Complex custom rule creation and management are not supported directly within this API. You can manage the order of supplemental data sources within the default rule to specify in which order attributes from a primary source and supplemental sources are combined.

## Set up a local inventory data source with scheduled file fetching

You can create a local inventory data source that automatically fetches a file
from a specified URL on a schedule. To create a similar data source for regional
inventory, replace the `localInventoryDataSource` field with
`regionalInventoryDataSource` in the request body.

To create the data source, use the
[`dataSources.create`](https://developers.google.com/merchant/api/reference/rest/datasources_v1/accounts.dataSources/create)
method and provide a `fileInput` object with `fetchSettings` configured.

    POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

    {
      "displayName": "My Scheduled Local Inventory Feed",
      "localInventoryDataSource": {
        "feedLabel": "US_Stores",
        "contentLanguage": "en"
      },
      "fileInput": {
        "fetchSettings": {
          "enabled": true,
          "timeOfDay": {
            "hours": 23
          },
          "timeZone": "America/New_York",
          "frequency": "FREQUENCY_DAILY",
          "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
        }
      }
    }

A successful request returns the created `DataSource` resource.

    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
      "dataSourceId": "{DATASOURCE_ID}",
      "displayName": "My Scheduled Local Inventory Feed",
      "localInventoryDataSource": {
        "feedLabel": "US_Stores",
        "contentLanguage": "en"
      },
      "input": "FILE",
      "fileInput": {
        "fetchSettings": {
          "enabled": true,
          "timeOfDay": {
            "hours": 23
          },
          "timeZone": "America/New_York",
          "frequency": "FREQUENCY_DAILY",
          "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
        },
        "fileInputType": "FETCH"
      }
    }

The following code samples show how to create a local inventory data source with
scheduled fetching.

### Java

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
    import com.google.shopping.merchant.datasources.v1.DataSource;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
    import com.google.shopping.merchant.datasources.v1.FileInput;
    import com.google.shopping.merchant.datasources.v1.LocalInventoryDataSource;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to create a local inventory datasource */
    public class CreateFileLocalInventoryDataSourceSample {

      private static String getParent(String merchantId) {
        return String.format("accounts/%s", merchantId);
      }

      private static FileInput setFileInput() {
        // If FetchSettings are not set, then this will be an `UPLOAD` file type
        // that you must manually upload via the Merchant Center UI.
        return FileInput.newBuilder()
            // FileName is required for `UPLOAD` fileInput type.
            .setFileName("British T-shirts Local Inventory Data")
            .build();
      }

      public static String createDataSource(Config config, String displayName, FileInput fileInput)
          throws Exception {
        GoogleCredentials credential = new Authenticator().authenticate();

        DataSourcesServiceSettings dataSourcesServiceSettings =
            DataSourcesServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

        String parent = getParent(config.getAccountId().toString());

        // LocalInventoryDataSources can only be created for a specific `feedLabel` and
        // `contentLanguage` combination.
        LocalInventoryDataSource localInventoryDataSource =
            LocalInventoryDataSource.newBuilder().setContentLanguage("en").setFeedLabel("GB").build();

        try (DataSourcesServiceClient dataSourcesServiceClient =
            DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

          CreateDataSourceRequest request =
              CreateDataSourceRequest.newBuilder()
                  .setParent(parent)
                  .setDataSource(
                      DataSource.newBuilder()
                          .setDisplayName(displayName)
                          .setLocalInventoryDataSource(localInventoryDataSource)
                          .setFileInput(fileInput)
                          .build())
                  .build();

          System.out.println("Sending Create Local Inventory DataSource request");
          DataSource response = dataSourcesServiceClient.createDataSource(request);
          System.out.println("Inserted DataSource Name below");
          System.out.println(response.getName());
          return response.getName();
        } catch (Exception e) {
          System.out.println(e);
          System.exit(1);
          return null;
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();
        // The displayed datasource name in the Merchant Center UI.
        String displayName = "British Local Inventory File";

        // The file input data that this datasource will receive.
        FileInput fileInput = setFileInput();

        createDataSource(config, displayName, fileInput);
      }
    }

### PHP

    use Google\ApiCore\ApiException;
    use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
    use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
    use Google\Shopping\Merchant\DataSources\V1\DataSource;
    use Google\Shopping\Merchant\DataSources\V1\FileInput;
    use Google\Shopping\Merchant\DataSources\V1\LocalInventoryDataSource;

    /**
     * This class demonstrates how to create a local inventory datasource with a 
     * file input.
     */
    class CreateFileLocalInventoryDataSourceSample
    {

        private static function getFileInput(): FileInput
        {
            // If FetchSettings is not set, then this will be an `UPLOAD` file type
            // that you must manually upload via the Merchant Center UI.
            return (new FileInput())
                // FileName is required for `UPLOAD` fileInput type.
                ->setFileName('British T-shirts Local Inventory Data');
        }

        public function createDataSource(string $merchantId, string $displayName, FileInput $fileInput): void
        {
            // Gets the OAuth credentials to make the request.
            $credentials = Authentication::useServiceAccountOrTokenFile();

            // Creates options config containing credentials for the client to use.
            $options = ['credentials' => $credentials];

            // Creates a client.
            $dataSourcesServiceClient = new DataSourcesServiceClient($options);

            $parent = sprintf('accounts/%s', $merchantId);

            // LocalInventoryDataSources can only be created for a specific `feedLabel` and
            // `contentLanguage` combination.
            $localInventoryDataSource =
                (new LocalInventoryDataSource())
                    ->setContentLanguage('en')
                    ->setFeedLabel('GB');

            try {
                // Prepare the request message.
                $request = (new CreateDataSourceRequest())
                    ->setParent($parent)
                    ->setDataSource(
                        (new DataSource())
                            ->setDisplayName($displayName)
                            ->setLocalInventoryDataSource($localInventoryDataSource)
                            ->setFileInput($fileInput)
                    );

                print('Sending Create Local Inventory DataSource request' . PHP_EOL);
                $response = $dataSourcesServiceClient->createDataSource($request);
                print('Inserted DataSource Name below' . PHP_EOL);
                print($response->getName() . PHP_EOL);
            } catch (ApiException $ex) {
                printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
            }
        }

        // Helper to execute the sample.
        function callSample(): void
        {
            $config = Config::generateConfig();
            // The Merchant Center Account ID.
            $merchantId = $config['accountId'];

            // The displayed datasource name in the Merchant Center UI.
            $displayName = 'British Primary Inventory File';

            $fileInput = self::getFileInput();

            $this->createDataSource($merchantId, $displayName, $fileInput);
        }

    }

    $sample = new CreateFileLocalInventoryDataSourceSample();
    $sample->callSample();

### Python

    from examples.authentication import configuration
    from examples.authentication import generate_user_credentials
    from google.shopping.merchant_datasources_v1 import CreateDataSourceRequest
    from google.shopping.merchant_datasources_v1 import DataSource
    from google.shopping.merchant_datasources_v1 import DataSourcesServiceClient
    from google.shopping.merchant_datasources_v1 import FileInput
    from google.shopping.merchant_datasources_v1 import LocalInventoryDataSource

    _ACCOUNT = configuration.Configuration().read_merchant_info()
    _PARENT = f"accounts/{_ACCOUNT}"


    def create_file_local_inventory_data_source():
      """Creates a `DataSource` resource."""

      # Gets OAuth Credentials.
      credentials = generate_user_credentials.main()

      # Creates a client.
      client = DataSourcesServiceClient(credentials=credentials)

      # If FetchSettings are not set, then this will be an `UPLOAD` file type
      # that you must manually upload via the Merchant Center UI or via SFTP.
      file_input = FileInput()
      file_input.file_name = "British T-shirts Local Inventory Data.txt"

      # Creates a SupplementalProductDataSource.
      local_inventory_datasource = LocalInventoryDataSource()
      # LocalInventoryDataSources can only be created for a specific
      # `feedLabel` and `contentLanguage` combination.
      local_inventory_datasource.content_language = "en"
      local_inventory_datasource.feed_label = "GB"

      # Creates a DataSource and populates its attributes.
      data_source = DataSource()
      data_source.display_name = "Example Local Inventory DataSource"
      data_source.local_inventory_data_source = local_inventory_datasource
      data_source.file_input = file_input

      # Creates the request.
      request = CreateDataSourceRequest(parent=_PARENT, data_source=data_source)

      # Makes the request and catches and prints any error messages.
      try:
        response = client.create_data_source(request=request)
        print(f"DataSource successfully created: {response}")
      except RuntimeError as e:
        print("DataSource creation failed")
        print(e)


    if __name__ == "__main__":
      create_file_local_inventory_data_source()

### cURL

    curl -X POST \
    "https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
    -H "Authorization: Bearer <API_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{
          "displayName": "My Scheduled Local Inventory Feed",
          "localInventoryDataSource": {
            "feedLabel": "US_Stores",
            "contentLanguage": "en"
          },
          "fileInput": {
            "fetchSettings": {
              "enabled": true,
              "timeOfDay": {
                "hours": 23
              },
              "timeZone": "America/New_York",
              "frequency": "FREQUENCY_DAILY",
              "fetchUri": "https://www.example.com/inventory/local_inventory_feed.csv"
            }
          }
        }'

## Establish a promotion data source using the API

Promotion data sources let you submit promotional offers for your products. You
can create an API-based data source for your promotions, which lets you send
promotion data directly without needing to manage files.

> [!NOTE]
> **Note:** A data source is also required for promotions used at the Advanced Account level. Access to Advanced Account promotions is restricted to users in an allowlist. To request access, contact the [Merchant API support team](https://developers.google.com/merchant/api/support/get-help#merchant_api_support_team).

Use the
[`dataSources.create`](https://developers.google.com/merchant/api/reference/rest/datasources_v1/accounts.dataSources/create)
method and specify
[`promotionDataSource`](https://developers.google.com/merchant/api/reference/rest/datasources_v1/accounts.dataSources#PromotionDataSource).
For an API feed, omit the `fileInput` field.

    POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

    {
      "displayName": "My API Promotions Source",
      "promotionDataSource": {
        "targetCountry": "US",
        "contentLanguage": "en"
      }
    }

A successful request returns the newly-created `DataSource` resource.

    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
      "dataSourceId": "{DATASOURCE_ID}",
      "displayName": "My API Promotions Source",
      "promotionDataSource": {
        "targetCountry": "US",
        "contentLanguage": "en"
      },
      "input": "API"
    }

The following code samples show how to create an API-based promotion data
source.

### Java

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
    import com.google.shopping.merchant.datasources.v1.DataSource;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
    import com.google.shopping.merchant.datasources.v1.PromotionDataSource;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to create a promotion datasource. */
    public class CreatePromotionDataSourceSample {

      private static String getParent(String merchantId) {
        return String.format("accounts/%s", merchantId);
      }

      public static String createDataSource(Config config, String displayName) throws Exception {
        GoogleCredentials credential = new Authenticator().authenticate();

        DataSourcesServiceSettings dataSourcesServiceSettings =
            DataSourcesServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

        String parent = getParent(config.getAccountId().toString());

        try (DataSourcesServiceClient dataSourcesServiceClient =
            DataSourcesServiceClient.create(dataSourcesServiceSettings)) {

          CreateDataSourceRequest request =
              CreateDataSourceRequest.newBuilder()
                  .setParent(parent)
                  .setDataSource(
                      DataSource.newBuilder()
                          .setDisplayName(displayName)
                          // PromotionDataSources
                          // can only be created for a specific `targetCountry` and `contentLanguage`
                          // combination.
                          .setPromotionDataSource(
                              PromotionDataSource.newBuilder()
                                  .setContentLanguage("en")
                                  .setTargetCountry("GB")
                                  .build())
                          .build())
                  .build();

          System.out.println("Sending Create Promotion DataSource request");
          DataSource response = dataSourcesServiceClient.createDataSource(request);
          System.out.println("Inserted DataSource Name below");
          System.out.println(response.getName());
          return response.getName();
        } catch (Exception e) {
          System.out.println(e);
          System.exit(1);
          return null;
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();
        // The displayed datasource name in the Merchant Center UI.
        String displayName = "British Promotions";

        createDataSource(config, displayName);
      }
    }

### PHP

    use Google\ApiCore\ApiException;
    use Google\Shopping\Merchant\DataSources\V1\Client\DataSourcesServiceClient;
    use Google\Shopping\Merchant\DataSources\V1\CreateDataSourceRequest;
    use Google\Shopping\Merchant\DataSources\V1\DataSource;
    use Google\Shopping\Merchant\DataSources\V1\PromotionDataSource;

    /**
     * This class demonstrates how to create a promotion datasource.
     */

    class CreatePromotionDataSource
    {
        /**
         * Creates a new PromotionDataSource.
         *
         * @param int    $merchantId The Merchant Center account ID.
         * @param string $displayName The displayed datasource name in the Merchant Center UI.
         * @return string The name of the newly created PromotionDataSource.
         */
        function createPromotionDataSourceSample(int $merchantId, string $displayName): string
        {
            // Gets the OAuth credentials to make the request.
            $credentials = Authentication::useServiceAccountOrTokenFile();

            // Creates options config containing credentials for the client to use.
            $options = ['credentials' => $credentials];

            // Creates a client.
            $dataSourcesServiceClient = new DataSourcesServiceClient($options);

            $parent = sprintf('accounts/%s', $merchantId);

            // Creates the data source.
            $dataSource = (new DataSource())
                ->setDisplayName($displayName)
                ->setPromotionDataSource(
                    (new PromotionDataSource())
                        ->setContentLanguage('en')
                        ->setTargetCountry('GB')
                );

            // Creates the request.
            $request = (new CreateDataSourceRequest())
                ->setParent($parent)
                ->setDataSource($dataSource);

            // Sends the request to the API.
            try {
                print('Sending Create Promotion DataSource request' . PHP_EOL);
                $response = $dataSourcesServiceClient->createDataSource($request);
                print('Inserted DataSource Name below' . PHP_EOL);
                print($response->getName() . PHP_EOL);
                return $response->getName();
            } catch (ApiException $ex) {
                printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
                return '';
            }
        }

        // Helper to execute the sample.
        public function callSample(): void
        {
            $config = Config::generateConfig();
            // The Merchant Center Account ID.
            $merchantId = $config['accountId'];

            // The displayed datasource name in the Merchant Center UI.
            $displayName = 'British Promotions';

            $this->createPromotionDataSourceSample($merchantId, $displayName);
        }
    }

    $sample = new CreatePromotionDataSource();
    $sample->callSample();

### Python

    from examples.authentication import configuration
    from examples.authentication import generate_user_credentials
    from google.shopping import merchant_datasources_v1

    _ACCOUNT = configuration.Configuration().read_merchant_info()
    _PARENT = f"accounts/{_ACCOUNT}"


    def create_promotion_data_source():
      """Creates a `DataSource` resource."""

      # Gets OAuth Credentials.
      credentials = generate_user_credentials.main()

      # Creates a client.
      client = merchant_datasources_v1.DataSourcesServiceClient(
          credentials=credentials
      )

      # Creates a PromotionDataSource.
      # PromotionDataSources
      # can only be created for a specific `targetCountry` and `contentLanguage`
      # combination.
      promotion_datasource = merchant_datasources_v1.PromotionDataSource()
      promotion_datasource.target_country = "CH"
      promotion_datasource.content_language = "fr"

      # Creates a DataSource and populates its attributes.
      data_source = merchant_datasources_v1.DataSource()
      data_source.display_name = "Example DataSource"
      data_source.promotion_data_source = promotion_datasource

      # Creates the request.
      request = merchant_datasources_v1.CreateDataSourceRequest(
          parent=_PARENT, data_source=data_source
      )

      # Makes the request and catches and prints any error messages.
      try:
        response = client.create_data_source(request=request)
        print(f"DataSource successfully created: {response}")
      except RuntimeError as e:
        print("DataSource creation failed")
        print(e)


    if __name__ == "__main__":
      create_promotion_data_source()

### cURL

    curl -X POST \
    "https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
    -H "Authorization: Bearer <API_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{
          "displayName": "My API Promotions Source",
          "promotionDataSource": {
            "targetCountry": "US",
            "contentLanguage": "en"
          }
        }'

## Create a product review data source for file uploads

Use product review data sources to submit customer reviews for your products.
You can configure a data source to accept manually-uploaded files for product
reviews.

Use the
[`dataSources.create`](https://developers.google.com/merchant/api/reference/rest/datasources_v1/accounts.dataSources/create)
method, specify `productReviewDataSource`, and include a `fileInput` with a
designated `fileName`.

    POST https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources

    {
      "displayName": "My Product Reviews Upload Feed",
      "productReviewDataSource": {},
      "fileInput": {
        "fileName": "product_reviews.xml"
      }
    }

A successful request returns the newly created `DataSource` resource.

    {
      "name": "accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}",
      "dataSourceId": "{DATASOURCE_ID}",
      "displayName": "My Product Reviews Upload Feed",
      "productReviewDataSource": {},
      "input": "FILE",
      "fileInput": {
        "fileName": "product_reviews.xml",
        "fileInputType": "UPLOAD"
      }
    }

To create a data source for merchant reviews, you can use a similar request,
replacing the `productReviewDataSource` object with an empty
`merchantReviewDataSource` object.

The following code samples show how to create a product review data source for
manual file uploads.

### Java

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.shopping.merchant.datasources.v1.CreateDataSourceRequest;
    import com.google.shopping.merchant.datasources.v1.DataSource;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceClient;
    import com.google.shopping.merchant.datasources.v1.DataSourcesServiceSettings;
    import com.google.shopping.merchant.datasources.v1.ProductReviewDataSource;
    import java.io.IOException;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to create a product review data source. */
    public class CreateProductReviewsDataSourceSample {

      private static void createProductReviewsDataSource(String accountId) throws IOException {

        GoogleCredentials credential = new Authenticator().authenticate();

        DataSourcesServiceSettings dataSourcesServiceSettings =
            DataSourcesServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

        try (DataSourcesServiceClient dataSourcesServiceClient =
            DataSourcesServiceClient.create(dataSourcesServiceSettings)) {
          CreateDataSourceRequest request =
              CreateDataSourceRequest.newBuilder()
                  .setParent(String.format("accounts/%s", accountId))
                  .setDataSource(
                      DataSource.newBuilder()
                          .setDisplayName("Product Reviews Data Source")
                          .setProductReviewDataSource(ProductReviewDataSource.newBuilder().build())
                          .build())
                  .build();

          System.out.println("Creating product reviews data source...");
          DataSource dataSource = dataSourcesServiceClient.createDataSource(request);
          System.out.println(
              String.format("Datasource created successfully: %s", dataSource.getName()));
        } catch (Exception e) {
          System.out.println(e);
          System.exit(1);
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();
        createProductReviewsDataSource(config.getAccountId().toString());
      }
    }

### cURL

    curl -X POST \
    "https://merchantapi.googleapis.com/datasources/v1/accounts/{ACCOUNT_ID}/dataSources" \
    -H "Authorization: Bearer <API_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{
          "displayName": "My Product Reviews Upload Feed",
          "productReviewDataSource": {},
          "fileInput": {
            "fileName": "product_reviews.xml"
          }
        }'

## Configure Autofeed settings

[Automated data sources](https://support.google.com/merchants/answer/12158480)
automatically create product data based on your website's content. While the
Autofeed data source itself is read-only within the Data Sources sub-API,
you can enable or disable the Autofeed feature for your account using the
[`autofeedSettings.updateAutofeedSettings`](https://developers.google.com/merchant/api/reference/rest/accounts_v1/accounts.autofeedSettings/updateAutofeedSettings)
method in the Accounts sub-API.

This example enables product crawling through Autofeed for the account.

    PATCH https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/autofeedSettings?updateMask=enableProducts

    {
      "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
      "enableProducts": true
    }

A successful request returns the updated `AutofeedSettings` resource.

    {
      "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
      "enableProducts": true,
      "eligible": true
    }

The following code samples show how to enable Autofeed settings for an account.

### Java

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.protobuf.FieldMask;
    import com.google.shopping.merchant.accounts.v1.AutofeedSettings;
    import com.google.shopping.merchant.accounts.v1.AutofeedSettingsName;
    import com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceClient;
    import com.google.shopping.merchant.accounts.v1.AutofeedSettingsServiceSettings;
    import com.google.shopping.merchant.accounts.v1.UpdateAutofeedSettingsRequest;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to update AutofeedSettings to be enabled. */
    public class UpdateAutofeedSettingsSample {

      public static void updateAutofeedSettings(Config config) throws Exception {

        GoogleCredentials credential = new Authenticator().authenticate();

        AutofeedSettingsServiceSettings autofeedSettingsServiceSettings =
            AutofeedSettingsServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

        // Creates AutofeedSettings name to identify AutofeedSettings.
        String name =
            AutofeedSettingsName.newBuilder()
                .setAccount(config.getAccountId().toString())
                .build()
                .toString();

        // Create AutofeedSettings with the updated fields.
        AutofeedSettings autofeedSettings = AutofeedSettings.newBuilder().setName(name).build();

        FieldMask fieldMask = FieldMask.newBuilder().addPaths("*").build();

        try (AutofeedSettingsServiceClient autofeedSettingsServiceClient =
            AutofeedSettingsServiceClient.create(autofeedSettingsServiceSettings)) {

          UpdateAutofeedSettingsRequest request =
              UpdateAutofeedSettingsRequest.newBuilder()
                  .setAutofeedSettings(autofeedSettings)
                  .setUpdateMask(fieldMask)
                  .build();

          System.out.println("Sending Update AutofeedSettings request");
          AutofeedSettings response = autofeedSettingsServiceClient.updateAutofeedSettings(request);
          System.out.println("Updated AutofeedSettings Name below");
          System.out.println(response.getName());
        } catch (Exception e) {
          System.out.println(e);
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();

        updateAutofeedSettings(config);
      }
    }

### PHP

    use Google\ApiCore\ApiException;
    use Google\Protobuf\FieldMask;
    use Google\Shopping\Merchant\Accounts\V1\AutofeedSettings;
    use Google\Shopping\Merchant\Accounts\V1\Client\AutofeedSettingsServiceClient;
    use Google\Shopping\Merchant\Accounts\V1\UpdateAutofeedSettingsRequest;

    /**
     * This class demonstrates how to update AutofeedSettings to be enabled.
     */
    class UpdateAutofeedSettingsSample
    {

        /**
         * Update AutofeedSettings to be enabled.
         *
         * @param array $config The configuration data for authentication and account ID.
         * @return void
         */
        public static function updateAutofeedSettingsSample(array $config): void
        {
            // Get OAuth credentials.
            $credentials = Authentication::useServiceAccountOrTokenFile();

            // Create options for the client.
            $options = ['credentials' => $credentials];

            // Create a client.
            $autofeedSettingsServiceClient = new AutofeedSettingsServiceClient($options);

            // Create the AutofeedSettings name.
            $name = "accounts/" . $config['accountId'] . "/autofeedSettings";

            // Create AutofeedSettings object.
            $autofeedSettings = (new AutofeedSettings())
                ->setName($name);

            // Create FieldMask.
            $fieldMask = (new FieldMask())
                ->setPaths(["*"]);

            // Call the API.
            try {
                // Prepare the request.
                $request = (new UpdateAutofeedSettingsRequest())
                    ->setAutofeedSettings($autofeedSettings)
                    ->setUpdateMask($fieldMask);

                print "Sending Update AutofeedSettings request\n";
                $response = $autofeedSettingsServiceClient->updateAutofeedSettings($request);
                print "Updated AutofeedSettings Name below\n";
                print $response->getName() . "\n";
            } catch (ApiException $e) {
                print $e->getMessage();
            }
        }

        /**
         * Helper to execute the sample.
         *
         * @return void
         */
        public function callSample(): void
        {
            $config = Config::generateConfig();

            self::updateAutofeedSettingsSample($config);
        }
    }

    // Run the script
    $sample = new UpdateAutofeedSettingsSample();
    $sample->callSample();

### Python

    from examples.authentication import configuration
    from examples.authentication import generate_user_credentials
    from google.protobuf import field_mask_pb2
    from google.shopping.merchant_accounts_v1 import AutofeedSettings
    from google.shopping.merchant_accounts_v1 import AutofeedSettingsServiceClient
    from google.shopping.merchant_accounts_v1 import UpdateAutofeedSettingsRequest

    _ACCOUNT = configuration.Configuration().read_merchant_info()


    def update_autofeed_settings():
      """Updates the AutofeedSettings of a Merchant Center account."""

      # Gets OAuth Credentials.
      credentials = generate_user_credentials.main()

      # Creates a client.
      client = AutofeedSettingsServiceClient(credentials=credentials)

      # Creates name to identify the AutofeedSettings.
      name = "accounts/" + _ACCOUNT + "/autofeedSettings"

      # Create AutofeedSettings with the updated fields.
      autofeed_settings = AutofeedSettings(name=name, enable_products=False)

      # Create the field mask.
      field_mask = field_mask_pb2.FieldMask(paths=["enable_products"])

      # Creates the request.
      request = UpdateAutofeedSettingsRequest(
          autofeed_settings=autofeed_settings, update_mask=field_mask
      )

      # Makes the request and catches and prints any error messages.
      try:
        response = client.update_autofeed_settings(request=request)
        print("Updated AutofeedSettings Name below")
        print(response.name)
      except RuntimeError as e:
        print("Update AutofeedSettings request failed")
        print(e)


    if __name__ == "__main__":
      update_autofeed_settings()

### cURL

    curl -X PATCH \
    "https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/autofeedSettings?updateMask=enableProducts" \
    -H "Authorization: Bearer <API_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{
          "name": "accounts/{ACCOUNT_ID}/autofeedSettings",
          "enableProducts": true
        }'