Desarrolladores
Documentacion API
La API de GMB Club permite publicar y programar posts via Zapier, Make o tus propios scripts. Tambien permite recuperar articulos 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
Autenticacion
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. Llame a GET /api/v2/me en primer lugar para saber de qué alcance dispone: 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 sesion en GMB Club
- Seleccione su burbuja en el encabezado
- Ajustes → Claves API → Nueva clave
- Elija 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 autenticacion.
{
"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 }
]| Parametro | 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.
Limites de plataforma
/api/v2/platforms/limitsAuthreadLimites 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"
}Parametros
| 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 unica |
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 paginacion.
| Parametro | Type | Defecto | Description |
|---|---|---|---|
status | string | - | pending, published, error |
limit | integer | 50 | 1-100 |
offset | integer | 0 | Offset de paginacion |
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 publicacion 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 articulos
/api/v2/articlesAuthreadArticulos 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",
"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.Parametros
| Parametro | 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, utilice 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.
Construya sus 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 sus 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: trate 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 articulo 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",
"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"
}Confirmer le rendu d'un article
/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.
Quand l'appeler
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.
// Après avoir affiché l'article dans le 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 })
});Astuce 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/confirmRéponse 200 lors d'une confirmation réussie :
{
"article_id": 42,
"confirmed_at": "2026-05-25T14:30:00Z",
"confirmation_source": "pingback"
}Enlazado interno de tus artículos
Conventions transverses
Trois mécanismes reviennent sur la plupart des endpoints v2. Les comprendre une fois évite bien des erreurs.
Aperçu sans risque : dry_run
Fiche par défaut : fiche_id optionnel
Opérations longues : réponse 202
Espace de travail
Sphère de la clé
/api/v2/spheresAuthreadRetourne la sphère (marque) rattachée à la clé API : nom, slug, ton et langue par défaut.
[
{
"id": "xyz-789",
"name": "Auto Sud",
"slug": "auto-sud",
"default_language": "fr",
"default_tone": "professionnel",
"created_at": "2026-01-15T09:00:00Z"
}
]Établissements de la sphère
/api/v2/bullesAuthreadListe les bulles (établissements) de la sphère, avec leur ville et le nombre de fiches Google rattachées.
[
{ "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" }
]Détail d'un établissement
/api/v2/bulles/{bulle_id}AuthreadRetourne le détail d'une bulle : ton et langue effectifs (hérités de la sphère si non définis), nombre de fiches Google, réseaux connectés.
{
"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
}Avis Google
Lister les avis
/api/v2/reviewsAuthreadRetourne les avis Google de la fiche, paginés et filtrables (note, statut de réponse, mot-clé, dates), triables par date ou note.
Parametros
| Parametro | 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 | Fiche par défaut : fiche_id optionnel |
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
}Résumé des avis
/api/v2/reviews/summaryAuthreadRetourne la note moyenne, le total d'avis et leur répartition par statut (répondus, brouillons, sans réponse).
{
"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 }
}Acquisition d'avis
Statistiques d'acquisition
/api/v2/acquisition/statsAuthreadRetourne les statistiques des demandes d'avis sur 30 jours : nombre envoyé, par canal (SMS, email) et par statut.
{
"fiche_id": "gmb-fiche-123",
"total_requests": 84,
"by_channel": { "sms": 50, "email": 34 },
"by_status": {},
"last_30_days": 84
}Envoyer des demandes d'avis
/api/v2/acquisition/review-requestsAuthpublishEnvoie des demandes d'avis par SMS et/ou email à une liste de contacts. Soumise aux quotas mensuels. Réponse 202 avec un batch_id ; supporte 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"
}Fiche Google
Statistiques Google Business
/api/v2/gmb/metricsAuthreadRetourne les KPIs de la fiche Google sur une période : vues, recherches, appels, clics vers le site, demandes d'itinéraire.
| Parametro | Type | Defecto |
|---|---|---|
period_days | integer | 1-90 · 30 |
fiche_id | string | Fiche par défaut : fiche_id optionnel |
{
"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": {}
}Score d'optimisation
/api/v2/gmb/optimizerAuthreadRetourne le dernier score d'optimisation de la fiche (0 à 100), en cache. Lecture rapide, sans nouvel audit.
{
"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"
}Lancer un audit complet
/api/v2/gmb/optimizer/auditAuthpublishLance un audit complet de la fiche (données Google + analyse IA) et renvoie un score détaillé avec des suggestions d'amélioration. Opération coûteuse : supporte 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"
}Appliquer des changements
/api/v2/gmb/optimizer/applyAuthpublishApplique une liste de modifications {field, value} sur la fiche Google (écriture réelle chez Google). Opération coûteuse : supporte 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"]
}Score de visibilité Local Pack
/api/v2/visibility/scanAuthreadRetourne le dernier scan de visibilité de la fiche dans le Local Pack Google : score et position moyenne autour du point de vente.
{
"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 & mots-clés
Données SEO
/api/v2/seo/dataAuthreadRetourne le dernier snapshot SEO complet de la fiche. Le paramètre kind précise le contenu : snapshot (positions, trafic, santé) ou competitors (concurrents identifiés).
| Parametro | 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. Compruebe 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.
Mots-clés suivis
/api/v2/seo/tracked-keywordsAuthreadListe les mots-clés suivis pour la fiche, avec leur position actuelle, la variation (delta) et le volume de recherche.
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 } ]
}
]Ajouter un mot-clé au suivi
/api/v2/seo/tracked-keywordsAuthpublishAjoute un mot-clé au suivi de positionnement de la fiche.
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": []
}Données Search Console
/api/v2/seo/search-consoleAuthreadRetourne les données Google Search Console en direct (impressions, clics, position) selon les dimensions, filtres et dates demandés.
| Parametro | 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 } ]
}Lancer un scan SEO
/api/v2/seo/scanAuthpublishLance un scan SEO complet de la fiche. Soumis à un quota mensuel (429 si dépassé). Opération coûteuse : supporte 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
}Analyser un mot-clé
/api/v2/seo/keyword-lookupAuthpublishAnalyse un mot-clé à la demande : volume de recherche, difficulté, mots-clés liés. Opération coûteuse : supporte 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": {}
}Articles SEO (création & publication)
Créer des articles
/api/v2/articlesAuthpublishCrée un ou plusieurs articles pour les sites connectés (WordPress, Wix). La rédaction IA se fait en arrière-plan. Soumise à un quota. Réponse 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é."
}Parametros
| 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 |
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 su 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
}Modifier un article
/api/v2/articles/{article_id}AuthpublishMet à jour partiellement un article (seuls les champs fournis sont modifiés). Renvoie 409 si l'article est déjà publié en ligne.
Body (JSON)
{
"title": "Nouveau titre",
"content_html": "<h2>...</h2>",
"excerpt": "...",
"meta_title": "...",
"meta_description": "...",
"target_keyword": "...",
"featured_image_url": "https://..."
}Partial update
Response:
{ "article_id": 42, "updated_fields": ["title", "meta_description"], "status": "draft" }Publier ou programmer un article
/api/v2/articles/{article_id}/publishAuthpublishPublie un article immédiatement, ou le programme si scheduled_at (date ISO future) est fourni. Opération coûteuse : supporte 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"
}QR codes
Lister les QR codes
/api/v2/qr-codesAuthreadRetourne les QR codes traqués de la bulle, avec le nombre de scans et le type de redirection (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.
Créer un QR code
/api/v2/qr-codesAuthpublishCrée un QR code traqué pointant vers une URL cible, avec une couleur et un logo optionnels.
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"
}Sites & rapports
Sites connectés
/api/v2/sitesAuthreadListe les sites connectés à la bulle. Filtrable par plateforme (wordpress, wix, shopify, prestashop).
| Parametro | 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
}
]Lister les rapports
/api/v2/reportsAuthreadRetourne les rapports déjà générés, avec les URLs de téléchargement PDF et CSV.
| Parametro | 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"
}
]Générer un rapport
/api/v2/reportsAuthpublishGénère un rapport PDF. type = fiche pour un établissement, ou combine avec au moins deux fiche_ids. Traitement asynchrone (~1 à 2 min) : réponse 202, résultat récupérable via 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 }Images
Uploader une image
/api/v2/images/uploadAuthpublishEnvoie une image (image_base64 OU url, jamais les deux). Formats JPEG, PNG, WebP, GIF, 8 Mo maximum. Retourne une image_url réutilisable dans les posts et articles.
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"
}Générer une image par IA
/api/v2/images/generateAuthpublishGénère une image par IA à partir d'un prompt. align_with_brand (activé par défaut) applique la charte de la marque. Retourne une 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, articulos, conexiones
scheduleCrear y modificar posts programados
publishPublicar inmediatamente
deleteEliminar posts
Rate Limiting
Limites de solicitudes configurables:
| Limite | Valor por defecto |
|---|---|
| Por minuto | 60 |
| Por dia | 1000 |
Codigos de error
| Code | Description |
|---|---|
200 | Exito |
201 | Recurso creado |
202 | Opérations longues : réponse 202 |
400 | Solicitud invalida |
401 | Clave API invalida |
403 | Permiso insuficiente |
404 | No encontrado |
409 | Conflit d'état (ex. article déjà publié) |
410 | Ressource disparue chez le fournisseur (ex. avis supprimé de Google) |
422 | Datos invalidos |
429 | Rate limit excedido |
500 | Error del servidor |
502 | Service externe en échec (Google, DataForSEO) |
503 | Service non configuré ou indisponible |
Ejemplos de codigo
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
Modules Make.com & n8n
dry_run
Make.com
Usa el modulo HTTP > Make a request.
Parametro 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 |
| Revocacion | Revocable en cualquier momento |
| Rate limiting | Proteccion 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).