Recurring event - session level registration

Create and manage recurring events step by step using Webinars Plus & Events open API endpoints.

Getting started

  1. Set up your recurring events.
  2. Create a registration link and configure the link depending on the registration type.
  3. 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

  1. 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",
                ...
            }
        ]
    }
    
  2. 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_id from the response when the event is successfully created.

  3. 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 200 OK.

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
  1. 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",
            ...
        }
    ]
    
  2. 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 201 with the response body.

Ticket creation

  1. 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",
            ...
        }
    ]
    
  2. 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",
            ...
        }
        ...
    ]
    
  3. 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_type is set to single_session, a unique ticket is generated for each individual session.

    If link_registration_type is multiple_session, a single ticket is issued for the selected sessions.

    If link_registration_type is all_sessions, one ticket is created, granting access to all available sessions.