Desarrolladores
Documentación API
La API de GMB Club permite publicar y programar posts via Zapier, Make o tus propios scripts. También permite recuperar artículos generados.
Conceptos clave
La API v2 usa la arquitectura Esfera/Burbuja de GMB Club.
| Concept | Description | Ejemplo |
|---|---|---|
| Esfera | Marca / Empresa | "Auto Sud" |
| Burbuja | Establecimiento / Punto de venta | "Auto Sud Marseille" |
| Recursos | Cuentas conectadas | Facebook, Instagram, GMB |
Important
Autenticación
La API utiliza claves API para la autenticación. Una clave puede tener dos alcances: cubre o bien un solo establecimiento (clave de burbuja), o bien todos los establecimientos de la marca (clave de esfera). Una clave de burbuja solo ve los datos de su establecimiento; una clave de esfera ve los de todos los establecimientos, la opción ideal para un sitio multiestablecimiento: una sola clave, una sola integración. Llama a GET /api/v2/me en primer lugar para saber de qué alcance dispones: el campo «burbuja» está rellenado para una clave de burbuja y vale null para una clave de esfera.
Alcance de la clave: burbuja o esfera
Una única regla de alcance, válida para toda la API:
- Una clave cubre un establecimiento (clave de burbuja) o toda la marca (clave de esfera). Define lo que está autorizado, nunca lo que se apunta.
- Toda ruta que actúa sobre un objetivo acepta un parámetro de objetivo:
bulle_idpara un establecimiento,fiche_idpara una ficha de Google. Siempre en el mismo lugar: parámetro de URL en lectura, campo del cuerpo en escritura. - Sin parámetro: una clave de burbuja apunta a su establecimiento; una clave de esfera recibe un
400que nombra el parámetro que falta. Nunca una elección arbitraria. - Las rutas de lista sin parámetro devuelven el conjunto de la marca, y cada elemento lleva su
bulle_id. - Un objetivo fuera del alcance de la clave devuelve
403; un objetivo inexistente,404.
Respuestas posibles (mensajes del backend, en francés):
| Code | Respuesta (detail) |
|---|---|
403 | Cet établissement n'appartient pas à votre périmètre. |
403 | Cette fiche GMB n'appartient pas à votre périmètre. |
404 | Établissement introuvable : <identifiant> |
404 | Aucune fiche GMB associée à cette clé API. |
400 | Cette clé API couvre plusieurs établissements. Précisez `bulle_id` (liste : GET /api/v2/bulles). |
400 | Cette clé API couvre plusieurs fiches Google. Précisez `fiche_id` (liste : GET /api/v2/me). |
Obtener una clave API
- Inicia sesión en GMB Club
- Selecciona tu burbuja en el encabezado
- Ajustes → Claves API → Nueva clave
- Elige el alcance: «Este establecimiento» o «Toda la marca»
- Configura permisos y copia la clave
Una clave «Toda la marca» cubre todos los establecimientos, incluidos los creados más adelante: es la opción correcta para un sitio único que da servicio a varios establecimientos: un solo secreto que gestionar, sin ninguna intervención prevista al abrir un nuevo establecimiento.
Important
Formato
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxUso
curl -H "X-API-Key: gmb_live_xxxx..." \
-H "Content-Type: application/json" \
https://app.gmb-club.com/api/v2/meSolo JSON
Base URL
https://app.gmb-club.com/api/v2Endpoints
/api/v2/healthVerifica que la API funciona. Sin autenticación.
{
"status": "ok",
"api_version": "2.0",
"timestamp": "2026-07-27T18:00:00.000000Z"
}Identidad de la clave
/api/v2/meAuthreadDevuelve info sobre la clave, burbuja, esfera y recursos.
{
"api_version": "2.0",
"bulle": { "id": "abc-123", "name": "Auto Sud Marseille", "city": "Marseille" },
"sphere": { "id": "xyz-789", "name": "Auto Sud", "slug": "auto-sud" },
"permissions": ["read", "schedule", "publish"],
"rate_limits": { "per_minute": 60, "per_day": 1000 },
"connected_platforms": ["facebook", "instagram", "gmb", "linkedin"],
"gmb_fiches": [{
"id": "accounts/115473832376124235338/locations/12517715818229047311",
"name": "Auto Sud - Marseille Centre",
"address": "12 rue de la Paix, 13001, Marseille",
"service_area": false
}]
}Clave de esfera
bulle vale null y el array gmb_fiches lista todas las fichas de la marca.Conexiones sociales
/api/v2/connectionsAuthreadDetalles de redes sociales conectadas.
[
{ "platform": "facebook", "connected": true, "name": "Auto Sud Marseille", "bulle_id": "abc-123", "expires_at": "2025-12-15T10:00:00", "needs_reconnect": false },
{ "platform": "instagram", "connected": true, "name": "autosud_marseille", "bulle_id": "abc-456", "expires_at": "2025-12-15T10:00:00", "needs_reconnect": false }
]| Parámetro | Type | Defecto |
|---|---|---|
bulle_id | string | Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca. |
Con una clave de esfera, bulle_id indica a qué establecimiento pertenece cada página de Facebook o cuenta de Instagram.
Límites de plataforma
/api/v2/platforms/limitsAuthreadLímites de caracteres y medios por plataforma.
{
"character_limits": { "<plateforme>": "<int>" },
"image_limits": {
"<plateforme>": { "max_size_mb": "<int>", "carousel_min": "<int?>", "carousel_max": "<int?>" }
},
"video_limits": {
"<plateforme>": { "max_size_mb": "<int>", "max_duration_sec": "<int?>" }
}
}Shape, not frozen values
Crear un post
/api/v2/postsAuthscheduleCrea un post programado o publica inmediatamente.
Errores comunes
Clave de esfera: bulle_id obligatorio
bulle_id es ahora obligatorio en POST /posts. Antes la llamada tenía éxito eligiendo un establecimiento por defecto, lo que podía publicar en la ficha de Google equivocada. Las integraciones existentes que utilizan una clave de esfera deben añadir este campo.Body (JSON)
{
"content": "Discover our new arrivals! 🚗 #automobile",
"platforms": ["facebook", "instagram", "gmb"],
"image_url": "https://example.com/images/promo.jpg",
"scheduled_at": "2025-12-01T10:00:00+01:00",
"gmb_fiche_id": "gmb-fiche-123-456"
}Parámetros
| Campo | Type | Requerido | Description |
|---|---|---|---|
content | string | Si | Texto del post (1-5000 car.) |
platforms | array | Si | Array: facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. La plataforma debe estar conectada en el establecimiento; de lo contrario, HTTP 400 « Plateforme non connectée ». |
image_url | string | No | URL de imagen única |
image_urls | array | No | Array JSON de URLs para carrusel (2-10) |
video_url | string | No | URL de video |
scheduled_at | string | No | ISO 8601 (defecto: +1h) |
gmb_fiche_id | string | No | ID de ficha GMB |
publish_now | boolean | No | Si true, publica inmediatamente |
bulle_id | string | Clave de esfera | Obligatorio con una clave de esfera: el establecimiento apuntado. Deducido automáticamente con una clave de burbuja. |
content or text
Response:
{
"id": 42,
"content": "Discover our new arrivals! 🚗 #automobile",
"platforms": ["facebook", "instagram", "gmb"],
"status": "scheduled",
"image_url": "https://example.com/images/promo.jpg",
"scheduled_gmb": "2025-12-01T10:00:00+01:00",
"created_at": "2025-11-29T18:00:00Z",
"updated_at": "2025-11-29T18:00:00Z",
"warnings": []
}Listar posts
/api/v2/postsAuthreadPosts con paginación.
| Parámetro | Type | Defecto | Description |
|---|---|---|---|
status | string | - | pending, published, error |
limit | integer | 50 | 1-100 |
offset | integer | 0 | Offset de paginación |
bulle_id | string | - | Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca. |
Bare array
[
{
"id": 42,
"bulle_id": "abc-123",
"content": "Discover our new arrivals! 🚗",
"platforms": ["facebook", "gmb"],
"status": "published",
"image_url": "https://example.com/images/promo.jpg",
"image_urls": null,
"video_url": null,
"scheduled_instagram": null,
"scheduled_facebook": "2025-12-01T10:00:00+01:00",
"scheduled_gmb": "2025-12-01T10:00:00+01:00",
"scheduled_linkedin": null,
"scheduled_pinterest": null,
"scheduled_tiktok": null,
"scheduled_snapchat": null,
"scheduled_youtube": null,
"published_instagram": null,
"published_facebook": "2025-12-01T10:00:05+01:00",
"published_gmb": "2025-12-01T10:00:05+01:00",
"published_linkedin": null,
"published_pinterest": null,
"published_tiktok": null,
"published_snapchat": null,
"published_youtube": null,
"error_instagram": null,
"error_facebook": null,
"error_gmb": null,
"error_linkedin": null,
"error_pinterest": null,
"error_tiktok": null,
"error_snapchat": null,
"error_youtube": null,
"platform_refs": { "facebook": "...", "gmb": "..." },
"created_at": "2025-11-29T18:00:00Z",
"updated_at": "2025-12-01T10:00:05Z",
"warnings": []
}
]Respuesta completa, campo por campo
scheduled_ / published_ / error_ por plataforma: la fecha prevista, la fecha de publicación efectiva y el mensaje de error eventual. Una plataforma no afectada por esta publicación tiene sus tres campos en null. platform_refs contiene las referencias de las publicaciones en cada plataforma una vez publicadas; warnings, las advertencias no bloqueantes./api/v2/posts/{post_id}AuthreadRecupera un post por su identificador. Devuelve el mismo objeto que un elemento de GET /api/v2/posts.
/api/v2/posts/{post_id}AuthscheduleActualiza un post pendiente.
Partial update
Body (JSON)
{
"content": "Updated text!",
"scheduled_at": "2025-12-02T14:00:00+01:00"
}/api/v2/posts/{post_id}AuthdeleteElimina un post pendiente o con error.
/api/v2/posts/{post_id}/publishAuthpublishFuerza publicación inmediata.
Publicación social simplificada
Tres endpoints pensados para las integraciones Make, n8n y Zapier: publicar, verificar la cuota, seguir el estado. Todos exigen una clave de burbuja (véase «Alcance de la clave»).
Listar artículos
/api/v2/articlesAuthreadArtículos generados para esta burbuja.
Sitio sin tu sitio ni Wix
{
"articles": [{
"id": 12,
"title": "5 tips for maintaining your car",
"excerpt": "Expert tips to extend your vehicle's life.",
"content_html": "<h2>Introduction</h2><p>Regular maintenance...</p>",
"featured_image_url": "https://storage.example.com/images/article-12.jpg",
"meta_title": "5 car maintenance tips | Auto Sud Marseille",
"meta_description": "Our experts share their best car maintenance tips.",
"target_keyword": "car maintenance Marseille",
"category": "Tips",
"status": "published",
"published_at": "2026-03-10T14:00:00Z",
"created_at": "2026-03-08T09:00:00Z",
"updated_at": "2026-03-12T08:30:00Z",
"slug": "5-conseils-pour-entretenir-sa-voiture",
"bulle_id": "abc-123",
"bulle_name": "Auto Sud Marseille"
}],
"total": 24, "limit": 10, "offset": 0
}Sitio multiestablecimiento
bulle_id indica en qué página publicar cada uno. bulle_id vale null si el artículo solo está vinculado a la marca, sin establecimiento. La correspondencia completa de los establecimientos se obtiene mediante GET /api/v2/bulles.La sección de un artículo
Parámetros
| Parámetro | Type | Defecto |
|---|---|---|
status | string | published · draft · all |
updated_since | string | ISO 8601: artículos modificados desde esta fecha (filtro sobre updated_at, orden del más antiguo al más reciente). |
bulle_id | string | Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca. |
Mantenerse sincronizado
Detectar una corrección. since filtra sobre la fecha de publicación: un artículo publicado hace un mes y corregido esta mañana no aparece en ella. Para recuperar las correcciones, utiliza updated_since, que filtra sobre updated_at. Los resultados se ordenan entonces del más antiguo al más reciente, lo que permite reanudar una sincronización allí donde se detuvo conservando el último valor recibido.
Construye tus URLs con slug, nunca con el título. El slug se fija en la primera publicación y nunca se recalcula, aunque el título se corrija después. Derivar la URL del título expondría tus páginas a un cambio de dirección tras la indexación.
Detectar una retirada. Un artículo despublicado ya no aparece en status=published. Con status=all, vuelve a aparecer con su estado real («draft»), una señal explícita. Un artículo eliminado, en cambio, desaparece por completo: trata la lista recibida como la fuente de verdad: lo que ya no está en ella ya no está en línea.
/api/v2/articles/{article_id}AuthreadContenido completo de un artículo por ID.
{
"id": 12,
"title": "5 conseils pour entretenir sa voiture",
"excerpt": "Nos conseils d'expert.",
"content_html": "<h2>Introduction</h2><p>...</p>",
"featured_image_url": "https://storage.example.com/images/article-12.jpg",
"meta_title": "5 conseils entretien | Auto Sud",
"meta_description": "Nos experts partagent leurs conseils.",
"target_keyword": "entretien voiture marseille",
"category": "Conseils",
"status": "published",
"published_at": "2026-03-10T14:00:00Z",
"created_at": "2026-03-08T09:00:00Z",
"updated_at": "2026-03-12T08:30:00Z",
"slug": "5-conseils-pour-entretenir-sa-voiture",
"bulle_id": "abc-123",
"bulle_name": "Auto Sud Marseille"
}Confirmar el renderizado de un artículo
/api/v2/articles/{article_id}/confirmAuthreadPingback enviado por tu script después de renderizar un artículo obtenido. Tiene dos efectos: 1. permite a GMB Club saber qué artículos están realmente en línea en tu sitio, y no solo expuestos por la API; 2. al enviar `rendered_url`, alimenta el enlazado interno de tus artículos, el efecto más útil en el día a día. Opcional pero recomendado.
Cuándo llamarlo
Cuerpo JSON opcional. El campo `rendered_url` (string, máx. 2048 caracteres, debe empezar por http:// o https://) es la URL pública de la página en la que tu script acaba de renderizar el artículo. Es la única dirección de tu sitio que GMB Club conoce: permite que tus próximos artículos citen los anteriores con un enlace que apunta al lugar correcto. Sin ella no es posible ningún enlazado interno en tu sitio: nunca adivinamos una URL, y un enlace inventado sería un enlace roto. Técnicamente opcional, pero muy recomendable.
// After rendering the article in the DOM
fetch(`https://app.gmb-club.com/api/v2/articles/${article.id}/confirm`, {
method: "POST",
headers: {
"X-API-Key": "gmb_live_xxxx...",
"Content-Type": "application/json"
},
body: JSON.stringify({ rendered_url: location.href })
});Consejo CORS
$ch = curl_init("https://app.gmb-club.com/api/v2/articles/{$id}/confirm");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"rendered_url" => "https://monsite.fr/blog/article-{$id}"
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-API-Key: gmb_live_xxxx...",
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);await fetch(`https://app.gmb-club.com/api/v2/articles/${id}/confirm`, {
method: "POST",
headers: {
"X-API-Key": process.env.GMB_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ rendered_url: `https://monsite.fr/blog/article-${id}` }),
});import requests
requests.post(
f"https://app.gmb-club.com/api/v2/articles/{id}/confirm",
headers={"X-API-Key": "gmb_live_xxxx...", "Content-Type": "application/json"},
json={"rendered_url": f"https://monsite.fr/blog/article-{id}"},
)curl -X POST \
-H "X-API-Key: gmb_live_xxxx..." \
-H "Content-Type: application/json" \
-d '{"rendered_url": "https://monsite.fr/blog/123"}' \
https://app.gmb-club.com/api/v2/articles/42/confirmRespuesta 200 en una confirmación correcta:
{
"article_id": 42,
"confirmed_at": "2026-05-25T14:30:00Z",
"confirmation_source": "pingback"
}Enlazado interno de tus artículos
Convenciones transversales
Tres mecanismos se repiten en la mayoría de los endpoints v2. Entenderlos una vez evita muchos errores.
Vista previa sin riesgo: dry_run
Ficha por defecto: fiche_id opcional
Operaciones largas: respuesta 202
Espacio de trabajo
Esfera de la clave
/api/v2/spheresAuthreadDevuelve la esfera (marca) asociada a la clave API: nombre, slug, tono e idioma por defecto.
[
{
"id": "xyz-789",
"name": "Auto Sud",
"slug": "auto-sud",
"default_language": "fr",
"default_tone": "professionnel",
"created_at": "2026-01-15T09:00:00Z"
}
]Establecimientos de la esfera
/api/v2/bullesAuthreadLista las burbujas (establecimientos) de la esfera, con su ciudad y el número de fichas Google asociadas.
[
{ "id": "abc-123", "name": "Auto Sud Marseille", "city": "Marseille", "tone": "professionnel", "language": "fr", "sphere_id": "xyz-789", "created_at": "2026-01-20T11:00:00Z" },
{ "id": "abc-456", "name": "Auto Sud Aix", "city": "Aix-en-Provence", "tone": "professionnel", "language": "fr", "sphere_id": "xyz-789", "created_at": "2026-01-20T11:05:00Z" }
]Detalle de un establecimiento
/api/v2/bulles/{bulle_id}AuthreadDevuelve el detalle de una burbuja: tono e idioma efectivos (heredados de la esfera si no están definidos), número de fichas Google, redes conectadas.
{
"id": "abc-123",
"name": "Auto Sud Marseille",
"city": "Marseille",
"tone": "professionnel",
"language": "fr",
"sphere_id": "xyz-789",
"created_at": "2026-01-20T11:00:00Z",
"effective_tone": "professionnel",
"effective_language": "fr",
"gmb_fiches_count": 2
}Reseñas de Google
Listar las reseñas
/api/v2/reviewsAuthreadDevuelve las reseñas de Google de la ficha, paginadas y filtrables (nota, estado de respuesta, palabra clave, fechas), ordenables por fecha o nota.
Parámetros
| Parámetro | Type | Defecto |
|---|---|---|
min_stars | integer | 1-5 · 1 |
max_stars | integer | 1-5 · 5 |
status | string | responded · drafts · unresponded |
keyword | string | - |
date_from | string | ISO 8601 |
date_to | string | ISO 8601 |
sort_by | string | date_desc |
fiche_id | string | Ficha por defecto: fiche_id opcional |
limit | integer | 1-100 · 25 |
page | integer | 1 |
{
"fiche": { "id": "gmb-fiche-123", "name": "Auto Sud - Marseille Centre", "address": "12 rue de la Paix, Marseille", "place_id": "ChIJ...", "average_rating": 4.6, "total_reviews": 128 },
"reviews": [{
"review_id": "rev-abc",
"customer_name": "Julie A.",
"rating": 5,
"text": "Service impeccable, je recommande !",
"review_timestamp": "2026-07-01T09:12:00Z",
"response_text": null,
"reply_date": null,
"responded": false,
"author_photo": "https://lh3.googleusercontent.com/..."
}],
"average_rating": 4.6,
"total_reviews": 128,
"filtered_count": 1,
"status_counts": { "all": 128, "responded": 90, "drafts": 12, "unresponded": 26 },
"page": 1,
"total_pages": 3
}Resumen de las reseñas
/api/v2/reviews/summaryAuthreadDevuelve la nota media, el total de reseñas y su distribución por estado (respondidas, borradores, sin respuesta).
{
"fiche": { "id": "gmb-fiche-123", "name": "Auto Sud - Marseille Centre" },
"average_rating": 4.6,
"total_reviews": 128,
"status_counts": { "all": 128, "responded": 90, "drafts": 12, "unresponded": 26 }
}Captación de reseñas
Estadísticas de captación
/api/v2/acquisition/statsAuthreadDevuelve las estadísticas de solicitudes de reseña en 30 días: número enviado, por canal (SMS, email) y por estado.
{
"fiche_id": "gmb-fiche-123",
"total_requests": 84,
"by_channel": { "sms": 50, "email": 34 },
"by_status": {},
"last_30_days": 84
}Enviar solicitudes de reseña
/api/v2/acquisition/review-requestsAuthpublishEnvía solicitudes de reseña por SMS y/o email a una lista de contactos. Sujeto a las cuotas mensuales. Respuesta 202 con un batch_id; admite dry_run.
Body (JSON)
{
"contacts": [
{ "customer_name": "Julie A.", "channel": "sms", "customer_phone": "+33612345678" },
{ "customer_name": "Marc D.", "channel": "email", "customer_email": "[email protected]", "custom_message": "Merci pour votre visite !" }
],
"dry_run": false
}contacts[]
Response:
{
"queued": true,
"queued_count": 2,
"batch_id": "batch-abc-123",
"contacts": [
{ "customer_name": "Julie A.", "channel": "sms", "contact": "+33612345678" },
{ "customer_name": "Marc D.", "channel": "email", "contact": "[email protected]" }
],
"fiche_name": "Auto Sud - Marseille Centre"
}Ficha Google
Estadísticas de Google Business
/api/v2/gmb/metricsAuthreadDevuelve los KPI de la ficha Google en un periodo: vistas, búsquedas, llamadas, clics hacia la web, solicitudes de itinerario.
| Parámetro | Type | Defecto |
|---|---|---|
period_days | integer | 1-90 · 30 |
fiche_id | string | Ficha por defecto: fiche_id opcional |
{
"fiche_id": "gmb-fiche-123",
"fiche_name": "Auto Sud - Marseille Centre",
"period_days": 30,
"kpis": {
"views_total": 5420,
"views_search": 3110,
"views_maps": 2310,
"calls": 87,
"website": 214,
"directions": 156,
"messages": 12,
"bookings": 4
},
"timeseries": [
{ "label": "2026-06-01", "vues": 180, "interactions": 22 }
],
"breakdown": {}
}Puntuación de optimización
/api/v2/gmb/optimizerAuthreadDevuelve la última puntuación de optimización de la ficha (de 0 a 100), en caché. Lectura rápida, sin nueva auditoría.
{
"kind": "gmb",
"fiche_id": "gmb-fiche-123",
"fiche_name": "Auto Sud - Marseille Centre",
"display_name": "Auto Sud - Marseille Centre",
"score": 82,
"breakdown": {},
"scored_at": "2026-07-05T08:00:00Z"
}Lanzar una auditoría completa
/api/v2/gmb/optimizer/auditAuthpublishLanza una auditoría completa de la ficha (datos de Google + análisis IA) y devuelve una puntuación detallada con sugerencias de mejora. Operación costosa: admite dry_run.
{
"kind": "gmb",
"fiche_id": "gmb-fiche-123",
"fiche_name": "Auto Sud - Marseille Centre",
"score": 82,
"breakdown": {},
"suggestions": [
{ "field": "description", "reason": "Trop courte", "suggested_value": "..." },
{ "field": "hours", "reason": "Horaires du dimanche manquants" }
],
"review_count": 128,
"avg_rating": 4.6,
"analyzed_at": "2026-07-05T08:00:00Z"
}Aplicar cambios
/api/v2/gmb/optimizer/applyAuthpublishAplica una lista de modificaciones {field, value} en la ficha Google (escritura real en Google). Operación costosa: admite dry_run.
Body (JSON)
{
"changes": [
{ "field": "description", "value": "Garage automobile à Marseille..." }
],
"dry_run": true
}Response (dry_run):
{
"dry_run": true,
"fiche_id": "gmb-fiche-123",
"fiche_name": "Auto Sud - Marseille Centre",
"changes": [ { "field": "description", "value": "Garage automobile à Marseille..." } ],
"fields": ["description"]
}Puntuación de visibilidad en el Local Pack
/api/v2/visibility/scanAuthreadDevuelve el último escaneo de visibilidad de la ficha en el Local Pack de Google: puntuación y posición media alrededor del punto de venta.
{
"fiche_id": "gmb-fiche-123",
"snapshot_id": "snap-789",
"visibility_score": 74,
"scanned_at": "2026-07-04T10:00:00Z"
}Si no hay ningún escaneo disponible, la respuesta adopta la forma siguiente, y no la forma plana con visibility_score:
{ "fiche_id": "gmb-fiche-123", "snapshot": null }SEO y palabras clave
Datos SEO
/api/v2/seo/dataAuthreadDevuelve el último snapshot SEO completo de la ficha. El parámetro kind precisa el contenido: snapshot (posiciones, tráfico, salud) o competitors (competidores identificados).
| Parámetro | Type | Defecto |
|---|---|---|
kind | string | snapshot · competitors · (défaut : snapshot) |
bulle_id | string | Obligatorio con una clave de esfera (el establecimiento apuntado). Facultativo con una clave de burbuja. |
Response:
Con datos (caso normal), la respuesta es plana:
{
"kind": "snapshot",
"snapshot_id": 42,
"bulle_id": "abc-123",
"created_at": "2026-03-10T04:00:00Z",
"website_url": "https://auto-sud-marseille.fr",
"has_ai_analysis": true,
"ranked_keywords": {},
"competitors": {},
"onpage": {},
"pagespeed": {},
"ai_analysis": {}
}Bloques de contenido condicionales
ranked_keywords, competitors, onpage, pagespeed, ai_analysis) están ausentes de la respuesta cuando el escaneo no los produjo: no valen null, no están presentes. Comprueba su presencia antes de leerlos.Cuando aún no se ha ejecutado ningún escaneo para este establecimiento:
{ "kind": "snapshot", "snapshot": null, "bulle_id": "abc-123" }Con kind=competitors:
{
"kind": "competitors",
"bulle_id": "abc-123",
"competitors": [],
"snapshot_date": "2026-03-10T04:00:00Z"
}Sin escaneo: competitors vale [] y snapshot_date está ausente.
Palabras clave seguidas
/api/v2/seo/tracked-keywordsAuthreadLista las palabras clave seguidas para la ficha, con su posición actual, la variación (delta) y el volumen de búsqueda.
bulle_id — Obligatorio con una clave de esfera (el establecimiento apuntado). Facultativo con una clave de burbuja.
[
{
"id": 12,
"keyword": "garage marseille",
"last_position": 4,
"previous_position": 6,
"delta": 2,
"last_search_volume": 1300,
"last_url": "https://autosud.fr/",
"last_checked_at": "2026-07-05T06:00:00Z",
"created_at": "2026-05-01T09:00:00Z",
"history": [ { "checked_at": "2026-07-05T06:00:00Z", "position": 4 } ]
}
]Añadir una palabra clave al seguimiento
/api/v2/seo/tracked-keywordsAuthpublishAñade una palabra clave al seguimiento de posicionamiento de la ficha.
Body (JSON)
{ "keyword": "garage marseille centre" }bulle_id — Obligatorio con una clave de esfera: el establecimiento apuntado. Deducido automáticamente con una clave de burbuja.
Response:
{
"id": 34,
"keyword": "garage marseille centre",
"last_position": null,
"previous_position": null,
"delta": null,
"last_search_volume": null,
"last_url": null,
"last_checked_at": null,
"created_at": "2026-07-20T10:00:00Z",
"history": []
}Datos de Search Console
/api/v2/seo/search-consoleAuthreadDevuelve los datos de Google Search Console en directo (impresiones, clics, posición) según las dimensiones, filtros y fechas solicitados.
| Parámetro | Type | Defecto |
|---|---|---|
dimensions | array | query · page · date · country · device |
days | integer | 1-365 |
start_date | string | ISO 8601 |
end_date | string | ISO 8601 |
row_limit | integer | - |
query_contains | string | - |
query_equals | string | - |
page_contains | string | - |
page_equals | string | - |
country | string | - |
device | string | - |
search_type | string | - |
bulle_id | string | Obligatorio con una clave de esfera (el establecimiento apuntado). Facultativo con una clave de burbuja. |
Response:
{
"bulle_id": "abc-123",
"site_url": "https://autosud.fr/",
"start_date": "2026-06-01",
"end_date": "2026-06-30",
"dimensions": ["query"],
"search_type": "web",
"row_count": 1,
"rows": [ { "keys": ["garage marseille"], "clicks": 42, "impressions": 800, "ctr": 0.0525, "position": 4.2 } ]
}Lanzar un escaneo SEO
/api/v2/seo/scanAuthpublishLanza un escaneo SEO completo de la ficha. Sujeto a una cuota mensual (429 si se supera). Operación costosa: admite dry_run.
Body (JSON)
{ "dry_run": false }bulle_id — Obligatorio con una clave de esfera: el establecimiento apuntado. Deducido automáticamente con una clave de burbuja.
429
Response:
{
"ran": true,
"kind": "full",
"bulle_id": "abc-123",
"scanned_at": "2026-07-20T10:00:00Z",
"quota_used": 3,
"quota_limit": 10
}Analizar una palabra clave
/api/v2/seo/keyword-lookupAuthpublishAnaliza una palabra clave bajo demanda: volumen de búsqueda, dificultad, palabras clave relacionadas. Operación costosa: admite dry_run.
Body (JSON)
{ "keyword": "vidange voiture marseille", "dry_run": false }bulle_id — Obligatorio con una clave de esfera: el establecimiento apuntado. Deducido automáticamente con una clave de burbuja.
Response:
{
"kind": "keyword-lookup",
"keyword": "vidange voiture marseille",
"result": {}
}Artículos SEO/GEO (creación y publicación)
Crear artículos
/api/v2/articlesAuthpublishCrea uno o varios artículos para los sitios conectados (WordPress, Wix). La redacción por IA se realiza en segundo plano. Sujeto a una cuota. Respuesta 201.
Body (JSON)
{
"title": "Comment entretenir sa voiture en été",
"target_keyword": "entretien voiture été",
"site_ids": [12, 34],
"wix_site_ids": [7],
"ai_word_count_target": 1500,
"generate_content": true,
"generate_image": false,
"tone": "professional",
"language": "fr",
"meta_title": "Entretien voiture été | Auto Sud",
"meta_description": "Nos conseils d'expert pour préparer l'été.",
"excerpt": "Préparez votre véhicule pour l'été.",
"category": "Conseils"
}Parámetros
| Campo | Type | Requerido |
|---|---|---|
title | string (min 3) | Si |
target_keyword | string (min 2) | Si |
site_id · site_ids | integer · integer[] | No |
wix_site_id · wix_site_ids | integer · integer[] | No |
ai_word_count_target | integer · 1500 | No |
generate_content | boolean · true | No |
generate_image | boolean · false | No |
tone | string · professional | No |
language | string · fr | No |
featured_image_url · meta_title · meta_description · excerpt | string | No |
category | string (max 80) · null | No |
bulle_id | string | Clave de esfera |
201 Created
Response:
{
"created": [ { "id": 42, "title": "Comment entretenir sa voiture en été", "site_id": 12 } ],
"skipped": [ { "wix_site_id": 7, "reason": "already_exists" } ],
"count": 1,
"generating": true
}Sin CMS (sitio a medida)
bulle_id en lugar de un sitio CMS (site_ids / wix_site_ids), el artículo se crea y se vincula al establecimiento, sin CMS. Es el modo de los sitios a medida (Next.js, Astro, tema propio): el artículo se sirve luego mediante GET /api/v2/articles, que tu sitio consume por sí mismo.{
"title": "5 conseils pour entretenir sa voiture",
"target_keyword": "entretien voiture marseille",
"bulle_id": "abc-123"
}La respuesta lleva entonces kind = api en created[], con site_id en null:
{
"created": [ { "id": 43, "kind": "api", "site_id": null } ],
"count": 1,
"generating": true
}Modificar un artículo
/api/v2/articles/{article_id}AuthpublishActualiza parcialmente un artículo (solo se modifican los campos proporcionados). Devuelve 409 si el artículo ya está publicado en línea.
Body (JSON)
{
"title": "Nouveau titre",
"content_html": "<h2>...</h2>",
"excerpt": "...",
"meta_title": "...",
"meta_description": "...",
"target_keyword": "...",
"featured_image_url": "https://...",
"category": "Guide"
}Partial update
Response:
{ "article_id": 42, "updated_fields": ["title", "meta_description"], "status": "draft" }Publicar o programar un artículo
/api/v2/articles/{article_id}/publishAuthpublishPublica un artículo inmediatamente, o lo programa si se proporciona scheduled_at (fecha ISO futura). Operación costosa: admite dry_run.
Body (JSON)
{
"scheduled_at": "2026-07-15T09:00:00+02:00",
"dry_run": false
}Response:
{
"scheduled": true,
"article_id": 42,
"title": "Comment entretenir sa voiture en été",
"scheduled_at": "2026-07-15T09:00:00+02:00"
}Códigos QR
Listar los códigos QR
/api/v2/qr-codesAuthreadDevuelve los códigos QR con seguimiento de la burbuja, con el número de escaneos y el tipo de redirección (gate).
[
{
"id": 1,
"bulle_id": "abc-123",
"name": "Avis Auto Sud",
"target": "Page Google Reviews",
"scan_count": 342,
"last_scanned_at": "2026-07-18T15:00:00Z",
"is_active": true,
"gate_enabled": true,
"gate_threshold": 4,
"created_at": "2026-04-01T10:00:00Z"
}
]bulle_id — Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca.
Crear un código QR
/api/v2/qr-codesAuthpublishCrea un código QR con seguimiento que apunta a una URL de destino, con un color y un logotipo opcionales.
Body (JSON)
{
"target_url": "https://g.page/r/xxxx/review",
"name": "Avis Auto Sud",
"color_hex": "#000000",
"with_logo": true
}bulle_id — Facultativo: sin él, una clave de esfera crea un código QR a nivel de la marca (válido).
Response:
{
"id": 1,
"name": "Avis Auto Sud",
"target_url": "https://g.page/r/xxxx/review",
"short_url": "https://gmb.link/xxxx",
"png_url": "https://app.gmb-club.com/static/qr/xxxx.png",
"color_hex": "#000000",
"with_logo": true,
"scan_count": 0,
"created_at": "2026-07-20T10:00:00Z"
}Sitios e informes
Sitios conectados
/api/v2/sitesAuthreadLista los sitios conectados a la burbuja. Filtrable por plataforma (wordpress, wix, shopify, prestashop).
| Parámetro | Type | Defecto |
|---|---|---|
platform | string | wordpress · wix |
bulle_id | string | Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca. |
[
{
"platform": "wordpress",
"id": 1,
"site_url": "https://autosud.fr",
"site_name": "Auto Sud",
"sphere_id": "xyz-789",
"bulle_id": "abc-123",
"is_shared": false,
"has_api_key": true,
"wp_version": "6.5",
"plugin_version": "1.4.0",
"theme_name": "GeneratePress"
},
{
"platform": "wix",
"id": 2,
"site_url": "https://autosud-aix.wixsite.com",
"site_name": "Auto Sud Aix",
"sphere_id": "xyz-789",
"bulle_id": "abc-456",
"is_shared": false,
"has_token": true
}
]Listar los informes
/api/v2/reportsAuthreadDevuelve los informes ya generados, con las URL de descarga en PDF y CSV.
| Parámetro | Type | Defecto |
|---|---|---|
type | string | fiche · (défaut : fiche) |
limit | integer | 1-100 · 20 |
bulle_id | string | Restringir a un establecimiento. Por defecto: el de la clave, o todos los establecimientos de la marca. |
[
{
"fiche_name": "Auto Sud - Marseille Centre",
"report_name": "Rapport juin 2026",
"period": "2026-06",
"generated_at": "2026-07-01T08:00:00Z",
"pdf_url": "https://app.gmb-club.com/static/reports/rep-1.pdf",
"csv_url": "https://app.gmb-club.com/static/reports/rep-1.csv"
}
]Generar un informe
/api/v2/reportsAuthpublishGenera un informe en PDF. type = fiche para un establecimiento, o combine con al menos dos fiche_ids. Procesamiento asíncrono (~1 a 2 min): respuesta 202, resultado recuperable a través de GET /v2/reports.
Body (JSON)
{
"type": "combine",
"fiche_ids": ["gmb-fiche-123", "gmb-fiche-456"],
"date_start": "2026-06-01",
"date_end": "2026-06-30",
"report_name": "Rapport juin 2026",
"dry_run": false
}date_start and date_end required
202 Accepted
Response:
{ "generated": true, "type": "combine", "report_id": "rep-1", "fiches_count": 2 }Imágenes
Subir una imagen
/api/v2/images/uploadAuthpublishEnvía una imagen (image_base64 O url, nunca ambos). Formatos JPEG, PNG, WebP, GIF, 8 MB como máximo. Devuelve una image_url reutilizable en las publicaciones y los artículos.
Body (JSON)
{ "url": "https://example.com/photo.jpg" }
// ou : { "image_base64": "data:image/png;base64,iVBORw0..." }Response:
{
"uploaded": true,
"image_url": "https://app.gmb-club.com/static/uploads/mcp/xxxx.webp",
"size_bytes": 84213,
"format": "webp"
}Generar una imagen con IA
/api/v2/images/generateAuthpublishGenera una imagen con IA a partir de un prompt. align_with_brand (activado por defecto) aplica la identidad visual de la marca. Devuelve una image_url.
Body (JSON)
{
"prompt": "Un mécanicien souriant dans un garage moderne et lumineux",
"align_with_brand": true
}bulle_id — Obligatorio con una clave de esfera cuando align_with_brand vale true (el establecimiento cuya identidad se alinea).
Response:
{
"generated": true,
"image_url": "https://app.gmb-club.com/static/uploads/mcp/xxxx.webp",
"brand_aligned": true
}Permisos
Permisos configurables:
readLeer posts, artículos, conexiones
scheduleCrear y modificar posts programados
publishPublicar inmediatamente
deleteEliminar posts
Rate Limiting
Límites de solicitudes configurables:
| Límite | Valor por defecto |
|---|---|
| Por minuto | 60 |
| Por día | 1000 |
Códigos de error
| Code | Description |
|---|---|
200 | Éxito |
201 | Recurso creado |
202 | Operaciones largas: respuesta 202 |
400 | Solicitud invalida |
401 | Clave API invalida |
403 | Permiso insuficiente |
404 | No encontrado |
409 | Conflicto de estado (p. ej. artículo ya publicado) |
410 | Recurso desaparecido en el proveedor (p. ej. reseña eliminada de Google) |
422 | Datos invalidos |
429 | Rate limit excedido |
500 | Error del servidor |
502 | Fallo de un servicio externo (Google, DataForSEO) |
503 | Servicio no configurado o no disponible |
Ejemplos de código
import requests
API_KEY = "gmb_live_xxxx..."
BASE_URL = "https://app.gmb-club.com/api/v2"
headers = { "X-API-Key": API_KEY, "Content-Type": "application/json" }
# 1. Get key info
me = requests.get(f"{BASE_URL}/me", headers=headers).json()
print(f"Sphere: {me['sphere']['name']}")
print(f"Bubble: {me['bulle']['name']}")
# 2. Create a post
response = requests.post(f"{BASE_URL}/posts", headers=headers, json={
"content": "Post from Python!",
"platforms": ["facebook", "instagram"],
"scheduled_at": "2025-12-01T10:00:00+01:00"
})
print(response.json())
# 3. Get published articles
articles = requests.get(f"{BASE_URL}/articles", headers=headers,
params={"status": "published", "limit": 10}).json()
for article in articles['articles']:
print(f"#{article['id']}: {article['title']}")Make · n8n · Zapier
Módulos de Make.com y n8n
dry_run
Make.com
Usa el módulo HTTP > Make a request.
Parámetro critico
Zapier
Usa Webhooks by Zapier > Custom Request.
Seguridad
| Medida | Description |
|---|---|
| Claves hasheadas | SHA256, nunca en texto plano |
| HTTPS obligatorio | Todas las solicitudes via HTTPS |
| Aislamiento por burbuja | Cada clave accede solo a su burbuja |
| Expiracion opcional | Las claves pueden expirar |
| Revocación | Revocable en cualquier momento |
| Rate limiting | Protección via Redis |

/api/v2/social/publishAuthpublishPublica o programa un post en una o varias plataformas.
Body (JSON)
platformstextimage_urlimage_urlsvideo_urlscheduled_atbulle_idplatforms: facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb.text: 1 a 63206 caracteres.image_urlpara una imagen única,image_urlspara un carrusel.scheduled_at(ISO 8601) ausente = publicación inmediata.Response:
statusvalepublishing(publicación inmediata) oscheduled(programada).