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

A handful of levers cover the vast majority of cost-reduction work:

  1. 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.
  2. 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.
  3. Keep your SDKs up to date. We periodically improve content encoding and API payloads, and most of these improvements are negotiated by the SDK clients. Using the latest SDK versions gives you the best performance and the smallest payload sizes.
  4. Enable compression for hook payloads. By default, payloads delivered to your hooks (webhooks, SQS, etc.) are sent as plain-text JSON without compression. Opt in to compressed payloads to reduce the payload size by up to 10x — see Payload Compression on the webhooks overview for the enable_hook_payload_compression flag and the verifyAndParseWebhook / parseSqs / parseSns SDK helpers.
  5. Limit the events sent to your hooks. Make sure only the event types you actually need are dispatched to your hooks. Fine-tune this from the Dashboard.
  6. Tune query channel limits. The query channel endpoint lets you specify how many channels to return and how many messages and members per channel. Make sure all three limits are aligned with what your integration actually needs.

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).

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.

Self-serve

  • Messages: up to 10M
  • Channels: up to 1M
  • API calls: up to 1M
  • Query channels: 100,000
  • Query channel budget limiter: 200,000 ms/min
  • Bandwidth: 10 GB

Up to $100K

  • Messages: up to 50M
  • Channels: up to 5M
  • API calls: up to 20M
  • Query channels: 2,000,000
  • Query channel budget limiter: 200,000 ms/min
  • Bandwidth: 500 GB

Enterprise $100K to $300K

  • Messages: up to 100M
  • Channels: up to 10M
  • API calls: up to 80M
  • Query channels: 8,000,000
  • Query channel budget limiter: 400,000 ms/min
  • Bandwidth: 1 TB

Enterprise $300K to $600K

  • Messages: up to 200M
  • Channels: up to 20M
  • API calls: up to 200M
  • Query channels: 20,000,000
  • Query channel budget limiter: 800,000 ms/min
  • Bandwidth: 2 TB

Enterprise $600K to $2M

  • Messages: up to 2B
  • Channels: up to 200M
  • API calls: up to 800M
  • Query channels: 80,000,000
  • Query channel budget limiter: 1,600,000 ms/min
  • Bandwidth: 5 TB

Overage pricing

Overages are billed independently for each resource. You only pay for the resource that exceeds its included allowance.

Messages

Stored messagesFee 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 channelsFee per channel
0 to 2.5M$0.0006
2.5M to 5M$0.0005
5M to 10M$0.0004
10M to 20M$0.0004
20M and above$0.0004

Bandwidth and API calls

ResourceRate
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.