Evernote recently announced that they will enforce API rate limits starting today (August 14, 2013). They don’t specify what the limits are but they say that a “reasonable use of the API should not cause an integration to hit the limit”.
Although this enforcement will only affect non-production applications for now, you should evaluate your code even if you have a production API integration, since rate limiting will also affect these applications starting November 1, 2013.
Limits will be associated with API consumer, user and time, so each user of your application will have their own API call limit. The API will report that a limit has been reached through the EDAMSystemException by issuing a value of RATE_LIMIT_REACHED and assigning a number of seconds to the rateLimitDuration attribute, informing the caller when another call can be made again.
In order to minimize the impact on UX, you should handle the rate limit condition with care. It’s preferable to not let the user know about the rate limit error and queue the offending and all subsequent calls until rateLimitDuration seconds have passed. Because most users don’t know about API rate limits, showing them that this condition happened might just confuse them.
The most affected applications will be the ones that periodically poll Evernote’s API for changes. If your application is built this way, you should consider moving to a much better alternative: webhooks. Evernote offers webhooks that will make an HTTP GET request to your application every time a user’s note is created or updated. Be aware that you’ll be notified whenever any user performs one of the actions described earlier.
Although Evernote’s webhook solution reduces the number of API calls, it could be further reduced if their webhook implementation followed these guidelines:
- Allow the programmatic creation and manipulation of webhook configuration, using the API itself;
- Offer webhooks per notebook, allowing fine-grained control of what information should be pushed out of Evernote;
- Instead of using HTTP GET to send the note ID, use HTTP POST and send the whole note on each webhook call.
So, get ready for reviewing your integration with Evernote, if you have one, and make sure you reduce the impact on your application UX.