Sviluppatori
Documentazione API
L'API GMB Club permette di pubblicare e pianificare post tramite Zapier, Make o script personalizzati. Permette anche di recuperare gli articoli generati.
Concetti chiave
L'API v2 usa l'architettura Sfera/Bolla di GMB Club.
| Concept | Description | Esempio |
|---|---|---|
| Sfera | Brand / Azienda | "Auto Sud" |
| Bolla | Sede / Punto vendita | "Auto Sud Marseille" |
| Risorse | Account collegati | Facebook, Instagram, GMB |
Important
Autenticazione
L'API utilizza chiavi API per l'autenticazione. Una chiave può avere due portate: copre una singola sede (chiave bolla) oppure tutte le sedi del marchio (chiave sfera). Una chiave bolla vede solo i dati della propria sede; una chiave sfera vede quelli di tutte le sedi, l'opzione ideale per un sito multi-sede: una sola chiave, una sola integrazione. Chiama GET /api/v2/me per primo per sapere di quale portata disponi: il campo « bulle » è valorizzato per una chiave bolla e vale null per una chiave sfera.
Portata della chiave: bolla o sfera
Un'unica regola di perimetro, valida per tutta l'API:
- Una chiave copre una sede (chiave bolla) o tutto il brand (chiave sfera). Definisce ciò che è autorizzato, mai ciò che è preso di mira.
- Qualsiasi route che agisce su un target accetta un parametro di target:
bulle_idper una sede,fiche_idper una scheda Google. Sempre nello stesso punto: parametro d'URL in lettura, campo del corpo in scrittura. - Senza parametro: una chiave bolla prende di mira la propria sede; una chiave sfera riceve un
400che indica il parametro mancante. Mai una scelta arbitraria. - Le route di elenco senza parametro restituiscono l'intero brand, e ogni elemento porta il proprio
bulle_id. - Un target fuori dal perimetro della chiave restituisce
403; un target inesistente,404.
Risposte possibili (messaggi del backend, in francese):
| Code | Risposta (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). |
Ottenere una chiave API
- Accedi a GMB Club
- Seleziona la tua bolla nell'intestazione
- Impostazioni → Chiavi API → Nuova chiave
- Scegli l'ambito: « Questa sede » o « Tutto il brand »
- Configura permessi e copia
Una chiave « Tutto il brand » copre tutte le sedi, comprese quelle create in seguito: è la scelta giusta per un unico sito che serve più sedi — un solo segreto da gestire, nessun intervento da prevedere all'apertura di una nuova sede.
Important
Formato
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxUtilizzo
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 che l'API funzioni. Nessuna auth necessaria.
{
"status": "ok",
"api_version": "2.0",
"timestamp": "2026-07-27T18:00:00.000000Z"
}Identita della chiave
/api/v2/meAuthreadRestituisce info su chiave, bolla, sfera e risorse.
{
"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
}]
}Chiave sfera
bulle vale null e l'array gmb_fiches elenca tutte le schede del marchio.Connessioni social
/api/v2/connectionsAuthreadDettagli dei social collegati.
[
{ "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 | Default |
|---|---|---|
bulle_id | string | Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand. |
Con una chiave sfera, bulle_id indica a quale sede appartiene ogni pagina Facebook o account Instagram.
Limiti piattaforma
/api/v2/platforms/limitsAuthreadLimiti caratteri e media per piattaforma.
{
"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
Creare un post
/api/v2/postsAuthscheduleCrea un post pianificato o pubblica subito.
Errori comuni
Chiave sfera: bulle_id obbligatorio
bulle_id è ormai obbligatorio su POST /posts. In precedenza la chiamata riusciva scegliendo una sede predefinita, cosa che poteva pubblicare sulla scheda Google sbagliata. Le integrazioni esistenti che usano una chiave sfera devono aggiungere questo 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"
}Parametri
| Campo | Type | Richiesto | Description |
|---|---|---|---|
content | string | Si | Testo del post (1-5000 car.) |
platforms | array | Si | Array: facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. La piattaforma deve essere connessa sulla sede, altrimenti HTTP 400 « Plateforme non connectée ». |
image_url | string | No | URL immagine singola |
image_urls | array | No | Array JSON URL per carosello (2-10) |
video_url | string | No | URL video |
scheduled_at | string | No | ISO 8601 (default: +1h) |
gmb_fiche_id | string | No | ID scheda GMB |
publish_now | boolean | No | Se true, pubblica subito |
bulle_id | string | Chiave sfera | Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla. |
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": []
}Lista post
/api/v2/postsAuthreadPost con paginazione.
| Parametro | Type | Default | Description |
|---|---|---|---|
status | string | - | pending, published, error |
limit | integer | 50 | 1-100 |
offset | integer | 0 | Offset paginazione |
bulle_id | string | - | Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand. |
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": []
}
]Risposta completa, campo per campo
scheduled_ / published_ / error_ per piattaforma: la data prevista, la data di pubblicazione effettiva e l'eventuale messaggio di errore. Una piattaforma non interessata da questo post ha i suoi tre campi a null. platform_refs contiene i riferimenti delle pubblicazioni presso ciascuna piattaforma una volta pubblicate; warnings, gli avvisi non bloccanti./api/v2/posts/{post_id}AuthreadRecupera un post tramite il suo identificativo. Restituisce lo stesso oggetto di un elemento di GET /api/v2/posts.
/api/v2/posts/{post_id}AuthscheduleAggiorna un post in attesa.
Partial update
Body (JSON)
{
"content": "Updated text!",
"scheduled_at": "2025-12-02T14:00:00+01:00"
}/api/v2/posts/{post_id}AuthdeleteElimina un post in attesa o in errore.
/api/v2/posts/{post_id}/publishAuthpublishForza pubblicazione immediata.
Pubblicazione social semplificata
Tre endpoint pensati per le integrazioni Make, n8n e Zapier: pubblicare, verificare la quota, monitorare lo stato. Richiedono tutti una chiave bolla (vedi « Portata della chiave »).
Lista articoli
/api/v2/articlesAuthreadArticoli generati per questa bolla.
Sito senza il tuo sito (CMS principali supportati)
{
"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
}Sito multi-sede
bulle_id indica su quale pagina pubblicare ciascuno. bulle_id vale null se l'articolo è collegato solo al marchio, senza sede. La corrispondenza completa delle sedi si ottiene tramite GET /api/v2/bulles.Parametri
| Parametro | Type | Default |
|---|---|---|
status | string | published · draft · all |
updated_since | string | ISO 8601 — articoli modificati a partire da questa data (filtro su updated_at, ordinamento dal più vecchio al più recente). |
bulle_id | string | Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand. |
Restare sincronizzati
Rilevare una correzione. since filtra sulla data di pubblicazione: un articolo pubblicato un mese fa e poi corretto questa mattina non vi compare. Per recuperare le correzioni, usa updated_since, che filtra su updated_at. I risultati sono allora ordinati dal più vecchio al più recente, il che permette di riprendere una sincronizzazione dal punto in cui si è interrotta conservando l'ultimo valore ricevuto.
Costruisci i tuoi URL con slug, mai con il titolo. Lo slug è fissato alla prima pubblicazione e non viene mai ricalcolato, anche se il titolo viene corretto in seguito. Derivare l'URL dal titolo esporrebbe le tue pagine a un cambio di indirizzo dopo l'indicizzazione.
Rilevare una rimozione. Un articolo ritirato dalla pubblicazione non compare più in status=published. Con status=all, ti viene restituito con il suo stato reale (« draft »), un segnale esplicito. Un articolo eliminato, invece, scompare completamente: tratta l'elenco ricevuto come la fonte di verità — ciò che non vi è più non è più online.
/api/v2/articles/{article_id}AuthreadContenuto completo di un articolo per 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 inviato dal tuo script dopo aver renderizzato un articolo recuperato. Ha due effetti: 1. permette a GMB Club di sapere quali articoli sono realmente online sul tuo sito, e non semplicemente esposti dall'API; 2. inviando `rendered_url`, alimenta i collegamenti interni tra i tuoi articoli, l'effetto più utile nell'uso quotidiano. Facoltativo ma consigliato.
Quand l'appeler
Corpo JSON facoltativo. Il campo `rendered_url` (string, max 2048 caratteri, deve iniziare con http:// o https://) è l'URL pubblico della pagina su cui il tuo script ha appena renderizzato l'articolo. È l'unico indirizzo del tuo sito che GMB Club conosce: consente ai tuoi prossimi articoli di citare i precedenti con un link che punta al posto giusto. Senza di esso non è possibile alcun collegamento interno sul tuo sito — non indoviniamo mai un URL, e un link inventato sarebbe un link morto. Tecnicamente facoltativo, ma vivamente consigliato.
// 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"
}Collegamenti interni tra i tuoi articoli
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.
Parametri
| Parametro | Type | Default |
|---|---|---|
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 | Default |
|---|---|---|
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"
}Se nessuna scansione è disponibile, la risposta assume la forma seguente, e non la forma piatta 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 | Default |
|---|---|---|
kind | string | snapshot · competitors · (défaut : snapshot) |
bulle_id | string | Obbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla. |
Response:
Con dei dati (caso normale), la risposta è piatta:
{
"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": {}
}Blocchi di contenuto condizionali
ranked_keywords, competitors, onpage, pagespeed, ai_analysis — sono assenti dalla risposta quando la scansione non li ha prodotti: non valgono null, semplicemente non ci sono. Verifica la loro presenza prima di leggerli.Quando nessuna scansione è ancora stata eseguita per questa sede:
{ "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"
}Senza scansione: competitors vale [] e snapshot_date è assente.
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 — Obbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla.
[
{
"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 — Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.
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 | Default |
|---|---|---|
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 | Obbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla. |
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 — Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.
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 — Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.
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é."
}Parametri
| Campo | Type | Richiesto |
|---|---|---|
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 | Chiave sfera |
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
}Senza CMS (sito su misura)
bulle_id invece di un sito CMS (site_ids / wix_site_ids), l'articolo viene creato e collegato alla sede, senza CMS. È la modalità dei siti su misura (Next.js, Astro, tema personalizzato): l'articolo viene poi servito da GET /api/v2/articles, che il tuo sito consuma da sé.{
"title": "5 conseils pour entretenir sa voiture",
"target_keyword": "entretien voiture marseille",
"bulle_id": "abc-123"
}La risposta porta allora kind = api in created[], con site_id a 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 — Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand.
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 — Facoltativo: senza di esso, una chiave sfera crea un QR code a livello di brand (valido).
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 | Default |
|---|---|---|
platform | string | wordpress · wix |
bulle_id | string | Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand. |
[
{
"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 | Default |
|---|---|---|
type | string | fiche · (défaut : fiche) |
limit | integer | 1-100 · 20 |
bulle_id | string | Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand. |
[
{
"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 — Obbligatorio con una chiave sfera quando align_with_brand vale true (la sede di cui si allinea l'identità visiva).
Response:
{
"generated": true,
"image_url": "https://app.gmb-club.com/static/uploads/mcp/xxxx.webp",
"brand_aligned": true
}Permessi
Permessi configurabili:
readLeggere post, articoli, connessioni
scheduleCreare e modificare post pianificati
publishPubblicare subito
deleteEliminare post
Rate Limiting
Limiti di richieste configurabili:
| Limite | Valore predefinito |
|---|---|
| Per minuto | 60 |
| Per giorno | 1000 |
Codici errore
| Code | Description |
|---|---|
200 | Successo |
201 | Risorsa creata |
202 | Opérations longues : réponse 202 |
400 | Richiesta non valida |
401 | Chiave API non valida |
403 | Permesso insufficiente |
404 | Non trovato |
409 | Conflit d'état (ex. article déjà publié) |
410 | Ressource disparue chez le fournisseur (ex. avis supprimé de Google) |
422 | Dati non validi |
429 | Rate limit superato |
500 | Errore server |
502 | Service externe en échec (Google, DataForSEO) |
503 | Service non configuré ou indisponible |
Esempi di codice
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 il modulo HTTP > Make a request.
Parametro critico
Zapier
Usa Webhooks by Zapier > Custom Request.
Sicurezza
| Misura | Description |
|---|---|
| Chiavi hashate | SHA256, mai in chiaro |
| HTTPS obbligatorio | Tutte le richieste via HTTPS |
| Isolamento per bolla | Ogni chiave accede solo alla sua bolla |
| Scadenza opzionale | Le chiavi possono scadere |
| Revoca | Revocabile in qualsiasi momento |
| Rate limiting | Protezione via Redis |

/api/v2/social/publishAuthpublishPubblica o pianifica un post su una o più piattaforme.
Body (JSON)
platformstextimage_urlimage_urlsvideo_urlscheduled_atbulle_idplatforms: facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb.text: da 1 a 63206 caratteri.image_urlper un'immagine singola,image_urlsper un carosello.scheduled_at(ISO 8601) assente = pubblicazione immediata.Response:
statusvalepublishing(pubblicazione immediata) oppurescheduled(pianificata).