> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shoply.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits

> How many requests a key may make, and how an answer says where it stands

Requests are counted for each key, not for each address: two of your servers sharing a key share its budget, and two keys have a budget each.

| What | Each key may make |
| - | - |
| Reads (`GET`) | 600 a minute |
| Changes (everything else) | 300 a minute |
| Reports and exports | 60 a minute |
| Requests that send an email | 60 in ten minutes |
| Requests that make an order | 60 a minute |

These are there to stop a loop, not to be planned around. Ten reads a second, kept up, is more than a sync job needs. A route counted against one of the smaller budgets says so on its page.

## What is counted for the store

A few requests make Shoply send something: an email to a buyer, or a request to your own server. A few more read a great deal: a finance report reads every order of a period. Those have a limit that is the store's or the order's, shared by the dashboard and every key the store has.

| What | How many |
| - | - |
| [Send an order's email again](/api-reference/orders/send-an-orders-email-again.md) | 5 an hour, for one customer, across their orders |
| [Deliver an order again](/api-reference/orders/deliver-an-order-again.md) | 10 an hour, for one order |
| [Retry a dynamic delivery](/api-reference/orders/retry-a-dynamic-delivery.md) | 150 in ten minutes, for the store |
| [Send a test delivery](/api-reference/webhook-endpoints/send-a-test-delivery.md) and [Resend a webhook delivery](/api-reference/webhook-deliveries/resend-a-webhook-delivery.md) | 30 in ten minutes together, for the store |
| [Get profit](/api-reference/finance/get-profit.md), [Get the books](/api-reference/finance/get-the-books.md) and [Export the books](/api-reference/finance/export-the-books.md) | 20 in ten minutes together, for the store, with the dashboard's **Generate Report** |
| [Export orders](/api-reference/orders/export-orders.md), [Export customers](/api-reference/customers/export-customers.md), [Export fraud events](/api-reference/fraud-protection/export-fraud-events.md) and [Export blacklist rules](/api-reference/blacklist/export-blacklist-rules.md) | 30 in ten minutes together, for the store, with the dashboard's **Export CSV** |

## The Customer API

Its routes are counted for the buyer's token, and the two that sign a buyer in for the address that asks. The [Customer API](/guides/customer-api.md#limits) guide has every number.

## Where a key stands

Every answer to a request that was counted says, in its headers:

| Header | What it says |
| - | - |
| `X-RateLimit-Limit` | The budget this request was counted against. |
| `X-RateLimit-Remaining` | How much of it is left. |
| `X-RateLimit-Reset` | Seconds until it is whole again. |

## What is counted

Every request a key makes, whatever the answer: one refused for a permission the key lacks, or for a store that is not its own, is counted like one that worked.

The one exception is a request from an address the key does not accept. That is counted against the address it came from, not against the key, so somebody trying a key they found cannot use up the budget of the server it was made for. After a run of those the address is turned away for a few minutes.

## When it runs out

The answer is `429` with the code `rate_limited`, and a `Retry-After` header: how many seconds to wait. Wait that long and carry on.

Requests sent while a key is being refused are counted too, so a client that keeps on through a `429` waits longer than one that stops.

## Staying well inside it

* Ask for a list a page at a time with the largest `perPage` the route takes, not a row at a time.
* Use [webhooks](/api-reference/webhooks.md) to hear of an order being paid, instead of asking.
* Keep what does not change often: a store's products change when you change them.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.