Rate limits, Pagination and Contact Lists


I’ve been investigating some “You must not exceed 120 requests per 60 seconds” errors on our integration with the FreeAgent API and looking for a sensible solution to help work around the problem. Our integration syncs contacts in FreeAgent with another system. When more than 12,000 contacts are in the FreeAgent account then the 120+ calls we will need to make because of the 100 contact pagination limit causes the API to fire a 429.

Ideally the endpoint GET https://api.freeagent.com/v2/contacts would have an additional filter option since= that would only return contacts that have been updated or added since the timestamp supplied. This would reduce load on your servers and ours by reducing the number of records being pull of disk and reducing the number of records processed by us.

This doesn’t solve the problem for customers who have large numbers of contacts in the first place for completing the first sync. However with filtering in place we could consider some kind of stand off to allow the calls to spread over a longer time period.

I’m guessing the answer is going to be that you will have to work around the limitation. Build a full process which requests contacts slowly, until all pages have been found and processed. We use the API heavily and constantly and have had to deal with this by limiting requests and monitoring. It’s a ballache but what else can you do. I’ve asked FA to support web hooks but there seems to be no sign of it yet

Hi Philip,

Thanks for posting! I’ve noticed you raised a similar feature request in the past; would the created_at/updated_at sorting orders that my colleagues mentioned in their responses be of any help for you here at all? They should allow you to limit the number of contacts you request on each sync.

Best wishes,


Thanks I hadn’t spotted that previous response. It creates a somewhat more complex implementation having to include code that parses and checks the content of incoming records in pagination code rather than applying a filter up front. I’ll note it down as a possible solution.