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ć
- Menu Ustawienia → Integracje.
- Zakładka Webhooki.
- Dodaj URL odbiorcy i wybierz zdarzenia.
- Opcjonalnie ogranicz endpoint do jednego webinaru (albo zostaw „wszystkie webinary konta”).
- Zapisz secret (HMAC) — pokazany przy tworzeniu; możesz go później obrócić w panelu.
- 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": {}
}
| Pole | Opis |
|---|---|
id | Identyfikator zdarzenia (deduplikacja dostaw) |
type | Typ zdarzenia (patrz tabela poniżej) |
created_at | Czas zdarzenia (ISO UTC) |
user_id | ID właściciela konta Webivio |
webinar_id | ID webinaru |
data | Pola zależne od typu |
Nagłówki HTTP i podpis HMAC
| Nagłówek | Wartość |
|---|---|
Content-Type | application/json |
User-Agent | Webivio-Webhooks/1.0 |
X-Webivio-Event | ten sam string co type w body |
X-Webivio-Timestamp | Unix time (sekundy) jako string |
X-Webivio-Signature | v1= + 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ń
type | Kiedy | W UI (wybór) |
|---|---|---|
webinar.registration.created | Nowa rejestracja (formularz, widget, API rejestracji, seria) | Tak |
webinar.attendance.joined | Uczestnik dołączył do pokoju | Tak |
webinar.attendance.left | Uczestnik opuścił pokój | Emitowane; w Select UI może być niedostępne |
webinar.attendance.not_attended | Oznaczony jako nieobecny | Tak |
webinar.offer.clicked | Klik w ofertę w pokoju | Tak |
webinar.watch.milestone_25 / _50 / _75 / _100 | Próg % obejrzenia | Tak |
webinar.watch.custom_minute | Osiągnięta minuta oglądania (gdy subskrybowane) | Tak |
webinar.replay.watched | Pierwsze otwarcie powtórki | Tak |
webinar.purchase.completed | Zapisany 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)
- W Zapierze utwórz Zap → trigger Webhooks by Zapier → Catch Hook.
- Skopiuj URL Catch Hook.
- W Webivio: Ustawienia → Integracje → Webhooki → dodaj ten URL i wybierz eventy (np.
webinar.registration.created). - Wygeneruj test (np. zapisz testowego uczestnika) albo poczekaj na realne zdarzenie.
- 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.emailitd.
Przykład połączenia
Typowy lejek: rejestracja w Webivio → outbound webinar.registration.created → Zapier dodaje kontakt do MailerLite / ActiveCampaign / Google Sheets.
Albo: klik oferty → webinar.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ż
- API rejestracji uczestników — zapis uczestnika z Make/Zapier do Webivio
- Panel:
/auth/settings/integrations
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.leftzawsze 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.