Meeting types in the Nylas Scheduler
The Nylas Scheduler enables you to book calendar events using the Nylas Calendar APIs. Calendar events can be single occurrences, recurring events, or a series of events that span a booking timespan.
This page discusses the different types of events that you can book, and the roles and configuration for each. This includes one-on-one, group, and collective meetings.
Scheduler roles
The following roles are available for Nylas Scheduler users:
- Organizer: The meeting organizer. This user's account is authenticated and connected to the Nylas Scheduler.
- Invitee: An external user who can book an event, receive invitations, and accept invitations.
- Attendee: A meeting guest. Guests can be users from the organizer's team or company who have access to free/busy information.
One-on-one meetings
ℹ️ The one-on-one meeting type is the default when you create an event using Scheduler. To create a group or collective meeting, set the maximum number of attendees to more than one.
One-on-one meetings involve a single organizer and a single invitee.
Group meetings
Group meetings are in beta: To enable group meetings, contact Nylas Support.
Group meetings involve a single organizer and multiple invitees and attendees. The organizer sets the event time and duration, and the maximum attendee capacity.
To create a group meeting, set the maximum number of attendees to more than one and set yourself as the Organizer, as below.
Example: Create a group meeting
The following JSON sample demonstrates how to format a group meeting request.
{
// Add all organizers' access_tokens here.
"access_tokens": [
"<ACCESS_TOKEN_ORGANIZER>",
],
"config": {
"appearance": {
"color": "red",
"company_name": "Nylas",
"logo": "<YOUR LOGO>",
"privacy_policy_redirect": "",
"show_autoschedule": true,
"show_nylas_branding": false,
"show_timezone_options": true,
"show_week_view": true,
"submit_text": "",
"thank_you_redirect": "",
"thank_you_text": "",
"thank_you_text_secondary": ""
},
"booking": {
"additional_fields": [],
"additional_guests_hidden": false,
"available_days_in_future": 30,
"calendar_invite_to_guests": true,
"cancellation_policy": "",
"confirmation_emails_to_guests": true,
"confirmation_emails_to_host": true,
"confirmation_method": "automatic",
"interval_minutes": null,
"min_booking_notice": 5,
"min_buffer": 5,
"min_cancellation_notice": 10,
"name_field_hidden": false,
"opening_hours": [
// You can set specific opening hours for each organizer here.
{
"account_id": "<ORGANIZER_ACCOUNT_ID>",
"days": [
0,
1,
2,
3,
4
],
"end": "17:00",
"start": "09:00"
}
],
"scheduling_method": "round-robin-maximize-fairness"
},
// Specify which calendar to use for booking/availability by passing calendar IDs for each account.
"calendar_ids": {
"<ORGANIZER_ACCOUNT_ID>": {
"availability": [
"<ORGANIZER_1_CALENDAR_ID>"
],
"booking": "<ORGANIZER_1_CALENDAR_ID>"
}
},
"disable_emails": false,
"event": {
"capacity": 1, // Optional
"duration": 30,
"location": "TBD",
"title": "Group Meeting",
},
"locale": "en",
"page_hostname": "schedule.nylas.com",
"reminders": [{
"delivery_method": "email",
"delivery_recipient": "both",
"email_subject": "Reminder - meeting about to start",
"time_before_event": 15,
"webhook_url": ""
}],
"timezone": "America/Chicago"
},
"name": "Group Demo",
"slug": "group-kr-example"
}
Collective meetings
Collective meetings are in beta: To enable collective meetings, contact Nylas Support.
Collective meetings allow you to host an event with another organizer or an assigned attendee. They also allow attendees the option to pick a mutually available time slot for the meeting. You can add attendees using the Who else will be joining you? field.
Example: Create a collective meeting
To create a collective meeting, make a request to the Nylas Scheduler API's /manage/pages
endpoint. The following JSON samples demonstrate how to format a collective meeting request, and the expected response.
{
// Add all organizers' access_tokens here.
"access_tokens": [
"<ACCESS_TOKEN_ORGANIZER1>",
"<ACCESS_TOKEN_ORGANIZER2>",
"<ACCESS_TOKEN_ORGANIZER3>"
],
"config": {
"appearance": {
"color": "red",
"company_name": "{{Company_Name}}",
"logo": "<YOUR LOGO>",
"privacy_policy_redirect": "",
"show_autoschedule": true,
"show_nylas_branding": false,
"show_timezone_options": true,
"show_week_view": true,
"submit_text": "",
"thank_you_redirect": "",
"thank_you_text": "",
"thank_you_text_secondary": ""
},
"booking": {
"additional_fields": [],
"additional_guests_hidden": false,
"available_days_in_future": 30,
"calendar_invite_to_guests": true,
"cancellation_policy": "",
"confirmation_emails_to_guests": true,
"confirmation_emails_to_host": true,
"confirmation_method": "automatic",
"interval_minutes": null,
"min_booking_notice": 5,
"min_buffer": 5,
"min_cancellation_notice": 10,
"name_field_hidden": false,
"opening_hours": [
// You can set specific opening hours for each organizer here.
{
"account_id": "<ORGANIZER_1_ACCOUNT_ID>",
"days": ["M", "T", "W", "R", "F"],
"end": "17:00",
"start": "09:00"
},
{
"account_id": "<ORGANIZER_2_ACCOUNT_ID>",
"days": ["M", "T", "W", "R", "F"],
"end": "13:00",
"start": "09:00"
},
{
"account_id": "<ORGANIZER_3_ACCOUNT_ID>",
"days": ["T", "W", "R"],
"end": "17:00",
"start": "09:00"
}
],
// Set this to collective. Make sure Nylas Support has enabled this feature for you.
"scheduling_method": "collective"
},
// Specify which calendar to use for booking/availability by passing calendar IDs for each account.
"calendar_ids": {
"<ORGANIZER_1_ACCOUNT_ID>": {
"availability": ["<ORGANIZER_1_CALENDAR_ID>"],
"booking": "<ORGANIZER_1_CALENDAR_ID>"
},
"<ORGANIZER_2_ACCOUNT_ID>": {
"availability": ["<ORGANIZER_2_CALENDAR_ID>"],
"booking": "<ORGANIZER_2_CALENDAR_ID>"
},
"<ORGANIZER_3_ACCOUNT_ID>": {
"availability": ["<ORGANIZER_3_CALENDAR_ID>"],
"booking": "<ORGANIZER_3_CALENDAR_ID>"
}
},
"disable_emails": false,
"event": {
"capacity": 4, //Optional
"duration": 30,
"location": "TBD",
"title": "Meeting Title",
"participants": [
// Pass each of the users to include in every booking here (this should mirror the access_tokens array).
{
"confirmation_method": "calendar",
"email": "dorothy@example.com",
"name": "Dorothy A",
"role": "organizer"
},
{
"confirmation_method": "calendar",
"email": "kat@example.com",
"name": "Kat B",
"role": "organizer"
},
{
"confirmation_method": "calendar",
"email": "mae@example.com",
"name": "Mae C",
"role": "organizer"
}
]
},
"locale": "en",
"page_hostname": "schedule.nylas.com",
"reminders": [{
"delivery_method": "email",
"delivery_recipient": "both",
"email_subject": "Reminder - meeting about to start",
"time_before_event": 15,
"webhook_url": ""
}],
"timezone": "America/Chicago"
},
"name": "{{SchedulerName}}",
"slug": "{{SchedulerSlug}}"
}
[
{
"account_id": "exampleaccountid1",
"calendar_id": "examplecalendaridA",
"end": 1634922900,
"host_name": "dorothy@example.com",
"start": 1634920200
},
{
"account_id": "exampleaccountid2",
"calendar_id": "examplecalendaridB",
"end": 1634925600,
"host_name": "kat@example.com",
"start": 1634922900
},
{
"account_id": "exampleaccountid3",
"calendar_id": "examplecalendaridC",
"end": 1634928300,
"host_name": "mae@example.com",
"start": 1634925600
}
]
Configure attendee availability with Round Robin
Round Robin meetings distribute bookings across a group of organizers. By using this with the Nylas Scheduler's Smart Integration configurations, you can find availability between multiple users.
Round Robin meetings can use two modes: Maximum Availability and Maximum Fairness. For more information, see Round Robin modes.
Round Robin: Maximum Availability
The Maximum Availability mode spreads event bookings evenly across calendars, based on calendar availability. This means that hosts who have more availability in their calendars will see more bookings.
The following JSON samples show an example Maximum Availability request, and the expected response.
{
"duration_minutes": 15,
"start_time": 1647986400,
"end_time": 1647993600,
"interval_minutes": 5,
"emails": [
"dorothy@example.com",
"kat@example.com"
],
"free_busy": [],
"buffer": 30,
"round_robin": "max-availability",
"open_hours": [{
"emails": [
"dorothy@example.com",
"kat@example.com"
],
"days": [
0,
1,
2,
3,
4
],
"timezone": "America/Los_Angeles",
"start": "10:00",
"end": "16:00",
"object_type": "open_hours"
}]
}
{
"object": "availability",
"order": ["dorothy@example.com", "kat@example.com"],
"time_slots": [
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647987300,
"end_time": 1647987300,
"object": "time_slot",
"start": 1647986400,
"start_time": 1647986400,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647987600,
"end_time": 1647987600,
"object": "time_slot",
"start": 1647986700,
"start_time": 1647986700,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647987900,
"end_time": 1647987900,
"object": "time_slot",
"start": 1647987000,
"start_time": 1647987000,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647988200,
"end_time": 1647988200,
"object": "time_slot",
"start": 1647987300,
"start_time": 1647987300,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647988500,
"end_time": 1647988500,
"object": "time_slot",
"start": 1647987600,
"start_time": 1647987600,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647988800,
"end_time": 1647988800,
"object": "time_slot",
"start": 1647987900,
"start_time": 1647987900,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647989100,
"end_time": 1647989100,
"object": "time_slot",
"start": 1647988200,
"start_time": 1647988200,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647989400,
"end_time": 1647989400,
"object": "time_slot",
"start": 1647988500,
"start_time": 1647988500,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647989700,
"end_time": 1647989700,
"object": "time_slot",
"start": 1647988800,
"start_time": 1647988800,
"status": "free"
},
{
"emails": ["dorothy@example.com", "kat@example.com"],
"end": 1647990000,
"end_time": 1647990000,
"object": "time_slot",
"start": 1647989100,
"start_time": 1647989100,
"status": "free"
}
]
}
Round Robin: Maximum Fairness
The Maximum Fairness mode spreads event bookings evenly across calendars, regardless of calendar availability. This may result in participants seeing less availability when booking meetings.
The following JSON samples show an example Maximum Fairness request, and the expected response.
{
"duration_minutes": 15,
"start_time": 1647986400,
"end_time": 1647993600,
"interval_minutes": 5,
"emails": [
"dorothy@example.com",
"kat@example.com",
"mae@example.com"
],
"free_busy": [],
"buffer": 30,
"round_robin": "max-fairness",
"open_hours": [{
"emails": [
"dorothy@example.com",
"kat@example.com",
"mae@example.com"
],
"days": [
0,
1,
2,
3,
4
],
"timezone": "America/Los_Angeles",
"start": "10:00",
"end": "16:00",
"object_type": "open_hours"
}]
}
{
"object": "availability",
"order": ["dorothy@example.com", "kat@example.com"],
"time_slots": [
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647987300,
"end_time": 1647987300,
"object": "time_slot",
"start": 1647986400,
"start_time": 1647986400,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647987600,
"end_time": 1647987600,
"object": "time_slot",
"start": 1647986700,
"start_time": 1647986700,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647987900,
"end_time": 1647987900,
"object": "time_slot",
"start": 1647987000,
"start_time": 1647987000,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647988200,
"end_time": 1647988200,
"object": "time_slot",
"start": 1647987300,
"start_time": 1647987300,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647988500,
"end_time": 1647988500,
"object": "time_slot",
"start": 1647987600,
"start_time": 1647987600,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647988800,
"end_time": 1647988800,
"object": "time_slot",
"start": 1647987900,
"start_time": 1647987900,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647989100,
"end_time": 1647989100,
"object": "time_slot",
"start": 1647988200,
"start_time": 1647988200,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647989400,
"end_time": 1647989400,
"object": "time_slot",
"start": 1647988500,
"start_time": 1647988500,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647989700,
"end_time": 1647989700,
"object": "time_slot",
"start": 1647988800,
"start_time": 1647988800,
"status": "free"
},
{
"emails": ["dorothy@example.com", "mae@example.com"],
"end": 1647990000,
"end_time": 1647990000,
"object": "time_slot",
"start": 1647989100,
"start_time": 1647989100,
"status": "free"
}
]
}