Locations
Cree, lea, actualice y gestione el ciclo de vida de archivado de las ubicaciones de sus clientes.
Devuelve una página de ubicaciones, empezando por las más recientes. Todos los filtros son opcionales y se combinan (una ubicación debe cumplir con todos ellos); para avanzar a más resultados, vuelva a enviar el nextCursor devuelto.
Listar / buscar ubicaciones
/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"
}
]
}Crea una nueva ubicación para un cliente existente y la envía para su publicación.
Crear una ubicación
/api/v1/locations{
"data": {
"locationId": "loc_456"
}
}Devuelve el perfil de negocio completo de una ubicación: dirección, horario, categorías, atributos, servicios, medios y estado de verificación.
Obtener una ubicación
/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 los datos de negocio de una ubicación existente — dirección, categorías, atributos del perfil de Google Business, servicios y horario. Envíe solo los campos que desea cambiar; un campo que sí envíe reemplaza su valor actual por completo (una cadena vacía borra un campo de texto, una lista nueva completa reemplaza una existente). El país no puede cambiarse después de la creación. Los cambios guardados se ponen en cola automáticamente para sincronizarse con los directorios y listados conectados.
Actualizar una ubicación
/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": []
}
}Los servicios del Perfil de Negocio de Google que ofrece esta ubicación.
Listar los servicios de una ubicación
/api/v1/locations/{id}/services{
"data": {
"services": [
{
"name": "Teeth Whitening",
"description": null,
"price": 150,
"currency": "USD",
"googleServiceTypeId": null
}
]
}
}Agrega un servicio a la lista de la ubicación y vuelve a publicar la lista completa en Google (Google no tiene una adición atómica — cada guardado reemplaza todo el arreglo).
Agregar un servicio
/api/v1/locations/{id}/services{
"data": {
"services": [
{
"name": "Teeth Whitening",
"description": null,
"price": 150,
"currency": "USD",
"googleServiceTypeId": null
}
]
}
}Elimina un servicio por nombre y vuelve a publicar la lista restante en Google.
Eliminar un servicio
/api/v1/locations/{id}/services{
"data": {
"services": []
}
}PROGRAMA el archivado de una ubicación al final del periodo de facturación actual. La ubicación permanece totalmente activa, facturable, y sigue contando contra el límite de ubicaciones del plan hasta entonces — no se elimina nada, y programarla no libera espacio para añadir otra ubicación hasta que realmente se archive. Llame a cancel-archive para cancelarlo antes de que se produzca, o a reactivate después para recuperar la ubicación.
Programar el archivado de una ubicación
/api/v1/locations/{id}/archive{
"data": {
"scheduled": true,
"scheduledArchiveAt": "2026-02-01T00:00:00.000Z",
"archiveAt": "2026-03-01T00:00:00.000Z"
}
}Cancela un archivado de ubicación pendiente, de modo que una ubicación programada para archivarse al final del periodo de facturación continúe con normalidad. Solo funciona mientras el archivado esté aún pendiente — una ubicación que ya se archivó debe reactivarse en su lugar.
Cancelar un archivado programado
/api/v1/locations/{id}/cancel-archive{
"data": {
"cancelled": true
}
}Restaura una ubicación ya archivada — y todos los listados que dependen de ella — y elimina cualquier programación de archivado pendiente. Una ubicación que no está archivada actualmente es un éxito sin efecto, no un error.
Reactivar una ubicación archivada
/api/v1/locations/{id}/reactivate{
"data": {
"archived": false,
"cancelledScheduledPosts": 0
}
}Devuelve el número agregado de ubicaciones de toda tu agencia (o de un cliente), desglosado por estado, nivel de paquete y estado de verificación.
Obtener resumen de ubicaciones
/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": []
}
}{}Busca en la taxonomía general de categorías de negocio (refleja la de Google, miles de entradas) — datos de referencia globales, no limitados a su agencia. El id devuelto es un id de Category para establecer como categoryId de una ubicación al crear o actualizar. Para el catálogo propio de un publisher específico, use en su lugar GET /api/v1/locations/publisher-categories. Omita search por completo para listar toda la taxonomía, sin límite.
Buscar en la taxonomía general de categorías
/api/v1/locations/categories{
"data": {
"categories": [
{
"id": "cat_dentist",
"name": "Dentist"
},
{
"id": "cat_orthodontist",
"name": "Orthodontist"
}
]
}
}Busca en el catálogo propio (GABF) de un publisher — datos de referencia globales, no limitados a su agencia. Use el id devuelto para publisherCategories de una ubicación al crear o actualizar. Omita query por completo para listar todo el catálogo del publisher, sin límite.
Buscar en el catálogo de categorías propio de un publisher
/api/v1/locations/publisher-categories{
"data": {
"categories": [
{
"id": "gcid:dentist",
"displayName": "Dentist"
}
]
}
}Lista ubicaciones junto con sus fotos, empezando por las más recientes — mismos filtros que GET /api/v1/locations. Úselo para preguntas como "¿qué ubicaciones no tienen fotos?", en lugar de GET /api/v1/media, que devuelve los medios de una sola ubicación a la vez.
Listar ubicaciones con sus medios
/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
}
}Añade una o más fotos a una ubicación, en una categoría dada. Proporcione cada imagen como una URL https pública (que se obtiene y se vuelve a alojar) o como bytes en base64. Solo se admiten imágenes (jpeg, png, gif, webp), de hasta 5 MB cada una. La categoría LOGO contiene un único logo — subir una a LOGO reemplaza la actual. Cualquier otra categoría añade a la lista existente. Las fotos guardadas se ponen en cola automáticamente para publicarse en Google.
Subir fotos a una ubicación
/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"
}
]
}
}Elimina fotos de una ubicación. Envíe urls para eliminar fotos específicas, o category para vaciar toda una categoría. El logo nunca puede eliminarse mediante este endpoint — ni por url ni por category — suba en su lugar una nueva imagen LOGO para reemplazarlo. Esto elimina las fotos en la aplicación; no las elimina de Google.
Eliminar las fotos de una ubicación
/api/v1/locations/{id}/media{
"data": {
"mediaByCategory": {
"EXTERIOR": []
},
"removed": [
"https://cdn.synup.com/media/1.jpg"
]
}
}