API
Lis et mets à jour les données du programme de fidélité depuis ton propre backend grâce à l’API GraphQL externe de Gibbond : inscris des membres, attribue et échange des points, et synchronise l’activité de tous tes canaux.
Sur cette page
Forfait Pro requis. L’API externe est disponible avec le forfait Pro. Pour l’activer, passe à un forfait supérieur depuis Plans & billing dans l’admin Gibbond.
Tu découvres l’API ? Le guide d’intégration propose des exemples concrets à copier-coller : appels depuis ton backend, intégration dans une app mobile ou web, et attribution de points depuis un autre canal de vente. Cette page contient la référence complète du schéma.
L’API utilise un seul point de terminaison GraphQL. Envoie une requête POST avec un corps JSON contenant ta query (ou mutation) et, si besoin, des variables :
POST https://app.gibbond.com/api/v1/graphql Tous les horodatages sont des chaînes ISO-8601 et tous les identifiants sont des GID Shopify (par exemple gid://shopify/Customer/123), sauf indication contraire. Les points sont des nombres entiers.
Authentification
Chaque requête contient un identifiant dans l’en-tête Authorization. Il existe deux types d’identifiants, adaptés à des situations différentes.
Clés API (côté serveur)
Les clés API identifient ton backend. Crée-les dans la page API keys de l’admin Gibbond ; chacune reçoit une autorisation (READ, WRITE ou ADMIN). Une clé n’est affichée qu’une fois, lors de sa création, et ressemble à glk_live_…. Transmets-la comme jeton bearer :
Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx Côté serveur uniquement. Une clé API peut lire et modifier les données de tous les membres. Ne l’expose jamais dans un navigateur, une app mobile ou un client que tu ne contrôles pas. Conserve-la dans une variable d’environnement du serveur et renouvelle-la depuis l’admin si elle est divulguée.
Jetons client (côté client)
Pour appeler l’API depuis une interface destinée aux clients (un widget de boutique ou une application mobile), génère un jeton client depuis ton backend avec la mutation mintCustomerToken, puis transmets-le au client. Les jetons client sont de courte durée et associés à un seul client : une requête effectuée avec ce jeton ne peut consulter que les données de ce client et agir pour son compte. La requête me renvoie le client associé au jeton, et redeemReward permet à ce client d’échanger une récompense sans clé API du marchand ; le jeton peut donc être transmis au navigateur en toute sécurité.
Authorization: Bearer <customer token> Autorisations
Les autorisations d’une clé API déterminent les opérations qu’elle peut exécuter. Elles sont cumulatives.
| Autorisation | Accès accordé |
|---|---|
READ | Toutes les requêtes (soldes, historique, récompenses, paliers et configuration). |
WRITE | Tous les droits de READ, ainsi que les mutations pour inscrire des membres, attribuer des points positifs, échanger des récompenses, confirmer des points et créer des jetons client. |
ADMIN | Tous les droits de WRITE, ainsi que la reprise de points (clawbackPoints) et les ajustements négatifs via awardPoints (valeur négative pour points). |
Utilise l’autorisation minimale nécessaire : une clé READ pour les analyses, une clé WRITE pour gagner et échanger des points, et réserve ADMIN aux remboursements et corrections.
Limites de requêtes
Chaque identifiant d’authentification (clé API ou jeton client) est limité à 600 requêtes par minute. En cas de dépassement, l’API renvoie le statut HTTP 429 avec un en-tête Retry-After indiquant le nombre de secondes à attendre avant de réessayer.
Requêtes
Les requêtes nécessitent une clé avec l’autorisation READ au minimum, ou un jeton client qui ne peut lire que les données de ce client.
| Requête | Arguments | Résultat / description |
|---|---|---|
me | — | Le client associé à un jeton lié à un client. Une erreur est renvoyée si la requête est appelée avec une clé API du marchand. |
customer | id: ID! | Un client identifié par son GID. |
customers | ids: [ID!]! | Lecture groupée de clients par GID (clé du marchand, READ). |
customerByEmail | email: String! | Rechercher un client par adresse e-mail (clé du marchand, READ). |
rewards | — | Catalogue des récompenses échangeables de la boutique. |
tiers | — | Paliers VIP de la boutique (slug, nom, seuil, multiplicateur). |
shopConfig | — | Configuration du programme : nom, devise, points par unité monétaire, mode de confirmation, paliers et récompenses. |
pointHistory | customerId: ID!, limit: Int | Événements de points d’un client, du plus récent au plus ancien. |
activeCodes | customerId: ID! | Codes de réduction non utilisés d’un client (échanges et avantages de palier). |
referral | customerId: ID! | Code de parrainage d’un client et nombres de personnes invitées, de parrainages validés et de récompenses attribuées. |
totalLiability | — | Total des points restant dus dans toute la boutique, sous forme d’entier (clé du marchand, READ). |
Mutations
Les mutations nécessitent une clé WRITE, sauf indication contraire ; les opérations ADMIN sont signalées.
| Mutation | Arguments | Résultat / description |
|---|---|---|
enrollCustomer | customerId: ID!, email: String | Inscrire un client au programme de fidélité (WRITE). Renvoie CustomerResult. |
awardPoints | customerId: ID!, points: Int!, reason: String, idempotencyKey: String | Attribuer ou ajuster des points. Une valeur négative de points nécessite ADMIN ; idempotencyKey évite les doublons lors d’une nouvelle tentative. Renvoie PointResult. |
awardPointsForOrder | input: OrderInput! | Attribuer des points pour une commande passée sur un autre canal ; le multiplicateur de palier, les boosts et les étapes sont repris. orderId rend la requête idempotente (WRITE). Renvoie PointResult. |
redeemReward | customerId: ID!, rewardId: ID! | Échanger une récompense contre un code de réduction à usage unique (WRITE ou jeton client utilisé pour son propre compte). Renvoie RedeemResult. |
confirmPoints | customerId: ID!, orderId: ID | Confirmer les points en attente d’un client, par exemple après l’exécution de la commande (WRITE). Renvoie le nombre de points confirmés. |
clawbackPoints | customerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: ID | Annuler des points à la suite d’un remboursement (ADMIN). Renvoie le nombre de points annulés. |
mintCustomerToken | customerId: ID!, ttlSeconds: Int | Créer un jeton client à courte durée de vie pour une utilisation côté client (WRITE / ADMIN). Renvoie un CustomerToken avec le champ expiresAt. |
awardPointsForOrder prend un OrderInput contenant orderId, customerId, éventuellement customerEmail et orderName, ainsi qu’une liste de lineItems. Chaque ligne peut inclure productId et collectionIds (facultatifs) et lineTotal. Les boosts et exclusions par produit ou collection s’appliquent donc comme pour les commandes Shopify natives.
Exemple de requête
Consulte le solde et le palier d’un client avec une clé API côté serveur :
curl https://app.gibbond.com/api/v1/graphql \
-X POST \
-H "Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"query": "query($id: ID!) { customer(id: $id) { email balance pending lifetime tier { name multiplier } } }",
"variables": { "id": "gid://shopify/Customer/123456789" }
}' Codes d’erreur
Les erreurs suivent la convention GraphQL : un tableau errors de premier niveau, dont chaque entrée contient un code dans extensions et le statut HTTP correspondant.
| Code | HTTP | Signification |
|---|---|---|
UNAUTHENTICATED | 401 | Identifiant manquant, mal formé ou expiré. |
FORBIDDEN | 403 | L’identifiant est valide, mais ne dispose pas de l’autorisation nécessaire pour cette opération. |
RATE_LIMITED | 429 | Limite de requêtes dépassée ; réessaie après le délai indiqué dans l’en-tête Retry-After. |
BAD_USER_INPUT | 400 | Arguments non valides : GID incorrect, champ obligatoire manquant ou valeur hors limites. |
NOT_FOUND | 404 | Le client, la récompense ou toute autre ressource indiquée n’existe pas. |