Recurring event - session level registration
Create and manage recurring events step by step using Webinars Plus & Events open API endpoints.
Getting started
- Set up your recurring events.
- Create a registration link and configure the link depending on the registration type.
- Once the event setup is completed, use the ticket API to register users for the event for one or more sessions, depending on the event registration type configured at the event setup time.
Create recurring event
-
Call the List Hubs open APIs to get all available hubs. To create the event, you need a hub ID.
Request
curl --location 'https://api.zoom.us/v2/zoom_events/hubs?role_type=host' \ --header 'Authorization: ••••••' \Reponse
{ "total_records": 1, "hubs": [ { ... "hub_id": "4uzfv3JwTeyR5QpC3PXwMg", ... } ] } -
Create a recurring event API using the Create Event API command. Provide the correct hub ID retrieved from the above step.
Request
curl --location 'https://api.zoom.us/v2/zoom_events/events' \ --header 'Content-Type: application/json' \ --header 'Authorization: ••••••' \ --data '{ "hub_id": "{{hubId}}", "name": "Product planing", "description": "Product planing event", "timezone": "America/Indianapolis", "event_type": "RECURRING", "access_level": "PRIVATE_RESTRICTED", "meeting_type": "MEETING", "calendar": [ { "start_time": "2025-12-12T13:00:00Z" } ], "start_time": "2025-12-12T13:00:00Z", "recurrence": { "end_times": 7, "monthly_week": 1, "monthly_week_day": 4, "repeat_interval": 1, "type": 3, "duration": 15 } }Reponse
{ ... "event_id": "234kj2h34kljgh23lkhj3", ... }Users can extract the
event_idfrom the response when the event is successfully created. -
Navigate to Webinars Plus & Events UI or Get Event API to validate all the content. Call the publish event using the Event Actions API if everything looks good.
Event publish request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{{eventId}}/event_actions' \ --header 'Content-Type: application/json' \ --header 'Authorization: ••••••' \ --data '{ "operation" : "publish" }'If the event is successfully published, the API will return with HTTP status
200OK.
Create registration link
Once the event setup is complete, the event host can configure the event registration link depending on the registration type:
- One registration for all the sessions in the event
- Separate registration for each session
- One registration for one or more selected sessions
-
Ticket type ID is required to create the registration link. Call the list Ticket Type API to get the Ticket type ID.
Ticket type request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{{evnntId}}ticket_types' \ --header 'Authorization: ••••••'Ticket type response
"total_records": 1, "ticket_types": [ { ... "ticket_type_id": "234kjhg23kl4jhlaksjdh3", ... } ] -
Create a registration link with one of the registration type options with Create Registration API.
Recurring_registration_option supports three types of enum values:
- All sessions - One registration for all the sessions
- single_session - Registration only for one session at a time
- Multiple sessions - Registration allows one or more sessions
Create a registration link request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{{eventId}}/access_links' \ --header 'Content-Type: application/json' \ --header 'Authorization: ••••••' \ --data '{ "name": "All session registration link", "type": "registration", "is_default": true, "authentication_method": "bypass_auth", "security_at_join": { "requires_authentication": false, "security_code_verification": false }, "ticket_type_id": "{{ticket_type_id}}", "recurring_registration_option": "all_sessions" }'After the registration link is successfully created, the API returns HTTP
201with the response body.
Ticket creation
-
Ticket type ID is required to create the ticket. Get the most updated version of the ticket type ID. Call the list Ticket Type API to get the Ticket type ID.
Ticket type request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{{evnntId}}ticket_types' \ --header 'Authorization: ••••••'Ticket type response
"total_records": 1, "ticket_types": [ { ... "ticket_type_id": "234kjet23el4nhlbksjih4", ... } ] -
Get all the recurring session details using the List Sessions API. Session IDs are required to register the ticket for the session level.
List sessions request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{eventId}/sessions' --header 'Authorization: ••••••' \List sessions response
"total_records": 1, "sessions": [ { .... "session_id": "4uzfv3JwTeyR5QpC3PXwMg", ... }, { .... "session_id": "6uzfv3JwTeyR5QpC3MBy5g", ... } ... ] -
Call the Create Ticket API to register the attendees for the event.
If the registration link supports one ticket for all the sessions, we do not need to provide the session IDs in the payload. For the remaining two cases, the API requires the session IDs.
Create ticket request
curl --location 'https://api.zoom.us/v2/zoom_events/events/{{eventId}}/tickets' \ --header 'Content-Type: application/json' \ --header 'Authorization: ••••••' \ --data-raw '{ "tickets": [ { "email": "user1@example.com", "ticket_type_id": "{{ticketTypeID}}", "external_ticket_id": "refid", "send_notification": false, "fast_join": true, "first_name": "Apitesting", "last_name": "Postman", "session_ids":["aVSyJswkTGC4o1gqVogTaA","SPbxN1VwSrygHG0N6T2YtQ"] } ] }'If
link_registration_typeis set tosingle_session, a unique ticket is generated for each individual session.If
link_registration_typeismultiple_session, a single ticket is issued for the selected sessions.If
link_registration_typeisall_sessions, one ticket is created, granting access to all available sessions.