EV

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.zip

Installs 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.
44 charsno explicit “when” trigger
Intermediate

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

You give it
Evernote API exception
You get back
Classified error type and recovery action

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

CodeNameCauseFix
1BAD_DATA_FORMATInvalid ENML, missing DOCTYPEValidate ENML before sending; check for forbidden elements
2DATA_REQUIREDMissing required field (title, content)Ensure note.title and note.content are set
3PERMISSION_DENIEDAPI key lacks permissionsRequest additional permissions from Evernote
4INVALID_AUTHInvalid or revoked tokenRe-authenticate user via OAuth
5AUTH_EXPIREDToken past expiration dateCheck edam_expires, refresh token
6LIMIT_REACHEDAccount limit exceeded (250 notebooks)Clean up resources before creating new ones
7QUOTA_REACHEDMonthly upload quota exceededCheck 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 EDAMUserException codes
  • ENML validation utility that catches common content errors
  • Rate limit retry with rateLimitDuration handling
  • Safe getter pattern for EDAMNotFoundException
  • Centralized EvernoteErrorHandler service class

Error Handling

ExceptionWhen ThrownRecovery
EDAMUserExceptionClient error (invalid input, permissions)Fix input or re-authenticate
EDAMSystemExceptionServer error (rate limits, maintenance)Wait and retry
EDAMNotFoundExceptionResource 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

Basic Evernote SDK setupUnderstanding of Evernote data model

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.

SkillInstallsUpdatedSafetyDifficulty
evernote-common-errors (this skill)127dNo flagsIntermediate
n8n-expression-syntax64moNo flagsBeginner
claude-in-chrome-troubleshooting22moReviewIntermediate
openrouter-common-errors327dCautionIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

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.

6111

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.

211

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'.

39

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".

16

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".

12

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".

12

Search skills

Search the agent skills registry