Quota is checked inside the publish call — after every error you could fix, before any
platform call. That position is the whole design: a refused request has cost you nothing and
published nothing.
The verdict
Situation
Outcome
Within the allowance
Publishes
Over the allowance, plan has overage (Indie, Studio, Scale, Enterprise)
Publishes; the excess bills as overage
Over the allowance, plan stops at it (Free)
`429 quota_exceeded`, nothing published
The 429
The message names what the request needed and what is left, so you can surface it to a user
without a second lookup.
A 429 is all-or-nothing
The whole request is refused before any target is attempted. Nothing published, nothing was billed, and no partial state was left behind.
Handling it
Upgrade, or wait for the window to roll.
Split the request. Six writes may not fit where three do — publish the important targets
first.
Retry with the same idempotency key once there is room. A replay is safe: it either
returns the original post or publishes cleanly.
The estimate is an upper bound
The check prices the request as if every target and every comment succeeds. What you are billed
is what actually happened, so a request refused at 6 units might only ever have cost 4.That asymmetry is intentional — refusing on the estimate can never over-publish, whereas
checking after the fact could.
Windows
The allowance resets per billing window: your subscription anniversary on a paid plan, the
calendar month otherwise. Current usage is visible in Settings → Billing.
Accounts and projects
Separate from write volume, each plan caps connected accounts and projects. Those limit what
you can hold, not what you publish — you hit them when connecting, not when publishing. See
Plans.
{
"error": {
"code": "quota_exceeded",
"message": "This publish needs 6 network writes and the Free plan has 2 of 100 left in this billing period. Upgrade to publish more."
}
}