Webhooki: zdarzenia, payload i konfiguracja

Webhook to powiadomienie, które Zanfia wysyła do Twojego systemu w momencie, gdy w produkcie dzieje się coś ważnego (na przykład ktoś kupuje produkt). Dzięki temu Twój system (CRM, ERP, własna aplikacja, automatyzacja) dostaje dane od razu, bez odpytywania API.

Webhooki konfigurujesz osobno dla każdego produktu i sam decydujesz, jakie zdarzenia mają je wyzwalać oraz jakie dane mają trafić do Twojego systemu.

Gdzie znaleźć webhooki #

Wejdź w Produkty, wybierz produkt, otwórz zakładkę Automatyzacje i przejdź do sekcji Webhooks. Kliknij + Dodaj pierwszą integrację (lub Dodaj webhook, jeśli masz już jakiś skonfigurowany).

Konfiguracja webhooka krok po kroku #

  1. Adres URL — adres endpointu w Twoim systemie, na który mają trafiać dane.
  2. Opis — dowolny opis pomocniczy, ułatwia rozróżnienie webhooków na liście.
  3. Metoda HTTP — GET albo POST (różnice opisane niżej).
  4. Zdarzenia (triggery) — jedno lub wiele zdarzeń, które wyzwolą webhook (pełna lista niżej).
  5. Typ autoryzacji — Brak, Basic Auth, Bearer Token albo API Key.
  6. Payload / parametry — lista pól, które chcesz wysłać, wraz z nazwą klucza pod jaką trafią do Twojego systemu.
  7. Aktywny — przełącznik włączający webhook.

Lista dostępnych zdarzeń (triggery) #

Nazwa techniczna (pole eventType w payloadzie) zawsze ma prefiks, na przykład product.ProductPurchased.

Dostępne dla każdego produktu (darmowego i płatnego) #

Zdarzenie (eventType)OpisKiedy się wyzwala
product.ProductPurchasedNowa subskrypcja/zakupKlient kupił produkt (Twój nowy zakup)
product.OrderCreatedUtworzono zamówieniePowstało zamówienie, również przy nieudanej płatności
product.ClientImportedZaimportowano klientaKlient został dodany przez import
productReferrals.ValidSubscriberFromReferralZweryfikowane polecenieZaliczono ważne polecenie w programie poleceń

Dodatkowo dla produktu płatnego #

Zdarzenie (eventType)Opis
product.ProductSubscriptionRenewedOdnowienie subskrypcji
product.ProductSubscriptionEndKoniec subskrypcji
product.ProductAccessRenewedOdnowienie okresu dostępu
product.ProductAccessPeriodEndKoniec okresu dostępu
product.ProductAccessPeriodEndingIn14Days14 dni do końca okresu dostępu (tylko dla dostępów rocznych)
product.ProductAccessPeriodEndingIn7Days7 dni do końca okresu dostępu
product.ProductAccessPeriodEndingIn3Days3 dni do końca okresu dostępu
product.ProductAccessPeriodEndingIn1Day1 dzień do końca okresu dostępu
product.ProductAccessPeriodEndingTodayOkres dostępu kończy się dzisiaj
product.ProductClientArchivedKlient zarchiwizowany w produkcie

Dodatkowo dla produktu darmowego #

Zdarzenie (eventType)Opis
product.ProductClientRemovedKlient usunięty z produktu

[SCREENSHOT: Rozwinięta lista zdarzeń w formularzu webhooka]

Pola payloadu #

Sam wybierasz, które pola wysłać, i pod jaką nazwą klucza mają trafić do Twojego systemu. Dostępne pola:

PoleOpis
eventTypeTyp zdarzenia (pełna nazwa, na przykład product.ProductPurchased)
productIdID produktu
productNameNazwa produktu
priceIdID ceny
priceCena: obiekt z kwotą, walutą i stawką VAT
paymentTypeRodzaj płatności
orderIdNumer transakcji
quantityLiczba zakupionych (domyślnie 1)
clientEmailEmail klienta
clientFirstNameImię klienta
clientLastNameNazwisko klienta
clientNameImię i nazwisko klienta (połączone)
clientAddressAdres klienta
phoneNumberNumer telefonu
companyNameNazwa firmy
taxNumberNIP
consentsDodatkowe zgody
discordIdDiscord ID
additionalInfoDodatkowe informacje

Jak budowany jest payload #

  • Dla każdego pola podajesz własną nazwę klucza (tę, której oczekuje Twój system) i przypisujesz do niej pole z listy powyżej. Dzięki temu dopasujesz payload do swojego odbiornika, bez przerabiania go po swojej stronie.
  • POST — dane lecą jako JSON w body. Możesz też zaznaczyć opcję wysyłki payloadu jako parametry zapytania.
  • GET — dane lecą jako parametry w adresie URL.
  • eventType zawsze zawiera pełną nazwę zdarzenia z prefiksem (na przykład product.ProductPurchased).
  • price to obiekt zawierający kwotę, walutę i stawkę VAT.
  • clientName łączy imię i nazwisko klienta.

Przykładowy payload dla nowego zakupu (POST) #

Przy mapowaniu kluczy 1:1 z nazwami pól payload nowego zakupu wygląda tak:

{
  "eventType": "product.ProductPurchased",
  "orderId": "ord_xxxxxxxx",
  "productId": "prod_xxxxxxxx",
  "productName": "Nazwa Twojego produktu",
  "priceId": "price_xxxxxxxx",
  "price": {
    "amount": 9900,
    "currency": "PLN",
    "taxRate": 23
  },
  "clientEmail": "jan.kowalski@example.com",
  "clientFirstName": "Jan",
  "clientLastName": "Kowalski",
  "quantity": 1
}

UWAGA: dokładny format pola amount (na przykład czy kwota jest w groszach) najlepiej potwierdzić na realnym zdarzeniu testowym za pomocą funkcji testowania webhooka (patrz niżej). Wartości w przykładzie są poglądowe.

Autoryzacja #

Przy konfiguracji wybierasz typ autoryzacji, którego ma używać webhook wysyłany do Twojego systemu:

  • Brak — bez autoryzacji.
  • Basic Auth — login i hasło.
  • Bearer Token — token przekazywany w nagłówku Authorization.
  • API Key — klucz przekazywany jako parametr.

Ważne uwagi techniczne #

  • Webhook jest wysyłany jednorazowo, bez automatycznych ponowień. Twój endpoint powinien przyjąć żądanie od razu i odpowiedzieć statusem z zakresu 2xx. Jeśli Twój serwer nie odpowie poprawnie, Zanfia nie ponowi próby automatycznie.
  • Wynik każdej wysyłki (sukces lub błąd, kod odpowiedzi) zapisuje się w logach webhooka, więc możesz sprawdzić, czy żądanie doszło i jak odpowiedział Twój system.

Testowanie webhooka #

Przed wpięciem na produkcję możesz wysłać testowe żądanie na swój endpoint i sprawdzić, czy dane dochodzą w oczekiwanym formacie.

Dodatkowe materiały #

Updated on 2026-06-22

What are your feelings

  • Happy
  • Normal
  • Sad