Entwickler
Dokumentation API
Die GMB Club API ermoglicht es, Posts uber Zapier, Make oder eigene Skripte zu veroffentlichen und zu planen.
Kernkonzepte
Die v2 API nutzt die hierarchische Sphare/Blase-Architektur.
| Concept | Description | Beispiel |
|---|---|---|
| Sphare | Marke / Unternehmen | "Auto Sud" |
| Blase | Standort / Verkaufsstelle | "Auto Sud Marseille" |
| Ressourcen | Verbundene Konten | Facebook, Instagram, GMB |
Important
Authentifizierung
Die API verwendet API-Schlüssel zur Authentifizierung. Ein Schlüssel kann zwei Reichweiten haben: Er deckt entweder einen einzelnen Standort ab (Blase-Schlüssel) oder alle Standorte der Marke (Sphäre-Schlüssel). Ein Blase-Schlüssel sieht nur die Daten seines Standorts; ein Sphäre-Schlüssel sieht die aller Standorte — die ideale Option für eine Website mit mehreren Standorten: ein einziger Schlüssel, eine einzige Integration. Rufen Sie zuerst GET /api/v2/me auf, um zu erfahren, über welche Reichweite Sie verfügen: Das Feld „bulle“ ist bei einem Blase-Schlüssel gefüllt und ist null bei einem Sphäre-Schlüssel.
Reichweite des Schlüssels: Blase oder Sphäre
Eine einzige Geltungsbereichsregel, gültig für die gesamte API:
- Ein Schlüssel deckt einen Standort ab (Blase-Schlüssel) oder die gesamte Marke (Sphäre-Schlüssel). Er legt fest, was erlaubt ist, niemals, was angesteuert wird.
- Jede Route, die auf ein Ziel wirkt, akzeptiert einen Zielparameter:
bulle_idfür einen Standort,fiche_idfür eine Google-Fiche. Immer an derselben Stelle: URL-Parameter beim Lesen, Feld im Body beim Schreiben. - Ohne Parameter: Ein Blase-Schlüssel steuert seinen Standort an; ein Sphäre-Schlüssel erhält einen
400, der den fehlenden Parameter benennt. Niemals eine willkürliche Auswahl. - Listen-Routen ohne Parameter geben die gesamte Marke zurück, und jedes Element trägt seine
bulle_id. - Ein Ziel außerhalb des Geltungsbereichs des Schlüssels gibt
403zurück; ein nicht existierendes Ziel404.
Mögliche Antworten (Meldungen des Backends, auf Französisch):
| Code | Antwort (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). |
API-Schlussel erhalten
- Bei GMB Club anmelden
- Wählen Sie Ihre Blase in der Kopfzeile aus
- Einstellungen → API-Schlüssel → Neuer Schlüssel
- Wählen Sie den Geltungsbereich: „Dieser Standort“ oder „Gesamte Marke“
- Berechtigungen konfigurieren
Ein Schlüssel für die „Gesamte Marke“ deckt alle Standorte ab, einschließlich der später angelegten: Das ist die richtige Wahl für eine einzelne Website, die mehrere Standorte bedient – nur ein einziges Geheimnis zu verwalten, kein Eingriff beim Eröffnen eines neuen Standorts nötig.
Important
Format
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxVerwendung
curl -H "X-API-Key: gmb_live_xxxx..." \
-H "Content-Type: application/json" \
https://app.gmb-club.com/api/v2/meNur JSON
Base URL
https://app.gmb-club.com/api/v2Endpoints
/api/v2/healthPruft die API-Verfugbarkeit. Keine Auth notig.
{
"status": "ok",
"api_version": "2.0",
"timestamp": "2026-07-27T18:00:00.000000Z"
}Schlussel-Identitat
/api/v2/meAuthreadGibt Infos uber Schlussel, Blase, Sphare und Ressourcen zuruck.
{
"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
}]
}Sphäre-Schlüssel
bulle null und das Array gmb_fiches listet alle Einträge der Marke auf.Soziale Verbindungen
/api/v2/connectionsAuthreadDetails der verbundenen Netzwerke.
[
{ "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 }
]| Parameter | Type | Standard |
|---|---|---|
bulle_id | string | Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke. |
Mit einem Sphäre-Schlüssel gibt bulle_id an, zu welchem Standort jede Facebook-Seite oder jedes Instagram-Konto gehört.
Plattform-Limits
/api/v2/platforms/limitsAuthreadZeichen- und Medienlimits pro Plattform.
{
"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
Post erstellen
/api/v2/postsAuthscheduleErstellt einen geplanten Post oder veroffentlicht sofort.
Haufige Fehler
Sphäre-Schlüssel: bulle_id erforderlich
bulle_id nunmehr obligatorisch bei POST /posts. Zuvor gelang der Aufruf, indem ein Standard-Standort ausgewählt wurde, was auf der falschen Google-Fiche veröffentlichen konnte. Bestehende Integrationen, die einen Sphäre-Schlüssel verwenden, müssen dieses Feld ergänzen.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"
}Parameter
| Feld | Type | Erforderlich | Description |
|---|---|---|---|
content | string | Ja | Post-Text (1-5000 Zeichen) |
platforms | array | Ja | Array: facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. Die Plattform muss auf dem Standort verbunden sein, andernfalls HTTP 400 « Plateforme non connectée ». |
image_url | string | Nein | Einzelbild-URL |
image_urls | array | Nein | URL-Array fur Karussell (2-10) |
video_url | string | Nein | Video-URL |
scheduled_at | string | Nein | ISO 8601 (Standard: +1h) |
gmb_fiche_id | string | Nein | GMB-Profil-ID |
publish_now | boolean | Nein | Sofort veroffentlichen |
bulle_id | string | Sphäre-Schlüssel | Erforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet. |
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": []
}Posts auflisten
/api/v2/postsAuthreadPosts mit Paginierung.
| Parameter | Type | Standard | Description |
|---|---|---|---|
status | string | - | pending, published, error |
limit | integer | 50 | 1-100 |
offset | integer | 0 | Offset |
bulle_id | string | - | Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke. |
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": []
}
]Vollständige Antwort, Feld für Feld
scheduled_ / published_ / error_: das geplante Datum, das tatsächliche Veröffentlichungsdatum und die etwaige Fehlermeldung. Eine für diesen Beitrag nicht betroffene Plattform hat ihre drei Felder auf null. platform_refs enthält die Referenzen der Veröffentlichungen bei jeder Plattform, sobald sie veröffentlicht sind; warnings die nicht blockierenden Warnhinweise./api/v2/posts/{post_id}AuthreadRuft einen Post anhand seiner ID ab. Liefert dasselbe Objekt wie ein Element von GET /api/v2/posts.
/api/v2/posts/{post_id}AuthscheduleAusstehenden Post aktualisieren.
Partial update
Body (JSON)
{
"content": "Updated text!",
"scheduled_at": "2025-12-02T14:00:00+01:00"
}/api/v2/posts/{post_id}AuthdeleteAusstehenden Post loschen.
/api/v2/posts/{post_id}/publishAuthpublishSofortige Veroffentlichung.
Vereinfachte Social-Media-Veröffentlichung
Drei Endpoints, konzipiert für die Integrationen Make, n8n und Zapier: veröffentlichen, das Kontingent prüfen, den Status verfolgen. Sie alle erfordern einen Blase-Schlüssel (siehe „Reichweite des Schlüssels“).
Artikel auflisten
/api/v2/articlesAuthreadGenerierte Artikel abrufen.
Site ohne Ihre Website (gängige CMS unterstützt)
{
"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
}Website mit mehreren Standorten
bulle_id gibt an, auf welcher Seite jeder einzelne veröffentlicht werden soll. bulle_id ist null, wenn der Artikel nur mit der Marke verknüpft ist, ohne Standort. Die vollständige Zuordnung der Standorte erhalten Sie über GET /api/v2/bulles.Parameter
| Parameter | Type | Standard |
|---|---|---|
status | string | published · draft · all |
updated_since | string | ISO 8601 – seit diesem Datum geänderte Artikel (Filter auf updated_at, sortiert vom ältesten zum neuesten). |
bulle_id | string | Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke. |
Synchron bleiben
Eine Korrektur erkennen. since filtert nach dem Veröffentlichungsdatum: Ein vor einem Monat veröffentlichter und heute Morgen korrigierter Artikel erscheint darin nicht. Um Korrekturen nachzuholen, verwenden Sie updated_since, das nach updated_at filtert. Die Ergebnisse werden dann vom ältesten zum neuesten sortiert, wodurch sich eine Synchronisierung genau dort fortsetzen lässt, wo sie stehen geblieben ist, indem der zuletzt empfangene Wert beibehalten wird.
Bilden Sie Ihre URLs mit slug, niemals mit dem Titel. Der Slug wird bei der ersten Veröffentlichung festgelegt und niemals neu berechnet, selbst wenn der Titel später korrigiert wird. Die URL aus dem Titel abzuleiten würde Ihre Seiten der Gefahr einer Adressänderung nach der Indexierung aussetzen.
Eine Entfernung erkennen. Ein depublizierter Artikel erscheint nicht mehr in status=published. Mit status=all kommt er mit seinem tatsächlichen Status zurück (« draft »), ein eindeutiges Signal. Ein gelöschter Artikel hingegen verschwindet vollständig: Behandeln Sie die empfangene Liste als Quelle der Wahrheit – was nicht mehr darin ist, ist nicht mehr online.
/api/v2/articles/{article_id}AuthreadArtikelinhalt 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, den Ihr Skript nach dem Rendern eines abgerufenen Artikels sendet. Er hat zwei Wirkungen: 1. GMB Club erfährt, welche Artikel auf Ihrer Website tatsächlich online sind und nicht nur über die API bereitgestellt werden; 2. durch das Senden von `rendered_url` speist er die interne Verlinkung Ihrer Artikel — im Alltag die nützlichere Wirkung. Optional, aber empfohlen.
Quand l'appeler
Optionaler JSON-Body. Das Feld `rendered_url` (String, max. 2048 Zeichen, muss mit http:// oder https:// beginnen) ist die öffentliche URL der Seite, auf der Ihr Skript den Artikel soeben gerendert hat. Es ist die einzige Adresse Ihrer Website, die GMB Club kennt: Sie ermöglicht es Ihren künftigen Artikeln, frühere mit einem Link an der richtigen Stelle zu zitieren. Ohne sie ist auf Ihrer Website keine interne Verlinkung möglich — wir erraten niemals eine URL, und ein erfundener Link wäre ein toter Link. Technisch optional, aber dringend empfohlen.
// 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"
}Interne Verlinkung Ihrer Artikel
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.
Parameter
| Parameter | Type | Standard |
|---|---|---|
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.
| Parameter | Type | Standard |
|---|---|---|
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"
}Wenn kein Scan verfügbar ist, hat die Antwort die folgende Form — und nicht die flache Form mit 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).
| Parameter | Type | Standard |
|---|---|---|
kind | string | snapshot · competitors · (défaut : snapshot) |
bulle_id | string | Erforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel. |
Response:
Mit Daten (Normalfall) ist die Antwort flach strukturiert:
{
"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": {}
}Bedingte Inhaltsblöcke
ranked_keywords, competitors, onpage, pagespeed, ai_analysis – fehlen in der Antwort, wenn der Scan sie nicht erzeugt hat: Sie haben nicht den Wert null, sie sind schlicht nicht vorhanden. Prüfen Sie ihre Existenz, bevor Sie sie auslesen.Wenn für diesen Standort noch kein Scan durchgelaufen ist:
{ "kind": "snapshot", "snapshot": null, "bulle_id": "abc-123" }Mit kind=competitors:
{
"kind": "competitors",
"bulle_id": "abc-123",
"competitors": [],
"snapshot_date": "2026-03-10T04:00:00Z"
}Ohne Scan: competitors hat den Wert [] und snapshot_date fehlt.
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 — Erforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel.
[
{
"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 — Erforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.
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.
| Parameter | Type | Standard |
|---|---|---|
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 | Erforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel. |
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 — Erforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.
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 — Erforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.
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é."
}Parameter
| Feld | Type | Erforderlich |
|---|---|---|
title | string (min 3) | Ja |
target_keyword | string (min 2) | Ja |
site_id · site_ids | integer · integer[] | Nein |
wix_site_id · wix_site_ids | integer · integer[] | Nein |
ai_word_count_target | integer · 1500 | Nein |
generate_content | boolean · true | Nein |
generate_image | boolean · false | Nein |
tone | string · professional | Nein |
language | string · fr | Nein |
featured_image_url · meta_title · meta_description · excerpt | string | Nein |
bulle_id | string | Sphäre-Schlüssel |
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
}Ohne CMS (maßgeschneiderte Website)
bulle_id anstelle einer CMS-Website (site_ids / wix_site_ids) angeben, wird der Artikel erstellt und dem Standort zugeordnet, ohne CMS. Das ist der Modus für maßgeschneiderte Websites (Next.js, Astro, eigenes Theme): Der Artikel wird anschließend über GET /api/v2/articles ausgeliefert, das Ihre Website selbst konsumiert.{
"title": "5 conseils pour entretenir sa voiture",
"target_keyword": "entretien voiture marseille",
"bulle_id": "abc-123"
}Die Antwort trägt dann kind = api in created[], mit site_id auf 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 — Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke.
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 — Optional: Ohne ihn erstellt ein Sphäre-Schlüssel einen QR-Code auf Markenebene (gültig).
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).
| Parameter | Type | Standard |
|---|---|---|
platform | string | wordpress · wix |
bulle_id | string | Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke. |
[
{
"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.
| Parameter | Type | Standard |
|---|---|---|
type | string | fiche · (défaut : fiche) |
limit | integer | 1-100 · 20 |
bulle_id | string | Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke. |
[
{
"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 — Erforderlich mit einem Sphäre-Schlüssel, wenn align_with_brand den Wert true hat (der Standort, dessen Charta abgeglichen wird).
Response:
{
"generated": true,
"image_url": "https://app.gmb-club.com/static/uploads/mcp/xxxx.webp",
"brand_aligned": true
}Berechtigungen
Konfigurierbare Berechtigungen:
readLesen
schedulePlanen
publishVeroffentlichen
deleteLoschen
Rate Limiting
Konfigurierbare Anfragelimits:
| Limit | Standard |
|---|---|
| Pro Minute | 60 |
| Pro Tag | 1000 |
Fehlercodes
| Code | Description |
|---|---|
200 | Erfolg |
201 | Erstellt |
202 | Opérations longues : réponse 202 |
400 | Ungultige Anfrage |
401 | Ungultiger Schlussel |
403 | Unzureichende Berechtigung |
404 | Nicht gefunden |
409 | Conflit d'état (ex. article déjà publié) |
410 | Ressource disparue chez le fournisseur (ex. avis supprimé de Google) |
422 | Ungultige Daten |
429 | Rate-Limit |
500 | Serverfehler |
502 | Service externe en échec (Google, DataForSEO) |
503 | Service non configuré ou indisponible |
Code-Beispiele
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
HTTP > Make a request verwenden.
Kritisch
Zapier
Webhooks by Zapier > Custom Request.
Sicherheit
| Massnahme | Description |
|---|---|
| Gehashte Schlussel | SHA256-Hash |
| HTTPS | Pflicht |
| Isolation | Pro Blase |
| Ablaufzeit | Optional |
| Widerruf | Jederzeit |
| Rate Limiting | Redis-Schutz |

/api/v2/social/publishAuthpublishVeröffentlicht oder plant einen Post auf einer oder mehreren Plattformen.
Body (JSON)
platformstextimage_urlimage_urlsvideo_urlscheduled_atbulle_idplatforms: facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb.text: 1 bis 63206 Zeichen.image_urlfür ein einzelnes Bild,image_urlsfür ein Karussell.scheduled_at(ISO 8601) fehlt = sofortige Veröffentlichung.Response:
statusistpublishing(sofortige Veröffentlichung) oderscheduled(geplant).