API

Odczytuj i zapisuj dane programu lojalnościowego z własnego zaplecza za pomocą zewnętrznego API GraphQL Gibbond — zapisuj członków, przyznawaj i wymieniaj punkty oraz synchronizuj aktywność z dowolnego kanału.

Na tej stronie
⚡

Wymagany plan Pro. Zewnętrzne API jest dostępne w planie Pro. Aby je włączyć, zmień plan w sekcji Plans & billing panelu administracyjnego Gibbond.

🚀

Pierwszy raz korzystasz z API? Przewodnik integracji zawiera praktyczne przykłady do skopiowania — wywołania z własnego zaplecza, integrację z aplikacją mobilną lub internetową oraz naliczanie punktów z innego kanału sprzedaży. Ta strona zawiera pełny opis schematu.

API udostępnia jeden punkt końcowy GraphQL. Wyślij żądanie POST z treścią JSON zawierającą query (lub mutację) oraz opcjonalne variables:

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

Wszystkie znaczniki czasu są ciągami w formacie ISO-8601, a wszystkie identyfikatory to Shopify GID (na przykład gid://shopify/Customer/123) o ile nie podano inaczej. Punkty są liczbami całkowitymi.

Uwierzytelnianie

Każde żądanie zawiera dane uwierzytelniające w nagłówku Authorization. W zależności od sytuacji używa się jednego z dwóch rodzajów danych uwierzytelniających.

Klucze API (po stronie serwera)

Klucze API identyfikują Twoje zaplecze. Utwórz je na stronie API keys w panelu administracyjnym Gibbond. Każdy klucz otrzymuje zakres uprawnień (READ, WRITE lub ADMIN). Klucz jest wyświetlany tylko raz podczas tworzenia i ma postać glk_live_…. Przekaż go jako token typu bearer:

Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxx
⚠️

Tylko po stronie serwera. Klucz API umożliwia odczyt i modyfikację danych wszystkich członków, dlatego nie wolno ujawniać go w przeglądarce, aplikacji mobilnej ani żadnym niekontrolowanym kliencie. Przechowuj go w zmiennej środowiskowej serwera, a w razie wycieku wymień go w panelu administracyjnym.

Tokeny klienta (po stronie klienta)

Gdy chcesz wywołać API z interfejsu dla klienta (widżetu sklepu lub aplikacji mobilnej), utwórz token klienta za pomocą mutacji mintCustomerToken w swoim zapleczu, a następnie przekaż token klientowi. Tokeny klienta są krótkotrwałe i ograniczone do jednego klienta — żądanie wykonane z takim tokenem może odczytywać dane wyłącznie tego klienta i wykonywać operacje tylko na jego koncie. Zapytanie me zwraca klienta przypisanego do tokenu, a redeemReward działa dla tego klienta bez klucza sprzedawcy, dlatego token można bezpiecznie przekazać do przeglądarki.

Authorization: Bearer <customer token>

Zakresy uprawnień

Zakres klucza API określa, jakie operacje może on wykonywać. Zakresy są kumulatywne.

ZakresUprawnienia
READWszystkie zapytania (salda, historia, nagrody, poziomy i konfiguracja).
WRITEWszystko z zakresu READ, a także mutacje zapisujące członków, przyznające dodatnie punkty, wymieniające nagrody, potwierdzające punkty i tworzące tokeny klienta.
ADMINWszystko z zakresu WRITE, a także cofanie punktów (clawbackPoints) oraz ujemne korekty za pomocą awardPoints (ujemna wartość points).
ℹ️

Używaj najniższego zakresu, który wystarczy do danego zadania — klucza READ do analityki, klucza WRITE do naliczania i wymiany punktów, a zakres ADMIN pozostaw do obsługi zwrotów i korekt.

Limity zapytań

Każde dane uwierzytelniające (klucz API lub token klienta) mają limit 600 żądań na minutę. Po przekroczeniu limitu API zwraca kod HTTP 429 z nagłówkiem Retry-After określającym liczbę sekund, które należy odczekać przed ponowieniem żądania.

Zapytania

Zapytania wymagają klucza o zakresie co najmniej READ albo tokenu klienta (który umożliwia odczyt wyłącznie danych przypisanego do niego klienta).

ZapytanieArgumentyZwracana wartość / opis
me—Klient przypisany do tokenu klienta. Wywołanie z kluczem API sprzedawcy powoduje błąd.
customerid: ID!Pojedynczy klient wyszukany po GID.
customersids: [ID!]!Zbiorczy odczyt klientów według GID (klucz sprzedawcy, READ).
customerByEmailemail: String!Wyszukanie klienta według adresu e-mail (klucz sprzedawcy, READ).
rewards—Katalog nagród dostępnych do wymiany w sklepie.
tiers—Poziomy VIP sklepu (identyfikator URL, nazwa, próg i mnożnik).
shopConfig—Konfiguracja programu: nazwa, waluta, liczba punktów za jednostkę waluty, tryb potwierdzania, poziomy i nagrody.
pointHistorycustomerId: ID!, limit: IntZdarzenia punktowe klienta, od najnowszych.
activeCodescustomerId: ID!Niewykorzystane kody rabatowe klienta (za wymianę nagród i korzyści poziomów).
referralcustomerId: ID!Kod polecający klienta oraz liczby zaproszonych osób, zakwalifikowanych poleceń i przyznanych nagród.
totalLiability—Łączne zobowiązanie sklepu z tytułu niewykorzystanych punktów, jako liczba całkowita (klucz sprzedawcy, READ).

Mutacje

Mutacje wymagają klucza WRITE o ile nie zaznaczono inaczej; operacje wymagające uprawnień ADMIN są odpowiednio oznaczone.

MutacjaArgumentyZwracana wartość / opis
enrollCustomercustomerId: ID!, email: StringZapisuje klienta do programu lojalnościowego (WRITE). Zwraca CustomerResult.
awardPointscustomerId: ID!, points: Int!, reason: String, idempotencyKey: StringPrzyznaje lub koryguje punkty. Ujemna wartość points wymaga zakresu ADMIN; idempotencyKey pozwala uniknąć powtórzeń przy ponawianiu żądania. Zwraca PointResult.
awardPointsForOrderinput: OrderInput!Nalicza punkty za zamówienie złożone w innym kanale; uwzględnia mnożnik poziomu, boosty i kamienie milowe. Operacja jest idempotentna względem orderId (WRITE). Zwraca PointResult.
redeemRewardcustomerId: ID!, rewardId: ID!Wymienia nagrodę na jednorazowy kod rabatowy (WRITE lub token klienta używany na jego własnym koncie). Zwraca RedeemResult.
confirmPointscustomerId: ID!, orderId: IDPotwierdza oczekujące punkty klienta, np. po realizacji zamówienia (WRITE). Zwraca liczbę potwierdzonych punktów.
clawbackPointscustomerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: IDCofa punkty po zwrocie środków (ADMIN). Zwraca liczbę cofniętych punktów.
mintCustomerTokencustomerId: ID!, ttlSeconds: IntTworzy krótkotrwały token klienta do użycia po stronie klienta (WRITE / ADMIN). Zwraca CustomerToken z polem expiresAt.
ℹ️

awardPointsForOrder przyjmuje obiekt OrderInput z polami orderId, customerId, opcjonalnymi customerEmail i orderName oraz listą lineItems. Każda pozycja zamówienia może zawierać opcjonalne pola productId i collectionIds oraz lineTotal — dzięki czemu boosty i wykluczenia dotyczące produktów oraz kolekcji działają tak samo jak przy natywnych zamówieniach Shopify.

Przykładowe żądanie

Odczytaj saldo i poziom klienta za pomocą klucza API używanego po stronie serwera:

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

Kody błędów

Błędy są zgodne z konwencją GraphQL: główna tablica errors zawiera wpisy z kodem code w obiekcie extensions oraz odpowiadającym mu statusem HTTP.

KodHTTPZnaczenie
UNAUTHENTICATED401Brakujące, nieprawidłowe lub wygasłe dane uwierzytelniające.
FORBIDDEN403Dane uwierzytelniające są prawidłowe, ale nie mają zakresu wymaganego do tej operacji.
RATE_LIMITED429Przekroczono limit zapytań; ponów próbę po upływie czasu wskazanego w nagłówku Retry-After.
BAD_USER_INPUT400Nieprawidłowe argumenty — błędny GID, brak wymaganego pola lub wartość poza dozwolonym zakresem.
NOT_FOUND404Wskazany klient, nagroda lub inny zasób nie istnieje.