Participant registration API

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

  1. Webinar creator -> Finish step -> registration webhook section, or
  2. Settings -> Integrations -> Webhooks -> registration API / documentation section.

URL shape:

https://webivio.com/api/public/registration-webhook?webinarId={webinar-uuid}&token={secret}
  • webinarId - webinar UUID
  • token - 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

MethodPOST (also OPTIONS for CORS)
Path/api/public/registration-webhook
AuthQuery: webinarId + token
Content-Typeapplication/json
CORSAccess-Control-Allow-Origin: *

Body - single participant

Required: email and exactly one way to pick the session time.

FieldRequiredAliasesDescription
emailYesbuyer_email, customer_email, e-mail, mailParticipant email
nameNofirst_name, firstName, imieFirst name
surnameNolast_name, lastName, nazwiskoLast name
phoneNophone_number, phoneNumber, telefonPhone
selectedDateYes*selected_date, webinarDate, dateISO datetime with offset (preferred)
instanceIdYes*instance_idExisting instance UUID
instanceDate + instanceTimeYes*instance_date, instance_timeYYYY-MM-DD + HH:mm
userTimezoneNouser_timezone, timezone, timeZonee.g. Europe/Warsaw
utm_source etc.NocamelCase (utmSource…)Campaign UTMs
urlParameters, referrerNosnake_caseExtra 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

HTTPMeaning
400Missing email, bad JSON, missing session, empty / too large participants
403Bad token or inactive webinar
404Webinar / instance not found
409Email already registered for that session
429Rate limit: RATE_LIMIT_EXCEEDED (+ Retry-After header)
500Server 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)

  1. Copy the registration webhook URL from the Webivio panel (with webinarId and token).
  2. In Zapier: action Webhooks by Zapier -> POST (or Code if you build JSON manually).
  3. URL = the Webivio URL.
  4. Payload Type: JSON.
  5. 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 token like 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

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-Key header

These are not product promises - only directions we collect from integration users.