Storage and Bandwidth
Stream applies fair-usage limits to storage, bandwidth, and API calls on every Chat plan. You only start to pay extra for storage and bandwidth after you exceed these fair usage limits.
Common causes of overages
Most overages we see come from a handful of integration patterns:
- Automated cron jobs hitting query channels. Background jobs that poll Stream on a schedule (for example, to refresh inboxes or compute unread counts) can multiply API calls many times over without any real user activity.
- Query channels with high pagination limits. Requesting large numbers of channels and messages on your query channel API calls. This increases bandwidth usage significantly. This is particularly an issue when you store large custom objects on channels, users or messages.
- Bot users on your app. Bots that watch many channels, send frequent messages, or run analytics in the background can dwarf the activity of real users.
- Frontend or client-side bugs. Tight retry loops, unmounted components that keep firing requests, or misconfigured reconnect logic can produce high call volumes that look like organic traffic but are not.
Reducing storage and bandwidth costs
Two levers cover the vast majority of cost-reduction work:
- Apply retention policies. Configuring channel-level message retention is the most effective way to cap stored messages and the bandwidth required to read them back. See the Data Retention Policy guide for setup details.
- Improve your client and server-side integration. Audit query channel calls for pagination size, frequency, and necessity. Replace polling with webhooks or real-time events where possible. Use query syntax operators to fetch only what you need, and apply slow mode and throttling on noisy channels.
Included fair-usage limits by plan
The following allowances are included with each plan tier. Usage above these thresholds is billed as an overage (see the next section).
| Plan | Messages | Channels | API calls | Query channels | Query channel budget limiter (ms per minute) | Bandwidth |
|---|---|---|---|---|---|---|
| Self-serve | Up to 10M | Up to 1M | Up to 1M | 100,000 | 200,000 | 10 GB |
| Up to $100K | Up to 50M | Up to 5M | Up to 20M | 2,000,000 | 200,000 | 500 GB |
| Enterprise $100K to $300K | Up to 100M | Up to 10M | Up to 80M | 8,000,000 | 400,000 | 1 TB |
| Enterprise $300K to $600K | Up to 200M | Up to 20M | Up to 200M | 20,000,000 | 800,000 | 2 TB |
| Enterprise $600K to $2M | Up to 2B | Up to 200M | Up to 800M | 80,000,000 | 1,600,000 | 5 TB |
The query channel budget limiter caps the total milliseconds of query channel processing time consumed per minute. It is the metric that catches bursty cron jobs and oversized pagination before they translate into a bill.
Overage pricing
Overages are billed independently for each resource. You only pay for the resource that exceeds its included allowance.
Messages
| Stored messages | Fee per 1M messages |
|---|---|
| 0 to 50M | $5.00 |
| 50M to 100M | $4.00 |
| 100M to 500M | $3.50 |
| 500M to 1B | $3.50 |
| 1B to 2B | $3.50 |
Channels
| Stored channels | Fee per channel |
|---|---|
| 0 to 2.5M | $0.0006 |
| 0 to 5M | $0.0005 |
| 5M to 10M | $0.0004 |
| 10M to 20M | $0.0004 |
| 20M and above | $0.0004 |
Bandwidth and API calls
| Resource | Rate |
|---|---|
| Bandwidth | $0.40 per GB |
| Total API calls | $7 per million |
| Total query channel API calls | $2.50 per 100,000 |
If you are seeing unexpected overage charges, the fastest path to a fix is to look at the four causes listed above, then apply retention policies and tighten your query channel usage. Reach out to your account team if you want help auditing your traffic patterns.