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
5. Web
Application Authentication
A. Evernote
Markup Language (ENML)
B. Evernote
Recognition Index XML Format
C.1.3. Matching Core Note Properties
C.1.5. Advanced Content Matching
C.2.1. Absolute Date/Time Arguments
C.2.2. Relative Date Arguments
C.4. Formal USER Search Grammar
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.
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: