evernote-common-errors
Identify and fix common Evernote API exceptions like EDAMUserException or rate limit errors.
Install
mkdir -p .claude/skills/evernote-common-errors && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/5975" && unzip -o skill.zip -d .claude/skills/evernote-common-errors && rm skill.zipInstalls to .claude/skills/evernote-common-errors
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Diagnose and fix common Evernote API errors.Key capabilities
- →Classify EDAMUserException, EDAMSystemException, and EDAMNotFoundException
- →Validate ENML content structure
- →Implement rate limit retry logic
- →Handle missing GUIDs gracefully
- →Centralize error handling logic
How it works
It categorizes API exceptions and provides utility functions to validate ENML, handle rate limits with backoff, and safely retrieve notes.
Inputs & outputs
When to use evernote-common-errors
- →Troubleshoot API authentication errors
- →Fix invalid ENML formatting issues
- →Handle Evernote rate limit exceptions
- →Resolve note creation permission errors
About this skill
Evernote Common Errors
Overview
Comprehensive guide to diagnosing and resolving Evernote API errors. Evernote uses three exception types: EDAMUserException (client errors), EDAMSystemException (server/rate limit errors), and EDAMNotFoundException (invalid GUIDs).
Prerequisites
- Basic Evernote SDK setup
- Understanding of Evernote data model
Instructions
EDAMUserException Error Codes
| Code | Name | Cause | Fix |
|---|---|---|---|
| 1 | BAD_DATA_FORMAT | Invalid ENML, missing DOCTYPE | Validate ENML before sending; check for forbidden elements |
| 2 | DATA_REQUIRED | Missing required field (title, content) | Ensure note.title and note.content are set |
| 3 | PERMISSION_DENIED | API key lacks permissions | Request additional permissions from Evernote |
| 4 | INVALID_AUTH | Invalid or revoked token | Re-authenticate user via OAuth |
| 5 | AUTH_EXPIRED | Token past expiration date | Check edam_expires, refresh token |
| 6 | LIMIT_REACHED | Account limit exceeded (250 notebooks) | Clean up resources before creating new ones |
| 7 | QUOTA_REACHED | Monthly upload quota exceeded | Check user.accounting.remaining |
ENML Validation
The most common error is BAD_DATA_FORMAT from invalid ENML. Validate before sending:
function validateENML(content) {
const errors = [];
if (!content.includes('<?xml version="1.0"')) errors.push('Missing XML declaration');
if (!content.includes('<!DOCTYPE en-note')) errors.push('Missing DOCTYPE');
if (!content.includes('<en-note>')) errors.push('Missing <en-note> root');
const forbidden = [/<script/i, /<form/i, /<iframe/i, /<input/i];
forbidden.forEach(p => { if (p.test(content)) errors.push(`Forbidden: ${p.source}`); });
if (/\s(class|id|onclick)=/i.test(content)) errors.push('Forbidden attributes');
return { valid: errors.length === 0, errors };
}
EDAMSystemException Handling
Rate limit errors include rateLimitDuration (seconds to wait). Maintenance errors should be retried with progressive backoff.
async function withRetry(operation, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await operation();
} catch (error) {
if (error.rateLimitDuration) {
await new Promise(r => setTimeout(r, error.rateLimitDuration * 1000));
continue;
}
throw error;
}
}
}
EDAMNotFoundException Handling
Thrown when a GUID does not exist (deleted note, wrong user, invalid format). Handle gracefully by returning null instead of throwing.
async function safeGetNote(noteStore, guid) {
try {
return await noteStore.getNote(guid, true, false, false, false);
} catch (error) {
if (error.identifier === 'Note.guid') return null;
throw error;
}
}
Error Handler Service
Build a centralized error handler that classifies exceptions and returns structured results with type, code, action, and recoverable flags. See Implementation Guide for the complete EvernoteErrorHandler class.
Output
- Error code reference table for all
EDAMUserExceptioncodes - ENML validation utility that catches common content errors
- Rate limit retry with
rateLimitDurationhandling - Safe getter pattern for
EDAMNotFoundException - Centralized
EvernoteErrorHandlerservice class
Error Handling
| Exception | When Thrown | Recovery |
|---|---|---|
EDAMUserException | Client error (invalid input, permissions) | Fix input or re-authenticate |
EDAMSystemException | Server error (rate limits, maintenance) | Wait and retry |
EDAMNotFoundException | Resource not found (invalid GUID) | Verify GUID, check trash |
Resources
Next Steps
For debugging tools and techniques, see evernote-debug-bundle.
Examples
ENML debugging: Note creation fails with BAD_DATA_FORMAT. Run validateENML() on the content to identify missing DOCTYPE, unclosed tags, or forbidden elements like <script>.
Token refresh flow: API call returns AUTH_EXPIRED (code 5). Check stored edam_expires timestamp, redirect user to OAuth re-authorization, store new token with updated expiration.
Prerequisites
Limitations
- →Requires understanding of Evernote data model
- →ENML validation is limited to predefined forbidden elements
How it compares
This skill provides specific code patterns for handling Evernote-specific exceptions rather than generic try-catch blocks.
Compared to similar skills
evernote-common-errors side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| evernote-common-errors (this skill) | 1 | 27d | No flags | Intermediate |
| n8n-expression-syntax | 6 | 4mo | No flags | Beginner |
| claude-in-chrome-troubleshooting | 2 | 2mo | Review | Intermediate |
| openrouter-common-errors | 3 | 27d | Caution | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
n8n-expression-syntax
czlonkowski
Validate n8n expression syntax and fix common errors. Use when writing n8n expressions, using {{}} syntax, accessing $json/$node variables, troubleshooting expression errors, or working with webhook data in workflows.
claude-in-chrome-troubleshooting
trailofbits
Diagnose and fix Claude in Chrome MCP extension connectivity issues. Use when mcp__claude-in-chrome__* tools fail, return "Browser extension is not connected", or behave erratically.
openrouter-common-errors
jeremylongshore
Execute diagnose and fix common OpenRouter API errors. Use when troubleshooting failed requests. Trigger with phrases like 'openrouter error', 'openrouter not working', 'openrouter 401', 'openrouter 429', 'fix openrouter'.
linear-common-errors
jeremylongshore
Diagnose and fix common Linear API errors. Use when encountering Linear API errors, debugging integration issues, or troubleshooting authentication problems. Trigger with phrases like "linear error", "linear API error", "debug linear", "linear not working", "linear authentication error".
gamma-common-errors
jeremylongshore
Debug and resolve common Gamma API errors. Use when encountering authentication failures, rate limits, generation errors, or unexpected API responses. Trigger with phrases like "gamma error", "gamma not working", "gamma API error", "gamma debug", "gamma troubleshoot".
groq-common-errors
jeremylongshore
Diagnose and fix Groq common errors and exceptions. Use when encountering Groq errors, debugging failed requests, or troubleshooting integration issues. Trigger with phrases like "groq error", "fix groq", "groq not working", "debug groq".