GMB Club

Entwickler

Dokumentation API

Die GMB Club API ermoglicht es, Posts uber Zapier, Make oder eigene Skripte zu veroffentlichen und zu planen.

HTTPSJSON APIRESTfulRate Limited

Kernkonzepte

Die v2 API nutzt die hierarchische Sphare/Blase-Architektur.

ConceptDescriptionBeispiel
SphareMarke / Unternehmen"Auto Sud"
BlaseStandort / Verkaufsstelle"Auto Sud Marseille"
RessourcenVerbundene KontenFacebook, Instagram, GMB
💡

Important

Ein API-Schlüssel 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. Rufen Sie zuerst GET /api/v2/me auf: Das Feld „bulle“ ist bei einem Blase-Schlüssel gefüllt und ist null bei einem Sphäre-Schlüssel.

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:

  1. 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.
  2. Jede Route, die auf ein Ziel wirkt, akzeptiert einen Zielparameter: bulle_id für einen Standort, fiche_id für eine Google-Fiche. Immer an derselben Stelle: URL-Parameter beim Lesen, Feld im Body beim Schreiben.
  3. 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.
  4. Listen-Routen ohne Parameter geben die gesamte Marke zurück, und jedes Element trägt seine bulle_id.
  5. Ein Ziel außerhalb des Geltungsbereichs des Schlüssels gibt 403 zurück; ein nicht existierendes Ziel 404.

Mögliche Antworten (Meldungen des Backends, auf Französisch):

CodeAntwort (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).

API-Schlussel erhalten

  1. Bei GMB Club anmelden
  2. Wählen Sie Ihre Blase in der Kopfzeile aus
  3. Einstellungen → API-Schlüssel → Neuer Schlüssel
  4. Wählen Sie den Geltungsbereich: „Dieser Standort“ oder „Gesamte Marke“
  5. 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

Schlussel wird nur einmal angezeigt.

Format

text
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Verwendung

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

Nur JSON

Content-Type: application/json ist fur POST/PUT erforderlich.

Base URL

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

Endpoints

GET/api/v2/health

Pruft die API-Verfugbarkeit. Keine Auth notig.

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

Schlussel-Identitat

GET/api/v2/meAuthread

Gibt Infos uber Schlussel, Blase, Sphare und Ressourcen zuruck.

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
  }]
}
💡

Sphäre-Schlüssel

Mit einem Sphäre-Schlüssel ist das Feld bulle null und das Array gmb_fiches listet alle Einträge der Marke auf.

Soziale Verbindungen

GET/api/v2/connectionsAuthread

Details der verbundenen Netzwerke.

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 }
]
ParameterTypeStandard
bulle_idstringAuf 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

GET/api/v2/platforms/limitsAuthread

Zeichen- und Medienlimits pro Plattform.

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 enthält einen Eintrag pro Plattform (9 insgesamt); image_limits und video_limits decken instagram, facebook, linkedin, pinterest, gmb ab. Die Werte werden aus dem Code abgeleitet und ändern sich: Rufen Sie den Endpoint auf, um die aktuellen Zahlen zu erhalten, und schreiben Sie sie nicht fest in Ihre Integration.

Post erstellen

POST/api/v2/postsAuthschedule

Erstellt einen geplanten Post oder veroffentlicht sofort.

🚫

Haufige Fehler

Content-Type: application/json. Plattformen klein. image_urls = JSON-Array.
⚠️

Sphäre-Schlüssel: bulle_id erforderlich

Mit einem Sphäre-Schlüssel ist 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)

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

FeldTypeErforderlichDescription
contentstringJaPost-Text (1-5000 Zeichen)
platformsarrayJaArray: facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. Die Plattform muss auf dem Standort verbunden sein, andernfalls HTTP 400 « Plateforme non connectée ».
image_urlstringNeinEinzelbild-URL
image_urlsarrayNeinURL-Array fur Karussell (2-10)
video_urlstringNeinVideo-URL
scheduled_atstringNeinISO 8601 (Standard: +1h)
gmb_fiche_idstringNeinGMB-Profil-ID
publish_nowbooleanNeinSofort veroffentlichen
bulle_idstringSphäre-SchlüsselErforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.
💡

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": []
}

Posts auflisten

GET/api/v2/postsAuthread

Posts mit Paginierung.

ParameterTypeStandardDescription
statusstring-pending, published, error
limitinteger501-100
offsetinteger0Offset
bulle_idstring-Auf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke.
⚠️

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": []
  }
]
💡

Vollständige Antwort, Feld für Feld

Drei Hinweise. Es gibt pro Plattform ein Trio 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.
GET/api/v2/posts/{post_id}Authread

Ruft einen Post anhand seiner ID ab. Liefert dasselbe Objekt wie ein Element von GET /api/v2/posts.

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

Ausstehenden Post aktualisieren.

💡

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

Ausstehenden Post loschen.

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

Sofortige 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“).

POST/api/v2/social/publishAuthpublish

Veröffentlicht oder plant einen Post auf einer oder mehreren Plattformen.

Body (JSON)

FeldTypeErforderlich
platformsarrayJa
textstringJa
image_urlstringNein
image_urlsarrayNein
video_urlstringNein
scheduled_atstringNein
bulle_idstringSphäre-Schlüssel

platforms: facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb. text: 1 bis 63206 Zeichen. image_url für ein einzelnes Bild, image_urls für ein Karussell. scheduled_at (ISO 8601) fehlt = sofortige Veröffentlichung.

Response:

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

status ist publishing (sofortige Veröffentlichung) oder scheduled (geplant).

GET/api/v2/social/quotaAuthread

Status des monatlichen Veröffentlichungskontingents des Standorts. Vor einer Veröffentlichung aufzurufen, um eine Ablehnung zu vermeiden.

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

Die Antwort wird durch die monatlichen Kontingentzähler des Standorts ergänzt.

bulle_idErforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel.

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

Detaillierter Status eines Posts. Die Objekte scheduled, published und errors enthalten einen Eintrag pro Plattform, null wenn die Plattform nicht betroffen ist.

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 }
}

Artikel auflisten

GET/api/v2/articlesAuthread

Generierte Artikel abrufen.

💡

Site ohne Ihre Website (gängige CMS unterstützt)

Endpoint periodisch aufrufen.
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",
    "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

Jeder Artikel gibt den Standort an, für den er verfasst wurde. Mit einem Sphäre-Schlüssel liefert ein einziger Aufruf die Artikel aller Standorte, und 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

ParameterTypeStandard
statusstringpublished · draft · all
updated_sincestringISO 8601 – seit diesem Datum geänderte Artikel (Filter auf updated_at, sortiert vom ältesten zum neuesten).
bulle_idstringAuf 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.

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

Artikelinhalt 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",
  "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

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

Pingback, 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

Nachdem Sie das HTML des Artikels in das DOM Ihrer Seite eingefügt haben. Der Endpoint ist idempotent: Ein erneuter Aufruf aktualisiert lediglich den Bestätigungszeitstempel, der letzte Ping gewinnt. Sie können ihn also erneut aufrufen, um zu prüfen, ob ein Artikel nach mehreren Tagen noch gerendert wird.

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.

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

Les endpoints articles acceptent les requêtes cross-origin depuis n'importe quel domaine (Access-Control-Allow-Origin: *). Tu peux donc appeler le pingback directement depuis le <script> de ta page, ou côté serveur lors d'un build statique ou d'un rendu SSR, comme tu préfères.
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

Réponse 200 lors d'une confirmation réussie :

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

Interne Verlinkung Ihrer Artikel

Wenn Sie die Adresse Ihrer veröffentlichten Artikel bestätigen, kann GMB Club sie miteinander verknüpfen: Ein neuer Artikel zitiert frühere ganz natürlich, an einer Wendung seines Textes, mit einem Link zur richtigen Seite Ihrer Website. Der Bezugsrahmen ist der Standort, nicht die Marke: Die Artikel einer Blase werden nur untereinander verlinkt, und eine Kette mit mehreren Standorten wird nie erleben, dass ein Artikel einer Stadt auf eine andere Stadt verweist. Nur veröffentlichte Artikel mit bestätigter Adresse kommen infrage; ein Artikel ohne bestätigte Adresse wird einfach übergangen. Der Nutzen entsteht mit der Zeit: Bei zwei oder drei Artikeln online gibt es kaum etwas zu verknüpfen, der Wert kommt mit dem Volumen.

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

Toute opération coûteuse (réponse à un avis, publication, scan SEO, rapport, envoi de demandes d'avis, audit ou application de fiche) accepte "dry_run": true dans le corps. L'API renvoie alors un aperçu (champs would_*, quota courant) sans rien exécuter ni consommer de quota. Recommandé dans vos scénarios Make ou n8n pour valider un appel avant de le lancer pour de vrai.
💡

Fiche par défaut : fiche_id optionnel

Sur les endpoints liés à une fiche Google (metrics, reviews, optimizer, acquisition, visibility), le paramètre fiche_id est facultatif : s'il est omis, l'API utilise la fiche rattachée à votre clé API.
💡

Opérations longues : réponse 202

Les traitements longs (génération de rapports, envoi de demandes d'avis, génération d'articles) renvoient un code 202 avec un identifiant. Le résultat se récupère ensuite via les endpoints de lecture correspondants (par exemple GET /v2/reports pour un rapport, ou GET /v2/articles pour un article).

Espace de travail

Sphère de la clé

GET/api/v2/spheresAuthread

Retourne la sphère (marque) rattachée à la clé API : nom, slug, ton et langue par défaut.

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

GET/api/v2/bullesAuthread

Liste les bulles (établissements) de la sphère, avec leur ville et le nombre de fiches Google rattachées.

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" }
]

Détail d'un établissement

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

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

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
}

Avis Google

Lister les avis

GET/api/v2/reviewsAuthread

Retourne les avis Google de la fiche, paginés et filtrables (note, statut de réponse, mot-clé, dates), triables par date ou note.

Parameter

ParameterTypeStandard
min_starsinteger1-5 · 1
max_starsinteger1-5 · 5
statusstringresponded · drafts · unresponded
keywordstring-
date_fromstringISO 8601
date_tostringISO 8601
sort_bystringdate_desc
fiche_idstringFiche par défaut : fiche_id optionnel
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
}

Résumé des avis

GET/api/v2/reviews/summaryAuthread

Retourne la note moyenne, le total d'avis et leur répartition par statut (répondus, brouillons, sans réponse).

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 }
}

Répondre à un avis

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

Publie une réponse à un avis directement sur Google. Opération coûteuse : supporte dry_run.

Body (JSON)

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

410 Gone

Si l'avis a disparu de Google entre-temps, l'API renvoie 410.

Response:

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

Acquisition d'avis

Statistiques d'acquisition

GET/api/v2/acquisition/statsAuthread

Retourne les statistiques des demandes d'avis sur 30 jours : nombre envoyé, par canal (SMS, email) et par statut.

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

POST/api/v2/acquisition/review-requestsAuthpublish

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

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

Chaque contact porte au minimum un nom (customer_name) et un canal (channel) : « sms » nécessite customer_phone, « email » nécessite customer_email. Champ optionnel : custom_message. Les quotas SMS et email sont mensuels et par bulle.

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

Fiche Google

Statistiques Google Business

GET/api/v2/gmb/metricsAuthread

Retourne les KPIs de la fiche Google sur une période : vues, recherches, appels, clics vers le site, demandes d'itinéraire.

ParameterTypeStandard
period_daysinteger1-90 · 30
fiche_idstringFiche par défaut : fiche_id optionnel
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": {}
}

Score d'optimisation

GET/api/v2/gmb/optimizerAuthread

Retourne le dernier score d'optimisation de la fiche (0 à 100), en cache. Lecture rapide, sans nouvel 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"
}

Lancer un audit complet

POST/api/v2/gmb/optimizer/auditAuthpublish

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

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

Appliquer des changements

POST/api/v2/gmb/optimizer/applyAuthpublish

Applique une liste de modifications {field, value} sur la fiche Google (écriture réelle chez Google). Opération coûteuse : supporte 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"]
}

Score de visibilité Local Pack

GET/api/v2/visibility/scanAuthread

Retourne le dernier scan de visibilité de la fiche dans le Local Pack Google : score et position moyenne autour du point de vente.

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

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

SEO & mots-clés

Données SEO

GET/api/v2/seo/dataAuthread

Retourne 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).

ParameterTypeStandard
kindstringsnapshot · competitors · (défaut : snapshot)
bulle_idstringErforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel.

Response:

Mit Daten (Normalfall) ist die Antwort flach strukturiert:

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": {}
}
⚠️

Bedingte Inhaltsblöcke

Die fünf Inhaltsblöcke – ranked_keywords, competitors, onpage, pagespeed, ai_analysisfehlen 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:

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

Mit kind=competitors:

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

GET/api/v2/seo/tracked-keywordsAuthread

Liste les mots-clés suivis pour la fiche, avec leur position actuelle, la variation (delta) et le volume de recherche.

bulle_idErforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel.

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

Ajouter un mot-clé au suivi

POST/api/v2/seo/tracked-keywordsAuthpublish

Ajoute un mot-clé au suivi de positionnement de la fiche.

Body (JSON)

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

bulle_idErforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.

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": []
}

Données Search Console

GET/api/v2/seo/search-consoleAuthread

Retourne les données Google Search Console en direct (impressions, clics, position) selon les dimensions, filtres et dates demandés.

ParameterTypeStandard
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_idstringErforderlich mit einem Sphäre-Schlüssel (der angesteuerte Standort). Optional mit einem Blase-Schlüssel.

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

Lancer un scan SEO

POST/api/v2/seo/scanAuthpublish

Lance un scan SEO complet de la fiche. Soumis à un quota mensuel (429 si dépassé). Opération coûteuse : supporte dry_run.

Body (JSON)

JSON
{ "dry_run": false }

bulle_idErforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.

⚠️

429

Rate-Limit

Response:

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

POST/api/v2/seo/keyword-lookupAuthpublish

Analyse un mot-clé à la demande : volume de recherche, difficulté, mots-clés liés. Opération coûteuse : supporte dry_run.

Body (JSON)

JSON
{ "keyword": "vidange voiture marseille", "dry_run": false }

bulle_idErforderlich mit einem Sphäre-Schlüssel: der angesteuerte Standort. Wird mit einem Blase-Schlüssel automatisch abgeleitet.

Response:

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

Articles SEO (création & publication)

Créer des articles

POST/api/v2/articlesAuthpublish

Cré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)

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

FeldTypeErforderlich
titlestring (min 3)Ja
target_keywordstring (min 2)Ja
site_id · site_idsinteger · integer[]Nein
wix_site_id · wix_site_idsinteger · integer[]Nein
ai_word_count_targetinteger · 1500Nein
generate_contentboolean · trueNein
generate_imageboolean · falseNein
tonestring · professionalNein
languagestring · frNein
featured_image_url · meta_title · meta_description · excerptstringNein
bulle_idstringSphäre-Schlüssel
💡

201 Created

La génération est asynchrone : l'article est d'abord créé puis rédigé en arrière-plan. Récupérez son contenu final via 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
}
💡

Ohne CMS (maßgeschneiderte Website)

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

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

Modifier un article

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

Met à jour partiellement un article (seuls les champs fournis sont modifiés). Renvoie 409 si l'article est déjà publié en ligne.

Body (JSON)

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

Partial update

All fields are optional: only the fields you send are updated, the rest stay unchanged.

Response:

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

Publier ou programmer un article

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

Publie un article immédiatement, ou le programme si scheduled_at (date ISO future) est fourni. Opération coûteuse : supporte 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 codes

Lister les QR codes

GET/api/v2/qr-codesAuthread

Retourne les QR codes traqués de la bulle, avec le nombre de scans et le type de redirection (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_idAuf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke.

Créer un QR code

POST/api/v2/qr-codesAuthpublish

Crée un QR code traqué pointant vers une URL cible, avec une couleur et un logo optionnels.

Body (JSON)

JSON
{
  "target_url": "https://g.page/r/xxxx/review",
  "name": "Avis Auto Sud",
  "color_hex": "#000000",
  "with_logo": true
}

bulle_idOptional: Ohne ihn erstellt ein Sphäre-Schlüssel einen QR-Code auf Markenebene (gültig).

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

Sites & rapports

Sites connectés

GET/api/v2/sitesAuthread

Liste les sites connectés à la bulle. Filtrable par plateforme (wordpress, wix, shopify, prestashop).

ParameterTypeStandard
platformstringwordpress · wix
bulle_idstringAuf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke.
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
  }
]

Lister les rapports

GET/api/v2/reportsAuthread

Retourne les rapports déjà générés, avec les URLs de téléchargement PDF et CSV.

ParameterTypeStandard
typestringfiche · (défaut : fiche)
limitinteger1-100 · 20
bulle_idstringAuf einen Standort einschränken. Standard: der des Schlüssels oder alle Standorte der Marke.
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"
  }
]

Générer un rapport

POST/api/v2/reportsAuthpublish

Gé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)

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

Les traitements longs (génération de rapports, envoi de demandes d'avis, génération d'articles) renvoient un code 202 avec un identifiant. Le résultat se récupère ensuite via les endpoints de lecture correspondants (par exemple GET /v2/reports pour un rapport, ou GET /v2/articles pour un article).

Response:

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

Images

Uploader une image

POST/api/v2/images/uploadAuthpublish

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

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

Générer une image par IA

POST/api/v2/images/generateAuthpublish

Gé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)

JSON
{
  "prompt": "Un mécanicien souriant dans un garage moderne et lumineux",
  "align_with_brand": true
}

bulle_idErforderlich mit einem Sphäre-Schlüssel, wenn align_with_brand den Wert true hat (der Standort, dessen Charta abgeglichen wird).

Response:

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

Berechtigungen

Konfigurierbare Berechtigungen:

read

Lesen

schedule

Planen

publish

Veroffentlichen

delete

Loschen

Rate Limiting

Konfigurierbare Anfragelimits:

LimitStandard
Pro Minute60
Pro Tag1000

Fehlercodes

CodeDescription
200Erfolg
201Erstellt
202Opérations longues : réponse 202
400Ungultige Anfrage
401Ungultiger Schlussel
403Unzureichende Berechtigung
404Nicht gefunden
409Conflit d'état (ex. article déjà publié)
410Ressource disparue chez le fournisseur (ex. avis supprimé de Google)
422Ungultige Daten
429Rate-Limit
500Serverfehler
502Service externe en échec (Google, DataForSEO)
503Service non configuré ou indisponible

Code-Beispiele

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

Modules Make.com & n8n

Les modules officiels Make.com et n8n (n8n-nodes-gmb-club) couvrent les opérations principales prêtes à l'emploi. Pour les endpoints non encore exposés par un module, appelez l'API directement : module « Make an API Call » sur Make, ou node « HTTP Request » avec le credential GMB Club sur n8n.
💡

dry_run

Astuce : dans vos scénarios Make ou n8n, activez dry_run: true sur les opérations coûteuses pour valider l'appel avant de l'exécuter pour de vrai.

Make.com

HTTP > Make a request verwenden.

🚫

Kritisch

Body type: Raw > JSON. Nicht multipart/form-data.

Zapier

Webhooks by Zapier > Custom Request.

Sicherheit

MassnahmeDescription
Gehashte SchlusselSHA256-Hash
HTTPSPflicht
IsolationPro Blase
AblaufzeitOptional
WiderrufJederzeit
Rate LimitingRedis-Schutz