Skip to content

Notetaker

Nylas Notetaker is a real-time meeting bot that you can invite to your online meetings. It records and transcribes your discussion, and delivers results to you using the Nylas API and webhook notifications.

The /v3/grants/<NYLAS_GRANT_ID>/notetakers endpoints let you interact with Nylas Notetaker while referencing a specific grant so you can use Notetaker's calendar sync features for your authenticated users.

The /v3/notetakers endpoints let you send Notetakers that aren't connected to a grant as standalone Notetakers.

Calendar sync

Notetaker works with the Nylas Calendar API to automatically sync with calendars and events. When you sync Notetaker with a grant's calendar or event, Nylas tracks their join times and meeting links so the Notetaker is always sent to the meeting on time.

Webhook notifications

Nylas sends webhook notifications when a Notetaker bot is created, updated, or deleted, and when the recording media is available.

Invite Notetaker to meeting

Adds a Notetaker bot to the specified meeting.

Nylas doesn't de-duplicate Notetaker bots. Every POST /v3/grants/<NYLAS_GRANT_ID>/notetakers request you make invites a new Notetaker to the specified meeting.

Path Parameters
  • grant_id
    Type:string
    required

    ID of the grant to access.

Body
application/json
  • meeting_link
    Type:string
    required

    A meeting invitation link that Notetaker uses to join the meeting.

  • join_time
    Type:integer

    When Notetaker should join the meeting, in seconds using the Unix timestamp format. If empty, Notetaker joins the meeting immediately.

    If you provide a time that's in the past, Nylas returns an error.

  • name
    Type:string
    default: 
    "Nylas Notetaker"

    The display name for the Notetaker bot.

  • meeting_settings
    Type:object
Responses
  • application/json
  • application/json
  • application/json
  • application/json
Request Example forPOST/v3/grants/{grant_id}/notetakers
curl --request POST \
  --url "https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers" \
  --header 'Accept: application/json, application/gzip' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "meeting_link": "<MEETING_URL>",
    "name": "Nylas Notetaker",
    "join_time": 1732657774,
    "meeting_settings": {
      "video_recording": true,
      "audio_recording": true,
      "transcription": true
    }
  }'
{
  "request_id": "5fa64c92-e840-4357-86b9-2aa364d35b88",
  "data": {
    "id": "AAAA-BBBB-1111-2222",
    "name": "Nylas Notetaker",
    "meeting_link": "https://meet.google.com/abc123",
    "state": "joining",
    "meeting_settings": {
      "video_recording": true,
      "audio_recording": true,
      "transcription": true
    },
    "join_time": 1716151200
  }
}

Return all Notetakers

Lists all Notetaker bots.

Path Parameters
  • grant_id
    Type:string
    required

    ID of the grant to access.

Query Parameters
  • state
    Type:string enum

    Filter for Notetaker bots with the specified meeting state.

    • scheduled
    • connecting
    • waiting_for_entry
    • failed_entry
    • attending
    • media_processing
    • media_available
    • media_error
    • media_deleted
  • join_time_start
    Type:number

    Filter for Notetaker bots that have join times that start at or after a specific time, in Unix timestamp format.

  • join_time_end
    Type:number

    Filter for Notetaker bots that have join times that end at or are before a specific time, in Unix timestamp format.

  • limit
    Type:integer
    max: 
    200
    default: 
    50

    The maximum number of objects to return. See Pagination for more information.

  • page_token
    Type:string

    An identifier that specifies which page of data to return. You can get this value from the next_cursor response field. See Pagination for more information.

  • prev_page_token
    Type:string

    An identifier that specifies which page of data to return. You can get this value from the prev_cursor response field. See Pagination for more information.

  • order_by
    Type:string enum
    default: 
    "created_at"

    The field to order the Notetaker bots by.

    • name
    • join_time
    • created_at
  • order_direction
    Type:string enum
    default: 
    "asc"

    The direction to order the Notetaker bots by.

    • asc
    • desc
Responses
  • application/json
  • application/json
  • application/json
Request Example forGET/v3/grants/{grant_id}/notetakers
curl --request GET \
  --url "https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers" \
  --header 'Accept: application/json, application/gzip' \
  --header 'Authorization: Bearer <NYLAS_API_KEY>'
{
  "request_id": "5fa64c92-e840-4357-86b9-2aa364d35b88",
  "data": {
    "id": "AAAA-BBBB-1111-2222",
    "name": "Nylas Notetaker",
    "state": "attending",
    "meeting_link": "https://meet.google.com/abc123",
    "meeting_settings": {
      "video_recording": true,
      "audio_recording": true,
      "transcription": true
    },
    "join_time": 1716151200
  },
  "next_cursor": "CigKGjRlaDdyNGQydTFqbWJ0bGo5a2QxdWJtdDZnGAEggIDAu7fw7bEYGg8IABIAGPjh2PGEi_0CIAEiBwgCEOqs6i4=",
  "prev_cursor": "CigKGjRlaDdyNGQydTFqbWJ0bGo5a2QxdWJtdDZnGAEggIDAu7fw7bEYGg8IABIAGPjh2PGEi_0CIAEiBCQR28w4="
}
v3
OAS 3.1.0

Nylas Email, Calendar, and Contacts APIs

This API reference documentation covers the Nylas Email, Calendar, and Contacts APIs. See the see the Administration API documentation for information about working with Nylas applications, authentication, connectors, and webhook subscriptions.

The Nylas API is designed using the REST ideology to provide simple and predictable URIs to access and modify objects. Requests support standard HTTP methods like GET, PUT, POST, and DELETE, and standard status codes. Response bodies are always UTF-8 encoded JSON objects, unless explicitly documented otherwise.

You can use the Nylas Postman collection to quickly start using the Nylas APIs. For more information, check out the Nylas Postman collection documentation.

Enable compression to optimize performance

The Nylas APIs support application/gzip (compressed) format as well as the standard plaintext application/json. Using gzip compression greatly improves API performance, especially when you use it with query parameters to limit the objects returned and field selection to limit which fields you're querying for.

If you enable this, make sure your project watches the response headers so it can expand compressed responses when needed. You can read more about this in the Curl.dev documentation.

Query parameters

Nylas allows you to include query parameters in GET requests that return a list of results. Query parameters let you narrow the results Nylas returns, meaning fewer requests to the provider and less data for your application to sift through. For more information, see Rate limits in Nylas.

The table below shows the query parameters you can use for the GET requests in the Email, Calendar, and Contacts APIs.

Endpoint Query parameters
GET /v3/grants/<NYLAS_GRANT_ID>/calendars limit, page_token, metadata_pair
GET /v3/grants/<NYLAS_GRANT_ID>/events limit, page_token, show_cancelled, title, description, ical_uid, location, start, end, master_event_id, metadata_pair, busy, updated_before, updated_after, attendees, event_type, select
GET /v3/grants/<NYLAS_GRANT_ID>/drafts limit, page_token, subject, any_email, to, cc, bcc, starred, thread_id, has_attachment
GET /v3/grants/<NYLAS_GRANT_ID>/messages limit, page_token, subject, any_email, to, from, cc, bcc, in, unread, starred, thread_id, received_before, received_after, has_attachment, fields, search_query_native
GET /v3/grants/<NYLAS_GRANT_ID>/threads limit, page_token, subject, any_email, to, from, cc, bcc, in, unread, starred, latest_message_before, latest_message_after, has_attachment, search_query_native
GET /v3/grants/<NYLAS_GRANT_ID>/folders limit, page_token, parent_id
GET /v3/grants/<NYLAS_GRANT_ID>/contacts limit, page_token, email, phone_number, source, group, recurse

You can use the limit parameter to set the maximum number of results Nylas returns for your request. Nylas recommends setting a lower limit if you encounter rate limits on the provider. For more information, see Avoiding rate limits in Nylas.

Nylas supports case-insensitive partial matches for some query parameters:

If the specified field contains the query term, Nylas matches it regardless of the case. For example, if you set the subject query parameter to march in a Get all Messages request, Nylas might return the following messages:

  • "Company March Meeting"
  • "Today in history: Mussolini's march on Rome"
  • "Your coupon code: mARch"

Since Nylas matches keywords, it won't return the following messages:

  • "Confirmation code: abcMarch123"
  • "McDonald's golden arches"

Pagination

Nylas might return multiple pages of data when you make a "Get all" request (for example, Get all Events). When this happens, Nylas includes the next_cursor field in its response. You can pass the value of next_cursor as the page_token query parameter in your next request to get the next page of results.

You can use the limit parameter to specify the maximum number of results you want in one page of data. If you see rate limits from the provider, try using a smaller limit value.

Query Parameter Type Description
limit integer The number of objects to return, up to a maximum of 200 (defaults to 50).
page_token string An identifier that specifies which page of data to return. This value should be taken from the next_cursor response body field.

Updating objects

PUT and PATCH requests behave similarly in Nylas: when you make a request, Nylas replaces all data in the nested object with the information you define. Because of this, your request might fail if you don't include all mandatory fields.

Nylas doesn't erase the data from fields that you don't include in your request, so you can define only the mandatory fields and any that you want to update.

/me/ syntax for API calls

Nylas includes the /me/ syntax which you can use in access-token authorized API calls instead of specifying a user's grant ID (for example, GET /v3/grants/me/messages).

The /me/ syntax looks up the grant associated with the request's access token, and uses the grant_id as a locator. You can use this syntax for API requests that access account data only, and only if you use access tokens to authorize requests. You can't use this syntax if you're using API key authorization, because there is no grant associated with an API key.

Metadata

You can use the metadata object to add a list of key-value pairs to Calendar, Event, Message, and Draft objects so you can store custom data with them. Both keys and values can be any string. If you want to filter on metadata, however, you must write values to one of the five Nylas-specific keys.

For more information, see the Metadata documentation.

Metadata keys and filtering

Nylas reserves five metadata keys (key1, key2, key3, key4, key5) and indexes their contents. Nylas uses key5 to identify events that count towards the max-fairness round-robin calculation for event availability. For more information, see Group availability and booking best practices.

You can add values to each of these reserved keys, and reference them in a query to filter the objects that Nylas returns. You can also add these filters as query parameters, as in the following examples:

  • https://api.us.nylas.com/calendar?metadata_pair=key1:on-site
  • https://api.us.nylas.com/events?calendar_id=<CALENDAR_ID>&metadata_pair=key1:on-site

You can't create a query that includes both a provider and metadata filter, other than calendar_id. For example, https://api.us.nylas.com/calendar?metadata_pair=key1:plan-party&title=Birthday returns an error.

Reduce response size with field selection

Field selection allows you to use the select query parameter to specify which fields you want Nylas to include in the response.

You can use field selection for all Nylas API endpoints, except the following:

  • All DELETE endpoints.
  • All Attachments endpoints.
  • All Smart Compose endpoints.
  • The Send Message endpoint.
  • The Create a Draft endpoint.

Field selection helps to reduce the size of the response, improves latency, and helps you avoid rate limiting issues. You can also use it in cases where you want to avoid working with information from your users that you think might be sensitive.

Field selection can evaluate top-level object fields only. You cannot use it to return only nested fields.

📝 Note: Nylas strongly suggests you always use field selection, so you only get the data that you need.

For example, the following request specifies Nylas should return only the id and name fields of the Calendar object.

curl --request GET \
  --url 'https://api.us.nylas.com/v3/grants/me/calendars?select=id,name'

The response payload includes only the id and name fields in the data object, as in the example below.

{
  "request_id": "5fa64c92-e840-4357-86b9-2aa364d35b88",
  "data": [
    {
      "id": "5d3qmne77v32r8l4phyuksl2x",
      "name": "My Calendar"
    },
    {
      "id": "5d3qmne77v32r23aphyuksl2x",
      "name": "My Calendar 2"
    }
  ]
}

Nylas encoding

Response bodies are always UTF-8 encoded JSON objects, unless explicitly documented otherwise.

U.S.

Calendar (Collapsed)

The Nylas Calendar API allows you to create and manage calendars, and access the events they contain. Nylas uses the same commands to manage calendars across providers, and you can refer to specific calendars using the provider's calendar_id.

Depending on the provider, a calendar might be accessed by only one person, or shared among several users. Some common calendars might include Personal, Work, or Shared calendars.

A calendar might contain overlapping events or conflicting schedules. You can use the Get Availability endpoint to find the best time for an event by identifying time periods that have no conflicting events among all participants.

Find a calendar ID

You must specify a calendar_id in all calls you make to the Nylas Calendar API. You can use primary to specify the primary calendar associated with a grant, or you can look up the ID of the calendar that you want to work with and use that.

For virtual calendars, the primary calendar is the first created for a virtual account. You cannot delete a virtual calendar that's designated as primary.

For iCloud, there is no primary calendar.

Free/Busy information

The Get Free/Busy Schedule endpoint is available for all providers, including Virtual Calendars, except for iCloud.

The Get Availability endpoint doesn't support the free_busy object.

Virtual calendars

Nylas allows you to create virtual calendars for users and resources that might not have calendars on your providers (for example, external contractors or meeting rooms). You can use the Nylas Calendar and Events APIs with the virtual accounts that power virtual calendars, just like you would any other account. Virtual accounts don't provide email or contacts features, so you can't use them with the Email or Contacts APIs.

For more information, see Using virtual calendars.

Metadata on calendars

You can add metadata to new and existing calendars by including the metadata sub-object in your POST, PUT, or PATCH request. For more information, see the Metadata documentation.

Calendar scopes

The table below lists the Calendar endpoints and which scopes they require. The table shortens the full scope URI for space reasons, so add the prefix for the provider when requesting scopes.

The ☑️ in each column indicates the most restrictive scope you can request for each provider and still use that API. More permissive scopes appear under the minimum option. If you're already using one of the permissive scopes, you don't need to add the more restrictive scope.

Endpoint Google Scopes
https://www.googleapis.com/auth/...
Microsoft Scopes
https://graph.microsoft.com/...
GET /calendars
GET /calendars/<CALENDAR_ID>
POST /calendars/free-busy
POST /calendars/availability
/calendar.readonly ☑️
/calendar
Calendars.Read ☑️
Calendars.ReadWrite
POST /calendars
PUT /calendars/<CALENDAR_ID>
DELETE /calendars/<CALENDAR_ID>
/calendar ☑️ Calendars.ReadWrite ☑️

For more information about scopes, see the Authentication scopes documentation.

Calendar activity notifications

You can subscribe to the following triggers so Nylas notifies you about changes to your users' calendar data:

  • calendar.created
  • calendar.updated
  • calendar.deleted

For more information, see the Calendar webhook notification schemas.

Microsoft event considerations

Microsoft Outlook events are often shared across all calendars in a user's account. If the user creates an event on one of their calendars, you can retrieve it using another calendar ID from their grant.

Events (Collapsed)

Events represent scheduled items on a calendar. The Nylas Events API uses the same commands to manage events across providers, and can refer to specific events using the provider's event_id parameter. Events can be public, private, or shared among a group of users. They might include details like participants, locations, and timing, along with other information.

The Events API includes the Send RSVP endpoint, which allows you to send RSVPs directly from your Nylas application, even for participants who might not have access to edit a specific event.

Metadata on events

You can add metadata to new and existing events by including the metadata sub-object in your POST, PUT, or PATCH request. For more information, see the Metadata documentation.

Virtual calendars

Nylas allows you to create virtual calendars for users and resources that might not have calendars on your providers (for example, external contractors or meeting rooms). You can use the Nylas Calendar and Events APIs with the virtual accounts that power virtual calendars, just like you would any other account. Virtual accounts don't provide email or contacts features, so you can't use them with the Email or Contacts APIs.

For more information, see Using virtual calendars.

Events scopes

The table below lists the Events endpoints and which scopes they require. The table shortens the full scope URI for space reasons, so add the prefix for the provider when requesting scopes.

The ☑️ in each column indicates the most restrictive scope you can request for each provider and still use that API. More permissive scopes appear under the minimum option. If you're already using one of the permissive scopes, you don't need to add the more restrictive scope.

Endpoint Google Scopes
https://www.googleapis.com/auth/...
Microsoft Scopes
https://graph.microsoft.com/...
GET /events
GET /events/<EVENT_ID>
/calendar.events.readonly ☑️
/calendar.events
/calendar (Required to use primary keyword when referencing calendars.)
Calendars.Read ☑️
Calendars.ReadWrite
POST /events
PUT /events/<EVENT_ID>
DELETE /events/<EVENT_ID>
POST /events/<EVENT_ID>/send-rsvp
/calendar.events ☑️
/calendar (Required to use primary keyword when referencing calendars.)
Calendars.ReadWrite ☑️

For more information about scopes, see the Authentication scopes documentation.

Events notifications

You can subscribe to the following notification triggers so Nylas notifies you about changes to your users' event data:

  • event.created
  • event.updated
  • event.deleted

These are separate from the event reminders which you might send to your users. For more information, see the Event webhook notification schemas.

Microsoft event considerations

Microsoft Outlook events are often shared across all calendars in a user's account. If the user creates an event on one of their calendars, you can retrieve it using another calendar ID from their grant.

iCloud query considerations

If you're searching for an event within a certain time range on an iCloud account, the difference between start and end can't be greater than six months. If you include a time range greater than six months, Nylas returns an "Invalid request" error similar to the following example.

"error": {
  "type": "invalid_request_error",
  "message": "The maximum time range for iCloud event queries is 6 months."
}

For more information about searching for events, see Searching with Nylas.