
Nylas is the API that lets you integrate with Gmail, Microsoft, IMAP, Zoom, and 250+ mail, calendar and meeting providers in 5 minutes.
Send an Email on behalf of your user
import Nylas from 'nylas';
const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' });
const sentMessage = await nylas.messages.send({
identifier: <USER_GRANT_ID>
requestBody: {
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }],
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>'
}
});require 'nylas'
nylas = Nylas::Client.new(api_key: "<NYLAS_API_KEY>")
request_body = {
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>',
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }]
}
email, response = nylas.messages.send('<USER_GRANT_ID>', request_body)from nylas import Client
nylas = Client(api_key='<NYLAS_API_KEY>')
message = nylas.messages.send(
'<USER_GRANT_ID>',
request_body={
"to": [{ "name": '<RECIPIENT_NAME>',
"email": '<RECIPIENT_EMAIL>' }],
"subject": '<EMAIL_SUBJECT>',
"body": '<EMAIL_BODY>'
}
)import com.nylas.NylasClient
val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>')
val recipients = listOf(EmailName('<RECIPIENT_EMAIL>', '<RECIPIENT_NAME>'))
val requestBody = SendMessageRequest.Builder(recipients)
.subject('<EMAIL_SUBJECT>')
.body('<EMAIL_BODY>')
.build()
val emailResponse = nylas.messages().send('<USER_GRANT_ID>', requestBody)curl --request POST \
--url "api.nylas.com/${<USER_GRANT_ID>}/messages/send" \
--header "Authorization: Bearer ${NYLAS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{
"subject": "<EMAIL_SUBJECT>",
"body": "<EMAIL_BODY>",
"to": [{"name": "<RECIPIENT_NAME>",
"email": "<RECIPIENT_EMAIL>"}]
}'Send a Calendar Event invite on behalf of your user
import Nylas from 'nylas';
const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' });
const event = await nylas.events.create({
identifier: <USER_GRANT_ID>
requestBody: {
title: '<EVENT_TITLE>',
when: { startTime: '<START_TIME>', endTime: '<END_TIME>' },
location: '<EVENT_LOCATION>'
},
queryParams: { calendarId: '<USER_CALENDAR_ID>' }
});require 'nylas'
nylas = Nylas::Client.new(api_key: '<NYLAS_API_KEY>')
event, _ = nylas.events.create(
identifier: '<USER_GRANT_ID>',
query_params: { calendar_id: '<USER_CALENDAR_ID>' },
request_body: {
title: '<EVENT_TITLE>',
when: { start_time: '<START_TIME>', end_time: '<END_TIME>' },
participants: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>', status: '<REPLY_STATUS>' }]
}
)from nylas import Client
nylas = Client(api_key='<NYLAS_API_KEY>')
event = nylas.events.create(
'<USER_GRANT_ID>',
request_body={
"title": '<EVENT_TITLE>',
"when": {"start_time": '<START_TIME>', "end_time": '<END_TIME>'},
"participants": [{"email": '<RECIPIENT_EMAIL>', "name": '<RECIPIENT_NAME>'}],
},
query_params={"calendar_id": '<USER_CALENDAR_ID>'}
)val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>')
val participants = listOf(CreateEventRequest.Participant(
'<RECIPIENT_EMAIL>', ParticipantStatus.NOREPLY, '<RECIPIENT_NAME>'))
val requestBody = CreateEventRequest(
timespan, '<EVENT_TITLE>', '<EVENT_LOCATION>',
"Discuss project timeline and milestones", participants)
val queryParams = CreateEventQueryParams('<USER_CALENDAR_ID>')
val response = nylas.events().create('<USER_GRANT_ID>', requestBody, queryParams)curl --request POST \
--url "api.nylas.com/${<USER_GRANT_ID>}/events?calendar_id=${<USER_CALENDAR_ID>}" \
--header "Authorization: Bearer ${<NYLAS_API_KEY>}" \
--header "Content-Type: application/json" \
--data '{
"title": "<EVENT_TITLE>",
"when": {"start_time": "<START_TIME>", "end_time": "<END_TIME>"},
"participants": [ {"email": "<RECIPIENT_EMAIL>", "name": "<RECIPIENT_NAME>"}]
}'Create a new Contact on behalf of your user
const nylas = new Nylas({ apiKey: process.env.<NYLAS_API_KEY> });
const contact = await nylas.contacts.create({
identifier: <USER_GRANT_ID>
requestBody: {
givenName: '<CONTACT_GIVEN_NAME>',
surname: '<CONTACT_SURNAME>',
emails: [{ email: '<CONTACT_EMAIL>', type: '<EMAIL_TYPE>' }],
phoneNumbers: [{ number: '<CONTACT_PHONE_NUMBER>', type: '<PHONE_TYPE>' }],
companyName: '<COMPANY_NAME>'
}
});nylas = Nylas::Client.new(api_key: '<NYLAS_API_KEY>')
request_body = {
given_name: '<CONTACT_GIVEN_NAME>',
surname: '<CONTACT_SURNAME>',
emails: [{ email: '<CONTACT_EMAIL>', type: '<EMAIL_TYPE>' }],
phone_numbers: [{ number: '<CONTACT_PHONE_NUMBER>', type: '<PHONE_TYPE>' }],
}
contact, _ = nylas.contacts.create(identifier: '<USER_GRANT_ID>', request_body: request_body )nylas = Client(api_key='<NYLAS_API_KEY>')
contact = nylas.contacts.create(
<USER_GRANT_ID>
request_body={
"given_name": '<CONTACT_SURNAME>',
"surname": '<CONTACT_SURNAME>',
"emails": [{"email":'<CONTACT_EMAIL>', "type": '<EMAIL_TYPE>'}],
"phone_numbers": [{"number": '<CONTACT_PHONE_NUMBER>', "type": '<PHONE_TYPE>'}],
"company_name": '<COMPANY_NAME>'
}
)val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>')
val contactRequest = CreateContactRequest.Builder()
.givenName('<CONTACT_GIVEN_NAME>')
.surname('<CONTACT_SURNAME>')
.emails('<CONTACT_EMAIL>')
.phoneNumbers('<CONTACT_PHONE_NUMBER>')
.companyName('<COMPANY_NAME>')
.jobTitle('<JOB_TITLE>')
.build()
val contact = nylas.contacts().create('<USER_GRANT_ID>', contactRequest)curl --request POST \
--url "api.us.nylas.com/${USER_GRANT_ID}/contacts" \
--data '{
"given_name": "<CONTACT_GIVEN_NAME>",
"surname": "<CONTACT_SURNAME>",
"emails": [{"email": "<CONTACT_EMAIL>", "type": "<EMAIL_TYPE>"}],
"phone_numbers": [{"number": "<CONTACT_PHONE_NUMBER>", "type": "<PHONE_TYPE>"}],
"company_name": "<COMPANY_NAME>",
"job_title": "<JOB_TITLE>"
}'Create a Event Scheduler on behalf of your user
import React from 'react';
import { NylasScheduling } from "@nylas/react";
function MeetingBooker() {
// Displays a Calendar scheduler component that
// lets users choose from open meeting slots
return (
<NylasScheduling configurationId={"<SCHEDULER_CONFIG_ID>"} />
);
}
export default MeetingBooker;Invite Notetaker to join meetings
curl --request POST \
--url "https://api.us.nylas.com/v3/grants/{email}/notetakers" \
--header "Authorization: Bearer {NYLAS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{
"meeting_link": "<MEETING_URL>",
"notetaker_name": "<NOTETAKER_NAME>"
}'
The most comprehensive Email capabilities
Everything from sending and syncing to parsing and intelligence, all through one API built for scale.
Designed for developers who need reliable performance, robust data handling, and the flexibility to build custom email solutions without the maintenance burden.
import Nylas from 'nylas';
const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' });
const sentMessage = await nylas.messages.send({
identifier: <USER_GRANT_ID>
requestBody: {
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }],
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>'
}
});
require 'nylas'
nylas = Nylas::Client.new(api_key: "<NYLAS_API_KEY>")
request_body = {
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>',
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }]
}
email, response = nylas.messages.send('<USER_GRANT_ID>', request_body)
from nylas import Client
nylas = Client(api_key='<NYLAS_API_KEY>')
message = nylas.messages.send(
'<USER_GRANT_ID>',
request_body={
"to": [{ "name": '<RECIPIENT_NAME>',
"email": '<RECIPIENT_EMAIL>' }],
"subject": '<EMAIL_SUBJECT>',
"body": '<EMAIL_BODY>'
}
)
import com.nylas.NylasClient
val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>')
val recipients = listOf(EmailName('<RECIPIENT_EMAIL>', '<RECIPIENT_NAME>'))
val requestBody = SendMessageRequest.Builder(recipients)
.subject('<EMAIL_SUBJECT>')
.body('<EMAIL_BODY>')
.build()
val emailResponse = nylas.messages().send('<USER_GRANT_ID>', requestBody)
curl --request POST \
--url "api.nylas.com/${<USER_GRANT_ID>}/messages/send" \
--header "Authorization: Bearer ${NYLAS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{
"subject": "<EMAIL_SUBJECT>",
"body": "<EMAIL_BODY>",
"to": [{"name": "<RECIPIENT_NAME>",
"email": "<RECIPIENT_EMAIL>"}]
}'
Attain higher deliverability by using contextual send.
Control all elements of your email data to make it AI-ready
Industry-leading Calendar functionality
Create, sync, and manage events across every major calendar provider with real-time updates, availability insights, and seamless scheduling experiences — all powered by one unified API.
Ready-to-use Scheduler that gives you
industry-leading scheduling right in your application
Powerful Notetaking, right out of the box.
Record, transcribe, and analyze calls in real time. Nylas delivers clean, normalized meeting data ready for summaries, insights, and downstream automation.
Notetaker Calendar Sync
(So that your Notetaker shows up when you want and where you want)
We handle the hard stuff, OAuth, integrations, and normalization.
Connecting to Google and Microsoft OAuth is notoriously painful. Nylas walks you through it, manages tokens, and abstracts away provider differences — giving you one API to access email, calendar, and conferencing data across every major platform.
to handle authentication, synchronization, and data normalization across 250+ providers , freeing them to build world-class applications with speed and precision.
Handle OAuth across hundreds of providers with zero friction.
SOC 2–compliant infrastructure built to scale with your app.
Get up and running in minutes. One install, one API call, and you’re building.
Stay in sync with every event in real time, no polling, no complexity.
Monitor, manage, and test your integrations , all in one place.
Prototype safely and test confidently before going live.
import Nylas from 'nylas';
const nylas = new Nylas({ apiKey: '<NYLAS_API_KEY>' });
const sentMessage = await nylas.messages.send({
identifier: <USER_GRANT_ID>
requestBody: {
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }],
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>'
}
});
require 'nylas'
nylas = Nylas::Client.new(api_key: "<NYLAS_API_KEY>")
request_body = {
subject: '<EMAIL_SUBJECT>',
body: '<EMAIL_BODY>',
to: [{ name: '<RECIPIENT_NAME>', email: '<RECIPIENT_EMAIL>' }]
}
email, response = nylas.messages.send('<USER_GRANT_ID>', request_body)
from nylas import Client
nylas = Client(api_key='<NYLAS_API_KEY>')
message = nylas.messages.send(
'<USER_GRANT_ID>',
request_body={
"to": [{ "name": '<RECIPIENT_NAME>',
"email": '<RECIPIENT_EMAIL>' }],
"subject": '<EMAIL_SUBJECT>',
"body": '<EMAIL_BODY>'
}
)
import com.nylas.NylasClient
val nylas = NylasClient(apiKey = '<NYLAS_API_KEY>')
val recipients = listOf(EmailName('<RECIPIENT_EMAIL>', '<RECIPIENT_NAME>'))
val requestBody = SendMessageRequest.Builder(recipients)
.subject('<EMAIL_SUBJECT>')
.body('<EMAIL_BODY>')
.build()
val emailResponse = nylas.messages().send('<USER_GRANT_ID>', requestBody)
curl --request POST \
--url "api.nylas.com/${<USER_GRANT_ID>}/messages/send" \
--header "Authorization: Bearer ${NYLAS_API_KEY}" \
--header "Content-Type: application/json" \
--data '{
"subject": "<EMAIL_SUBJECT>",
"body": "<EMAIL_BODY>",
"to": [{"name": "<RECIPIENT_NAME>",
"email": "<RECIPIENT_EMAIL>"}]
}'
API transactions and 200TB of data processed daily.
historical uptime for Nylas services.
Get your feature launched into production 2x faster.
Our enterprise-grade security is backed by compliance with industry-leading standards.
Get your API key and start integrating communications into your app in minutes.
Trusted by 1000+ companies
“Adding bi-directional email sync provides our users with a way to increase their productivity within the Crunchbase platform [while encouraging upsells to a new pricing tier with premium features]”
“One of the advantages of integrating with Nylas was how straightforward it was to sync contacts across multiple service providers and regardless of which version of Exchange our customers use.”
“We have millions of emails sent each week. Nylas frees us up to focus on delivering new features to our customers and working with our data science team on exciting new projects.”
“By partnering with Nylas we were able to solve technical obstacles that would’ve taken us a lot longer on our own and required a much larger investment of resources.”
“Nylas accelerated our timelines for moving forward because they provided a clear solution to meet our challenges. We were able to springboard out of the vision stage and dive into the execution sprint.”
“One of the top three reasons our customers churned was email deliverability. Nylas solved a critical problem for us overnight. We went from close to 0% to nearly 100% deliverability.”