- Products
- Solutions Use casesBy industry
- Developers
- Resources Connect
- Pricing
The Nylas Calendar API power the world’s leading software applications with full features and sync from Google Calendar and every other calendar provider.
With a few lines of code, build calendar CRUD capabilities and bi-directional sync.
See the docsNode.js
Ruby
Python
Java
Curl
const events = await nylas.events.list({
identifier: 1,
queryParams: {
calendarId: 2
}
})
require 'nylas'
nylas = Nylas::Client.new(api_key: 'API_KEY')
query_params = { limit: 5 }
messages, _ = nylas.messages.list(identifier: '<GRANT_ID>', query_params: query_params)
messages.each {|message|
puts "[#{Time.at(message[:date]).strftime("%d/%m/%Y at %H:%M:%S")}] \
#{message[:subject]}"
}
events = nylas.events.list(
grant_id,
query_params={
"calendar_id": 1
}
)
import com.nylas.NylasClient;
import com.nylas.models.*;
import java.text.SimpleDateFormat;
public class ReadInbox {
public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {
NylasClient nylas = new NylasClient.Builder("<API_KEY>").build();
ListMessagesQueryParams queryParams = new
ListMessagesQueryParams.Builder().limit(5).build();
ListResponse<Message> message = nylas.messages().list("<GRANT_ID>", queryParams);
for(Message email : message.getData()) {
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
format(new java.util.Date((email.getDate() * 1000L)));
System.out.println("[" + date + "] | " + email.getSubject());
}
}
}
--url https://api.us.nylas.com/v3/grants/<GRANT_ID>/events
--header 'Accept: application/json' \
--header 'Authorization: Bearer <API_KEY_OR_ACCESS_TOKEN>' \
--header 'Content-Type: application/json'
Node.js
Ruby
Python
Java
Curl
const draft = new Draft.default(nylas, {
subject: "With Love, from Nylas",
body: "This email was sent using the Nylas email API.",
to: [{ name: "Nyla", email: "nyla@nylas.com" }],
});
const message = await draft.send();
require 'nylas'
nylas = Nylas::Client.new(api_key: "<API_KEY>")
# Call a list of calendars
calendars, _request_ids = nylas.calendars.list(identifier: "<GRANT_ID>", query_params: {limit: 5})
calendars.each {|calendar|
puts calendar
}
draft = nylas.drafts.create()
draft.subject = 'With Love, from Nylas'
draft.body = 'This email was sent using the Nylas email API.'
draft.to = [{'name': 'Nyla', 'email': 'nyla@nylas.com')}]
message = draft.send()
import com.nylas.NylasClient;
import com.nylas.models.*;
import java.util.List;
public class read_calendars {
public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {
NylasClient nylas = new NylasClient.Builder("<API_KEY>").build();
ListCalendersQueryParams listCalendersQueryParams = new
ListCalendersQueryParams.Builder().limit(5).build();
List<Calendar> calendars = nylas.calendars().list(dotenv.get("CALENDAR_ID"),
listCalendersQueryParams).getData();
for (Calendar calendar : calendars) {
System.out.println(calendar);
}
}
}
curl --request POST \
--url https://api.nylas.com/send \
--data '{
"subject": "From Nylas",
"to": [
{
"email": "nyla@nylas.com",
"name": "Nyla"
}
],
"from": [
{
"name": "Developer Relations",
"email": "devrel@nylas.com"
}
],
"body": "This email was sent using the Nylas email API.",
}'
Node.js
Ruby
Python
Java
Curl
const contact = new Contact(nylas);
contact.givenName = 'Nyla'
contact.birthday = '2014-06-01'
contact.companyName = 'Nylas'
contact.jobTitle = 'Communications Platform'
contact.officeLocation = 'San Francisco'
contact.notes = 'Check out the Nylas Email, Calendar, and Contacts APIs'
contact.emailAddresses = [new EmailAddress({
type: 'work', email: 'nyla@nylas.com'
})];
contact.save();
require 'nylas'
nylas = Nylas::Client.new(
api_key: “<API_KEY”
)
query_params = {
limit: 5
}
contacts, _ = nylas.contacts.list(identifier: ENV["GRANT_ID"], query_params: query_params)
contacts.each {|contact|
puts "Name: #{contact[:given_name]} #{contact[:surname]} | " \
"Email: #{contact[:emails][0][:email]} | ID: #{contact[:id]}"
}
contact = nylas.contacts.create()
contact.given_name = 'Nyla'
contact.office_location = 'San Francisco'
contact.company_name = 'Nylas'
contact.notes = 'Check out the Nylas Email, Calendar, and Contacts APIs'
contact.manager_name = 'Communications'
contact.job_title = 'Communications Platform'
contact.birthday = datetime(2014, 6, 1)
contact.emails['work'] = ['nyla@nylas.com']
contact.save()
import com.nylas.NylasClient;
import com.nylas.models.*;
public class ReadAllContacts {
public static void main(String[] args) throws
NylasSdkTimeoutError, NylasApiError {
NylasClient nylas = new NylasClient.Builder("<API_KEY>").build();
ListContactsQueryParams queryParams =
new ListContactsQueryParams.Builder().
limit(5).build();
ListResponse<Contact> contacts = nylas.contacts().list(dotenv.get("GRANT_ID"),
queryParams);
for(Contact contact : contacts.getData()){
assert contact.getEmails() != null;
System.out.printf("Name: %s | Email: %s | Id: %s%n",
contact.getGivenName(),
contact.getEmails().get(0).getEmail(),
contact.getId()
);
}
}
}
curl --request POST \
--url https://api.nylas.com/contacts \
--data '{
"birthday": "2014-06-01",
"company_name": "Nylas",
"emails": [
{
"email": "nyla@nylas.com",
"type": "work"
}
],
"given_name": "Nyla",
],
"job_title": "Nylas Mascot",
"phone_numbers": [
{
"number": "1 800 GO NYLAS",
"type": "business"
}
],
"web_pages": [
{
"type": "work",
"url": "nylas.com"
}
],
}'
Response
{
"request_id": "cbd60372-df33-41d3-b203-169ad5e3AAAA",
"data": [
{
"busy": true,
"calendar_id": "primary",
"conferencing": {
"details": {
"meeting_code": "ist-****-tcz",
"url": "https://meet.google.com/ist-****-tcz"
},
"provider": "Google Meet"
},
"created_at": 1701974804,
"creator": {
"email": "anna.molly@example.com",
"name": ""
},
"description": null,
"grant_id": "1e3288f6-124e-405d-a13a-635a2ee54eb2",
"hide_participants": false,
"html_link": "https://www.google.com/calendar/event?eid=NmE0dXIwabQAAAA",
"ical_uid": "6aaaaaaame8kpgcid6hvd0q@google.com",
"id": "6aaaaaaame8kpgcid6hvd",
"object": "event",
"organizer": {
"email": "anna.molly@example.com",
"name": ""
},
"participants": [
{
"email": "jenna.doe@example.com",
"status": "yes"
},
{
"email": "anna.molly@example.com",
"status": "yes"
}
],
"read_only": true,
"reminders": {
"overrides": null,
"use_default": true
},
"status": "confirmed",
"title": "Holiday check in",
"updated_at": 1701974915,
"when": {
"end_time": 1701978300,
"end_timezone": "America/Los_Angeles",
"object": "timespan",
"start_time": 1701977400,
"start_timezone": "America/Los_Angeles"
}
}
]
}
{
"type": "event.created2",
"data": {
"object": {
"busy": true,
"calendar_id": "mock-name%40nylas.com",
"created_at": 1234567890,
"description": "mock description",
"hide_participants": false,
"ical_uid": "mock_uids@google.com",
"id": "mock-data-id",
"object": "event",
"owner": "Mock Owner <mock_owner@example.com>",
"organizer": {
"name": "mock organizer name",
"email": "mock_email@example.com"
},
"participants": [
{
"email": "mockParticipantsA@example.com",
"name": "mockParticipantsA",
"status": "yes"
},
{
"email": "mockParticipantsB@example.comm",
"name": "mockParticipantsB",
"status": "noreply"
}
],
"read_only": false,
"reminders": null,
"status": "confirmed",
"title": "mock_title",
"updated_at": 1234567890,
"when": {
"start_time": 1234567890,
"start_timezone": "America/Edmonton",
"end_time": 1234567890,
"end_timezone": "America/Edmonton",
"object": "timespan"
}
}
}
}
{
"type": "event.created3",
"data": {
"object": {
"busy": true,
"calendar_id": "mock-name%40nylas.com",
"created_at": 1234567890,
"description": "mock description",
"hide_participants": false,
"ical_uid": "mock_uids@google.com",
"id": "mock-data-id",
"object": "event",
"owner": "Mock Owner <mock_owner@example.com>",
"organizer": {
"name": "mock organizer name",
"email": "mock_email@example.com"
},
"participants": [
{
"email": "mockParticipantsA@example.com",
"name": "mockParticipantsA",
"status": "yes"
},
{
"email": "mockParticipantsB@example.comm",
"name": "mockParticipantsB",
"status": "noreply"
}
],
"read_only": false,
"reminders": null,
"status": "confirmed",
"title": "mock_title",
"updated_at": 1234567890,
"when": {
"start_time": 1234567890,
"start_timezone": "America/Edmonton",
"end_time": 1234567890,
"end_timezone": "America/Edmonton",
"object": "timespan"
}
}
}
}
Receive real-time notifications to monitor events and trigger automated workflows.
Experiment with our API with pre-configured settings in the Nylas Dashboard.
Fast-track your integration with our Node.js, Ruby, Python, Java and Kotlin SDKs.
When integrating users’ Google Calendars into your app, there are a host of challenges the Nylas Calendar API solves for you, including:
Nylas provides search functionality that allows you to run full-text search proxied to the users’ Gmail accounts. Results are matched with objects that have been synced and then returned.
Webhooks allow you to receive notifications when certain events occur. They are easy to integrate with your app and scale seamlessly with your growth.
The reliability of the Nylas communication platform provides an integration that guarantees 99.9% uptime.
As your platform scales and your user base grows, so do costs for maintaining the Google Calendar integration directly, such as:
With Nylas, we manage the end-to-end integration for you. Our API comes out of the box with security certifications and helps expedite and ease the Google App submission process.
Security is our top priority — we sweat the small stuff so you don’t have to. Nylas adheres to SOC 2 Type II, GDPR, HIPAA BAA, HITECH, ISO 27001, and CCPA. Data from every calendar you sync is encrypted and isolated with multi-level permission checks.
Get your API key and connect up to 5 accounts for free.
The Google Calendar API enables developers to add full calendar data and functionality into their app using a REST interface or through one of the client libraries Google offers for languages like Java, Python, PHP, JavaScript, and more.
Before you can access a Google Calendar account, you will need to authenticate the account with the appropriate permissions. All Google APIs use OAuth 2.0 for account authentication and authorization, establishing a login process where your app negotiates with the Google Identity Platform to receive an access token for user accounts. This token provides limited access to user resources based on the scopes the user consented to as part of the authentication process.
Alternatively, Nylas Hosted Auth auto-detects Google accounts, even for domains other than gmail.com, and prompts users to sign in and accept the permissions your app needs. Your user’s credentials are stored safely on our SOC 2 Certified infrastructure, and Nylas provides an access token your app can use for Google Calendar data and functionality.
To integrate Google Calendar API with other apps or services, you must obtain your API credentials, choose a client library or create HTTP requests, and then write the code to authenticate and interact with the API. You can use various programming languages and tools, such as the Google API Client Libraries, OAuth 2.0, and REST APIs.
Yes, there are some limitations to the number of events or calendars you can access through the Google Calendar API. The specific limitations depend on the type of account you have and the type of API request you are making.
The Google Calendar API can be integrated using various programming languages like Java, Python, Ruby, PHP, and .NET. You must set up a Google Cloud Console project and obtain the necessary credentials to get started. Then, you can use the client libraries and code samples provided by Google to make API requests and interact with the calendar data.