GMB Club

Développeurs

Documentation API

L'API GMB Club permet de publier et planifier des posts sur vos réseaux sociaux via Zapier, Make, ou vos propres scripts. Elle permet aussi de récupérer les articles générés.

HTTPSJSON APIRESTfulRate Limited

Concepts clés

L'API v2 utilise l'architecture hiérarchique Sphère / Bulle de GMB Club.

ConceptDescriptionExemple
SphèreMarque / Entreprise / Franchiseur"Auto Sud"
BulleÉtablissement / Point de vente"Auto Sud Marseille"
RessourcesComptes connectés à la bulleFacebook, Instagram, GMB
💡

Important

Une clé API couvre soit un seul établissement (clé de bulle), soit tous les établissements de la marque (clé de sphère). Une clé de bulle ne voit que les données de son établissement ; une clé de sphère voit celles de tous. Appelez d'abord GET /api/v2/me : le champ « bulle » est renseigné pour une clé de bulle et vaut null pour une clé de sphère.

Authentification

L'API utilise des clés API pour l'authentification. Une clé peut avoir deux portées : elle couvre soit un seul établissement (clé de bulle), soit tous les établissements de la marque (clé de sphère). Une clé de bulle ne voit que les données de son établissement ; une clé de sphère voit celles de tous les établissements — l'option idéale pour un site multi-établissements : une seule clé, une seule intégration. Appelez GET /api/v2/me en premier pour savoir de quelle portée vous disposez : le champ « bulle » est renseigné pour une clé de bulle et vaut null pour une clé de sphère.

⚠️

Portée de la clé : bulle ou sphère

Une seule règle de périmètre, valable pour toute l'API :

  1. Une clé couvre un établissement (clé de bulle) ou toute la marque (clé de sphère). Elle définit ce qui est autorisé, jamais ce qui est visé.
  2. Toute route qui agit sur une cible accepte un paramètre de cible : bulle_id pour un établissement, fiche_id pour une fiche Google. Toujours au même endroit : paramètre d'URL en lecture, champ du corps en écriture.
  3. Sans paramètre : une clé de bulle vise son établissement ; une clé de sphère reçoit un 400 qui nomme le paramètre manquant. Jamais de choix arbitraire.
  4. Les routes de liste sans paramètre renvoient l'ensemble de la marque, et chaque élément porte son bulle_id.
  5. Une cible hors du périmètre de la clé renvoie 403 ; une cible inexistante, 404.

Réponses possibles (messages du backend, en français) :

CodeRéponse (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).

Obtenir une clé API

  1. Connectez-vous à GMB Club
  2. Sélectionnez votre bulle dans l'en-tête
  3. Paramètres → Clés API → Nouvelle clé
  4. Choisissez la portée : « Cet établissement » ou « Toute la marque »
  5. Configurez les permissions et copiez la clé

Une clé « Toute la marque » couvre tous les établissements, y compris ceux créés plus tard : c'est le bon choix pour un site unique qui dessert plusieurs établissements — un seul secret à gérer, aucune intervention à prévoir à l'ouverture d'un nouvel établissement.

⚠️

Important

La clé complète n'est affichée qu'une seule fois lors de la création. Conservez-la en lieu sûr.

Format de la clé

text
gmb_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Utilisation

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

JSON uniquement

L'API accepte exclusivement du JSON. Le header Content-Type: application/json est obligatoire pour toutes les requêtes POST/PUT.

Base URL

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

Endpoints

GET/api/v2/health

Vérifie que l'API est opérationnelle. Ne nécessite pas d'authentification.

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

Identité de la clé

GET/api/v2/meAuthread

Retourne les informations sur la clé API, la bulle, la sphère et les ressources connectées. Endpoint à appeler en premier.

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

Clé de sphère

Avec une clé de sphère, le champ bulle vaut null et le tableau gmb_fiches liste toutes les fiches de la marque.

Connexions sociales

GET/api/v2/connectionsAuthread

Retourne les détails des réseaux sociaux connectés pour cette bulle.

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 }
]
ParamètreTypeDéfaut
bulle_idstringRestreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.

Avec une clé de sphère, bulle_id indique à quel établissement appartient chaque page Facebook ou compte Instagram.

Limites des plateformes

GET/api/v2/platforms/limitsAuthread

Retourne les limites de caractères et médias pour chaque plateforme.

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

Forme, pas valeurs figées

character_limits contient une entrée par plateforme (9 au total) ; image_limits et video_limits couvrent instagram, facebook, linkedin, pinterest, gmb. Les valeurs sont dérivées du code et évoluent : appelez l'endpoint pour les chiffres à jour, ne les figez pas dans votre intégration.

Créer un post

POST/api/v2/postsAuthschedule

Crée un nouveau post planifié ou le publie immédiatement.

🚫

Erreurs fréquentes

Content-Type doit être application/json. Plateformes en minuscules. image_urls = vrai tableau JSON.
⚠️

Clé de sphère : bulle_id obligatoire

Avec une clé de sphère, bulle_id est désormais obligatoire sur POST /posts. Auparavant l'appel réussissait en choisissant un établissement par défaut, ce qui pouvait publier sur la mauvaise fiche Google. Les intégrations existantes qui utilisent une clé de sphère doivent ajouter ce champ.

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

Paramètres

ChampTypeRequisDescription
contentstringOuiTexte du post (1-5000 car.)
platformsarrayOuiTableau : facebook, instagram, gmb, linkedin, pinterest, tiktok, snapchat, youtube. La plateforme doit être connectée sur l'établissement, sinon HTTP 400 « Plateforme non connectée ».
image_urlstringNonURL d'une image unique
image_urlsarrayNonTableau JSON d'URLs pour carrousel (2-10)
video_urlstringNonURL d'une vidéo
scheduled_atstringNonDate/heure ISO 8601 (défaut: +1h)
gmb_fiche_idstringNonID de la fiche GMB (voir /me)
publish_nowbooleanNonSi true, publie immédiatement
bulle_idstringClé de sphèreObligatoire avec une clé de sphère : l'établissement ciblé. Déduit automatiquement avec une clé de bulle.
💡

content ou text

Fournissez au moins content (ou son alias text). Une planification par plateforme est possible via scheduled_instagram, scheduled_facebook, scheduled_gmb, etc., et un contenu par plateforme via content_per_platform.

Réponse :

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

Liste des posts

GET/api/v2/postsAuthread

Retourne les posts de la bulle avec pagination.

ParamètreTypeDéfautDescription
statusstring-pending, published, error
limitinteger501-100
offsetinteger0Offset pour pagination
bulle_idstring-Restreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.
⚠️

Tableau nu

Cet endpoint renvoie directement un tableau JSON, sans objet enveloppe — à la différence de GET /articles qui renvoie un objet { 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": []
  }
]
💡

Réponse complète, champ par champ

Trois précisions. Il y a un trio scheduled_ / published_ / error_ par plateforme : la date prévue, la date de publication effective, et le message d'erreur éventuel. Une plateforme non concernée par ce post a ses trois champs à null. platform_refs contient les références des publications chez chaque plateforme une fois publiées ; warnings, les avertissements non bloquants.
GET/api/v2/posts/{post_id}Authread

Récupère un post par son identifiant. Renvoie le même objet qu'un élément de GET /api/v2/posts.

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

Met à jour un post en attente (status: pending uniquement).

💡

Mise à jour partielle

Mise à jour partielle d'un post en attente (content, scheduled_at). Seuls les champs fournis sont modifiés.

Body (JSON)

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

Supprime un post en attente ou en erreur.

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

Force la publication immédiate d'un post planifié.

Publication sociale simplifiée

Trois endpoints pensés pour les intégrations Make, n8n et Zapier : publier, vérifier le quota, suivre le statut. Ils exigent tous une clé de bulle (voir « Portée de la clé »).

POST/api/v2/social/publishAuthpublish

Publie ou planifie un post sur une ou plusieurs plateformes.

Body (JSON)

ChampTypeRequis
platformsarrayOui
textstringOui
image_urlstringNon
image_urlsarrayNon
video_urlstringNon
scheduled_atstringNon
bulle_idstringClé de sphère

platforms : facebook, instagram, linkedin, pinterest, tiktok, snapchat, youtube, gmb. text : 1 à 63206 caractères. image_url pour une image unique, image_urls pour un carrousel. scheduled_at (ISO 8601) absent = publication immédiate.

Réponse :

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

status vaut publishing (publication immédiate) ou scheduled (planifiée).

GET/api/v2/social/quotaAuthread

État du quota mensuel de publication de l'établissement. À appeler avant une publication pour éviter un refus.

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

La réponse est complétée par les compteurs de quota mensuel de l'établissement.

bulle_idObligatoire avec une clé de sphère (l'établissement ciblé). Facultatif avec une clé de bulle.

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

Statut détaillé d'un post. Les objets scheduled, published et errors portent une entrée par plateforme, à null si la plateforme n'est pas concernée.

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

Liste des articles

GET/api/v2/articlesAuthread

Retourne les articles générés pour cette bulle. Idéal pour intégrer sur un site custom.

💡

Site sans intégration native

Appelez cet endpoint périodiquement pour récupérer les articles et les afficher sur votre site.
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
}
💡

Site multi-établissements

Chaque article indique l'établissement pour lequel il a été rédigé. Avec une clé de sphère, un seul appel renvoie les articles de tous les établissements, et bulle_id indique sur quelle page publier chacun. bulle_id vaut null si l'article n'est rattaché qu'à la marque, sans établissement. La correspondance complète des établissements s'obtient par GET /api/v2/bulles.

Paramètres

ParamètreTypeDéfaut
statusstringpublished · draft · all
updated_sincestringISO 8601 — articles modifiés depuis cette date (filtre sur updated_at, tri du plus ancien au plus récent).
bulle_idstringRestreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.
💡

Rester synchronisé

Détecter une correction. since filtre sur la date de publication : un article publié il y a un mois puis corrigé ce matin n'y apparaît pas. Pour rattraper les corrections, utilisez updated_since, qui filtre sur updated_at. Les résultats sont alors triés du plus ancien au plus récent, ce qui permet de reprendre une synchronisation là où elle s'est arrêtée en conservant la dernière valeur reçue.

Construisez vos URLs avec slug, jamais avec le titre. Le slug est figé à la première publication et n'est jamais recalculé, même si le titre est corrigé ensuite. Dériver l'URL du titre exposerait vos pages à un changement d'adresse après indexation.

Détecter un retrait. Un article dépublié n'apparaît plus dans status=published. Avec status=all, il vous revient avec son statut réel (« draft »), un signal explicite. Un article supprimé, lui, disparaît complètement : traitez la liste reçue comme la source de vérité — ce qui n'y est plus n'est plus en ligne.

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

Récupère le contenu complet d'un article par son 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 envoyé par votre script après avoir rendu un article fetché. Il a deux effets : 1. il permet à GMB Club de savoir quels articles sont réellement en ligne sur votre site, et non simplement exposés par l'API ; 2. en envoyant `rendered_url`, il alimente le maillage interne de vos articles, ce qui en fait l'effet le plus utile au quotidien. Optionnel mais recommandé.

💡

Quand l'appeler

Après avoir injecté l'HTML de l'article dans le DOM de votre page. L'endpoint est idempotent : un re-call met juste à jour l'horodatage de confirmation, le dernier ping gagne. Vous pouvez donc le rappeler pour vérifier qu'un article est toujours rendu après plusieurs jours.

Corps JSON optionnel. Le champ `rendered_url` (string, max 2048 caractères, doit commencer par http:// ou https://) est l'URL publique de la page sur laquelle votre script vient de rendre l'article. C'est la seule adresse de votre site que GMB Club connaisse : elle permet à vos prochains articles de citer les précédents avec un lien qui pointe au bon endroit. Sans elle, aucun maillage interne n'est possible sur votre site — nous ne devinons jamais une URL, un lien inventé serait un lien mort. Techniquement optionnel, mais vivement recommandé.

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

Maillage interne de vos articles

Quand vous confirmez l'adresse de vos articles publiés, GMB Club peut les relier entre eux : un nouvel article citera naturellement les précédents, sur une expression de son texte, avec un lien vers la bonne page de votre site. Le périmètre est l'établissement, pas la marque : les articles d'une bulle ne sont liés qu'entre eux, et une enseigne à plusieurs établissements ne verra jamais un article d'une ville renvoyer vers une autre ville. Seuls les articles publiés et dont l'adresse a été confirmée sont candidats ; un article sans adresse confirmée est simplement ignoré. Le bénéfice se construit dans le temps : avec deux ou trois articles en ligne il n'y a presque rien à relier, l'intérêt vient avec le volume.

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.

Paramètres

ParamètreTypeDéfaut
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.

Réponse :

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.

Réponse :

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.

ParamètreTypeDéfaut
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
}

Réponse (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"
}

Si aucun scan n'est disponible, la réponse prend la forme suivante — et non la forme à plat avec 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).

ParamètreTypeDéfaut
kindstringsnapshot · competitors · (défaut : snapshot)
bulle_idstringObligatoire avec une clé de sphère (l'établissement ciblé). Facultatif avec une clé de bulle.

Réponse :

Avec des données (cas normal), la réponse est à plat :

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

Blocs de contenu conditionnels

Les cinq blocs de contenu — ranked_keywords, competitors, onpage, pagespeed, ai_analysis — sont absents de la réponse quand le scan ne les a pas produits : ils ne valent pas null, ils n'y sont pas. Testez leur présence avant de les lire.

Quand aucun scan n'a encore tourné pour cet établissement :

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

Avec kind=competitors :

JSON
{
  "kind": "competitors",
  "bulle_id": "abc-123",
  "competitors": [],
  "snapshot_date": "2026-03-10T04:00:00Z"
}

Sans scan : competitors vaut [] et snapshot_date est absent.

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_idObligatoire avec une clé de sphère (l'établissement ciblé). Facultatif avec une clé de bulle.

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_idObligatoire avec une clé de sphère : l'établissement ciblé. Déduit automatiquement avec une clé de bulle.

Réponse :

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.

ParamètreTypeDéfaut
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_idstringObligatoire avec une clé de sphère (l'établissement ciblé). Facultatif avec une clé de bulle.

Réponse :

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_idObligatoire avec une clé de sphère : l'établissement ciblé. Déduit automatiquement avec une clé de bulle.

⚠️

429

Rate limit dépassé

Réponse :

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_idObligatoire avec une clé de sphère : l'établissement ciblé. Déduit automatiquement avec une clé de bulle.

Réponse :

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

Paramètres

ChampTypeRequis
titlestring (min 3)Oui
target_keywordstring (min 2)Oui
site_id · site_idsinteger · integer[]Non
wix_site_id · wix_site_idsinteger · integer[]Non
ai_word_count_targetinteger · 1500Non
generate_contentboolean · trueNon
generate_imageboolean · falseNon
tonestring · professionalNon
languagestring · frNon
featured_image_url · meta_title · meta_description · excerptstringNon
bulle_idstringClé de sphère
💡

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

Réponse :

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

Sans CMS (site sur mesure)

En fournissant bulle_id au lieu d'un site CMS (site_ids / wix_site_ids), l'article est créé et rattaché à l'établissement, sans CMS. C'est le mode des sites sur mesure (Next.js, Astro, thème maison) : l'article est ensuite servi par GET /api/v2/articles, que votre site consomme lui-même.
JSON
{
  "title": "5 conseils pour entretenir sa voiture",
  "target_keyword": "entretien voiture marseille",
  "bulle_id": "abc-123"
}

La réponse porte alors kind = api dans created[], avec site_id à 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://..."
}
💡

Mise à jour partielle

Tous les champs sont optionnels : seuls les champs fournis sont modifiés, les autres restent inchangés.

Réponse :

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
}

Réponse :

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_idRestreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.

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_idFacultatif : sans lui, une clé de sphère crée un QR code au niveau de la marque (valide).

Réponse :

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

ParamètreTypeDéfaut
platformstringwordpress · wix
bulle_idstringRestreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.
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.

ParamètreTypeDéfaut
typestringfiche · (défaut : fiche)
limitinteger1-100 · 20
bulle_idstringRestreindre à un établissement. Défaut : celui de la clé, ou tous les établissements de la marque.
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 et date_end requis

Les champs date_start et date_end (format ISO, AAAA-MM-JJ) sont obligatoires dans le corps de la requête.
💡

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

Réponse :

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

Réponse :

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_idObligatoire avec une clé de sphère quand align_with_brand vaut true (l'établissement dont on aligne la charte).

Réponse :

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

Permissions

Chaque clé API possède des permissions configurables :

read

Lire les posts, articles, connexions et informations

schedule

Créer et modifier des posts planifiés

publish

Publier immédiatement

delete

Supprimer des posts

Rate Limiting

Chaque clé API a des limites de requêtes configurables :

LimiteValeur par défaut
Par minute60
Par jour1000

Codes d'erreur

CodeDescription
200Succès
201Ressource créée
202Opérations longues : réponse 202
400Requête invalide (vérifiez Content-Type et format JSON)
401Clé API manquante ou invalide
403Permission insuffisante
404Ressource non trouvée
409Conflit d'état (ex. article déjà publié)
410Ressource disparue chez le fournisseur (ex. avis supprimé de Google)
422Données invalides
429Rate limit dépassé
500Erreur serveur
502Service externe en échec (Google, DataForSEO)
503Service non configuré ou indisponible

Exemples de code

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.

Configuration Make.com

Utilisez le module HTTP → Make a request.

🚫

Paramètre critique

Dans Body type, sélectionnez Raw puis JSON (application/json). Ne laissez pas sur multipart/form-data.

Configuration Zapier

Utilisez l'action Webhooks by Zapier → Custom Request.

Sécurité

MesureDescription
Clés hashéesStockées en SHA256, jamais en clair
HTTPS obligatoireToutes les requêtes doivent utiliser HTTPS
Isolation par bulleChaque clé n'accède qu'aux données de sa bulle
Expiration optionnelleLes clés peuvent avoir une date d'expiration
RévocationLes clés peuvent être révoquées à tout moment
Rate limitingProtection contre les abus via Redis