All posts
/
Tom Reid
Rate limits should be boring
A quota you cannot predict is a quota you design around. We made ours countable.
Rate limiting is the least glamorous feature an API has, which is exactly why it is worth designing on purpose instead of inheriting by accident.
The old model charged one unit per row written, which meant a batch of 200 rows cost 200 units and a retry could empty an hour’s budget. Since v2.3.2 a batch costs one unit regardless of size, and the quota you spent the old way was credited back.
Limits are per project, not per key. Rotating a key does not reset anything, and a leaked key does not buy an attacker a fresh allowance. Every response carries the remaining quota and the reset time in headers, so a client can slow down before it is told to.
When you do hit the limit, the answer is a 429 with Retry-After. Retrying earlier does not extend the block. Boring, countable, and exactly as advertised.
Buy this template