You can use the Inventories sub-API to indicate that your product information varies by region. For example, you might sell different products in different places, or charge different prices for the same products based on where they're purchased.
See Regional availability and pricing for more information.
Regional information is for products you sell online. See Add in-store information to your local products for details on in-store products.
Here are the steps to add regional information to your online products:
Create regions
Before you can add regional information to a product, you need to set up regions
for your Merchant Center account. You can use Merchant API regions
resource to create new regions.
See the Regions guide for a code sample, and more information on managing your regions.
Verify you have online products
If you need to add online products to your account, use Merchant API to insert new products , or create a data source .
Insert regional information
After you have online products in your Merchant Center account, you can add
regional information like region
, price
, and availability
.
Here's a sample you can use to add regional information to a product with regionalInventories.insert
:
Java
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
void
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
());
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
e
);
}
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Config
config
=
Config
.
load
();
// An ID assigned to a product by Google. In the format
// channel:contentLanguage:feedLabel:offerId
String
productId
=
"online:en:label:1111111111"
;
// The ID uniquely identifying each region.
String
regionId
=
"1111111"
;
insertRegionalInventory
(
config
,
productId
,
regionId
);
}
}
cURL
curl --location
'https://merchantapi.googleapis.com/inventories/v1/accounts/987654321/products/en~US~12345/regionalInventories:insert' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_TOKEN>' \
--data '{
"region": "123456",
"regionalInventoryAttributes": {
"price": {
"amountMicros": "33450000",
"currencyCode": "USD"
},
"availability": "OUT_OF_STOCK"
}
}'
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.v1beta.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();