Foony Realtime meters one thing, messages. Everything else is a capacity limit that scales with your plan. The numbers here are the enforced values, the same ones behind the pricing page.
Per-plan limits
| Limit | Free | Starter | Growth | Scale |
|---|---|---|---|---|
| Included messages / month | 9M | 100M | 500M | 1.5B |
| Messages / second | 1,000 | 10,000 | 50,000 | 150,000 |
| Max message size | 64 KB | 256 KB | 1 MB | 1 MB |
| Concurrent connections | 300 | 10,000 | 50,000 | 150,000 |
| Concurrent channels | 300 | 10,000 | 50,000 | 150,000 |
| History retention | 24 h | 30 d | 30 d | 30 d |
Above the included messages, Free stops accepting new messages until the month rolls over, while paid plans keep going and bill overage per million. Channels themselves have no per-channel rate ceiling: the message rate is per app, and one busy channel may use all of it.
The included count is measured in 5 KiB units, so payload size matters as well as message count. A publish, a fanout delivery, or a presence event up to 5 KiB counts as one message. Anything larger counts as one message per 5 KiB, so a 12 KiB publish counts as 3. The max message size above is the hard ceiling on a single payload, not the billing unit. A batch is measured as a whole rather than per member, which is why batching costs less than publishing the same messages one at a time.
Fixed limits on every plan
| Limit | Value |
|---|---|
| Channel name length | 255 characters |
| Channels attached per connection | 1,000 |
| Token lifetime | 24 hours maximum, 1 hour default |
| History page size | 100 messages default |
| REST publish body | 2 MB |
What happens at a limit
Every limit responds the same way: error 42900 with a message naming the exceeded quota. Messages over the rate limit are rejected, not queued, so a client that sees 42900 should back off and retry. Connection and channel ceilings refuse the new connection or attach and leave existing ones untouched.
Plan changes propagate within about 15 seconds.