Evernote Hello World
Overview
Create your first Evernote note using the Cloud API, demonstrating ENML format and NoteStore operations.
Prerequisites
- Completed
evernote-install-authsetup - Valid access token (OAuth or Developer Token for sandbox)
- Development environment ready
Instructions
Step 1: Create Entry File
Initialize an authenticated Evernote client. Use a Developer Token for sandbox or an OAuth access token for production.
// hello-evernote.js
const Evernote = require('evernote');
const client = new Evernote.Client({
token: process.env.EVERNOTE_ACCESS_TOKEN,
sandbox: true // false for production
});
Step 2: Understand ENML Format
Evernote uses ENML (Evernote Markup Language), a restricted XHTML subset. Every note must include the XML declaration, DOCTYPE, and <en-note> root element. Forbidden elements include <script>, <form>, <iframe>. Only inline styles are allowed (no class or id attributes).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
<h1>Note Title</h1>
<p>Content goes here</p>
<en-todo checked="false"/> A task item
</en-note>
Step 3: Create Your First Note
Build ENML content and call noteStore.createNote(). The returned object contains the guid, title, and created timestamp.
async function createHelloWorldNote() {
const noteStore = client.getNoteStore();
const content = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
<h1>Hello from Claude Code!</h1>
<p>Created at: ${new Date().toISOString()}</p>
</en-note>`;
const note = new Evernote.Types.Note();
note.title = 'Hello World - Evernote API';
note.content = content;
const createdNote = await noteStore.createNote(note);
console.log('Note GUID:', createdNote.guid);
return createdNote;
}
Step 4: List Notebooks and Retrieve Notes
Use listNotebooks() to enumerate notebooks and getNote() with boolean flags to control what data is returned (content, resources, recognition, alternate data).
const noteStore = client.getNoteStore();
// List all notebooks
const notebooks = await noteStore.listNotebooks();
notebooks.forEach(nb => console.log(`- ${nb.name} (${nb.guid})`));
// Retrieve a note with content
const note = await noteStore.getNote(noteGuid, true, false, false, false);
console.log('Title:', note.title);
For the complete working example with Python SDK, todo lists, and a combined workflow, see Implementation Guide.
Output
- Working code file with Evernote client initialization
- Successfully created note in your Evernote account
- Console output with note GUID and confirmation
Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| EDAMUserException: BAD_DATA_FORMAT | Invalid ENML content | Validate against ENML DTD; ensure XML declaration and DOCTYPE |
| EDAMNotFoundException | Note or notebook not found | Check GUID is correct and note is not in trash |
| EDAMSystemException: RATE_LIMIT_REACHED | Too many requests | Wait for rateLimitDuration seconds before retrying |
| Missing DOCTYPE | ENML missing required header | Add <?xml ...?> and <!DOCTYPE ...> before <en-note> |
Resources
Next Steps
Proceed to evernote-local-dev-loop for development workflow setup.
Examples
Sandbox test: Create a note using a Developer Token with sandbox: true, verify it appears in your sandbox account at sandbox.evernote.com.
Production note: Switch to OAuth access token, set sandbox: false, create a note in a specific notebook using note.notebookGuid.