Rate limits
The Notion API enforces two rate limits:- Per connection — an average of three requests per second, with some bursts beyond the average allowed.
- Per workspace — shared across all of the workspace’s connections and scaled to the workspace’s plan.
"rate_limited" error code and an HTTP 429 response, with additional_data.rate_limit_reason indicating which limit was exceeded (for example, public_api_request_rate_limit or public_api_space_request_rate_limit).
Connections should handle HTTP 429 and 529 responses and respect the Retry-After response header. The header value is an integer number of seconds. A 529 response carries the "service_overload" code and means Notion is temporarily overloaded; retry it the same way as a 429.
Retry rate-limited requests
Put outgoing requests through a queue so a burst from one job does not consume the connection’s full request budget. When Notion returns 429 or 529:- Read
Retry-Afterand pause new requests for at least that many seconds. - Retry the failed request after the pause.
- If another 429 or 529 arrives, increase the delay with exponential backoff and jitter.
- Set a retry limit. Log or surface the final error when the limit is reached.
Retry-After, uses exponential backoff with jitter, and limits retries. If you call the REST API directly, use the same safeguards and add explicit handling for 529 responses. These examples show the same policy in several common HTTP clients:
Retry-After, add jitter, and cap the fallback delay and attempt count. Avoid independent retry loops in each worker; they can create a second traffic spike when the delay expires.
Size limits
Notion limits the size of certain parameters, and the depth of children in requests. A requests that exceeds any of these limits will return"validation_error" error code (HTTP response status 400) and contain more specific details in the "message" property.
Connections should avoid sending requests beyond these limits proactively. It may be helpful to use test data in your own test suite which intentionally contains large parameters to verify that the errors are handled appropriately. For example, if the connection reads a URL from an external system to put into a Notion page property, the connection should have a plan to deal with URLs that are beyond the length limit of 2000 characters. The connection might choose to log the error, or send an alert to the user who set up the connection via an email, or some other action.
Note that in addition to the property limits below, payloads have a maximum size of 1000 block elements and 500KB overall.
Limits for property values
Request size limitsThese cap the size of a single request, not how much a property can hold. A relation property can contain far more than 100 related pages — the limit only governs how many you add or set in one request. Responses have separate limits; use Retrieve a page property item to paginate through large values.