Locations
Crie, leia, atualize e gerencie o ciclo de vida de arquivamento dos locais pertencentes aos seus clientes.
Retorna uma página de locais, os mais recentes primeiro. Todos os filtros são opcionais e se combinam (um local precisa corresponder a todos); para avançar para mais resultados, envie novamente o nextCursor retornado.
Listar / buscar locais
/api/v1/locations{
"data": [
{
"id": "loc_456",
"name": "Acme Dental — Downtown",
"city": "Austin",
"state": "TX",
"clientId": "cli_123",
"createdAt": "2026-01-15T10:05:00.000Z"
}
]
}Cria um novo local para um cliente existente e o envia para publicação.
Criar um local
/api/v1/locations{
"data": {
"locationId": "loc_456"
}
}Retorna o perfil comercial completo de um local: endereço, horários, categorias, atributos, serviços, mídia e status de verificação.
Obter um local
/api/v1/locations/{id}{
"data": {
"id": "loc_456",
"name": "Acme Dental — Downtown",
"description": null,
"tagline": null,
"storeCode": null,
"logoUrl": null,
"street": "123 Main St",
"street1": null,
"city": "Austin",
"state": "TX",
"postalCode": "78701",
"country": "US",
"latitude": 30.2672,
"longitude": -97.7431,
"phone": "+15125551234",
"additionalPhones": [],
"website": "https://acmedental.com",
"businessEmail": null,
"categoryName": "Dentist",
"primaryCategoryDisplay": "Dentist",
"primaryCategoryGoogle": "gcid:dentist",
"additionalCategories": [],
"attributes": [
{
"id": "attributes/wi_fi",
"value": true
}
],
"services": [
{
"name": "Teeth Whitening",
"description": null,
"price": 150,
"currency": "USD",
"googleServiceTypeId": null
}
],
"ownerName": null,
"menuUrl": null,
"yearEstablished": null,
"tags": [
"vip"
],
"labels": [],
"regularHours": [
{
"day": "MONDAY",
"closed": false,
"periods": [
{
"openTime": "09:00",
"closeTime": "17:00"
}
]
}
],
"moreHours": [],
"specialHours": [],
"mediaByCategory": {
"EXTERIOR": [
{
"url": "https://cdn.synup.com/media/1.jpg"
}
]
},
"clientId": "cli_123",
"archived": false,
"scheduledArchiveAt": null,
"verificationStatus": "verified"
}
}Edita os detalhes comerciais de um local existente — endereço, categorias, atributos do perfil comercial do Google, serviços e horários. Envie apenas os campos que deseja alterar; um campo enviado substitui totalmente seu valor atual (uma string vazia limpa um campo de texto, uma lista nova completa substitui uma existente). O país não pode ser alterado após a criação. As alterações salvas são automaticamente colocadas na fila para sincronizar com os diretórios e listagens conectados.
Atualizar um local
/api/v1/locations/{id}{
"data": {
"location": {
"id": "loc_456",
"name": "Acme Dental — Downtown",
"tagline": "Gentle care, on time",
"city": "Austin",
"state": "TX",
"clientId": "cli_123"
},
"rejectedAttributes": []
}
}Os serviços do Perfil da Empresa no Google oferecidos por este local.
Listar os serviços de um local
/api/v1/locations/{id}/services{
"data": {
"services": [
{
"name": "Teeth Whitening",
"description": null,
"price": 150,
"currency": "USD",
"googleServiceTypeId": null
}
]
}
}Adiciona um serviço à lista do local e republica a lista completa no Google (o Google não tem adição atômica — cada salvamento substitui todo o array).
Adicionar um serviço
/api/v1/locations/{id}/services{
"data": {
"services": [
{
"name": "Teeth Whitening",
"description": null,
"price": 150,
"currency": "USD",
"googleServiceTypeId": null
}
]
}
}Remove um serviço pelo nome e republica a lista restante no Google.
Remover um serviço
/api/v1/locations/{id}/services{
"data": {
"services": []
}
}AGENDA um local para arquivar no final do período de faturamento atual. Até então, o local permanece totalmente ativo, faturável e continua contando para o limite de locais do plano — nada é excluído, e o agendamento não libera espaço para adicionar outro local até que o arquivamento realmente ocorra. Chame cancel-archive para cancelar isso antes que aconteça, ou reactivate depois para trazer o local de volta.
Agendar o arquivamento de um local
/api/v1/locations/{id}/archive{
"data": {
"scheduled": true,
"scheduledArchiveAt": "2026-02-01T00:00:00.000Z",
"archiveAt": "2026-03-01T00:00:00.000Z"
}
}Cancela um arquivamento de local pendente, de modo que um local agendado para arquivar no final do período de faturamento continue normalmente. Só funciona enquanto o arquivamento ainda estiver pendente — um local que já foi arquivado precisa ser reativado.
Cancelar um arquivamento agendado
/api/v1/locations/{id}/cancel-archive{
"data": {
"cancelled": true
}
}Restaura um local já arquivado — e todas as listagens vinculadas a ele — e limpa qualquer agendamento de arquivamento pendente. Um local que não está arquivado no momento é um sucesso sem efeito (no-op), não um erro.
Reativar um local arquivado
/api/v1/locations/{id}/reactivate{
"data": {
"archived": false,
"cancelledScheduledPosts": 0
}
}Retorna a contagem agregada de localizações de toda a sua agência (ou de um cliente), detalhada por status, nível de pacote e status de verificação.
Obter resumo de localizações
/api/v1/locations/summary{
"data": {
"total": 12,
"byStatus": {
"approved": 10,
"pending_verification": 1,
"archival_pending": 1
},
"byVerification": {
"verified": 9,
"pending": 1,
"unknown": 2
}
}
}{
"data": {
"id": "tag_789",
"name": "VIP",
"clientId": "cli_123"
}
}{
"data": {
"locationsUnassigned": 3
}
}{
"data": {
"added": [
"loc_456"
],
"skipped": []
}
}{}Pesquisa na taxonomia geral de categorias de negócio (reflete a do Google, milhares de entradas) — dados de referência globais, não restritos à sua agência. O id retornado é um id de Category para definir como categoryId de um local ao criar ou atualizar. Para o catálogo próprio de um publisher específico, use GET /api/v1/locations/publisher-categories. Omita search por completo para listar toda a taxonomia, sem limite.
Buscar na taxonomia de categorias gerais
/api/v1/locations/categories{
"data": {
"categories": [
{
"id": "cat_dentist",
"name": "Dentist"
},
{
"id": "cat_orthodontist",
"name": "Orthodontist"
}
]
}
}Pesquisa no catálogo próprio (GABF) de um publisher — dados de referência globais, não restritos à sua agência. Use o id retornado para publisherCategories de um local ao criar ou atualizar. Omita query por completo para listar todo o catálogo do publisher, sem limite.
Buscar no catálogo de categorias próprio de um publisher
/api/v1/locations/publisher-categories{
"data": {
"categories": [
{
"id": "gcid:dentist",
"displayName": "Dentist"
}
]
}
}Lista locais junto com suas fotos, as mais recentes primeiro — mesmos filtros de GET /api/v1/locations. Use isso para perguntas como "quais locais não têm fotos?", em vez de GET /api/v1/media, que retorna a mídia de apenas UM local por vez.
Listar locais com sua mídia
/api/v1/locations/media{
"data": {
"locations": [
{
"id": "loc_456",
"name": "Acme Dental — Downtown",
"logoUrl": null,
"mediaByCategory": {
"EXTERIOR": [
{
"url": "https://cdn.synup.com/media/1.jpg"
}
]
},
"total": 1
}
],
"nextCursor": null,
"total": 1
}
}Adiciona uma ou mais fotos a um local, em uma determinada categoria. Informe cada imagem como uma URL https pública (buscada e re-hospedada) ou como bytes base64. Apenas imagens são suportadas (jpeg, png, gif, webp), com máximo de 5 MB cada. A categoria LOGO guarda um único logotipo — enviar para LOGO substitui o atual. Toda outra categoria apenas acrescenta. As fotos salvas são automaticamente colocadas na fila para publicação no Google.
Enviar fotos para um local
/api/v1/locations/{id}/media{
"data": {
"mediaByCategory": {
"EXTERIOR": [
{
"url": "https://cdn.synup.com/media/1.jpg",
"source": "agent_upload"
}
]
},
"added": [
{
"category": "EXTERIOR",
"url": "https://cdn.synup.com/media/1.jpg"
}
]
}
}Remove fotos de um local. Envie urls para excluir fotos específicas, ou category para limpar uma categoria inteira. O logotipo nunca pode ser excluído por este endpoint — nem por url, nem por category — envie uma nova imagem LOGO para substituí-lo em vez disso. Isso remove as fotos no aplicativo; não as exclui do Google.
Excluir as fotos de um local
/api/v1/locations/{id}/media{
"data": {
"mediaByCategory": {
"EXTERIOR": []
},
"removed": [
"https://cdn.synup.com/media/1.jpg"
]
}
}