Register attendees for a webinar
const url = 'https://api.nexacloser.com/v1/webinar-registrants';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"webinar_id":"wbn_6RLC77yktP","registrants":[{"first_name":"Dana","last_name":"Levi","email":"[email protected]","phone":"+972501234567","utm_source":"facebook","page_url":"https://www.example.com/webinar?utm_source=facebook","consent":{"granted":true,"text_shown":"I agree to get webinar reminders by WhatsApp and SMS.","source":"landing_page"}},{"email":"[email protected]","first_name":"Avi"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.nexacloser.com/v1/webinar-registrants \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "webinar_id": "wbn_6RLC77yktP", "registrants": [ { "first_name": "Dana", "last_name": "Levi", "email": "[email protected]", "phone": "+972501234567", "utm_source": "facebook", "page_url": "https://www.example.com/webinar?utm_source=facebook", "consent": { "granted": true, "text_shown": "I agree to get webinar reminders by WhatsApp and SMS.", "source": "landing_page" } }, { "email": "[email protected]", "first_name": "Avi" } ] }'Registers one attendee or a batch of up to 100 for one of your webinars, exactly as the hosted registration form would: the contact is created or updated in the CRM, the attendee gets a session and a personal watch link, and the webinar’s automations run.
Pick the webinar with webinar_id or slug (webinar_id wins when both are sent). It
must belong to the key’s workspace and be active.
Consent. A registrant with a phone number must carry consent.granted: true, or that
registrant is refused with consent_required (the rest of the batch still goes through).
Email-only registrants need no consent object.
Repeats. Registering the same person for the same session again is a success that
returns the existing registration and link, with duplicate: true.
Each item in results succeeds or fails on its own; the call itself returns 200 once
the batch is processed.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
The webinar id (wbn_…). Wins over slug.
The webinar’s slug in your workspace.
Send an email, a phone, or both.
object
Any format; E.164 is best.
Country calling code when you collect it separately, e.g. 972.
The national number when you collect it separately.
The landing page URL. Its query string is kept as the registration’s URL parameters when url_parameters is not sent.
The raw query string of the landing page (utm_*, click ids).
Extra answers from your form, by field key.
object
Registrant language, e.g. he or en.
IANA time zone, e.g. Asia/Jerusalem.
Required (granted: true) when the registrant has a phone.
object
The exact wording shown next to the checkbox.
Where the opt-in was collected, e.g. landing_page.
When it was given. Default is now.
Send an email, a phone, or both.
object
Any format; E.164 is best.
Country calling code when you collect it separately, e.g. 972.
The national number when you collect it separately.
The landing page URL. Its query string is kept as the registration’s URL parameters when url_parameters is not sent.
The raw query string of the landing page (utm_*, click ids).
Extra answers from your form, by field key.
object
Registrant language, e.g. he or en.
IANA time zone, e.g. Asia/Jerusalem.
Required (granted: true) when the registrant has a phone.
object
The exact wording shown next to the checkbox.
Where the opt-in was collected, e.g. landing_page.
When it was given. Default is now.
Example
{ "webinar_id": "wbn_6RLC77yktP", "registrants": [ { "first_name": "Dana", "last_name": "Levi", "phone": "+972501234567", "utm_source": "facebook", "page_url": "https://www.example.com/webinar?utm_source=facebook", "consent": { "granted": true, "text_shown": "I agree to get webinar reminders by WhatsApp and SMS.", "source": "landing_page" } }, { "first_name": "Avi" } ]}Responses
Section titled “Responses”The batch was processed. Check results for each registrant.
object
object
Position in your registrants array.
The attendee’s personal watch link.
true when this person was already registered for the session.
When ok is false: consent_required, invalid_registrant, email_or_phone_required,
valid email required (the webinar’s form requires an email), validation_failed
(the webinar’s form rules), webinar_full or internal.
Example
{ "results": [ { "index": 0, "ok": true, "registration_id": "wbr_5D2AkHpKwL", "personal_link_url": "https://app.nexacloser.com/j/wbr_5D2AkHpKwL.6b146474.59934ce894cb", "duplicate": false }, { "index": 1, "ok": false, "error": "consent_required" } ], "created": 1, "duplicates": 0, "failed": 1}Headers
Section titled “Headers”Requests allowed in the current short window.
Requests left in the current short window.
The request cannot be processed: invalid_json, no_registrants, batch_too_large
(more than 100) or webinar_required (neither webinar_id nor slug).
object
A stable, machine-readable code.
Example
{ "error": "no_registrants"}Missing, wrong, revoked or rotated key, a key whose access level does not include this endpoint, or a key whose workspace cannot be resolved.
object
A stable, machine-readable code.
Example
{ "error": "unauthorized"}The webinar belongs to another workspace.
object
A stable, machine-readable code.
Example
{ "error": "forbidden"}No active webinar with that id or slug.
object
A stable, machine-readable code.
Example
{ "error": "webinar_not_found"}Only POST is accepted.
object
A stable, machine-readable code.
Example
{ "error": "method_not_allowed"}Too many requests. Wait Retry-After seconds.
object
Seconds to wait.
Example
{ "error": "rate_limited", "message": "Too many requests", "retry_after": 7}Headers
Section titled “Headers”Seconds to wait before retrying.
Something failed on our side. Safe to retry with backoff.
object
A stable, machine-readable code.
Example
{ "error": "internal"}