Run rate limits
Worker runs use separate limits by capability type. Every worker in a workspace shares the applicable workspace budget.
When a tool run, sync run, or queued webhook execution reaches its limit, its recorded worker run has a
rate_limit_error result. The result includes retryAfterSeconds when available. The way a direct invocation surfaces that error depends on its transport.
Webhook ingress limits
Before Notion accepts a webhook event, it applies a separate workspace-level admission limit of 600 requests per hour, with a burst limit of 60 requests per minute. This limit is separate from the queued webhook execution limit above. Incoming webhook HTTP requests are also throttled before worker code runs:
If a webhook request exceeds an ingress or admission limit, Notion responds synchronously with HTTP
429 and { "error": "Rate limit exceeded" }. A request that receives 202 Accepted was queued, but its later asynchronous execution can still reach the shared tool and webhook execution limit. Notion retries rate-limited webhook executions.
Sync database write limits
Sync upserts and deletes (thechanges your execute function returns) are limited separately from sync runs, since a single sync run can write many rows:
Next steps
Syncs
Configure sync schedules and pace outbound requests to third-party APIs.
Webhooks
Receive HTTP events and understand webhook delivery behavior.