Skip to content
Skip to main content

Find open meeting times across calendars

You want to show open meeting times on a booking page, or pick a slot that works for three attendees on Google, Outlook, and iCloud. Doing it by hand means pulling each calendar, normalizing time zones, intersecting the free blocks, and re-running it every time a calendar changes. It’s fiddly, and it breaks the moment someone’s provider returns busy data in a different shape.

The Nylas availability API does the intersection for you. You send the participants and a time window, and it returns the slots when everyone is free, across every connected provider, in one response.

How do I find times when everyone is free?

Section titled “How do I find times when everyone is free?”

Send a POST /v3/calendars/availability request with the participants, a start_time/end_time window, and the meeting duration_minutes. Nylas reads each participant’s calendar, intersects their busy times, and returns only the slots when all of them are free. It works across providers, so a meeting between Google, Outlook, and iCloud attendees comes back in one unified list.

The request below finds slots of 30 minutes for two participants within a time window. The interval_minutes field controls how finely the window is divided.

When you only need one user’s schedule, POST /v3/grants/{grant_id}/calendars/free-busy is the lighter call. It skips slot generation and returns the raw busy blocks for the addresses you list. The body needs just 3 fields: start_time, end_time, and emails. An optional tentative_as_busy flag counts tentative events as busy. Use it to render a single calendar’s busy ranges or to build your own slot logic.

The request below returns busy periods for one address over a time window.

How do I control which slots are returned?

Section titled “How do I control which slots are returned?”

The availability_rules and per-participant settings shape the results. Set duration_minutes for the meeting length and interval_minutes for how often a candidate slot starts, then add a buffer of, for example, 15 minutes before and after so back-to-back meetings don’t get suggested. round_to snaps slot start times to a clean boundary.

For multi-host scheduling, availability_method decides how Nylas treats the hosts: collective finds times when every host is free, while the round-robin methods distribute meetings across hosts. Per-participant open_hours further restrict a person to their working hours and time zone. The availability API reference documents every field.

A few constraints are worth planning for. The availability endpoint covers 4 providers (Google, Microsoft, iCloud, and Exchange), while Free/Busy covers the same set except iCloud, which doesn’t expose provider-side Free/Busy data. Both exclude standard IMAP accounts, which have no calendar to read. Every participant’s calendar must be reachable, so a participant whose grant has expired skews the results toward “busy” or drops them from the calculation.

If you’d rather not build the booking UI yourself, the Nylas Scheduler wraps this same availability engine in a hosted page and UI components you embed. Reach for the raw API when you need a custom interface, and Scheduler when you want the UI handled.