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, con 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"
}Identità 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",
"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
}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.La rubrica di un articolo
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",
"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"
}Confermare il rendering di un articolo
/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.
Quando chiamarlo
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.
// 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 })
});Suggerimento 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/confirmRisposta 200 in caso di conferma riuscita:
{
"article_id": 42,
"confirmed_at": "2026-05-25T14:30:00Z",
"confirmation_source": "pingback"
}Collegamenti interni tra i tuoi articoli
Convenzioni trasversali
Tre meccanismi ricorrono nella maggior parte degli endpoint v2. Capirli una volta per tutte evita molti errori.
Anteprima senza rischi: dry_run
Scheda predefinita: fiche_id facoltativo
Operazioni lunghe: risposta 202
Spazio di lavoro
Sfera della chiave
/api/v2/spheresAuthreadRestituisce la sfera (brand) associata alla chiave API: nome, slug, tono e lingua predefiniti.
[
{
"id": "xyz-789",
"name": "Auto Sud",
"slug": "auto-sud",
"default_language": "fr",
"default_tone": "professionnel",
"created_at": "2026-01-15T09:00:00Z"
}
]Sedi della sfera
/api/v2/bullesAuthreadElenca le bolle (sedi) della sfera, con la città e il numero di schede Google associate.
[
{ "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" }
]Dettaglio di una sede
/api/v2/bulles/{bulle_id}AuthreadRestituisce il dettaglio di una bolla: tono e lingua effettivi (ereditati dalla sfera se non definiti), numero di schede Google, social collegati.
{
"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
}Recensioni Google
Elencare le recensioni
/api/v2/reviewsAuthreadRestituisce le recensioni Google della scheda, paginate e filtrabili (valutazione, stato della risposta, parola chiave, date), ordinabili per data o valutazione.
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 | Scheda predefinita: fiche_id facoltativo |
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
}Riepilogo delle recensioni
/api/v2/reviews/summaryAuthreadRestituisce la valutazione media, il totale delle recensioni e la loro ripartizione per stato (con risposta, bozze, senza risposta).
{
"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 }
}Acquisizione recensioni
Statistiche di acquisizione
/api/v2/acquisition/statsAuthreadRestituisce le statistiche delle richieste di recensione su 30 giorni: numero inviato, per canale (SMS, email) e per stato.
{
"fiche_id": "gmb-fiche-123",
"total_requests": 84,
"by_channel": { "sms": 50, "email": 34 },
"by_status": {},
"last_30_days": 84
}Inviare richieste di recensione
/api/v2/acquisition/review-requestsAuthpublishInvia richieste di recensione via SMS e/o email a un elenco di contatti. Soggetta alle quote mensili. Risposta 202 con un batch_id; supporta 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"
}Scheda Google
Statistiche Google Business
/api/v2/gmb/metricsAuthreadRestituisce i KPI della scheda Google su un periodo: visualizzazioni, ricerche, chiamate, clic verso il sito, richieste di indicazioni stradali.
| Parametro | Type | Default |
|---|---|---|
period_days | integer | 1-90 · 30 |
fiche_id | string | Scheda predefinita: fiche_id facoltativo |
{
"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": {}
}Punteggio di ottimizzazione
/api/v2/gmb/optimizerAuthreadRestituisce l'ultimo punteggio di ottimizzazione della scheda (da 0 a 100), in cache. Lettura rapida, senza nuovo 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"
}Avviare un audit completo
/api/v2/gmb/optimizer/auditAuthpublishAvvia un audit completo della scheda (dati Google + analisi IA) e restituisce un punteggio dettagliato con suggerimenti di miglioramento. Operazione costosa: supporta 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"
}Applicare modifiche
/api/v2/gmb/optimizer/applyAuthpublishApplica un elenco di modifiche {field, value} alla scheda Google (scrittura reale su Google). Operazione costosa: supporta 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"]
}Punteggio di visibilità nel Local Pack
/api/v2/visibility/scanAuthreadRestituisce l'ultima scansione di visibilità della scheda nel Local Pack di Google: punteggio e posizione media intorno al punto vendita.
{
"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 e parole chiave
Dati SEO
/api/v2/seo/dataAuthreadRestituisce l'ultimo snapshot SEO completo della scheda. Il parametro kind specifica il contenuto: snapshot (posizioni, traffico, stato di salute) o competitors (concorrenti individuati).
| 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.
Parole chiave monitorate
/api/v2/seo/tracked-keywordsAuthreadElenca le parole chiave monitorate per la scheda, con la posizione attuale, la variazione (delta) e il volume di ricerca.
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 } ]
}
]Aggiungere una parola chiave al monitoraggio
/api/v2/seo/tracked-keywordsAuthpublishAggiunge una parola chiave al monitoraggio del posizionamento della scheda.
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": []
}Dati Search Console
/api/v2/seo/search-consoleAuthreadRestituisce i dati di Google Search Console in tempo reale (impression, clic, posizione) secondo le dimensioni, i filtri e le date richiesti.
| 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 } ]
}Avviare una scansione SEO
/api/v2/seo/scanAuthpublishAvvia una scansione SEO completa della scheda. Soggetta a una quota mensile (429 se superata). Operazione costosa: supporta 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
}Analizzare una parola chiave
/api/v2/seo/keyword-lookupAuthpublishAnalizza una parola chiave su richiesta: volume di ricerca, difficoltà, parole chiave correlate. Operazione costosa: supporta 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": {}
}Articoli SEO/GEO (creazione e pubblicazione)
Creare articoli
/api/v2/articlesAuthpublishCrea uno o più articoli per i siti collegati (WordPress, Wix). La redazione IA avviene in background. Soggetta a una quota. Risposta 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"
}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 |
category | string (max 80) · null | 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
}Modificare un articolo
/api/v2/articles/{article_id}AuthpublishAggiorna parzialmente un articolo (vengono modificati solo i campi forniti). Restituisce 409 se l'articolo è già pubblicato online.
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" }Pubblicare o programmare un articolo
/api/v2/articles/{article_id}/publishAuthpublishPubblica un articolo immediatamente, oppure lo programma se viene fornito scheduled_at (data ISO futura). Operazione costosa: supporta 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 code
Elencare i QR code
/api/v2/qr-codesAuthreadRestituisce i QR code tracciati della bolla, con il numero di scansioni e il tipo di reindirizzamento (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.
Creare un QR code
/api/v2/qr-codesAuthpublishCrea un QR code tracciato che punta a un URL di destinazione, con colore e logo facoltativi.
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"
}Siti e report
Siti collegati
/api/v2/sitesAuthreadElenca i siti collegati alla bolla. Filtrabile per piattaforma (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
}
]Elencare i report
/api/v2/reportsAuthreadRestituisce i report già generati, con gli URL di download in PDF e 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"
}
]Generare un report
/api/v2/reportsAuthpublishGenera un report PDF. type = fiche per una sede, oppure combine con almeno due fiche_ids. Elaborazione asincrona (circa 1 o 2 min): risposta 202, risultato recuperabile tramite 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 }Immagini
Caricare un'immagine
/api/v2/images/uploadAuthpublishInvia un'immagine (image_base64 OPPURE url, mai entrambi). Formati JPEG, PNG, WebP, GIF, massimo 8 MB. Restituisce un image_url riutilizzabile nei post e negli articoli.
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"
}Generare un'immagine con l'IA
/api/v2/images/generateAuthpublishGenera un'immagine con l'IA a partire da un prompt. align_with_brand (attivo per impostazione predefinita) applica l'identità visiva del brand. Restituisce un 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 | Operazioni lunghe: risposta 202 |
400 | Richiesta non valida |
401 | Chiave API non valida |
403 | Permesso insufficiente |
404 | Non trovato |
409 | Conflitto di stato (es. articolo già pubblicato) |
410 | Risorsa scomparsa presso il fornitore (es. recensione eliminata da Google) |
422 | Dati non validi |
429 | Rate limit superato |
500 | Errore server |
502 | Servizio esterno in errore (Google, DataForSEO) |
503 | Servizio non configurato o non disponibile |
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
Moduli Make.com e 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).