Inbound direction: your system (Make, Zapier, CRM, custom backend) sends a POST to Webivio and creates a registration for a chosen session - same side effects as the registration form (notifications, CRM, and optional outbound webinar.registration.created).
This is not the same as outbound webhooks (Webivio -> your URL).
Where to get the URL
- Webinar creator -> Finish step -> registration webhook section, or
- Settings -> Integrations -> Webhooks -> registration API / documentation section.
URL shape:
https://webivio.com/api/public/registration-webhook?webinarId={webinar-uuid}&token={secret}
webinarId- webinar UUIDtoken- per-webinar secret in the query string (no account Bearer / API key)
Interactive docs in the panel: /auth/settings/integrations/registration-api (you can paste your URL with token).
Endpoint
| Method | POST (also OPTIONS for CORS) |
| Path | /api/public/registration-webhook |
| Auth | Query: webinarId + token |
| Content-Type | application/json |
| CORS | Access-Control-Allow-Origin: * |
Body - single participant
Required: email and exactly one way to pick the session time.
| Field | Required | Aliases | Description |
|---|---|---|---|
email | Yes | buyer_email, customer_email, e-mail, mail | Participant email |
name | No | first_name, firstName, imie | First name |
surname | No | last_name, lastName, nazwisko | Last name |
phone | No | phone_number, phoneNumber, telefon | Phone |
selectedDate | Yes* | selected_date, webinarDate, date | ISO datetime with offset (preferred) |
instanceId | Yes* | instance_id | Existing instance UUID |
instanceDate + instanceTime | Yes* | instance_date, instance_time | YYYY-MM-DD + HH:mm |
userTimezone | No | user_timezone, timezone, timeZone | e.g. Europe/Warsaw |
utm_source etc. | No | camelCase (utmSource…) | Campaign UTMs |
urlParameters, referrer | No | snake_case | Extra context |
*Pick one session variant.
Example (single)
{
"email": "jane@example.com",
"name": "Jane",
"surname": "Doe",
"phone": "+48123456789",
"selectedDate": "2026-07-10T18:00:00+02:00",
"userTimezone": "Europe/Warsaw",
"utm_source": "make",
"utm_campaign": "july-campaign"
}
Body - bulk
{
"participants": [
{
"email": "anna@example.com",
"name": "Anna",
"selectedDate": "2026-07-10T18:00:00+02:00"
},
{
"email": "bob@example.com",
"name": "Bob",
"instanceId": "existing-instance-uuid"
}
]
}
Limit: max 50 participants per request.
Success response (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"
}
Bulk response (HTTP 200 when the request itself is valid)
{
"success": true,
"summary": { "success": 1, "failed": 1 },
"results": [
{
"email": "anna@example.com",
"success": true,
"participantId": "…",
"accessCode": "…",
"instanceId": "…",
"playerUrl": "…"
},
{
"email": "bad@example.com",
"success": false,
"error": "INVALID_EMAIL"
}
]
}
Root success is true when at least one registration succeeded.
Error codes
| HTTP | Meaning |
|---|---|
| 400 | Missing email, bad JSON, missing session, empty / too large participants |
| 403 | Bad token or inactive webinar |
| 404 | Webinar / instance not found |
| 409 | Email already registered for that session |
| 429 | Rate limit: RATE_LIMIT_EXCEEDED (+ Retry-After header) |
| 500 | Server error |
Default limits (per webinar): 50 requests / minute, 500 / hour.
Call examples
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":"jane@example.com","name":"Jane","selectedDate":"2026-07-10T18:00:00+02:00"}'
PowerShell
$body = @{
email = "jane@example.com"
name = "Jane"
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)
- Copy the registration webhook URL from the Webivio panel (with
webinarIdandtoken). - In Zapier: action Webhooks by Zapier -> POST (or Code if you build JSON manually).
- URL = the Webivio URL.
- Payload Type: JSON.
- Map fields from the previous step (Typeform / Sheets ->
email,name,selectedDate).
Make: HTTP -> Make a request -> POST to the same URL with a JSON body.
On success Webivio behaves like a form signup (email / SMS / CRM per webinar settings) and may emit outbound webinar.registration.created.
Security
- Treat
tokenlike a password - do not commit it to public repos. - A URL with token is enough to register on that webinar; do not expose it on a public front-end without controls.
- Token rotation in the UI may be limited - if you suspect a leak, contact support or regenerate per current panel options.
See also
- Outbound webhooks
- Panel:
/auth/settings/integrations/registration-api
Future ideas (non-production)
Today the API covers creating a participant (single/bulk). Ideas under consideration (no dates):
- account-level API key (Bearer) instead of query token only
- token rotation in the UI
- GET participants list / status
- cancel or update participant data
- series registration API
Idempotency-Keyheader
These are not product promises - only directions we collect from integration users.