Web API: too many requests

60 views
Skip to first unread message

maie...@gmail.com

unread,
May 6, 2026, 5:10:15 AMMay 6
to zotero-dev
Hi, 
I have a workflow where I use the web API to move items to a different collection after processing them.

Now, I've ran into this:

requests.exceptions.HTTPError: 429 Client Error: Too Many Requests for url:...

What is the limit of the api? How can I process more items?
Best,
Denis




Annabelle Wiegart

unread,
May 6, 2026, 8:25:13 AMMay 6
to zotero-dev
Hi,

I'm dealing with the same problem when creating collections and items via Web API. I know there is some info about rate limiting here: https://www.zotero.org/support/dev/web_api/v3/basics. But it would be good to have some general guidelines about rate limits so I can configure my app to respect them instead of having to react to potential 429 responses in every request.

Best,
Annabelle

Dan Stillman

unread,
May 9, 2026, 3:17:55 PMMay 9
to zoter...@googlegroups.com
We don't document specific limits. They vary by request type and can change at any time. But it's basically what it says in the documentation: if you get a 429, you should honor its Retry-After, and if you get 429s repeatedly, you should lower your request rate and/or concurrency rate until you don't.

I've also added a paragraph to that section that may be helpful:

For clients repeatedly hitting rate limits, the best solution is often to use a different request flow, such as using batched writes rather individually updating a large number of objects. Clients should also generally make no more than 4 concurrent requests.

Note that there's no need to treat a 429 as a fatal error. You should be prepared to get a 429 (or 500/503, the latter also potentially with Retry-After) at any time and recover gracefully. But repeatedly hitting 429s does mean you should adjust your request pattern.

- Dan

Annabelle Wiegart

unread,
May 11, 2026, 9:53:25 AMMay 11
to zotero-dev
Thank you Dan, that's helpful. I'm using pyzotero, which already implements a backoff when it encounters 429 and/or Retry/After or backoff headers as far as I can see (assuming a single thread). I also upgraded to pyzotero 1.11 which reduces the number of requests when e.g. posting note items with a parent book item. Also, I'm trying to batch all my write requests. 

One more question: Are repeated ReadTimeout errors a sign of a temporary block?

Dan Stillman

unread,
May 11, 2026, 11:15:21 PMMay 11
to zoter...@googlegroups.com
On 5/11/26 9:53 AM, Annabelle Wiegart wrote:
> One more question: Are repeated ReadTimeout errors a sign of a
> temporary block?

It's not impossible that repeatedly ignoring Retry-After or continually
triggering 4xx errors could result in a temporary network-level block,
but that's not the case at the moment, no.
Reply all
Reply to author
Forward
0 new messages