Evernote API Overview

 

 

Version 1.12

 

March 17, 2009

 

 

 

 

 


Revision History

 

Date

Ver

Author

Changes Summary

6/4/08

0.1

Dave Engberg

Principal author / editor

9/18/08

1.10

Dave Engberg

Added OAuth web application documentation

10/27/08

1.10.1

Dave Engberg

Updated Formal EBNF grammar for parsing search expressions

12/4/08

1.11

Dave Engberg

Added changes to API key management in client authentication

3/17/09

1.12

Dave Engberg

Update test server host name


 

 

 

Table of Contents

 

1.     Background. 4

2.     EDAM API Overview.. 5

3.     EDAM Data Model 7

3.1.      User 8

3.2.      Accounting. 8

3.3.      Notebook. 8

3.4.      Note. 9

3.5.      Resource. 10

3.6.      Tag. 10

3.7.      SavedSearch.. 11

4.     UserStore. 12

5.     Web Application Authentication.. 13

6.     NoteStore. 16

7.     API Usage Example. 18

A.    Evernote Markup Language (ENML) 20

A.1.     EN-NOTE.. 21

A.2.     EN-MEDIA.. 21

A.3.     EN-CRYPT. 21

A.4.     EN-TODO.. 22

A.5.     ENML Example. 22

B.    Evernote Recognition Index XML Format 23

C.    Evernote Search Grammar 24

C.1.     Search Terms. 24

C.1.1.      Scope modifiers. 24

C.1.2.      Matching literal terms. 25

C.1.3.      Matching Core Note Properties. 26

C.1.4.      Attribute Matching. 28

C.1.5.      Advanced Content Matching. 30

C.2.     Date/Time Arguments. 30

C.2.1.      Absolute Date/Time Arguments. 30

C.2.2.      Relative Date Arguments. 31

C.3.     Examples. 31

C.4.     Formal USER Search Grammar 32

 


1.        Background

 

Evernote is a service that allows you to easily capture information in any environment using whatever device or platform you find most convenient, and makes this information accessible and searchable at any time, from anywhere.  Evernote’s goal is ubiquitous access:  users should have a wide variety of ways to create and access their memories.

 

Evernote’s accessibility is based on an Application Programming Interface (API) called the Evernote Data Access and Management (EDAM) protocol.  EDAM allows secure access to account data via standard web protocols.  This API is used internally by all of Evernote’s own client applications, and we’ve made this available for third-party developers to integrate into their applications.

 

EDAM is designed to support both “thick” applications, such as stateful desktop clients which maintain a full local copy of user data, and “thin” applications, such as web services that only need to access a small amount of current information at a given time.  These cases vary a bit in how they securely authenticate the user, but they share a common set of interfaces to use once authentication is completed.

 

For example, this API could be used by a Linux note-taking application to provide central, secure data storage that synchronizes to Evernote, or it could be used by a PHP web service that links calendaring events with Evernote notes.

 

This document provides an introduction to the EDAM API for use by third party developers who wish to integrate with Evernote.  This assumes a fairly technical background, so may not be particularly readable for non-programmers.

 


2.        EDAM Overview

 

The EDAM API is made of two parts:  a data model, which expresses the types of information that are managed by the Evernote service, and a set of remote procedures that retrieve information from the service or request changes to the data.

 

Both of these are expressed externally via the Thrift service definition language, which originated at Facebook but is now in incubation at Apache (http://incubator.apache.org/thrift/). Evernote uses Thrift to specify the EDAM data structures and procedures using a simple Interface Definition Language, which can then be compiled down to language-specific interfaces for a wide variety of different programming platforms (Java, PHP, C/C++, Cocoa, Perl, C#, Ruby, etc.).  Thrift achieves similar goals to a number of other RPC systems like SOAP, XML-RPC, CORBA, ICE, etc., but Thrift offers a light-weight solution that supports a wide variety of platforms with good performance for the type of large binary data being used by Evernote.  Evernote is able to use generated code from Thrift to provide language-specific internal client interfaces for Java service components, Win32/WinCE C++ clients, OS X Objective-C Cocoa clients, and Java Mobile phones.  We recommend Facebook’s Thrift Whitepaper for a quick introduction to the goals and design of Thrift.

 

EDAM’s remote procedures are divided into two remote services:  the UserStore service, which is used by local applications to authenticate users, and the NoteStore, which authorized applications use to access and change data in user accounts.  EDAM clients communicate with these two services as shown in the following diagram: