Why is there an hourly or per second limit on messages and data transfer?

To help prevent the abuse of accounts, whether intentional or by mistake, we impose both an hourly and per second message and bandwidth limit on all accounts. This hourly limit is calculated as a percentage of your message quota. By default we allow customers to use their entire monthly quota in three days which amounts to 1.39% of your monthly quota per hour.


If you exceed that limit, you will get an email letting you know that you should review your account usage or upgrade your package. In most cases, we will automatically apply a temporary extension to the limit to give you plenty of time to react to avoid disruption that could impact your users. If you exceed the extension, Ably may start refusing to publish or deliver new messages on your account for the remainder of the period.


There is also an instantaneous per second message limit: accounts can burst to up to 6.25x their pro rata hourly package rate (62.5x their pro rata monthly rate); sustained usage above that is liable to be rejected on a rolling probabilistic basis -- for example, if you are publishing at double your permitted instantaneous rate, each message has a 50% chance of being rejected, with the suppression probability being continuously updated based on a moving average of the current attempted publish rate. 


Ably guarantees that if we accept a message we will deliver it. So any message rejected for breaching a limit (instantaneous, hourly, or monthly) will not be silently dropped: the publisher will get a NACK -- for example, the callback passed to publish() will be called with an error, with error code indicating the specific cause of the publish rejection, so it can take any further action it needs. In the case of an instantaneous rate limit, the error code is 42911.


Committed Use plans are granted more generous limit extensions, and all limits can be customized to meet your needs (including our hourly and instantaneous limit on messages and data transfer).


Next steps: