API Gloria : documentation

Cette documentation s'adresse à la personne qui relie Gloria à un autre outil : un CRM, un outil d'automatisation, ou un assistant (Claude, ChatGPT, Gemini).

Adresse de base :https://gloria.glitchsolutions.fr
Description technique complète (OpenAPI 3.1) :https://gloria.glitchsolutions.fr/v1/openapi.json
Sommaire de la documentation

1. Trois façons de se relier à Gloria

BesoinMoyenQui agit
Un outil lit ou agit dans Gloria (CRM, Make, Zapier, n8n, script)Clé d'accèsL'outil, avec les droits de la clé
Un assistant pilote Gloria en langage naturelConnecteur (MCP)La personne connectée, avec ses droits Gloria
Gloria prévient un outil quand quelque chose se passeNotifications sortantesGloria

2. Clé d'accès

Créée par le propriétaire du compte dans Gloria : Paramètres → Connexions → Accès API. La clé (glo_live_…) n'est affichée qu'une fois. Dix clés actives au plus par compte. Une clé révoquée cesse de fonctionner immédiatement.

À envoyer dans chaque appel :

HTTP
Authorization: Bearer glo_live_…

Le compte est déterminé par la clé : il n'y a jamais d'identifiant de compte à fournir.

Droits d'une clé

DroitCe qu'il permet
lectureToujours présent. Consulter le compte, la prospection, les rendez-vous, les devis, les factures, les publications.
prospectionEnvoyer des contacts en prospection, proposer une nouvelle accroche.
ventesPréparer et envoyer des devis, créer et envoyer des factures, lancer des relances.
communicationPréparer, programmer, publier ou retirer une publication.

Limites

60 appels par minute et 5 000 par jour, par clé. Au-delà : réponse 429 avec le code quota_depasse. Chaque appel est journalisé ; le propriétaire voit le journal dans Gloria.

3. Les outils

Consultation (GET)

AdresseContenu
/v1/compteCompte, formule, modules actifs
/v1/agentsÉtat des agents de prospection, blocages et leur raison, quotas
/v1/recap-jourActivité d'une journée (jour=AAAA-MM-JJ)
/v1/entonnoirEntonnoir de prospection (depuis)
/v1/prospectsProspects (q, statut, depuis, limite, decalage)
/v1/prospects/{id}Fiche et historique d'un prospect
/v1/appelsAppels passés par l'agent vocal
/v1/rdvRendez-vous
/v1/devisDevis
/v1/facturesFactures
/v1/relancesDevis et factures à relancer
/v1/contactsRecherche dans Mes contacts (q)
/v1/accrochesAccroches en place (mail, LinkedIn, appel)
/v1/publicationsPlanning des publications (depuis, jusqu_a, statut)
/v1/mediasMédiathèque

Actions (POST, corps JSON)

AdresseDroitEffet après validation
/v1/contactsprospectionLes contacts entrent en prospection automatique
/v1/accrochesprospectionL'accroche est remplacée
/v1/devisventesCrée un brouillon (seule action directe, rien n'est envoyé)
/v1/devis/envoyerventesLe devis part par e-mail avec son PDF
/v1/facturesventesLa facture est créée (numéro définitif)
/v1/factures/envoyerventesLa facture part par e-mail
/v1/relancesventesLes relances partent
/v1/publicationscommunicationLa publication est lancée ou programmée
/v1/publications/publiercommunicationUn post du planning part maintenant
/v1/publications/retirercommunicationUn post est retiré du planning
/v1/validerselon l'actionExécute une action préparée

Le détail des champs de chaque outil est dans /v1/openapi.json.

4. Les actions se font en deux temps

Aucune action n'a d'effet au premier appel.

  1. Aperçu.L'appel renvoie ce qui serait fait, et un numéro de validation :
    JSON
    { "ok": true, "code": "apercu", "validation": "742b9341-…", "expire_dans_minutes": 15, "…": "…" }
  2. Validation. POST /v1/valider avec { "validation": "742b9341-…" } exécute exactement ce qui a été montré.

Une validation sert une seule fois, expire au bout de 15 minutes, et ne peut être utilisée que par la clé ou la personne qui a demandé l'aperçu. Si le document a changé entre l'aperçu et la validation, la validation est refusée.

Exemple :

Bash
curl -X POST https://gloria.glitchsolutions.fr/v1/devis/envoyer \
  -H "Authorization: Bearer glo_live_…" -H "Content-Type: application/json" \
  -d '{"devis_id":"…"}'
# → aperçu : destinataire, lignes, totaux, numéro de validation

curl -X POST https://gloria.glitchsolutions.fr/v1/valider \
  -H "Authorization: Bearer glo_live_…" -H "Content-Type: application/json" \
  -d '{"validation":"…"}'
# → { "ok": true, "code": "devis_envoye", "numero": "DEV-2026-0042", "envoye_a": "…" }

5. Réponses et erreurs

Toute réponse est un objet JSON avec ok. En cas de refus : ok: false, un code stable et un message lisible.

StatutCodes courantsSens
401non_connecte, cle_invalideClé absente, inconnue ou révoquée
403droit_manquant, acces_refuseLa clé ou la personne n'a pas ce droit
404introuvable, validation_inconnueL'objet n'existe pas sur ce compte
409deja_envoye, deja_traitee, devis_modifieDéjà fait, ou modifié depuis l'aperçu
410validation_expireePlus de 15 minutes
422question_fermee, instagram_sans_visuel, document_non_pret…La demande est refusée par une règle métier
429quota_depasseTrop d'appels
502envoi_echoue, publication_refuseeL'envoi n'est pas parti, rien n'a changé

Règle : ne considérez qu'un envoi est fait que si la réponse le confirme.

6. Connecteur pour assistants (Claude, ChatGPT, Gemini)

Adresse du connecteur : https://gloria.glitchsolutions.fr/mcp

L'assistant ouvre une page Gloria : la personne se connecte avec son compte (double authentification comprise), lit ce que l'assistant pourra faire, puis autorise. L'assistant agit alors avec les droits de cette personne dans Gloria, ni plus ni moins. Les mêmes outils qu'au §3 sont disponibles, avec la même règle aperçu puis validation : l'assistant montre l'aperçu et ne valide qu'après l'accord de la personne.

Limites : 60 appels par minute et 5 000 par jour par personne.

7. Notifications sortantes

Gloria envoie une requête POST à une adresse de votre choix quand un événement se produit. À régler par le propriétaire dans Gloria : Paramètres → Connexions → Accès API. Cinq notifications actives au plus par compte. L'adresse doit être en https et publique.

Événements

TypeQuand
rdv.prisUn rendez-vous est confirmé
rdv.annuleUn rendez-vous confirmé est annulé
prospect.statut_changeUn prospect change de statut
devis.envoyeUn devis part chez le client
devis.accepteLe client accepte ou signe
devis.refuseLe client refuse
facture.envoyeeUne facture est émise et envoyée
facture.payeeUne facture est marquée payée
publication.publieeUne publication est en ligne
test.pingEssai lancé depuis Gloria

Ce que vous recevez

JSON
{
  "id": "7a310636-…",
  "type": "prospect.statut_change",
  "cree_le": "2026-11-10T13:30:54.541017+00:00",
  "compte": "…",
  "livraison": "b2b7fd11-…",
  "donnees": {
    "prospect_id": "085cb3a7-…",
    "ancien_statut": "contacte",
    "statut": "a_rappeler",
    "entreprise": "Résidence Les Acacias",
    "prenom": "Sophie", "nom": "Carpentier",
    "email": "…", "telephone": "…", "ville": "Lagny-sur-Marne"
  }
}

En-têtes : x-gloria-evenement (le type), x-gloria-livraison (identifiant de l'envoi), x-gloria-signature.

Contenu de donnees par type :

  • rdv.* : rdv_id, titre, debut, fin, fuseau, visio, lieu, statut, origine, personne (nom, email, telephone), prospect_id, contact_id
  • devis.* : devis_id, numero, statut, destinataire (nom, email), total_ht, total_ttc, dates, contact_id, prospect_id
  • facture.* : facture_id, numero, statut, type_document, destinataire, total_ht, total_ttc, date_emission, date_echeance, payee_le, montant_paye, devis_id
  • publication.publiee : post_id, reseau, sujet, texte, publie_le

Vérifier la signature

x-gloria-signature vaut t=<secondes>,v1=<signature>. La signature est le HMAC SHA-256, en hexadécimal, de la chaîne <t>.<corps brut> avec le secret de la notification (glo_whsec_…, affiché une seule fois à la création).

Vérifiez sur le corps brut reçu, avant toute lecture JSON : le reformater change la signature. Refusez un t vieux de plus de 5 minutes.

JavaScript
// Node.js
import crypto from "node:crypto";
function verifier(corpsBrut, entete, secret) {
  const t = /t=(\d+)/.exec(entete)?.[1], v1 = /v1=([0-9a-f]+)/.exec(entete)?.[1];
  if (!t || !v1 || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const attendu = crypto.createHmac("sha256", secret).update(`${t}.${corpsBrut}`).digest("hex");
  return attendu.length === v1.length && crypto.timingSafeEqual(Buffer.from(attendu), Buffer.from(v1));
}
Python
# Python
import hmac, hashlib, re, time
def verifier(corps_brut: bytes, entete: str, secret: str) -> bool:
    t = re.search(r"t=(\d+)", entete); v1 = re.search(r"v1=([0-9a-f]+)", entete)
    if not t or not v1 or abs(time.time() - int(t.group(1))) > 300: return False
    attendu = hmac.new(secret.encode(), t.group(1).encode() + b"." + corps_brut, hashlib.sha256).hexdigest()
    return hmac.compare_digest(attendu, v1.group(1))

Règles de livraison

  • Départ dans la minute qui suit l'événement.
  • Répondez par un statut 2xx en moins de 10 secondes. Tout autre cas est un échec.
  • En cas d'échec : nouveaux essais après 1 minute, 5 minutes, 30 minutes, 2 heures, 6 heures, puis abandon (six essais au total).
  • Un même événement peut arriver deux fois : dédoublonnez sur id.
  • L'ordre d'arrivée n'est pas garanti : fiez-vous à cree_le.
  • Après 20 échecs d'affilée, la notification est désactivée. Elle se réactive depuis Gloria.

8. Ce que l'API ne renvoie jamais

Les transcriptions et enregistrements d'appels, les coûts, les identifiants techniques internes.