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.

AutorisationAccès accordé
READToutes les requêtes (soldes, historique, récompenses, paliers et configuration).
WRITETous 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.
ADMINTous 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êteArgumentsRé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.
customerid: ID!Un client identifié par son GID.
customersids: [ID!]!Lecture groupée de clients par GID (clé du marchand, READ).
customerByEmailemail: 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.
pointHistorycustomerId: ID!, limit: IntÉvénements de points d’un client, du plus récent au plus ancien.
activeCodescustomerId: ID!Codes de réduction non utilisés d’un client (échanges et avantages de palier).
referralcustomerId: 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.

MutationArgumentsRésultat / description
enrollCustomercustomerId: ID!, email: StringInscrire un client au programme de fidélité (WRITE). Renvoie CustomerResult.
awardPointscustomerId: ID!, points: Int!, reason: String, idempotencyKey: StringAttribuer ou ajuster des points. Une valeur négative de points nécessite ADMIN ; idempotencyKey évite les doublons lors d’une nouvelle tentative. Renvoie PointResult.
awardPointsForOrderinput: 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.
redeemRewardcustomerId: 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.
confirmPointscustomerId: ID!, orderId: IDConfirmer 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.
clawbackPointscustomerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: IDAnnuler des points à la suite d’un remboursement (ADMIN). Renvoie le nombre de points annulés.
mintCustomerTokencustomerId: ID!, ttlSeconds: IntCré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.

CodeHTTPSignification
UNAUTHENTICATED401Identifiant manquant, mal formé ou expiré.
FORBIDDEN403L’identifiant est valide, mais ne dispose pas de l’autorisation nécessaire pour cette opération.
RATE_LIMITED429Limite de requêtes dépassée ; réessaie après le délai indiqué dans l’en-tête Retry-After.
BAD_USER_INPUT400Arguments non valides : GID incorrect, champ obligatoire manquant ou valeur hors limites.
NOT_FOUND404Le client, la récompense ou toute autre ressource indiquée n’existe pas.