Kierunek inbound: Twój system (Make, Zapier, CRM, własny backend) wysyła POST do Webivio i tworzy rejestrację na wybrany termin — tak jak zapis z formularza (powiadomienia, CRM, oraz ewentualny outbound webhook webinar.registration.created).
To nie jest to samo co webhooki outbound (Webivio → Twój URL).
Gdzie wziąć URL
- Kreator webinaru → krok Zakończenie → sekcja webhooka rejestracji, albo
- Ustawienia → Integracje → Webhooki → sekcja API rejestracji / dokumentacja.
URL ma postać:
https://webivio.com/api/public/registration-webhook?webinarId={uuid-webinaru}&token={sekret}
webinarId— UUID webinarutoken— sekret per webinar (registrationWebhookToken) w query (brak Bearer / API key konta)
Pełna dokumentacja interaktywna w panelu: /auth/settings/integrations/registration-api (możesz wkleić swój URL z tokenem).
Endpoint
| Method | POST (także OPTIONS dla CORS) |
| Path | /api/public/registration-webhook |
| Auth | Query: webinarId + token |
| Content-Type | application/json |
| CORS | Access-Control-Allow-Origin: * |
Body — jeden uczestnik
Wymagane: email oraz dokładnie jeden sposób wskazania terminu.
| Pole | Wymagane | Aliasy | Opis |
|---|---|---|---|
email | Tak | buyer_email, customer_email, e-mail, mail | E-mail uczestnika |
name | Nie | first_name, firstName, imie | Imię |
surname | Nie | last_name, lastName, nazwisko | Nazwisko |
phone | Nie | phone_number, phoneNumber, telefon | Telefon |
selectedDate | Tak* | selected_date, webinarDate, date | Termin ISO z offsetem (preferowane) |
instanceId | Tak* | instance_id | UUID istniejącej instancji |
instanceDate + instanceTime | Tak* | instance_date, instance_time | YYYY-MM-DD + HH:mm |
userTimezone | Nie | user_timezone, timezone, timeZone | np. Europe/Warsaw |
utm_source itd. | Nie | camelCase (utmSource…) | UTM / kampania |
urlParameters, referrer | Nie | snake_case | Dodatkowy kontekst |
*Wybierz jeden wariant terminu.
Przykład (single)
{
"email": "jan@example.com",
"name": "Jan",
"surname": "Kowalski",
"phone": "+48123456789",
"selectedDate": "2026-07-10T18:00:00+02:00",
"userTimezone": "Europe/Warsaw",
"utm_source": "make",
"utm_campaign": "kampania-lipiec"
}
Body — wiele uczestników (bulk)
{
"participants": [
{
"email": "anna@example.com",
"name": "Anna",
"selectedDate": "2026-07-10T18:00:00+02:00"
},
{
"email": "bartek@example.com",
"name": "Bartek",
"instanceId": "uuid-istniejacej-instancji-webinaru"
}
]
}
Limit: max 50 uczestników w jednym żądaniu.
Odpowiedź sukcesu (single, HTTP 200)
{
"success": true,
"participantId": "550e8400-e29b-41d4-a716-446655440000",
"accessCode": "a1b2c3d4",
"instanceId": "660e8400-e29b-41d4-a716-446655440001",
"playerUrl": "https://player.webivio.com/start/?code=a1b2c3d4"
}
Odpowiedź bulk (HTTP 200 przy poprawnym żądaniu)
{
"success": true,
"summary": { "success": 1, "failed": 1 },
"results": [
{
"email": "anna@example.com",
"success": true,
"participantId": "…",
"accessCode": "…",
"instanceId": "…",
"playerUrl": "…"
},
{
"email": "zly@example.com",
"success": false,
"error": "INVALID_EMAIL"
}
]
}
success na poziomie root jest true, gdy przynajmniej jedna rejestracja się udała.
Kody błędów
| HTTP | Znaczenie |
|---|---|
| 400 | Brak emaila, zły JSON, brak terminu, pusty / za duży participants |
| 403 | Zły token lub webinar nieaktywny |
| 404 | Brak webinaru / instancji |
| 409 | Ten e-mail jest już zapisany na wybrany termin |
| 429 | Limit: RATE_LIMIT_EXCEEDED (+ nagłówek Retry-After) |
| 500 | Błąd serwera |
Domyślne limity (per webinar): 50 żądań / minutę, 500 / godzinę.
Przykłady wywołań
curl
curl -X POST \
"https://webivio.com/api/public/registration-webhook?webinarId=YOUR_WEBINAR_ID&token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"email":"jan@example.com","name":"Jan","selectedDate":"2026-07-10T18:00:00+02:00"}'
PowerShell
$body = @{
email = "jan@example.com"
name = "Jan"
selectedDate = "2026-07-10T18:00:00+02:00"
} | ConvertTo-Json
Invoke-RestMethod `
-Method Post `
-Uri "https://webivio.com/api/public/registration-webhook?webinarId=YOUR_WEBINAR_ID&token=YOUR_TOKEN" `
-ContentType "application/json" `
-Body $body
Zapier (Zapier → Webivio)
- Skopiuj URL webhooka rejestracji z panelu Webivio (z
webinarIditoken). - W Zapierze: akcja Webhooks by Zapier → POST (albo Code, jeśli budujesz JSON ręcznie).
- URL = URL z Webivio.
- Payload Type: JSON.
- Zmapuj pola z poprzedniego kroku (np. Typeform / Google Sheets →
email,name,selectedDate).
Make: HTTP → Make a request → POST na ten sam URL z body JSON.
Po sukcesie Webivio zachowa się jak po zapisie z formularza (e-maile / SMS / CRM wg ustawień webinaru) i może wysłać outbound webinar.registration.created.
Bezpieczeństwo
- Traktuj
tokenjak hasło — nie commituj go do repozytoriów publicznych. - URL z tokenem wystarczy do zapisu na dany webinar; nie udostępniaj go publicznie w front-endzie bez kontroli.
- Rotacja tokenu w UI może być ograniczona — jeśli podejrzewasz wyciek, skontaktuj się ze wsparciem lub wygeneruj nowy webinar / token wg aktualnych opcji w panelu.
Zobacz też
- Webhooki outbound
- Panel:
/auth/settings/integrations/registration-api
Pomysły na przyszłość (nieprodukcyjne)
Na razie API obejmuje zapis uczestnika (single/bulk). Rozważane rozszerzenia (bez dat):
- klucz API na poziomie konta (Bearer) zamiast tylko tokenu w query
- rotacja tokenu w UI
- GET lista / status uczestników
- anulowanie lub aktualizacja danych
- API rejestracji do serii
- nagłówek
Idempotency-Key
To nie są obietnice produktu — tylko kierunki, które zbieramy od użytkowników integracji.