Limits & errors

Every error is JSON with a stable code; limits exist per IP, per request, and per plan.

Error shape

{ "error": { "code": "rate_limited", "message": "…" } }
StatusCodeMeaning
400invalid_requestMalformed query, body, or parameter.
401unauthorized / invalid_credentials / invalid_grantMissing or bad token; wrong project; used refresh token.
403forbiddenRow-Level Security or role denied the operation.
404not_foundUnknown table, object, or project.
409conflict / email_takenUnique/foreign-key violation; bucket not empty.
413too_largeUpload over 50 MiB; realtime payload over 64 KiB.
422quota_exceededPlan storage quota would be exceeded.
429rate_limited / quota_exceeded / egress_exceededPer-IP rate limit; the project's request allowance; or its monthly egress allowance (on reads/downloads).
504timeout / store_timeoutStatement hit the 10-second timeout; or the storage backend did not accept an object in time. Both are safe to retry.
507db_quota_exceededThe project's database is over its size limit: inserts and updates are refused (RPC, GraphQL and Edge Functions run read-only) until it is back under it. Reads, deletes and sign-in keep working.

Per-IP rate limits

OperationLimit / minute
Auth signup5
Auth token (login/refresh)10
Storage uploads60
WebSocket connections60
Public/anon REST requests300
Realtime HTTP publishes600

Plan quotas

QuotaStarterProBusinessEnterprise
Projects per organization220100Custom
Data API requests / day50,0001,000,0005,000,000Custom
Storage per project100 MiB10 GiB100 GiBCustom
Database size per project500 MiB8 GiB50 GiB200 GiB
Realtime connections per project505002,000Custom
Egress per month5 GiB250 GiB2 TiBCustom
KV keys per project10,0001,000,00010,000,000Custom
KV storage per project10 MiB256 MiB2 GiBCustom

The daily request count is an anti-abuse ceiling; each plan also has a monthly request and egress allowance. Egress is the volume of response bytes sent to clients: REST reads and storage downloads, including public-bucket images. Once the monthly egress allowance is spent, reads and downloads are refused with 429 egress_exceeded while writes are never blocked; the dashboard warns at 80%. Paid plans can add prepaid request packs, and each pack lifts both the request and the egress allowance; buying one restores service immediately.

Database size is measured every 15 minutes. Above the limit, the Data API refuses inserts and updates with 507 db_quota_exceeded and runs RPC, GraphQL and Edge Functions read-only, while reads, deletes, sign-in, storage and direct SQL connections keep working. Owners and admins are e-mailed at 80% and when the limit is passed. PostgreSQL does not shrink its files when rows are deleted: to get back under the limit, delete data and run VACUUM FULL on the affected tables from the SQL editor.

Plans scale from Starter to Enterprise; contact sales to get set up with the right fit for your workload. Daily request counts reset at midnight UTC.

Request limits

LimitValue
Rows per REST response1000 (limit parameter)
SQL statement timeout10 seconds
Storage object size50 MiB
Realtime message size64 KiB
KV value size256 KiB
KV key length512 bytes