Webhooki

Webivio może wysyłać zdarzenia webinaru na dowolny adres URL (JSON) — do Make, Zapier, Pabbly, n8n albo własnego systemu.

To jest kierunek outbound (Webivio → Twój endpoint). Odwrotny kierunek (Twój system zapisuje uczestnika w Webivio) opisuje API rejestracji.

Mailing i CRM w kreatorze webinaru to osobna ścieżka — webhooki konta ich nie zastępują.

Jak ustawić

  1. Menu UstawieniaIntegracje.
  2. Zakładka Webhooki.
  3. Dodaj URL odbiorcy i wybierz zdarzenia.
  4. Opcjonalnie ogranicz endpoint do jednego webinaru (albo zostaw „wszystkie webinary konta”).
  5. Zapisz secret (HMAC) — pokazany przy tworzeniu; możesz go później obrócić w panelu.
  6. Przetestuj na webhook.site albo Catch Hook w Zapierze.

Żywy URL, secret i logi dostaw: /auth/settings/integrations (zakładka Webhooki).

Format żądania (envelope)

Każdy POST ma ciało JSON:

{
  "id": "uuid-zdarzenia",
  "type": "webinar.registration.created",
  "created_at": "2026-07-24T12:00:00.000Z",
  "user_id": "uuid-wlasciciela-konta",
  "webinar_id": "uuid-webinaru",
  "data": {}
}
PoleOpis
idIdentyfikator zdarzenia (deduplikacja dostaw)
typeTyp zdarzenia (patrz tabela poniżej)
created_atCzas zdarzenia (ISO UTC)
user_idID właściciela konta Webivio
webinar_idID webinaru
dataPola zależne od typu

Nagłówki HTTP i podpis HMAC

NagłówekWartość
Content-Typeapplication/json
User-AgentWebivio-Webhooks/1.0
X-Webivio-Eventten sam string co type w body
X-Webivio-TimestampUnix time (sekundy) jako string
X-Webivio-Signaturev1= + HMAC-SHA256 hex

Podpis: HMAC-SHA256 z secretem endpointu nad wiadomością:

{timestamp}.{rawBody}

gdzie rawBody to dokładny JSON wysłany w body (bez zmian białych znaków).

Timeout odpowiedzi: 8 sekund. Sukces: HTTP 2xx.

Ponowienia (retry)

Przy błędzie sieci lub odpowiedzi innej niż 2xx Webivio wrzuca dostawę do kolejki i próbuje ponownie (max 8 prób). Backoff w minutach: 1 → 5 → 15 → 60 → 360. Statusy i historia: w panelu przy danym endpoincie.

Lista zdarzeń

typeKiedyW UI (wybór)
webinar.registration.createdNowa rejestracja (formularz, widget, API rejestracji, seria)Tak
webinar.attendance.joinedUczestnik dołączył do pokojuTak
webinar.attendance.leftUczestnik opuścił pokójEmitowane; w Select UI może być niedostępne
webinar.attendance.not_attendedOznaczony jako nieobecnyTak
webinar.offer.clickedKlik w ofertę w pokojuTak
webinar.watch.milestone_25 / _50 / _75 / _100Próg % obejrzeniaTak
webinar.watch.custom_minuteOsiągnięta minuta oglądania (gdy subskrybowane)Tak
webinar.replay.watchedPierwsze otwarcie powtórkiTak
webinar.purchase.completedZapisany zakup (piksel / webhook post-sale)Tak

Pola data — rejestracja

{
  "participant_id": "…",
  "email": "jan@example.com",
  "name": "Jan",
  "surname": "Kowalski",
  "phone": "+48123456789",
  "access_code": "a1b2c3d4",
  "registered_at": "2026-07-24T12:00:00.000Z",
  "registered_at_local_time": "…",
  "registration_time_zone": "Europe/Warsaw",
  "utm_source": "…",
  "utm_medium": "…",
  "utm_campaign": "…",
  "utm_term": null,
  "utm_content": null,
  "referrer": null,
  "assigned_variant": "A"
}

Przy rejestracji w serii mogą dojść m.in. series_id, series_registration_id.

Pola data — frekwencja i oferta

  • joined: participant_id, email, name, surname, access_code, joined_at, variant
  • left: participant_id, email, access_code, left_at, variant
  • not_attended: participant_id, email, access_code, detected_at, variant
  • offer.clicked: participant_id, email, access_code, offer_id, offer_url, clicked_at, variant

Pola data — oglądanie / replay / zakup

  • milestone_*: participant_id, email, access_code, milestone_percent, previous_percent, current_percent, current_minute, duration_minutes, occurred_at, variant
  • custom_minute: participant_id, email, access_code, minute, current_percent, duration_minutes, occurred_at, variant
  • replay.watched: participant_id, email, access_code, watched_at
  • purchase.completed: participant_id, email, access_code, order_id, amount, currency, buyer_email, source, attribution, raw_payload

Zapier (Webivio → Zapier)

  1. W Zapierze utwórz Zap → trigger Webhooks by ZapierCatch Hook.
  2. Skopiuj URL Catch Hook.
  3. W Webivio: Ustawienia → Integracje → Webhooki → dodaj ten URL i wybierz eventy (np. webinar.registration.created).
  4. Wygeneruj test (np. zapisz testowego uczestnika) albo poczekaj na realne zdarzenie.
  5. W kolejnych krokach Zapa mapuj pola: data.email, data.name, type, webinar_id.

Weryfikacja HMAC w Zapierze: krok Code (Python/JS) liczący HMAC-SHA256 z X-Webivio-Timestamp + raw body i porównanie z X-Webivio-Signature (opcjonalne, ale zalecane przy wrażliwych automatyzacjach).

Make / n8n

  • Make: moduł Custom webhook (lub Webhooks → Custom) → URL do Webivio → mapuj data.*.
  • n8n: node Webhook (POST) → URL do Webivio → w workflow używaj body.data.email itd.

Przykład połączenia

Typowy lejek: rejestracja w Webivio → outbound webinar.registration.created → Zapier dodaje kontakt do MailerLite / ActiveCampaign / Google Sheets.
Albo: klik ofertywebinar.offer.clicked → tag w CRM „kliknął ofertę”.

Powiązane: webhook post-sale (inbound)

Żeby zgłosić zakup z zewnętrznej strony sprzedaży do Webivio, używasz inbound URL post-sale (osobny token w kroku Zakończenie / śledzenie sprzedaży) — POST /api/public/post-sale-webhook?webinarId=&token=. Po udanym zapisie Webivio może wysłać outbound webinar.purchase.completed. Szczegóły praktyczne: Piksele i skrypty oraz instrukcje w kreatorze.

Zobacz też

Pomysły na przyszłość (nieprodukcyjne)

Poniższe nie jest dostępne w produkcie — tylko kierunki rozwoju, które rozważamy:

  • weryfikacja HMAC z gotowymi snippetami w docs
  • attendance.left zawsze widoczne w UI wyboru zdarzeń
  • OpenAPI / kolekcja Postman

Więcej pomysłów (w tym Account API key, GET uczestników): baza wiedzy wewnętrzna / roadmapa produktu.