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.
| Zakres | Uprawnienia |
|---|---|
READ | Wszystkie zapytania (salda, historia, nagrody, poziomy i konfiguracja). |
WRITE | Wszystko 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. |
ADMIN | Wszystko 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).
| Zapytanie | Argumenty | Zwracana wartość / opis |
|---|---|---|
me | — | Klient przypisany do tokenu klienta. Wywołanie z kluczem API sprzedawcy powoduje błąd. |
customer | id: ID! | Pojedynczy klient wyszukany po GID. |
customers | ids: [ID!]! | Zbiorczy odczyt klientów według GID (klucz sprzedawcy, READ). |
customerByEmail | email: 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. |
pointHistory | customerId: ID!, limit: Int | Zdarzenia punktowe klienta, od najnowszych. |
activeCodes | customerId: ID! | Niewykorzystane kody rabatowe klienta (za wymianę nagród i korzyści poziomów). |
referral | customerId: 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.
| Mutacja | Argumenty | Zwracana wartość / opis |
|---|---|---|
enrollCustomer | customerId: ID!, email: String | Zapisuje klienta do programu lojalnościowego (WRITE). Zwraca CustomerResult. |
awardPoints | customerId: ID!, points: Int!, reason: String, idempotencyKey: String | Przyznaje lub koryguje punkty. Ujemna wartość points wymaga zakresu ADMIN; idempotencyKey pozwala uniknąć powtórzeń przy ponawianiu żądania. Zwraca PointResult. |
awardPointsForOrder | input: 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. |
redeemReward | customerId: ID!, rewardId: ID! | Wymienia nagrodę na jednorazowy kod rabatowy (WRITE lub token klienta używany na jego własnym koncie). Zwraca RedeemResult. |
confirmPoints | customerId: ID!, orderId: ID | Potwierdza oczekujące punkty klienta, np. po realizacji zamówienia (WRITE). Zwraca liczbę potwierdzonych punktów. |
clawbackPoints | customerId: ID!, orderId: ID!, refundAmount: Float!, orderTotal: Float!, refundId: ID | Cofa punkty po zwrocie środków (ADMIN). Zwraca liczbę cofniętych punktów. |
mintCustomerToken | customerId: ID!, ttlSeconds: Int | Tworzy 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.
| Kod | HTTP | Znaczenie |
|---|---|---|
UNAUTHENTICATED | 401 | Brakujące, nieprawidłowe lub wygasłe dane uwierzytelniające. |
FORBIDDEN | 403 | Dane uwierzytelniające są prawidłowe, ale nie mają zakresu wymaganego do tej operacji. |
RATE_LIMITED | 429 | Przekroczono limit zapytań; ponów próbę po upływie czasu wskazanego w nagłówku Retry-After. |
BAD_USER_INPUT | 400 | Nieprawidłowe argumenty — błędny GID, brak wymaganego pola lub wartość poza dozwolonym zakresem. |
NOT_FOUND | 404 | Wskazany klient, nagroda lub inny zasób nie istnieje. |