Buttondown enforces two types of rate limits:
| Endpoint | Rate limit |
|---|---|
| All API endpoints | 600 requests per minute |
POST /v1/subscribers | 100 requests per day |
If you find yourself running into the limit of 100 subscribers a day, it's likely due to one of two things:
- You are onboarding and performing an import one subscriber at a time. We'd encourage you to use the import path instead to upload multiple subscribers in bulk.
- You have a particularly high-volume list that is growing rapidly.
Rate limit headers
Buttondown returns rate limit information in the response headers on every API request:
| Header | Description |
|---|---|
X-RateLimit-Limit | The maximum number of requests allowed in the current window |
X-RateLimit-Remaining | The number of requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp (in seconds) when the rate limit window resets |
Here's an example of the headers you might see:
Response
Exceeding the rate limit
If you exceed the rate limit, the API will return a 429 status code with a Retry-After header indicating how many seconds to wait before retrying:
Response
You can use these headers to implement backoff logic in your client code.
The daily subscriber-creation limit behaves differently: instead of a 429, it returns a 400 whose body points you to POST /v1/imports as the supported way to add subscribers in bulk.