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.
- POST/v3/grants/{grant_id}/notetakers
- GET/v3/grants/{grant_id}/notetakers
- GET/v3/grants/{grant_id}/notetakers/{notetaker_id}
- PATCH/v3/grants/{grant_id}/notetakers/{notetaker_id}
- DELETE/v3/grants/{grant_id}/notetakers/{notetaker_id}/cancel
- POST/v3/grants/{grant_id}/notetakers/{notetaker_id}/leave
- GET/v3/grants/{grant_id}/notetakers/{notetaker_id}/media
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.
- grant_idType:stringrequired
ID of the grant to access.
- meeting_linkType:stringrequired
A meeting invitation link that Notetaker uses to join the meeting.
- join_timeType: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.
- nameType:stringdefault:"Nylas Notetaker"
The display name for the Notetaker bot.
- meeting_settingsType:object
- application/json
- application/json
- application/json
- application/json
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
}
}
OK
Return all Notetakers
Lists all Notetaker bots.
- grant_idType:stringrequired
ID of the grant to access.
- stateType: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_startType:number
Filter for Notetaker bots that have join times that start at or after a specific time, in Unix timestamp format.
- join_time_endType:number
Filter for Notetaker bots that have join times that end at or are before a specific time, in Unix timestamp format.
- limitType:integermax:200default:50
The maximum number of objects to return. See Pagination for more information.
- page_tokenType: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_tokenType: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_byType:string enumdefault:"created_at"
The field to order the Notetaker bots by.
- name
- join_time
- created_at
- order_directionType:string enumdefault:"asc"
The direction to order the Notetaker bots by.
- asc
- desc
- application/json
- application/json
- application/json
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="
}
OK
Nylas Email, Calendar, and Contacts APIs
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:
description
,location
, andtitle
in Get all Events requests.subject
in Get all Messages, Get all Drafts, and Get all Threads requests.
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.
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 Scopeshttps://www.googleapis.com/auth/... |
Microsoft Scopeshttps://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 Scopeshttps://www.googleapis.com/auth/... |
Microsoft Scopeshttps://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.
Enabled | Key | Value |
---|---|---|
grant_id Required |
Cookie Enabled | Cookie Key | Cookie Value |
---|---|---|
Header Enabled | Header Key | Header Value |
---|---|---|
Accept | */* | |
Content-Type | application/json | |
Query Parameters
Parameter Enabled | Parameter Key | Parameter Value |
---|---|---|
select |