Atualize os detalhes e horários de um local

Altere contatos, publique horários semanais completos com exceções, marque fechamento temporário, defina categorias do Google e confira as alterações.

POST /locations/update realiza uma atualização parcial. Todos os campos ficam em input, input.id é o único campo obrigatório, e os campos que você omitir mantêm seus valores atuais. Cada seção abaixo altera apenas o corpo JSON da requisição.

1. Atualize o telefone e o site

Envie id junto com os campos que deseja alterar. As plataformas de publicação publicam bizUrl como a URL do site. O locations.update() do Python SDK recebe um dict com chaves camelCase, e o updateLocation() do Node SDK recebe o mesmo objeto.

Phone and website
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "phone": "5125550199",    "bizUrl": "https://acmekitchen.example.com"  }}'
JSON
{  "data": {    "updateLocation": {      "success": true,      "errors": null,      "location": {        "id": "TG9jYXRpb246MTgwMDI4OQ==",        "databaseId": 1800289,        "name": "Jenny Home",        "phone": "5125550199",        "status": "APPROVED"      }    }  }}

Uma falha de validação ainda retorna HTTP 200, com success: false e o motivo em data.updateLocation.errors, portanto verifique success em vez do código de status. Ambos os SDKs lançam ValidationError nesse caso.

2. Defina os horários semanais

businessHours é um array com uma entrada para cada dia da semana. Sempre envie as sete entradas e marque um dia sem funcionamento com type: "CLOSED" e um array slots vazio em vez de omiti-lo. Os intervalos de um mesmo dia não devem se sobrepor.

CampoValoresObservações
dayDe MONDAY a SUNDAY, ou SPECIALSPECIAL é uma exceção pontual para a data em specialDate.
typeOPEN ou CLOSEDUse CLOSED com slots: [] para um dia sem funcionamento.
slots[].start, slots[].end09:00am, 05:00pmHorários no formato de 12 horas com am ou pm. São permitidos vários intervalos por dia para turnos divididos.
specialDateYYYY-MM-DDApenas em uma entrada SPECIAL, enviada junto com as sete entradas dos dias da semana, nunca no lugar delas.
moreHours[]hoursTypeId, moreHour[]Horários secundários, como os de entrega ou drive-through. moreHour usa a mesma estrutura de day, type, slots e não tem specialDate.
Weekly hours
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "businessHours": [      { "day": "MONDAY",    "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "TUESDAY",   "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "WEDNESDAY", "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "THURSDAY",  "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "FRIDAY",    "type": "OPEN",   "slots": [{ "start": "09:00am", "end": "05:00pm" }] },      { "day": "SATURDAY",  "type": "OPEN",   "slots": [{ "start": "10:00am", "end": "02:00pm" }] },      { "day": "SUNDAY",    "type": "CLOSED", "slots": [] }    ]  }}'

Para um feriado, acrescente uma entrada SPECIAL ao mesmo array. Ela substitui os horários apenas daquela data e mantém o padrão semanal:

JSON
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }

3. Marque um fechamento temporário ou oculte o endereço

temporarilyClosed: true marca a empresa como fechada e interrompe a publicação dos horários dela. Defina esse campo como false para reabrir. Para uma empresa com área de atendimento, defina hideAddress: true: ListingsAPI mantém o endereço no local, mas não o envia às plataformas de publicação.

Temporary closure
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "temporarilyClosed": true } }'

4. Defina as categorias do Google

O Google Business Profile tem sua própria taxonomia de categorias, separada do subCategoryId numérico. primaryGbpSiteCategoryId recebe um GCID, como gcid:restaurant, e additionalGbpSiteCategoryIds recebe mais deles. Ambos são resolvidos com base em countryIso, portanto envie o país na mesma chamada.

Google categories
curl -X POST https://listingsapi.com/api/v4/locations/update \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "id": "TG9jYXRpb246MTgwMDI4OQ==",    "countryIso": "US",    "primaryGbpSiteCategoryId": "gcid:restaurant",    "additionalGbpSiteCategoryIds": ["gcid:pizza_restaurant", "gcid:italian_restaurant"]  }}'

Não confunda esses campos com additionalCategoryIds, que recebe valores inteiros de databaseId do endpoint de subcategorias. Consulte Consulte países, estados e categorias.

5. Consulte o local novamente

GET /locations-by-ids retorna o registro completo de um ou mais IDs em base64, passados como um array JSON no parâmetro de consulta ids. Compare phone, businessHours e temporarilyClosed com o que você enviou.

Verify
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getLocationsByIds": [      {        "id": "TG9jYXRpb246MTgwMDI4OQ==",        "databaseId": 1800289,        "name": "Jenny Home",        "phone": "5125550199",        "hideAddress": false,        "temporarilyClosed": true      }    ]  }}

Os IDs que não existem na sua conta são removidos do array sem gerar erro, portanto compare a quantidade retornada com a que você solicitou.

Se os webhooks estiverem configurados, um evento profile.updated será disparado. A entrega é limitada a uma por local a cada 60 segundos, no início da janela: as edições posteriores nessa janela são agrupadas, e changed_fields descreve apenas a edição que a iniciou. Consulte o local novamente quando o evento chegar e mais uma vez após o encerramento da janela.

Próximos passos