Rate Limits

Stream applies rate limits to protect both your application and our infrastructure. Rate limits prevent:

  • Integration issues or abuse from degrading your app’s performance (excessive API calls trigger client-side events)
  • Resource consumption beyond what is provisioned for your plan
  • Common integration mistakes, such as opening multiple WebSocket connections per user

Rate limits are applied per API endpoint and platform on a 1-minute window. Different platforms (iOS, Android, Web, Server) have independent counters for each endpoint.

If 6,000 iOS users and 6,000 Android users connect within one minute, no rate limit is triggered. The 10,000/minute connect limit applies independently to each platform.

Inspecting Rate Limits

Check your current rate limit quotas and usage in the dashboard or via the API.

// Server-side platform only
var limits = await appClient.GetRateLimitsAsync(new GetRateLimitsOptions().WithServerSide());

// All platforms
var limits = await appClient.GetRateLimitsAsync(new GetRateLimitsOptions());

// Specific platforms
var limits = await appClient.GetRateLimitsAsync(new GetRateLimitsOptions().WithIOS().WithAndroid());

// Specific endpoints
var limits = await appClient.GetRateLimitsAsync(new GetRateLimitsOptions().WithEndpoint("QueryChannels").WithEndpoint("SendMessage"));

The response includes the 1-minute limit, remaining quota, and window reset timestamp.

Rate Limit Headers

All API responses include rate limit information in headers.

HeaderDescription
X-RateLimit-LimitTotal limit for the requested resource (e.g. 5000)
X-RateLimit-RemainingRemaining requests in current window (e.g. 4999)
X-RateLimit-ResetWhen the current window resets (Unix timestamp)

Types of Rate Limits

User Rate Limits

Each user is limited to 60 requests per minute per endpoint and platform. This prevents a single user from consuming your entire application quota. Your server is not subject to user rate limits.

App Rate Limits

App rate limits apply per endpoint and platform combination. Stream supports four platforms:

PlatformSDKs
ServerNode, Python, Ruby, Go, C#, PHP, Java
AndroidKotlin, Java, Flutter, React Native
iOSSwift, Flutter, React Native
WebReact, Angular, JavaScript

Rate limits are not shared across platforms. If a server-side script hits a rate limit, your mobile and web applications are unaffected.

App rate limits are enforced both per minute and per second. The per-second limit equals the per-minute limit divided by 30 to allow for bursts.

When a rate limit is exceeded, all calls from the same app, platform, and endpoint return HTTP status 429.

Handling Rate Limit Errors

When you receive a 429 status code, implement exponential back-off retry logic. Use the X-RateLimit-Reset header to determine when to retry.

Avoiding Rate Limits

  1. Add delays to scripts - The most common cause of rate limits. Add timeouts between successive API calls in batch scripts or cronjobs.

  2. Use batch endpoints - Instead of 100 individual calls, use batch endpoints to update multiple users in one request.

  3. Check client-side rendering logic - Infinite pagination bugs or other client-side issues can trigger excessive API calls.

  4. Avoid redundant queries - Channel creation is an upsert operation. Do not call QueryChannels to check if a channel exists before creating it. See Query Channels.

  5. Use one WebSocket per user - Multiple WebSocket connections per user cause performance issues, billing problems, and unexpected behavior. See Initialization & Users.

  6. Follow livestream best practices - High-volume messaging scenarios require additional optimization. See Livestream Best Practices.

Requesting Higher Limits

  • Standard plans - Stream may increase limits after reviewing your integration to confirm optimal usage of default limits.
  • Enterprise plans - Stream reviews your architecture and sets appropriate limits for your production application.

Rate Limits by Endpoint

Default rate limits for self-serve plans (per minute, per platform).

API RequestLimit/min
Connect10,000
Get or Create Channel10,000
Get App10,000
Mark All Read10,000
Mark Read10,000
Query Channels10,000
Send Event10,000
Create Guest1,000
Delete Message1,000
Delete Reaction1,000
Get Message1,000
Get Reactions1,000
Get Replies1,000
Query Users1,000
Run Message Action1,000
Send Message1,000
Send Reaction1,000
Stop Watching Channel1,000
Update Message1,000
Upload File1,000
Upload Image1,000
Ban300
Create Device300
Edit Users300
Flag300
Hide Channel300
Mute300
Query Members300
Search300
Show Channel300
Unban300
Unflag300
Unmute300
Update Channel300
Update Users300
Update Users (Partial)300
Activate User60
Check Push60
Create Channel Type60
Deactivate User60
Delete Channel60
Delete Channel Type60
Delete Device60
Delete File60
Delete User60
Export Channel60
Export User60
Get Channel Type60
List Channel Types60
List Devices60
Truncate Channel60
Update App60
Update Channel Type60

All endpoints also enforce the user rate limit of 60 requests per minute per user. Rate limits can be adjusted based on your use case and plan.