I’ve seen that the export call has a 1 minute rate limit, which is helpful. But I don’t see anywhere documented what the other limits are. Specially if I want to create a bunch of items or do other operations it would be extremely helpful to know which endpoint has how many requests per what time frame before triggering the rate limit. This way I can already code my application to follow those limits and not just hit it then retry forever.
I’ve done some gentle testing. From what I see happening my conclusion is as follows:
The WorkFlowy API uses a bucket-based rate limit:
- Each **bucket** is **60 seconds** long.
- Within a bucket, you can make **60 requests**.
- If you exceed the limit, the API returns **HTTP 429** with a message indicating how long until the current bucket resets and you can make requests again. Like this: {“error”: “Rate limit exceeded”, “retry_after”: 31}
- Because buckets are fixed time windows (not sliding windows), up to **120 requests** can succeed within ~20 seconds if timed across a bucket boundary — 60 at the end of one bucket plus 60 at the start of the next.
- The `/nodes-export` endpoint has a stricter limit of **1 request per bucket**.
All endpoints share this rate limit.
Maybe someone can official confirm this or not, this is just my best guess from about 500 requests I made over the last 2 hours.
I got my delay between requests set to 300ms and kept hitting the limit quite random. Your post saved me a lot of trouble. Thank you!
Glad I could be of help. I was digging into this so I could properly work with Workflowy and my agents that I have reading and writing in Workflowy. I went that far to make my own proxy since my needs are heavy read intensive. Maybe could be useful to you as well, and in the readme I also have the ratelimit explenation again.