Este guia explica o processo de migração da API Content for Shopping para a API Merchant para gerenciamento de dados comerciais.
Use este guia para migrar sua implementação atual da API Content for Shopping para a API Merchant. Para mais informações sobre os detalhes da API Merchant e das sub-APIs, consulte Design da API Merchant.
Primeiros passos
Para começar a usar a API Merchant, mude os URLs de solicitação para o seguinte formato:
https://merchantapi.googleapis.com/{SUB_API}/{VERSION}/{RESOURCE_NAME}:{METHOD}…
Para usar a API Merchant, vincule sua conta do Merchant Center e seu projeto do Google Cloud usando o método de registro de desenvolvedor, da seguinte forma:
POST https://merchantapi.googleapis.com/accounts/v1beta/accounts/{ACCOUNT_ID}/developerRegistration:registerGcp
{
developer_email:"example-email@example.com"
}
Para mais informações, consulte o guia de início rápido e a referência da API Merchant.
Confira as atualizações mais recentes na API Merchant (beta).
Melhorias em relação à API Content for Shopping
A API Merchant permite automatizar e simplificar fluxos de trabalho no Merchant Center e oferece recursos aprimorados em relação à API Content for Shopping.
Principais casos de uso:
- gerenciamento de contas automático
- Gerenciamento automatizado de produtos
- Gerenciamento automatizado de inventário
- Relatórios personalizados
Principais áreas de melhoria:
- Sub-APIs com novos recursos, incluindo:
- O rastreamento de pedidos oferece suporte ao histórico de rastreamento de pedidos comerciais para fornecer estimativas de frete precisas e acuradas aos clientes. Os indicadores também permitem listagens melhoradas com frete grátis e rápido.
- A resolução de problemas fornece acesso a conteúdo de diagnóstico e ações de suporte da mesma forma que está disponível na interface do Merchant Center.
- O Product Studio (ALPHA) usa a IA generativa para gerar e otimizar títulos e descrições de produtos. Você precisa assinar este formulário para solicitar acesso.
- Novos recursos na sub-API Accounts.
OmnichannelSettings
gerencia a configuração da conta para veiculação omnichannel, como listagens locais sem custo financeiro (LLG) e anúncios de inventário local (AIL).- O
LfpProviders
se conecta a parceiros da Local Feeds Partnership (LFP) para dados de inventário. - O
GbpAccounts
se conecta à conta do Perfil da Empresa no Google para dados da loja física. - O
OnlineReturnPolicy
permite criar, excluir e atualizar suas políticas on-line.
- Novos métodos para inventário, dados de produtos e outras APIs, incluindo:
- Um novo método na sub-API Products.
- Com
ProductsUpdate
, é possível atualizar produtos individuais sem precisar fornecer todos os campos obrigatórios paraProductInput
.
- A capacidade de criar não apenas fontes de dados principais, mas várias fontes de dados, como:
- Introdução ao upload de avaliações de produtos e comerciantes
- Com a API Merchant, é possível ativar notificações sobre mudanças nos dados da conta.
O que mudou:
- O
pageSize
máximo aumentou de 250 para 1.000 linhas por chamada de API. - Foi corrigido um atraso que existia para inserção de produtos, promoções, avaliações de produtos e avaliações de comerciantes após a criação de
DataSources
.
O que vem por aí:
- Descontinuação e remoção futura do campo "canal" para
DataSources
e produtos. - Lançamento de uma definição atualizada para
clickPotentialRank
na tabelaproductView
na sub-API Reporting: * O ranking de produtos com base emclickPotential
é normalizado para valores entre 1 e 1.000.- Os produtos com
clickPotentialRank
baixo ainda têm o maior potencial de cliques entre os produtos da loja que atendem às condições da consulta de pesquisa. Essa é uma mudança não destrutiva que pode ser lançada em 1º de julho de 2025.
- Os produtos com
- O
AccountIdAlias
no recursoAccountRelationship
permite gerenciar melhor estruturas de contas complexas. Por exemplo, os marketplaces usam um alias definido pelo usuário em vez do ID interno do comerciante, como o ID da conta.
Suporte ao gRPC
A API Merchant oferece suporte a gRPC e REST. Você pode usar o gRPC para a API Merchant e o REST para a API Content for Shopping ao mesmo tempo.
As bibliotecas de cliente da API Merchant exigem o gRPC.
Para mais informações, consulte Visão geral do gRPC.
Compatibilidade
Este guia descreve as mudanças gerais que se aplicam a toda a API Merchant.
A API Merchant foi criada para funcionar com os recursos atuais da API Content for Shopping.
Por exemplo, você pode usar a API Merchant Inventories com sua implementação atual da
API Content v2.1 para Shopping
products
. Você pode usar a API Content for Shopping para fazer upload de um novo produto local (que você vende em uma loja física) e usar o recurso LocalInventory
da API Merchant Inventories para gerenciar as informações na loja desse produto.
Melhorias em relação à API Content
A API Merchant é melhor que a API Content nas seguintes áreas:
- Sub-APIs com novos recursos para sua integração exclusiva
- Novos métodos para inventário, dados de produtos e outras APIs
- A capacidade de criar não apenas fontes de dados principais, mas várias fontes de dados, como:
- Introdução ao upload de avaliações de produtos e comerciantes
- Com a API Merchant, é possível ativar notificações sobre mudanças nos dados da conta.
- Apresenta a capacidade de filtragem para o recurso Accounts.
Considere essas mudanças com mais detalhes.
Controle de versões e sub-APIs
A API Merchant apresenta os conceitos de controle de versões e sub-APIs. O design modular melhora a facilidade de uso, permitindo que você se concentre nas sub-APIs necessárias e facilitando migrações futuras para versões mais recentes. O controle de versões será aplicado com seus URLs de solicitação.A estratégia é semelhante à experiência da API Google Ads.
Solicitações mais robustas
As solicitações de URL da API Merchant exigem mais parâmetros para chamar a API Merchant. Isso inclui o recurso, a versão, o nome (identificadores) e o método (métodos não padrão). Para mais informações, consulte Identificadores de conta e produto e exemplos.
Princípios da AIP para identificadores
Enquanto a API Content do Shopping usa IDs para identificar recursos (por exemplo, merchantId
, productId
), a API Merchant usa um identificador name
para se alinhar com a AIP (consulte Princípios de melhoria da API).
O identificador {name}
inclui o identificador do recurso e o pai dele (ou potencialmente vários pais), de modo que {name}
seja igual a accounts/{account}/products/{product}
.
Todas as chamadas de leitura e gravação retornam o campo name
como o identificador do recurso.
{name}
também inclui os identificadores de coleção accounts/
e products/
.
A API Merchant usa {account}
para se referir a um ID do Merchant Center e {product}
para se referir a identificadores de produtos.
Por exemplo, implemente um método getName()
para extrair o name
de um recurso e armazene a saída como uma variável em vez de construir o name
usando os IDs do comerciante e do recurso.
Confira um exemplo de como usar o campo name
nas suas chamadas:
POST https://merchantapi.googleapis.com/inventories/v1beta/{PARENT}/regionalInventories:insert
A tabela mostra como a solicitação products.get
da API Content for Shopping muda:
API Content for Shopping | API Merchant |
---|---|
GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products/{productId}
|
GET https://merchantapi.googleapis.com/products/v1beta/{name}
|
Para mais detalhes, consulte Mudanças de identificador.
Como outro exemplo, a recuperação de um produto com o identificador online~en~US~1234
do ID do Merchant Center 4321
usando a API Merchant seria assim:
GET
https://merchantapi.googleapis.com/products/v1beta/accounts/4321/products/online~en~US~1234
em que {name}
é igual a accounts/4321/products/online~en~US~1234
. Esse novo campo de nome
é retornado como o identificador de recurso para todas as chamadas de leitura e gravação na
API Merchant.
Na API Content for Shopping, dois pontos (:) indicam um delimitador no nome do produto. Já na API Merchant, um til (~) realiza essa função.
Por exemplo, ID do produto na API Content for Shopping:
channel:contentLanguage:feedLabel:offerId
.
na API Merchant Center passa a ser:
channel~contentLanguage~feedLabel~offerId
.
Campos principais para recursos filhos
Na API Merchant, todos os recursos filhos têm o campo
parent
. É possível usar o campo parent
para especificar o {name}
do recurso em que o filho será inserido, em vez de transmitir todo o recurso pai. Também é possível usar o campo parent
com list
Por exemplo, para listar inventários locais de um determinado produto, especifique o name
do produto no campo parent
do método list
. Nesse caso, o product
fornecido é o parent
dos recursos LocalInventory retornados.
GET
https://merchantapi.googleapis.com/inventories/v1beta/{parent}/localInventories
Para recuperar todos os inventários locais do produto online~en~US~1234'
e da conta 4321
, a solicitação seria assim:
GET
https://merchantapi.googleapis.com/inventories/v1beta/accounts/4321/products/online~en~US~1234/localInventories</code>
O elemento pai é accounts/{account}/products/{product}
. Nesse caso, o recurso localInventories tem dois recursos pai incluídos no identificador de nome (accounts/
e products/
), já que a conta é o recurso pai do produto.
Enums comuns
O uso de enums comuns oferece mais consistência.
O campo
Destination.DestinationEnum
especifica as plataformas em que os recursos serão exibidos.
DestinationEnum
lista todos os valores disponíveis para segmentação por destino e é unificado em todas as sub-APIs, por exemplo, para atributos de promoções.
O campo
ReportingContext.ReportingContextEnum
representa o contexto em que os problemas da conta e do produto se aplicam.
Esse campo é usado em todos os métodos de geração de relatórios (por exemplo, para IssueSeverityPerReportingContext
).
Compatibilidade com versões anteriores
À medida que você começa a usar a API Merchant, sua integração atual da API Content para Shopping continua funcionando sem interrupções. Para mais informações, consulte Compatibilidade.
Depois de migrar suas sub-APIs para a API Merchant, recomendamos que você use apenas a API Merchant para as sub-APIs migradas.
Disponibilidade de chamada de procedimento remoto (gRPC)
O gRPC é a nova maneira recomendada de integrar com a API Merchant.
As vantagens incluem:
- Independente de idioma
- Depende de buffers de protocolo
Usa HTTP/2 para oferecer soluções escalonáveis de alta performance (referência RPC)
Se você usa nossas bibliotecas de cliente ou exemplos de código, o gRPC é o mecanismo de transporte padrão.
Para mais informações sobre gRPC, consulte:
O agrupamento personalizado se torna agrupamento integrado
O processamento em lote funciona de maneira mais eficiente quando você usa chamadas assíncronas. Saiba mais sobre como usar chamadas paralelas para alcançar o agrupamento em lotes na API Merchant e como refatorar o código para solicitações simultâneas.
Para acelerar a migração, recomendamos as bibliotecas de cliente.
A API Merchant não é compatível com o método
customBatch
apresentado na API Content for Shopping. Em vez disso, consulte Enviar várias solicitações de uma vez ou execute suas chamadas de forma assíncrona.
O exemplo de Java a seguir demonstra como inserir uma entrada de produto.
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.shopping.merchant.products.v1beta.Attributes;
import com.google.shopping.merchant.products.v1beta.InsertProductInputRequest;
import com.google.shopping.merchant.products.v1beta.ProductInput;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1beta.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1beta.Shipping;
import com.google.shopping.type.Channel.ChannelEnum;
import com.google.shopping.type.Price;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to insert a product input */
public class InsertProductInputAsyncSample {
private static String getParent(String accountId) {
return String.format("accounts/%s", accountId);
}
private static String generateRandomString() {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder(8);
for (int i = 0; i < 8; i++) {
sb.append(characters.charAt(random.nextInt(characters.length())));
}
return sb.toString();
}
private static ProductInput createRandomProduct() {
Price price = Price.newBuilder().setAmountMicros(33_450_000).setCurrencyCode("USD").build();
Shipping shipping =
Shipping.newBuilder().setPrice(price).setCountry("GB").setService("1st class post").build();
Shipping shipping2 =
Shipping.newBuilder().setPrice(price).setCountry("FR").setService("1st class post").build();
Attributes attributes =
Attributes.newBuilder()
.setTitle("A Tale of Two Cities")
.setDescription("A classic novel about the French Revolution")
.setLink("https://exampleWebsite.com/tale-of-two-cities.html")
.setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
.setAvailability("in stock")
.setCondition("new")
.setGoogleProductCategory("Media > Books")
.addGtin("9780007350896")
.addShipping(shipping)
.addShipping(shipping2)
.build();
return ProductInput.newBuilder()
.setChannel(ChannelEnum.ONLINE)
.setContentLanguage("en")
.setFeedLabel("CH")
.setOfferId(generateRandomString())
.setAttributes(attributes)
.build();
}
public static void asyncInsertProductInput(Config config, String dataSource) throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates parent to identify where to insert the product.
String parent = getParent(config.getAccountId().toString());
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
// Creates five insert product input requests with random product IDs.
List<InsertProductInputRequest> requests = new ArrayList<>(5);
for (int i = 0; i < 5; i++) {
InsertProductInputRequest request =
InsertProductInputRequest.newBuilder()
.setParent(parent)
// You can only insert products into datasource types of Input "API", and of Type
// "Primary" or "Supplemental."
// This field takes the `name` field of the datasource.
.setDataSource(dataSource)
// If this product is already owned by another datasource, when re-inserting, the
// new datasource will take ownership of the product.
.setProductInput(createRandomProduct())
.build();
requests.add(request);
}
System.out.println("Sending insert product input requests");
List<ApiFuture<ProductInput>> futures =
requests.stream()
.map(
request ->
productInputsServiceClient.insertProductInputCallable().futureCall(request))
.collect(Collectors.toList());
// Creates callback to handle the responses when all are ready.
ApiFuture<List<ProductInput>> responses = ApiFutures.allAsList(futures);
ApiFutures.addCallback(
responses,
new ApiFutureCallback<List<ProductInput>>() {
@Override
public void onSuccess(List<ProductInput> results) {
System.out.println("Inserted products below");
System.out.println(results);
}
@Override
public void onFailure(Throwable throwable) {
System.out.println(throwable);
}
},
MoreExecutors.directExecutor());
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// Identifies the data source that will own the product input.
String dataSource = "accounts/" + config.getAccountId() + "/dataSources/{datasourceId}";
asyncInsertProductInput(config, dataSource);
}
}
Se você usa
customBatch
na
API Content e precisa desse recurso na API Merchant, informe o motivo no seu
feedback.
Recursos exclusivos
Os recursos futuros vão aparecer apenas na API Merchant. Há algumas exceções, como a especificação anual do feed de 2025.
Os recursos exclusivos da API Merchant incluem:
- API Reviews. Use as avaliações para implementar e gerenciar as classificações de produtos e lojas. Para mais informações, consulte Avaliação do vendedor e Avaliação do produto.
- Notificações: inscreva-se para receber notificações push sobre mudanças nos dados de produtos de uma conta.
Preço
Confira o que mudou para Price
no pacote Merchant Common:
API Content for Shopping | API Merchant | |
---|---|---|
Campo de valor | value:string |
amountMicros:int64 |
Campo de moeda | currency:string
|
currencyCode:string |
O valor Price
agora é registrado em micros, em que 1 milhão de micros é equivalente à unidade padrão da sua moeda.
Na API Content for Shopping, Price
era um número decimal na forma de uma string.
O nome do campo "Valor" mudou de value
para amountMicros
O nome do campo de moeda mudou de currency
para currencyCode
. O formato continua sendo ISO 4217.
Atualizações e anúncios mais recentes
Para atualizações mais detalhadas, consulte as notas da versão específicas de cada sub-API. Para atualizações mais regulares e agregadas da API Merchant, consulte nossas atualizações mais recentes.
Para mais detalhes específicos e informações sobre a API Merchant, consulte a visão geral do site para desenvolvedores e o guia geral de migração.
Consulte Design da API Merchant para detalhes sobre a API Merchant e as sub-APIs.