Merchant API code sample to insert regional inventory.

### Java

    // Copyright 2025 Google LLC
    //
    // Licensed under the Apache License, Version 2.0 (the "License");
    // you may not use this file except in compliance with the License.
    // You may obtain a copy of the License at
    //
    //     https://www.apache.org/licenses/LICENSE-2.0
    //
    // Unless required by applicable law or agreed to in writing, software
    // distributed under the License is distributed on an "AS IS" BASIS,
    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    // See the License for the specific language governing permissions and
    // limitations under the License.

    package shopping.merchant.samples.inventories.v1;

    import com.google.api.gax.core.FixedCredentialsProvider;
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.shopping.merchant.inventories.v1.InsertRegionalInventoryRequest;
    import com.google.shopping.merchant.inventories.v1.RegionalInventory;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryAttributes.Availability;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceClient;
    import com.google.shopping.merchant.inventories.v1.RegionalInventoryServiceSettings;
    import com.google.shopping.type.Price;
    import shopping.merchant.samples.utils.Authenticator;
    import shopping.merchant.samples.utils.Config;

    /** This class demonstrates how to insert a regional inventory for a given product */
    public class InsertRegionalInventorySample {

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

      public static RegionalInventory insertRegionalInventory(Config config, String productId, String regionId)
          throws Exception {
        GoogleCredentials credential = new Authenticator().authenticate();

        RegionalInventoryServiceSettings regionalInventoryServiceSettings =
            RegionalInventoryServiceSettings.newBuilder()
                .setCredentialsProvider(FixedCredentialsProvider.create(credential))
                .build();

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

        try (RegionalInventoryServiceClient regionalInventoryServiceClient =
            RegionalInventoryServiceClient.create(regionalInventoryServiceSettings)) {

          Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();

          InsertRegionalInventoryRequest request =
              InsertRegionalInventoryRequest.newBuilder()
                  .setParent(parent)
                  .setRegionalInventory(
                      RegionalInventory.newBuilder()
                          .setRegion(regionId)
                          .setRegionalInventoryAttributes(
                              RegionalInventoryAttributes.newBuilder()
                                  .setAvailability(Availability.OUT_OF_STOCK)
                                  .setPrice(price)
                                  .build())
                          .build())
                  .build();

          System.out.println("Sending insert RegionalInventory request");
          RegionalInventory response = regionalInventoryServiceClient.insertRegionalInventory(request);
          System.out.println("Inserted RegionalInventory Name below");
          System.out.println(response.getName());
          return response;
        }
      }

      public static void main(String[] args) throws Exception {
        Config config = Config.load();
        // An ID assigned to a product by Google. In the format
        // contentLanguage~feedLabel~offerId
        String productId = "en~label~1111111111";
        // The ID uniquely identifying each region.
        String regionId = "1111111";
        insertRegionalInventory(config, productId, regionId);
      }
    }

### PHP

    <?php

    /**
     * Copyright 2023 Google Inc. All Rights Reserved.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */

    require_once __DIR__ . '/../../../vendor/autoload.php';
    require_once __DIR__ . '/../../Authentication/Authentication.php';
    use Google\ApiCore\ApiException;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventory;
    use Google\Shopping\Merchant\Inventories\V1\Client\RegionalInventoryServiceClient;
    use Google\Shopping\Merchant\Inventories\V1\InsertRegionalInventoryRequest;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes;
    use Google\Shopping\Merchant\Inventories\V1\RegionalInventoryAttributes\Availability;
    use Google\Shopping\Type\Price;

    /**
     * Class to insert a `RegionalInventory` to a given product in your
     * merchant account.
     *
     * Replaces the full `RegionalInventory` resource if an entry with the same
     * [`region`]
     * [google.shopping.merchant.inventories.v1.RegionalInventory.region]
     * already exists for the product.
     *
     * It might take up to 30 minutes for the new or updated `RegionalInventory`
     * resource to appear in products.
     */

    class InsertRegionalInventory
    {
        // ENSURE you fill in the merchant account and product ID for the sample to
        // work.
        private const PARENT = 'accounts/[INSERT_ACCOUNT_HERE]/products/[INSERT_PRODUCT_HERE]';
        // ENSURE you fill in region ID for the sample to work.
        private const REGIONAL_INVENTORY_REGION = 'INSERT_REGION_HERE';

        /**
         * Inserts a regional inventory underneath the parent product.
         *
         * @param string $parent The account and product where this inventory will be inserted.
         *     Format: `accounts/{account}/products/{product}`
         * @param string $regionalInventoryRegion
         *     ID of the region for this
         *     `RegionalInventory` resource. See the [Regional availability and
         *     pricing](https://support.google.com/merchants/answer/9698880) for more details.
         */
        public function insertRegionalInventorySample(string $parent, string $regionalInventoryRegion): 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.
            $regionalInventoryServiceClient = new RegionalInventoryServiceClient($options);

            // Creates a price object.
            $price = new Price(
                [
                    'currency_code' => "USD",
                    'amount_micros' => 33450000,
                ]
            );

            // Creates a new regional inventory object.
            $regionalInventory = (new RegionalInventory())
                ->setRegion($regionalInventoryRegion)
                ->setRegionalInventoryAttributes((new RegionalInventoryAttributes())
                    ->setAvailability(Availability::IN_STOCK)
                    ->setPrice($price));

            $request = (new InsertRegionalInventoryRequest())
                ->setParent($parent)
                ->setRegionalInventory($regionalInventory);

            // Calls the API and catches and prints any network failures/errors.
            try {
                /** @var RegionalInventory $response */
                $response = $regionalInventoryServiceClient->insertRegionalInventory($request);
                printf('Response data: %s%s', $response->serializeToJsonString(), PHP_EOL);
            } catch (ApiException $ex) {
                printf('Call failed with message: %s%s', $ex->getMessage(), PHP_EOL);
            }
        }

        /**
         * Helper to execute the sample.
         */
        public function callSample(): void
        {
            // Makes the call to insert the regional inventory to the parent product
            // for the given region.
            $this->insertRegionalInventorySample($this::PARENT, $this::REGIONAL_INVENTORY_REGION);
        }

    }


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

### Python

    # -*- coding: utf-8 -*-
    # Copyright 2025 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    """A module to insert a Regional Inventory."""

    from examples.authentication import configuration
    from examples.authentication import generate_user_credentials
    from google.shopping import merchant_inventories_v1
    from google.shopping.merchant_inventories_v1.types import RegionalInventoryAttributes

    # ENSURE you fill in the product ID and region ID for the sample to
    # work.
    _ACCOUNT = configuration.Configuration().read_merchant_info()
    # ENSURE you fill in the product ID for the sample to work.
    _PRODUCT = "PRODUCT_ID"
    _PARENT = f"accounts/{_ACCOUNT}/products/{_PRODUCT}"
    # ENSURE you fill in region ID for the sample to work.
    _REGION = "REGION_ID"


    def insert_regional_inventory():
      """Inserts a `RegionalInventory` to a given product.

      Replaces the full `RegionalInventory` resource if an entry with the same
      `region` already exists for the product.

      It might take up to 30 minutes for the new or updated `RegionalInventory`
      resource to appear in products.
      """

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

      # Creates a client.
      client = merchant_inventories_v1.RegionalInventoryServiceClient(
          credentials=credentials
      )

      # Creates a regional inventory and populate its attributes.
      regional_inventory = merchant_inventories_v1.RegionalInventory()
      regional_inventory.region = _REGION
      regional_inventory.regional_inventory_attributes.availability = (
          RegionalInventoryAttributes.Availability.IN_STOCK
      )
      regional_inventory.regional_inventory_attributes.price = {
          "currency_code": "USD",
          "amount_micros": 33450000,
      }

      # Creates the request.
      request = merchant_inventories_v1.InsertRegionalInventoryRequest(
          parent=_PARENT,
          regional_inventory=regional_inventory,
      )

      # Makes the request and catch and print any error messages.
      try:
        response = client.insert_regional_inventory(request=request)

        print("Insert successful")
        print(response)
      except RuntimeError as e:
        print("Insert failed")
        print(e)


    if __name__ == "__main__":
      insert_regional_inventory()