Bluesky Feed Generator Quota Limits Explained
🔍 WiseChecker

Bluesky Feed Generator Quota Limits Explained

If you run a custom feed generator on Bluesky, you have likely encountered rate limits or quota errors. These restrictions prevent a single feed from consuming too many server resources. Bluesky uses quota limits to ensure fair access for all feed operators and to protect the network from overload. This article explains the specific quota limits for feed generators, how they work, and how to avoid hitting them.

Key Takeaways: Bluesky Feed Generator Quota Limits

  • GetFeed and GetFeedSkeleton endpoints: Each feed generator has a limit of 100 requests per 5-minute window per IP address.
  • SubscriptionRepos endpoint: Limits apply to the number of concurrent connections and the event batch size, capped at 100 events per batch.
  • Daily quota reset: All quota counters reset every 24 hours at midnight UTC.

How Bluesky Feed Generator Quotas Work

Bluesky feed generators are external services that produce custom feeds for users. The network communicates with these generators through specific endpoints. To prevent abuse and ensure stability, Bluesky enforces quota limits on these endpoints. The quotas are based on the number of requests per time window and the number of concurrent connections. Each feed generator has its own quota allocation, which is independent of other generators. The limits apply to the feed generator’s server IP address, not to individual user accounts.

Request-Based Quotas

The most common quotas are request rate limits. For the GetFeed and GetFeedSkeleton endpoints, a single IP address can send up to 100 requests per 5-minute window. If your feed generator exceeds this rate, the server returns a 429 Too Many Requests error. The error response includes a Retry-After header indicating the number of seconds to wait before retrying. For the SubscriptionRepos endpoint, the limit is 10 concurrent connections per IP address. Opening more than 10 simultaneous connections will result in connection rejections.

Data Volume Quotas

Bluesky also limits the amount of data a feed generator can return per response. For GetFeedSkeleton, each response can contain a maximum of 100 items. If your feed has more than 100 posts, you must implement pagination using the cursor parameter. The SubscriptionRepos endpoint limits each event batch to 100 events. Larger batches are automatically truncated by the server. These data volume limits prevent a single feed from overwhelming the network with large payloads.

How to Monitor and Stay Within Quota Limits

To avoid hitting quota limits, you need to implement proper rate limiting and pagination in your feed generator code. The following steps cover the essential techniques.

  1. Track request counts per endpoint
    Maintain a counter for each endpoint you call. Use a sliding window approach to check if you are within the 100 requests per 5-minute limit. When the counter reaches 95, stop sending new requests until the window resets.
  2. Parse the Retry-After header on 429 responses
    When you receive a 429 error, read the Retry-After header value. Wait that many seconds before making the next request. Do not retry immediately, as that will keep triggering the limit.
  3. Limit concurrent connections to SubscriptionRepos
    Open no more than 10 simultaneous connections to the SubscriptionRepos endpoint. Use a connection pool manager to enforce this limit. If a connection attempt fails, retry with exponential backoff.
  4. Implement pagination for GetFeedSkeleton
    In your feed generator logic, when the result set exceeds 100 items, include the cursor parameter in the response. The client will then use that cursor to request the next page. Do not return more than 100 items in a single response.
  5. Use the daily quota reset to schedule bulk operations
    If you need to perform maintenance or data synchronization that requires many requests, schedule it to start just after midnight UTC. This gives you the full daily quota window to complete the task.

Common Issues When Quota Limits Are Exceeded

Even with careful planning, you may still run into quota-related problems. Here are the most common scenarios and how to fix them.

Feed Generator Returns 429 Too Many Requests

This is the most direct sign that you have exceeded the request rate limit. Check your request logs to see which endpoint is being called too frequently. Reduce the request rate by increasing the interval between calls. Also verify that your code is not accidentally sending duplicate requests in parallel. Use a single queue for outbound requests to ensure orderly processing.

SubscriptionRepos Connections Are Rejected

If you consistently get connection timeouts or immediate rejections on the SubscriptionRepos endpoint, you likely have more than 10 concurrent connections. Use a connection pool with a maximum size of 10. Close idle connections promptly. If you need to handle more streams, consider running multiple feed generators on different IP addresses, each with its own quota allocation.

Feed Shows Only 100 Posts Despite Having More

This occurs when your feed generator does not implement pagination correctly. The GetFeedSkeleton endpoint can return only 100 items per call. Verify that your generator includes the cursor field in the response when there are more items. The cursor should be a string that points to the next batch. Test the pagination by calling the feed with the cursor parameter and confirming that the next batch is returned.

Bluesky Feed Generator Quota Limits vs Other Platforms

Item Bluesky Feed Generator Mastodon API
Request rate limit 100 requests per 5 minutes per IP 300 requests per 5 minutes per user token
Connection limit 10 concurrent connections per IP No explicit connection limit
Data volume per response 100 items max 40 items default, configurable up to 80
Quota reset period 24 hours at midnight UTC Sliding 5-minute window
Error response format 429 with Retry-After header 429 with X-RateLimit-Reset header

Bluesky’s feed generator quotas are stricter than Mastodon’s API limits. The 100-request window is shorter, and the connection limit is unique to Bluesky. Mastodon’s API does not restrict concurrent connections, but it does impose a higher per-token request rate. If you are migrating a feed generator from Mastodon to Bluesky, you must add connection pooling and reduce your request frequency.

Now that you understand the quota limits, you can adjust your feed generator code to comply with them. Monitor your server logs for 429 errors and connection rejections. Implement pagination and connection limits as described above. For advanced optimization, consider caching feed results for a few seconds to reduce the number of requests to the Bluesky network.