API

Leggi e aggiorna i dati del programma fedeltà dal tuo backend con l’API GraphQL esterna di Gibbond: iscrivi i membri, assegna e riscatta punti e sincronizza le attività da qualsiasi canale.

In questa pagina
⚡

È necessario il piano Pro. L’API esterna è disponibile con il piano Pro. Per attivarla, passa al piano superiore da Plans & billing nell’admin Gibbond.

🚀

È la prima volta che usi l’API? La guida all’integrazione mostra esempi pratici da copiare e incollare: chiamate dal tuo backend, integrazione in un’app mobile o web e assegnazione di punti da un altro canale di vendita. Questa pagina è il riferimento completo dello schema.

L’API espone un unico endpoint GraphQL. Invia una richiesta POST con un corpo JSON che contenga la query (o mutation) ed eventualmente le variables:

POST https://app.gibbond.com/api/v1/graphql

Tutti i timestamp sono stringhe ISO-8601 e tutti gli ID sono GID Shopify (ad esempio gid://shopify/Customer/123), salvo diversa indicazione. I punti sono numeri interi.

Autenticazione

Ogni richiesta include una credenziale nell’header Authorization. Esistono due tipi di credenziali, pensati per casi d’uso diversi.

Chiavi API (lato server)

Le chiavi API identificano il tuo backend. Creale nella pagina API keys dell’admin Gibbond; a ciascuna viene assegnato un ambito (READ, WRITE o ADMIN). La chiave viene mostrata una sola volta al momento della creazione e ha un aspetto simile a glk_live_…. Inviala come token bearer:

Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx
⚠️

Solo lato server. Una chiave API può leggere e modificare i dati di tutti i membri: non esporla mai in un browser, un’app mobile o un altro client che non controlli. Conservala in una variabile d’ambiente del server e, se viene esposta, sostituiscila dall’admin.

Token cliente (lato client)

Per chiamare l’API da un’interfaccia rivolta ai clienti, come un widget del negozio o un’app mobile, genera dal backend un token cliente con la mutation mintCustomerToken e passalo al client. I token cliente sono di breve durata e associati a un solo cliente: le richieste possono leggere dati ed eseguire azioni solo per quel cliente. La query me restituisce il cliente associato al token e redeemReward consente a quel cliente di riscattare un premio senza una chiave API del negozio; il token può quindi essere passato in sicurezza al browser.

Authorization: Bearer <customer token>

Ambiti di accesso

L’ambito di una chiave API determina quali operazioni può eseguire. Gli ambiti sono cumulativi.

AmbitoPermessi
READTutte le query (saldi, cronologia, premi, livelli e configurazione).
WRITETutti i permessi di READ, più le mutation per iscrivere i membri, assegnare punti positivi, riscattare premi, confermare i punti e generare token cliente.
ADMINTutti i permessi di WRITE, più la revoca di punti (clawbackPoints) e le rettifiche negative tramite awardPoints (con un valore points negativo).
ℹ️

Usa l’ambito minimo necessario: una chiave READ per le analisi, una WRITE per l’accumulo e il riscatto dei punti, e riserva ADMIN ai flussi di rimborso e rettifica.

Limiti di frequenza

Ogni credenziale (chiave API o token cliente) è limitata a 600 richieste al minuto. Se superi il limite, l’API restituisce lo stato HTTP 429 e un header Retry-After che indica quanti secondi attendere prima di riprovare.

Query

Per eseguire le query serve una chiave con ambito almeno READ oppure un token cliente, che può leggere solo i dati del cliente associato.

QueryArgomentiRisultato / descrizione
me—Il cliente associato a un token vincolato a un cliente. Restituisce un errore se viene chiamata con una chiave API del negozio.
customerid: ID!Un singolo cliente identificato dal GID.
customersids: [ID!]!Lettura in batch dei clienti tramite GID (chiave API del negozio, READ).
customerByEmailemail: String!Ricerca di un cliente tramite indirizzo email (chiave API del negozio, READ).
rewards—Catalogo dei premi riscattabili del negozio.
tiers—Livelli VIP del negozio (slug, nome, soglia e moltiplicatore).
shopConfig—Configurazione del programma: nome, valuta, punti per unità di valuta, modalità di conferma, livelli e premi.
pointHistorycustomerId: ID!, limit: IntEventi relativi ai punti di un cliente, dal più recente.
activeCodescustomerId: ID!Codici sconto non ancora usati da un cliente (riscatti e vantaggi di livello).
referralcustomerId: ID!Codice referral del cliente e conteggio degli invitati, delle segnalazioni idonee e dei premi assegnati.
totalLiability—Totale dei punti ancora da riscattare nell’intero negozio, espresso come numero intero (chiave API del negozio, READ).

Mutation

Le mutation richiedono una chiave WRITE, salvo diversa indicazione; le operazioni ADMIN sono segnalate.

MutationArgomentiRisultato / descrizione
enrollCustomercustomerId: ID!, email: StringIscrive un cliente al programma fedeltà (WRITE). Restituisce CustomerResult.
awardPointscustomerId: ID!, points: Int!, reason: String, idempotencyKey: StringAssegna o rettifica i punti. Un valore negativo di points richiede ADMIN; idempotencyKey evita doppie assegnazioni in caso di nuovo tentativo. Restituisce PointResult.
awardPointsForOrderinput: OrderInput!Assegna punti per un ordine effettuato su un altro canale, applicando i moltiplicatori di livello, i boost e i traguardi. orderId garantisce l’idempotenza (WRITE). Restituisce PointResult.
redeemRewardcustomerId: ID!, rewardId: ID!Riscatta un premio ottenendo un codice sconto monouso (WRITE o token cliente usato per conto del cliente stesso). Restituisce RedeemResult.
confirmPointscustomerId: ID!, orderId: IDConferma i punti in sospeso di un cliente, ad esempio dopo l’evasione dell’ordine (WRITE). Restituisce il numero di punti confermati.
clawbackPointscustomerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: IDStorna i punti in caso di rimborso (ADMIN). Restituisce il numero di punti stornati.
mintCustomerTokencustomerId: ID!, ttlSeconds: IntGenera un token cliente di breve durata per l’uso lato client (WRITE / ADMIN). Restituisce un CustomerToken con il campo expiresAt.
ℹ️

awardPointsForOrder accetta un OrderInput con orderId, customerId, customerEmail e orderName facoltativi e un elenco di lineItems. Ogni riga può includere productId e collectionIds facoltativi, oltre a lineTotal: in questo modo si applicano gli stessi boost ed esclusioni per prodotto e collezione previsti per gli ordini Shopify nativi.

Esempio di richiesta

Leggi il saldo punti e il livello di un cliente usando una chiave API lato server:

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

Codici di errore

Gli errori seguono la convenzione GraphQL: l’array errors al livello principale contiene voci con un code in extensions e il corrispondente stato HTTP.

CodiceHTTPSignificato
UNAUTHENTICATED401Credenziale mancante, non valida o scaduta.
FORBIDDEN403La credenziale è valida, ma non dispone dell’ambito necessario per questa operazione.
RATE_LIMITED429Limite di frequenza superato; riprova dopo l’intervallo indicato nell’header Retry-After.
BAD_USER_INPUT400Argomenti non validi: GID errato, campo obbligatorio mancante o valore fuori dall’intervallo consentito.
NOT_FOUND404Il cliente, il premio o un’altra risorsa indicata non esiste.