Actualiza los datos y el horario de una ubicación
Cambia datos de contacto, publica un horario semanal completo con excepciones, indica un cierre temporal, fija categorías de Google y relee los cambios.
POST /locations/update realiza una actualización parcial. Todos los campos van dentro de input, input.id es el único campo obligatorio y los campos que omitas conservan sus valores actuales. Cada sección a continuación cambia únicamente el cuerpo JSON de la solicitud.
1. Actualiza el teléfono y el sitio web
Envía id junto con los campos que quieras cambiar. Las plataformas de publicación publican bizUrl como URL del sitio web. locations.update() del Python SDK recibe un dict con claves camelCase, y updateLocation() del Node SDK recibe el mismo objeto.
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" }}'{ "data": { "updateLocation": { "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "status": "APPROVED" } } }}Un fallo de validación también devuelve HTTP 200, con success: false y el motivo en data.updateLocation.errors, así que comprueba success en lugar del código de estado. Ambos SDK lanzan ValidationError en ese caso.
2. Establece el horario semanal
businessHours es un array con una entrada por cada día de la semana. Envía siempre las siete entradas e indica los días de cierre con type: "CLOSED" y un array slots vacío en lugar de omitirlos. Los intervalos de un mismo día no deben solaparse.
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 un día festivo, añade una entrada SPECIAL al mismo array. Esta sustituye el horario únicamente para esa fecha y mantiene intacto el patrón semanal:
{ "day": "SPECIAL", "type": "CLOSED", "specialDate": "2026-12-25", "slots": [] }3. Indica un cierre temporal u oculta la dirección
temporarilyClosed: true marca el negocio como cerrado y deja de publicar su horario. Establécelo en false para volver a abrir. Para un negocio con área de servicio, establece hideAddress: true: ListingsAPI conserva la dirección en la ubicación, pero no la envía a las plataformas de publicación.
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. Establece las categorías de Google
Google Business Profile tiene su propia taxonomía de categorías, independiente del subCategoryId numérico. primaryGbpSiteCategoryId recibe un GCID, como gcid:restaurant, y additionalGbpSiteCategoryIds recibe más GCID. Ambos se resuelven en función de countryIso, así que envía el país en la misma llamada.
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"] }}'No los confundas con additionalCategoryIds, que recibe valores enteros de databaseId del endpoint de subcategorías. Consulta Consultar países, estados y categorías.
5. Vuelve a consultar la ubicación
GET /locations-by-ids devuelve el registro completo para uno o varios ids en base64, pasados como un array JSON en el parámetro de consulta ids. Compara phone, businessHours y temporarilyClosed con lo que enviaste.
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ=="]' \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "getLocationsByIds": [ { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "phone": "5125550199", "hideAddress": false, "temporarilyClosed": true } ] }}Los ids que no existen en tu cuenta se omiten del array sin generar un error, así que compara la cantidad devuelta con la que solicitaste.
Si hay webhooks configurados, se genera un evento profile.updated. Su entrega se limita a una por ubicación cada 60 segundos y se realiza al inicio de ese intervalo: las modificaciones posteriores dentro de ese intervalo se agrupan, y changed_fields describe únicamente la modificación que lo inició. Vuelve a consultar la ubicación cuando llegue el evento y otra vez cuando haya terminado el intervalo.
Siguientes pasos
- Sube un logotipo, una imagen de portada y fotos: añade imágenes al registro que acabas de actualizar.
- Busca ubicaciones y archiva las que ya no gestionas: busca por código de tienda y retira las sucursales cerradas.
- Actualiza una ubicación y Obtén ubicaciones por sus IDs: las páginas de referencia, que incluyen enlaces de acciones del lugar y todos los campos que se pueden modificar.