GMB Club

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.

HTTPSJSON APIRESTfulRate Limited

Concetti chiave

L'API v2 usa l'architettura Sfera/Bolla di GMB Club.

ConceptDescriptionEsempio
SferaBrand / Azienda"Auto Sud"
BollaSede / Punto vendita"Auto Sud Marseille"
RisorseAccount collegatiFacebook, Instagram, GMB
💡

Important

Una chiave API 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. Chiama prima GET /api/v2/me: il campo « bulle » è valorizzato per una chiave bolla e vale null per una chiave sfera.

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:

  1. Una chiave copre una sede (chiave bolla) o tutto il brand (chiave sfera). Definisce ciò che è autorizzato, mai ciò che è preso di mira.
  2. Qualsiasi route che agisce su un target accetta un parametro di target: bulle_id per una sede, fiche_id per una scheda Google. Sempre nello stesso punto: parametro d'URL in lettura, campo del corpo in scrittura.
  3. Senza parametro: una chiave bolla prende di mira la propria sede; una chiave sfera riceve un 400 che indica il parametro mancante. Mai una scelta arbitraria.
  4. Le route di elenco senza parametro restituiscono l'intero brand, e ogni elemento porta il proprio bulle_id.
  5. Un target fuori dal perimetro della chiave restituisce 403; un target inesistente, 404.

Risposte possibili (messaggi del backend, in francese):

CodeRisposta (detail)
403Cet établissement n'appartient pas à votre périmètre.
403Cette fiche GMB n'appartient pas à votre périmètre.
404Établissement introuvable : <identifiant>
404Aucune fiche GMB associée à cette clé API.
400Cette clé API couvre plusieurs établissements. Précisez `bulle_id` (liste : GET /api/v2/bulles).
400Cette clé API couvre plusieurs fiches Google. Précisez `fiche_id` (liste : GET /api/v2/me).

Ottenere una chiave API

  1. Accedi a GMB Club
  2. Seleziona la tua bolla nell'intestazione
  3. Impostazioni → Chiavi API → Nuova chiave
  4. Scegli l'ambito: « Questa sede » o « Tutto il brand »
  5. 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

La chiave completa viene mostrata solo una volta.

Formato

text
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Utilizzo

cURL
curl -H "X-API-Key: gmb_live_xxxx..." \
     -H "Content-Type: application/json" \
  https://app.gmb-club.com/api/v2/me
🚫

Solo JSON

Content-Type: application/json obbligatorio per POST/PUT.

Base URL

text
https://app.gmb-club.com/api/v2

Endpoints

GET/api/v2/health

Verifica che l'API funzioni. Nessuna auth necessaria.

JSON
{
  "status": "ok",
  "api_version": "2.0",
  "timestamp": "2026-07-27T18:00:00.000000Z"
}

Identità della chiave

GET/api/v2/meAuthread

Restituisce info su chiave, bolla, sfera e risorse.

JSON
{
  "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

Con una chiave sfera, il campo bulle vale null e l'array gmb_fiches elenca tutte le schede del marchio.

Connessioni social

GET/api/v2/connectionsAuthread

Dettagli dei social collegati.

JSON
[
  { "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 }
]
ParametroTypeDefault
bulle_idstringRestringere 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

GET/api/v2/platforms/limitsAuthread

Limiti caratteri e media per piattaforma.

JSON
{
  "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

character_limits contiene una voce per piattaforma (9 in totale); image_limits e video_limits coprono instagram, facebook, linkedin, pinterest, gmb. I valori sono derivati dal codice ed evolvono: chiama l'endpoint per ottenere i numeri aggiornati, non fissarli nella tua integrazione.

Creare un post

POST/api/v2/postsAuthschedule

Crea un post pianificato o pubblica subito.

🚫

Errori comuni

Content-Type: application/json. Piattaforme in minuscolo. image_urls = vero array JSON.
⚠️

Chiave sfera: bulle_id obbligatorio

Con una chiave sfera, 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)

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

CampoTypeRichiestoDescription
contentstringSiTesto del post (1-5000 car.)
platformsarraySiArray: facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. La piattaforma deve essere connessa sulla sede, altrimenti HTTP 400 « Plateforme non connectée ».
image_urlstringNoURL immagine singola
image_urlsarrayNoArray JSON URL per carosello (2-10)
video_urlstringNoURL video
scheduled_atstringNoISO 8601 (default: +1h)
gmb_fiche_idstringNoID scheda GMB
publish_nowbooleanNoSe true, pubblica subito
bulle_idstringChiave sferaObbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.
💡

content or text

Provide at least content (or its alias text). Per-platform scheduling is available via scheduled_instagram, scheduled_facebook, scheduled_gmb, etc., and per-platform content via content_per_platform.

Response:

JSON
{
  "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

GET/api/v2/postsAuthread

Post con paginazione.

ParametroTypeDefaultDescription
statusstring-pending, published, error
limitinteger501-100
offsetinteger0Offset paginazione
bulle_idstring-Restringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand.
⚠️

Bare array

This endpoint returns a JSON array directly, with no wrapper object, unlike GET /articles which returns an object { articles, total, ... }.
JSON
[
  {
    "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

Tre precisazioni. C'è un trio 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.
GET/api/v2/posts/{post_id}Authread

Recupera un post tramite il suo identificativo. Restituisce lo stesso oggetto di un elemento di GET /api/v2/posts.

PUT/api/v2/posts/{post_id}Authschedule

Aggiorna un post in attesa.

💡

Partial update

Partial update of a pending post (content, scheduled_at). Only the fields you send are updated.

Body (JSON)

JSON
{
  "content": "Updated text!",
  "scheduled_at": "2025-12-02T14:00:00+01:00"
}
DEL/api/v2/posts/{post_id}Authdelete

Elimina un post in attesa o in errore.

POST/api/v2/posts/{post_id}/publishAuthpublish

Forza 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 »).

POST/api/v2/social/publishAuthpublish

Pubblica o pianifica un post su una o più piattaforme.

Body (JSON)

CampoTypeRichiesto
platformsarraySi
textstringSi
image_urlstringNo
image_urlsarrayNo
video_urlstringNo
scheduled_atstringNo
bulle_idstringChiave sfera

platforms: facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb. text: da 1 a 63206 caratteri. image_url per un'immagine singola, image_urls per un carosello. scheduled_at (ISO 8601) assente = pubblicazione immediata.

Response:

JSON
{
  "post_id": "post-abc-123",
  "status": "scheduled",
  "scheduled_at": "2026-08-01T09:00:00+02:00",
  "platforms": ["facebook", "instagram"],
  "quota": {}
}

status vale publishing (pubblicazione immediata) oppure scheduled (pianificata).

GET/api/v2/social/quotaAuthread

Stato della quota mensile di pubblicazione della sede. Da chiamare prima di una pubblicazione per evitare un rifiuto.

JSON
{ "bulle_id": "abc-123" }

La risposta è completata dai contatori della quota mensile della sede.

bulle_id — Obbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla.

GET/api/v2/social/posts/{post_id}Authread

Stato dettagliato di un post. Gli oggetti scheduled, published ed errors contengono una voce per piattaforma, a null se la piattaforma non è interessata.

JSON
{
  "post_id": "post-abc-123",
  "status": "scheduled",
  "platforms": ["facebook", "instagram"],
  "content": "Nos nouveautés sont arrivées !",
  "scheduled": { "instagram": "2026-08-01T09:00:00+02:00", "facebook": "2026-08-01T09:00:00+02:00", "linkedin": null, "pinterest": null, "tiktok": null, "snapchat": null, "youtube": null, "gmb": null },
  "published": { "instagram": null, "facebook": null, "linkedin": null, "pinterest": null, "tiktok": null, "snapchat": null, "youtube": null, "gmb": null },
  "errors": { "instagram": null, "facebook": null, "linkedin": null, "pinterest": null, "tiktok": null, "snapchat": null, "youtube": null, "gmb": null }
}

Lista articoli

GET/api/v2/articlesAuthread

Articoli generati per questa bolla.

💡

Sito senza il tuo sito (CMS principali supportati)

Chiama questo endpoint periodicamente per recuperare articoli.
JSON
{
  "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

Ogni articolo indica la sede per la quale è stato redatto. Con una chiave sfera, una sola chiamata restituisce gli articoli di tutte le sedi, e 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

Il campo `category` (string, massimo 80 caratteri in scrittura, `null` quando non c'è alcuna rubrica) è un'etichetta libera che scegli tu: «Guida», «Consigli», «Salute visiva», «Tendenze»… Ogni account definisce il proprio vocabolario, non esiste un elenco imposto. Viene restituito da `GET /articles` e `GET /articles/{article_id}` e si può scrivere sia in creazione sia in aggiornamento. Non esiste alcun filtro `?category=` sulla lista: il campo torna con ogni articolo, il filtraggio avviene dalla tua parte.

Parametri

ParametroTypeDefault
statusstringpublished · draft · all
updated_sincestringISO 8601: articoli modificati a partire da questa data (filtro su updated_at, ordinamento dal più vecchio al più recente).
bulle_idstringRestringere 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.

GET/api/v2/articles/{article_id}Authread

Contenuto completo di un articolo per ID.

JSON
{
  "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

POST/api/v2/articles/{article_id}/confirmAuthread

Pingback 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

Dopo aver inserito l'HTML dell'articolo nel DOM della tua pagina. L'endpoint è idempotente: richiamarlo aggiorna semplicemente la data di conferma, vince l'ultimo ping. Puoi quindi richiamarlo per verificare che un articolo sia ancora renderizzato dopo diversi giorni.

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.

JavaScript
// 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

Gli endpoint articles accettano richieste cross-origin da qualsiasi dominio (Access-Control-Allow-Origin: *). Puoi quindi chiamare il pingback direttamente dallo <script> della tua pagina, oppure lato server durante una build statica o un rendering SSR, come preferisci.
PHP
$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);
Node.js
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}` }),
});
Python
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
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/confirm

Risposta 200 in caso di conferma riuscita:

JSON
{
  "article_id": 42,
  "confirmed_at": "2026-05-25T14:30:00Z",
  "confirmation_source": "pingback"
}
✅

Collegamenti interni tra i tuoi articoli

Quando confermi l'indirizzo dei tuoi articoli pubblicati, GMB Club può collegarli tra loro: un nuovo articolo citerà naturalmente i precedenti, su un'espressione del suo testo, con un link alla pagina giusta del tuo sito. L'ambito è il punto vendita, non il marchio: gli articoli di una bolla sono collegati solo tra loro, e un'insegna con più sedi non vedrà mai un articolo di una città rimandare a un'altra città. Sono candidati solo gli articoli pubblicati e il cui indirizzo è stato confermato; un articolo senza indirizzo confermato viene semplicemente ignorato. Il beneficio si costruisce nel tempo: con due o tre articoli online non c'è quasi nulla da collegare, l'interesse arriva con il volume.

Convenzioni trasversali

Tre meccanismi ricorrono nella maggior parte degli endpoint v2. Capirli una volta per tutte evita molti errori.

✅

Anteprima senza rischi: dry_run

Ogni operazione costosa (risposta a una recensione, pubblicazione, scansione SEO, report, invio di richieste di recensione, audit o applicazione di modifiche alla scheda) accetta "dry_run": true nel corpo. L'API restituisce allora un'anteprima (campi would_*, quota corrente) senza eseguire nulla né consumare quota. Consigliato nei tuoi scenari Make o n8n per validare una chiamata prima di lanciarla per davvero.
💡

Scheda predefinita: fiche_id facoltativo

Sugli endpoint legati a una scheda Google (metrics, reviews, optimizer, acquisition, visibility), il parametro fiche_id è facoltativo: se omesso, l'API usa la scheda associata alla tua chiave API.
💡

Operazioni lunghe: risposta 202

Le elaborazioni lunghe (generazione di report, invio di richieste di recensione, generazione di articoli) restituiscono un codice 202 con un identificativo. Il risultato si recupera poi tramite gli endpoint di lettura corrispondenti (per esempio GET /v2/reports per un report, o GET /v2/articles per un articolo).

Spazio di lavoro

Sfera della chiave

GET/api/v2/spheresAuthread

Restituisce la sfera (brand) associata alla chiave API: nome, slug, tono e lingua predefiniti.

JSON
[
  {
    "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

GET/api/v2/bullesAuthread

Elenca le bolle (sedi) della sfera, con la città e il numero di schede Google associate.

JSON
[
  { "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

GET/api/v2/bulles/{bulle_id}Authread

Restituisce il dettaglio di una bolla: tono e lingua effettivi (ereditati dalla sfera se non definiti), numero di schede Google, social collegati.

JSON
{
  "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

GET/api/v2/reviewsAuthread

Restituisce le recensioni Google della scheda, paginate e filtrabili (valutazione, stato della risposta, parola chiave, date), ordinabili per data o valutazione.

Parametri

ParametroTypeDefault
min_starsinteger1-5 · 1
max_starsinteger1-5 · 5
statusstringresponded · drafts · unresponded
keywordstring-
date_fromstringISO 8601
date_tostringISO 8601
sort_bystringdate_desc
fiche_idstringScheda predefinita: fiche_id facoltativo
limitinteger1-100 · 25
pageinteger1
JSON
{
  "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

GET/api/v2/reviews/summaryAuthread

Restituisce la valutazione media, il totale delle recensioni e la loro ripartizione per stato (con risposta, bozze, senza risposta).

JSON
{
  "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 }
}

Rispondere a una recensione

POST/api/v2/reviews/{review_id}/replyAuthpublish

Pubblica una risposta a una recensione direttamente su Google. Operazione costosa: supporta dry_run.

Body (JSON)

JSON
{
  "text": "Merci beaucoup pour votre retour, à très bientôt !",
  "dry_run": false
}
⚠️

410 Gone

Se nel frattempo la recensione è scomparsa da Google, l'API restituisce 410.

Response:

JSON
{
  "posted": true,
  "review_id": "rev-abc",
  "rating": 5,
  "customer_name": "Julie A.",
  "fiche_name": "Auto Sud - Marseille Centre"
}

Acquisizione recensioni

Statistiche di acquisizione

GET/api/v2/acquisition/statsAuthread

Restituisce le statistiche delle richieste di recensione su 30 giorni: numero inviato, per canale (SMS, email) e per stato.

JSON
{
  "fiche_id": "gmb-fiche-123",
  "total_requests": 84,
  "by_channel": { "sms": 50, "email": 34 },
  "by_status": {},
  "last_30_days": 84
}

Inviare richieste di recensione

POST/api/v2/acquisition/review-requestsAuthpublish

Invia 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)

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[]

Ogni contatto include almeno un nome (customer_name) e un canale (channel): « sms » richiede customer_phone, « email » richiede customer_email. Campo facoltativo: custom_message. Le quote SMS ed email sono mensili e per bolla.

Response:

JSON
{
  "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

GET/api/v2/gmb/metricsAuthread

Restituisce i KPI della scheda Google su un periodo: visualizzazioni, ricerche, chiamate, clic verso il sito, richieste di indicazioni stradali.

ParametroTypeDefault
period_daysinteger1-90 · 30
fiche_idstringScheda predefinita: fiche_id facoltativo
JSON
{
  "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

GET/api/v2/gmb/optimizerAuthread

Restituisce l'ultimo punteggio di ottimizzazione della scheda (da 0 a 100), in cache. Lettura rapida, senza nuovo audit.

JSON
{
  "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

POST/api/v2/gmb/optimizer/auditAuthpublish

Avvia un audit completo della scheda (dati Google + analisi IA) e restituisce un punteggio dettagliato con suggerimenti di miglioramento. Operazione costosa: supporta dry_run.

JSON
{
  "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

POST/api/v2/gmb/optimizer/applyAuthpublish

Applica un elenco di modifiche {field, value} alla scheda Google (scrittura reale su Google). Operazione costosa: supporta dry_run.

Body (JSON)

JSON
{
  "changes": [
    { "field": "description", "value": "Garage automobile à Marseille..." }
  ],
  "dry_run": true
}

Response (dry_run):

JSON
{
  "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

GET/api/v2/visibility/scanAuthread

Restituisce l'ultima scansione di visibilità della scheda nel Local Pack di Google: punteggio e posizione media intorno al punto vendita.

JSON
{
  "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:

JSON
{ "fiche_id": "gmb-fiche-123", "snapshot": null }

SEO e parole chiave

Dati SEO

GET/api/v2/seo/dataAuthread

Restituisce l'ultimo snapshot SEO completo della scheda. Il parametro kind specifica il contenuto: snapshot (posizioni, traffico, stato di salute) o competitors (concorrenti individuati).

ParametroTypeDefault
kindstringsnapshot · competitors · (défaut : snapshot)
bulle_idstringObbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla.

Response:

Con dei dati (caso normale), la risposta è piatta:

JSON
{
  "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

I cinque blocchi di contenuto (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:

JSON
{ "kind": "snapshot", "snapshot": null, "bulle_id": "abc-123" }

Con kind=competitors:

JSON
{
  "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

GET/api/v2/seo/tracked-keywordsAuthread

Elenca 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.

JSON
[
  {
    "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

POST/api/v2/seo/tracked-keywordsAuthpublish

Aggiunge una parola chiave al monitoraggio del posizionamento della scheda.

Body (JSON)

JSON
{ "keyword": "garage marseille centre" }

bulle_id — Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.

Response:

JSON
{
  "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

GET/api/v2/seo/search-consoleAuthread

Restituisce i dati di Google Search Console in tempo reale (impression, clic, posizione) secondo le dimensioni, i filtri e le date richiesti.

ParametroTypeDefault
dimensionsarrayquery · page · date · country · device
daysinteger1-365
start_datestringISO 8601
end_datestringISO 8601
row_limitinteger-
query_containsstring-
query_equalsstring-
page_containsstring-
page_equalsstring-
countrystring-
devicestring-
search_typestring-
bulle_idstringObbligatorio con una chiave sfera (la sede presa di mira). Facoltativo con una chiave bolla.

Response:

JSON
{
  "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

POST/api/v2/seo/scanAuthpublish

Avvia una scansione SEO completa della scheda. Soggetta a una quota mensile (429 se superata). Operazione costosa: supporta dry_run.

Body (JSON)

JSON
{ "dry_run": false }

bulle_id — Obbligatorio con una chiave sfera: la sede presa di mira. Dedotto automaticamente con una chiave bolla.

⚠️

429

Rate limit superato

Response:

JSON
{
  "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

POST/api/v2/seo/keyword-lookupAuthpublish

Analizza una parola chiave su richiesta: volume di ricerca, difficoltà, parole chiave correlate. Operazione costosa: supporta dry_run.

Body (JSON)

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:

JSON
{
  "kind": "keyword-lookup",
  "keyword": "vidange voiture marseille",
  "result": {}
}

Articoli SEO/GEO (creazione e pubblicazione)

Creare articoli

POST/api/v2/articlesAuthpublish

Crea uno o più articoli per i siti collegati (WordPress, Wix). La redazione IA avviene in background. Soggetta a una quota. Risposta 201.

Body (JSON)

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

CampoTypeRichiesto
titlestring (min 3)Si
target_keywordstring (min 2)Si
site_id · site_idsinteger · integer[]No
wix_site_id · wix_site_idsinteger · integer[]No
ai_word_count_targetinteger · 1500No
generate_contentboolean · trueNo
generate_imageboolean · falseNo
tonestring · professionalNo
languagestring · frNo
featured_image_url · meta_title · meta_description · excerptstringNo
categorystring (max 80) · nullNo
bulle_idstringChiave sfera
💡

201 Created

La generazione è asincrona: l'articolo viene prima creato, poi redatto in background. Recuperi il contenuto finale tramite GET /v2/articles/{id}.

Response:

JSON
{
  "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)

Fornendo 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é.
JSON
{
  "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:

JSON
{
  "created": [ { "id": 43, "kind": "api", "site_id": null } ],
  "count": 1,
  "generating": true
}

Modificare un articolo

PUT/api/v2/articles/{article_id}Authpublish

Aggiorna parzialmente un articolo (vengono modificati solo i campi forniti). Restituisce 409 se l'articolo è già pubblicato online.

Body (JSON)

JSON
{
  "title": "Nouveau titre",
  "content_html": "<h2>...</h2>",
  "excerpt": "...",
  "meta_title": "...",
  "meta_description": "...",
  "target_keyword": "...",
  "featured_image_url": "https://...",
  "category": "Guide"
}
💡

Partial update

Tutti i campi sono facoltativi: vengono modificati solo i campi inviati, gli altri restano invariati. Attenzione a `category`: omettere il campo conserva la rubrica esistente, mentre una stringa vuota ("") la rimuove. Correggere un titolo senza inviare `category` non cancella quindi mai la rubrica.

Response:

JSON
{ "article_id": 42, "updated_fields": ["title", "meta_description"], "status": "draft" }

Pubblicare o programmare un articolo

POST/api/v2/articles/{article_id}/publishAuthpublish

Pubblica un articolo immediatamente, oppure lo programma se viene fornito scheduled_at (data ISO futura). Operazione costosa: supporta dry_run.

Body (JSON)

JSON
{
  "scheduled_at": "2026-07-15T09:00:00+02:00",
  "dry_run": false
}

Response:

JSON
{
  "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

GET/api/v2/qr-codesAuthread

Restituisce i QR code tracciati della bolla, con il numero di scansioni e il tipo di reindirizzamento (gate).

JSON
[
  {
    "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

POST/api/v2/qr-codesAuthpublish

Crea un QR code tracciato che punta a un URL di destinazione, con colore e logo facoltativi.

Body (JSON)

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:

JSON
{
  "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

GET/api/v2/sitesAuthread

Elenca i siti collegati alla bolla. Filtrabile per piattaforma (wordpress, wix, shopify, prestashop).

ParametroTypeDefault
platformstringwordpress · wix
bulle_idstringRestringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand.
JSON
[
  {
    "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

GET/api/v2/reportsAuthread

Restituisce i report già generati, con gli URL di download in PDF e CSV.

ParametroTypeDefault
typestringfiche · (défaut : fiche)
limitinteger1-100 · 20
bulle_idstringRestringere a una sede. Predefinito: quella della chiave, oppure tutte le sedi del brand.
JSON
[
  {
    "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

POST/api/v2/reportsAuthpublish

Genera 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)

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

The date_start and date_end fields (ISO format, YYYY-MM-DD) are required in the request body.
💡

202 Accepted

Le elaborazioni lunghe (generazione di report, invio di richieste di recensione, generazione di articoli) restituiscono un codice 202 con un identificativo. Il risultato si recupera poi tramite gli endpoint di lettura corrispondenti (per esempio GET /v2/reports per un report, o GET /v2/articles per un articolo).

Response:

JSON
{ "generated": true, "type": "combine", "report_id": "rep-1", "fiches_count": 2 }

Immagini

Caricare un'immagine

POST/api/v2/images/uploadAuthpublish

Invia 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)

JSON
{ "url": "https://example.com/photo.jpg" }
// ou : { "image_base64": "data:image/png;base64,iVBORw0..." }

Response:

JSON
{
  "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

POST/api/v2/images/generateAuthpublish

Genera 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)

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:

JSON
{
  "generated": true,
  "image_url": "https://app.gmb-club.com/static/uploads/mcp/xxxx.webp",
  "brand_aligned": true
}

Permessi

Permessi configurabili:

read

Leggere post, articoli, connessioni

schedule

Creare e modificare post pianificati

publish

Pubblicare subito

delete

Eliminare post

Rate Limiting

Limiti di richieste configurabili:

LimiteValore predefinito
Per minuto60
Per giorno1000

Codici errore

CodeDescription
200Successo
201Risorsa creata
202Operazioni lunghe: risposta 202
400Richiesta non valida
401Chiave API non valida
403Permesso insufficiente
404Non trovato
409Conflitto di stato (es. articolo già pubblicato)
410Risorsa scomparsa presso il fornitore (es. recensione eliminata da Google)
422Dati non validi
429Rate limit superato
500Errore server
502Servizio esterno in errore (Google, DataForSEO)
503Servizio non configurato o non disponibile

Esempi di codice

Python
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

I moduli ufficiali Make.com e n8n (n8n-nodes-gmb-club) coprono le operazioni principali pronte all'uso. Per gli endpoint non ancora esposti da un modulo, chiama direttamente l'API: modulo « Make an API Call » su Make, oppure nodo « HTTP Request » con la credenziale GMB Club su n8n.
💡

dry_run

Suggerimento: nei tuoi scenari Make o n8n, attiva dry_run: true sulle operazioni costose per validare la chiamata prima di eseguirla per davvero.

Make.com

Usa il modulo HTTP > Make a request.

🚫

Parametro critico

Body type: Raw > JSON. Non lasciare su multipart/form-data.

Zapier

Usa Webhooks by Zapier > Custom Request.

Sicurezza

MisuraDescription
Chiavi hashateSHA256, mai in chiaro
HTTPS obbligatorioTutte le richieste via HTTPS
Isolamento per bollaOgni chiave accede solo alla sua bolla
Scadenza opzionaleLe chiavi possono scadere
RevocaRevocabile in qualsiasi momento
Rate limitingProtezione via Redis