Microsoft Exchange Email API integrations made easy

Seamlessly connect your application with Microsoft Exchange using the Nylas Email API.

  • Easily integrate with Microsoft Exchange email
  • Master Microsoft’s authentication and verification process
  • Effortlessly simplify complex email integrations with Nylas
For developers

Bypass Microsoft Exchange API email integration challenges with Nylas

With a few lines of code, build email CRUD capabilities and bi-directional sync.

See the docs

Node.js

Ruby

Python

Java

Curl

const messages = await nylas.messages.list({
  identifier,
  queryParams: {
    limit: 5,
  }
})
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]}"
}  
messages = nylas.messages.list(
  grant_id,
  query_params={
    "limit": 5
  }
)
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());
        }
    }
} 
curl --request GET \
  --url "https://api.us.nylas.com/v3/grants/GRANT_ID/messages?limit=5" \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <API_KEY_OR_ACCESS_TOKEN>' \
  --header 'Content-Type: application/json'  

Node.js

Ruby

Python

Java

Curl

const contact = new Contact(nylas);
// The following attributes can be modified for the contact object
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: '[email protected]'
})];
contact.save();
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 = '2014-06-01'
contact.emails = [
{
  type: 'work',
  email: '[email protected]'
}]
contact.save
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'] = ['[email protected]']
contact.save()
public class NylasExamples {
    public static void createContact() throws IOException, RequestFailedException {
        Contact contact = new Contact();
        
        contact.setGivenName("Nyla");
        contact.setNickname("Nylas");
        contact.setOfficeLocation("San Francisco");
        contact.setCompanyName("Nylas");
        contact.setNotes("Check out the Nylas Email, Calendar, and Contacts APIs");
        contact.setManagerName("Communications");
        contact.setJobTitle("Communications Platform");
        contact.setBirthday("2014-06-01");
        
        contact.setEmails(Arrays.asList(new Contact.Email("work", "[email protected]")));
        contact = account.contacts().create(contact);
    }
}
curl --request POST \
  --url https://api.nylas.com/contacts \
  --data '{
  "birthday": "2014-06-01",
  "company_name": "Nylas",
  "emails": [
    {
      "email": "[email protected]",
      "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": "d0c951b9-61db-4daa-ab19-cd44afeeabac",
    "data": [
        {
            "starred": false,
            "unread": true,
            "folders": [
                "UNREAD",
                "CATEGORY_PERSONAL",
                "INBOX"
            ],
            "grant_id": "1",
            "date": 1706811644,
            "attachments": [
                {
                    "id": "1",
                    "grant_id": "1",
                    "filename": "invite.ics",
                    "size": 2504,
                    "content_type": "text/calendar; charset=\"UTF-8\"; method=REQUEST"
                },
                {
                    "id": "2",
                    "grant_id": "1",
                    "filename": "invite.ics",
                    "size": 2504,
                    "content_type": "application/ics; name=\"invite.ics\"",
                    "is_inline": false,
                    "content_disposition": "attachment; filename=\"invite.ics\""
                }
            ],
            "from": [
                {
                    "name": "Nylas DevRel",
                    "email": "[email protected]"
                }
            ],
            "id": "1",
            "object": "message",
            "snippet": "Send Email with Nylas APIs",
            "subject": "Learn how to Send Email with Nylas APIs",
            "thread_id": "1",
            "to": [
                {
                    "name": "Nyla",
                    "email": "[email protected]"
                }
            ],
            "created_at": 1706811644,
            "body": "Learn how to send emails using the Nylas APIs!"
        }
    ],
    "next_cursor": "123"
}
{
    "type": "event.created3",
    "data": {
      "object": {
        "busy": true,
        "calendar_id": "mock-name%40nylas.com",
        "created_at": 1234567890,
        "description": "mock description",
        "hide_participants": false,
        "ical_uid": "[email protected]",
        "id": "mock-data-id",
        "object": "event",
        "owner": "Mock Owner <[email protected]>",
        "organizer": {
          "name": "mock organizer name",
          "email": "[email protected]"
        },
        "participants": [
          {
            "email": "[email protected]",
            "name": "mockParticipantsA",
            "status": "yes"
          },
          {
            "email": "[email protected]",
            "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"
        }
      }
    }
  }  
 

Webhooks

Receive real-time notifications to monitor events and trigger automated workflows.

Sandbox environment

Experiment with our API with pre-configured settings in the Nylas Dashboard.

SDKs

Fast-track your integration with our Node.js, Ruby, Python, Java and Kotlin SDKs.

Nylas abstracts away the complexity of Microsoft Exchange Protocols

With Nylas, you can build a full create, read, update, delete (CRUD) and bi-directional integration between your app and 100% of email service providers with just a few lines of code.

Application integration

Circumvent working with proprietary protocols

Nylas handles the complexities of EWS, EAS, and binary xml for you.

Access real-time user’s inbox data

Ensures the latest conversation history is available in real-time — both in your application and your users’ email client.

Create, read, update, and delete any email

Unlock full email CRUD capabilities in your application with every synced account.

Email deliverability

99.9% email deliverability even at scale

Users can send emails from your app that land in the inbox, not in SPAM.

Track open rates, link clicks and replies all within your application.

Rich insights into every email send

Embed scheduling instantly from any calendar
Costs of building with the Microsoft Exchange API vs. the Nylas APIs

As your platform scales and your user base grows, so do costs for maintaining a custom Microsoft integration. These costs include:

  • Operating servers
  • Onboarding and training teams to specialize in EAS/EWS
  • Supporting the integration and troubleshooting bugs
  • Spending time specializing in EWS, EAS, and other protocols
  • Pursuing and maintaining compliance certifications

With Nylas, none of these costs apply — we manage servers, specialization, security certifications, and provide world-class support SLAs.

Calculate your savings with the Nylas APIs
With Nylas, everything is secure. everything is connected.

Security is our top priority — we sweat the small stuff so you don’t have to. Nylas is SOC 2 Certified, Privacy Shield certified, GDPR compliant, and HIPAA-ready. Data from every email you sync is encrypted and isolated with multi-level permission checks.

  • World-class security certifications
  • Token management
  • Whitelisted IPs
  • Data encryption
  • Granular authentication scopes
  • Gated permission checks
Download the Security Whitepaper
Frequently Asked Questions

What is the Microsoft Exchange Email API?

Microsoft’s Exchange Web Services (EWS) provides an Exchange email API that provides access to all of the data and functionality in Exchange mailboxes. It enables developers to parse email data, create email drafts, send emails, manage attachments, and organize an email inbox with folders. EWS offers a direct SOAP implementation and C# client library that provides full access to user accounts in Exchange Online, Exchange Online as part of Office 365, and Exchange server inboxes.

How do I get started integrating with the Microsoft Exchange Email API?

If you’re looking to integrate Exchange inboxes directly into your app, check out this post that details the major aspects of the Exchange Email API and explains what it takes to integrate Exchange inboxes. It also demonstrates how the Nylas Email API abstracts away much of the complexity of building a direct integration with the Exchange email API to enable you to build your calendar integration much more quickly and efficiently.

How do I integrate Microsoft Exchange Email API with other apps or services?

When integrating Microsoft Exchange Email API with other apps or services, you can obtain API credentials, choose an integration method such as Microsoft Graph API, Exchange Web Services, or Exchange ActiveSync, implement the integration, test and debug your code, deploy it to production and monitor it. Alternatively, you can also consider using Nylas, which offers a unified email API solution for Microsoft Exchange, Gmail, and other email providers.

Is there any limitation to the number of events or calendars I can access through the Microsoft Exchange Email API?

Yes, there are limitations to the number of events or calendars that can be accessed through the Microsoft Exchange Email API. The specific limitations depend on the API version and the licensing plan you have subscribed to. 

What programming languages can I use to integrate the Microsoft Exchange Email API?

Microsoft provides libraries and SDKs for several programming languages that can be used to integrate the Microsoft Exchange Email API, including C#, Java, JavaScript, Python, and Ruby. 

Ready to start building?

Unlock your key API and sync up to 5 accounts