Call limit

The Storefront API call limit uses a leaky bucket algorithm. The algorithm allows for infrequent bursts of calls, and allows your app to make an unlimited amount of calls over time.

Call limits

The bucket's unit of measurement is the elapsed time in seconds that it takes a request to complete. The bucket size is 60 seconds, and this can't be exceeded at any given time or a throttling error is returned. The bucket empties at a leak rate of one per second. Learn more about the leaky bucket algorithm.

The 60-second rate limit applies to the IP address of the buyer interacting with the app, rather than the ID of the shop where the app is installed. This means your app won't be throttled due to an increase in buyer traffic on a merchant's shop.

Every request to the Storefront API costs at least 0.5 seconds to run. After a request completes, the total elapsed time is calculated and subtracted from the bucket.

Bucket limit example

Suppose that client requests to an app only take 0.5 seconds or less. Each request would cost the minimum 0.5 seconds. In this scenario, it's possible for a client to make a maximum of 120 parallel requests while remaining within the 60 second bucket limit (120=60/0.5).

Recommendations to avoid throttling errors

Designing your app with best practices in mind is the best way to avoid throttling errors. For example, you can stagger API requests in a queue and do other processing tasks while waiting for the next queued job to run. Consider the following best practices when designing your app:

  • Include code that catches the errors object. If you ignore these errors and keep trying to make requests, then your app won't be able to gracefully recover. To receive the errors object responses, make sure that your queries always contain the errors object.
  • Your code should stop making additional API requests until enough time has passed to retry. We recommend a backoff time of 1000ms.
  • Optimize your code to get only the data that your app requires.
  • Use caching for data that your app uses a lot.
  • Regulate the rate of your requests for smoother distribution.

FAQ

Does the query response include information about the cost of the query, and the state of the throttle?

No. Shopify doesn't currently provide this information in the Storefront API.

What happens when the rate limit is reached?

The request isn't processed and a response contains an errors object:

{ "errors": [{ "message": "Throttled" }] }

Sign up for a Partner account to get started.

Sign up