Bluesky limits writes with a points budget per account: 5,000 points an hour and 35,000 a day, where creating a post costs 3 points, an edit 2 and a delete 1. Logins have a separate limit of 30 every 5 minutes and 300 a day, and each IP address gets 3,000 requests per 5 minutes.
Key takeaways
- Repo writes share one budget per account: 5,000 points an hour and 35,000 a day.
- Creating a record (such as a post) costs 3 points, an update 2 and a delete 1; likes, follows and reposts draw from the same budget.
- Logins (createSession) are limited separately: 30 every 5 minutes and 300 a day per account.
- Each IP address gets 3,000 API requests per 5 minutes; a request over any limit usually returns HTTP 429.
On this page
What are the Bluesky API rate limits?
Writes are the limit that matters for posting. Every record an account creates, edits or deletes, a post, a like, a follow or a repost, takes points from the same hourly and daily budget. A request over a limit usually gets an HTTP 429 Too Many Requests response.
| Limit | Applies to | Budget |
|---|---|---|
| Repo writes | Each account | 5,000 points an hour, 35,000 a day |
| Point cost | Each write | Create 3, update 2, delete 1 |
| createSession (log in) | Each account | 30 every 5 minutes, 300 a day |
| updateHandle | Each account | 10 every 5 minutes, 50 a day |
| All API requests | Each IP address | 3,000 every 5 minutes |

How many posts per hour can a Bluesky account make?
In theory about 1,666 an hour, if posting were the only write on the account. In practice the account also likes, follows and reposts, which use the same budget, so the real ceiling is lower; but a normal scheduling cadence uses a few percent of it at most.
| Cadence | Posts | Points used | Share of the budget |
|---|---|---|---|
| One post every 5 minutes | 12 an hour, 288 a day | 36 an hour, 864 a day | 0.7% an hour, 2.5% a day |
| One post a minute | 60 an hour | 180 an hour | 3.6% an hour |
| Posting only, at the ceiling | About 1,666 an hour, 11,666 a day | 5,000 an hour, 35,000 a day | 100% |
Which Bluesky limit is a scheduler most likely to hit?
The login limit. createSession allows 30 logins every 5 minutes and 300 a day per account, far fewer than the write budget allows posts. A service that logs in afresh on every job, instead of reusing and refreshing its session, reaches that limit long before it runs short of write points. A server posting for many accounts from one IP address also shares the 3,000-requests-per-5-minutes limit across all of them.
How do you stay inside Bluesky’s limits?
The last step is covered in idempotent Bluesky posting. SkedCast connects each Bluesky account with an app password, keeps its session, and paces posts per account; see the Bluesky scheduler and Bluesky post limits for what a post can hold.
Reuse sessions
Log in once, store the session and refresh it, instead of creating a new one per request.
Space the writes
Pace posts per account rather than sending a batch in one burst.
Handle 429
On a 429 response, wait and retry later instead of retrying at once.
Make retries safe
Write with a fixed record key so a retried post cannot appear twice.
Sources
FAQ
- Does Bluesky rate-limit by requests per minute?
- For writes, no: it uses a points budget per account (5,000 an hour, 35,000 a day). Overall requests are limited per IP address, at 3,000 every 5 minutes.
- How many points does creating a Bluesky post cost?
- 3 points. An update costs 2 and a delete 1, all from the same budget per account.
- How many posts per hour can a Bluesky account make?
- About 1,666 if posting were its only write activity; likes, follows and reposts use the same budget, so the real ceiling is lower.
- Is Bluesky’s login rate-limited separately from posting?
- Yes. createSession allows 30 calls every 5 minutes and 300 a day per account, separate from the write budget.
- Do likes and follows count against the same limit as posts?
- Yes. Every repo write, posts, likes, follows and reposts, draws from the same points budget.
- What happens when you hit a Bluesky rate limit?
- The request usually gets an HTTP 429 Too Many Requests response; wait and retry later.