Notion API rate limits, the official numbers

M
Matthew Diakonov
9 min read

You came here for one number. You should get it in the first screen, not the fifth. Here it is, copied straight from Notion's developer docs and re-verified the day this page was written.

Direct answerVerified May 18, 2026

An average of 3 requests per second per integration.

Some bursts beyond the average rate are allowed. Requests that exceed the limit return HTTP 429 with a rate_limited error code and a Retry-After header containing a decimal number of seconds. The limit attaches to the integration token, not the workspace or the user.

Source: developers.notion.com/reference/request-limits. Notion notes that values may change, so re-check this page before sizing anything load-bearing.

The size caps that quietly break you first

The 3-per-second number gets all the attention. In practice, most of the production bugs I see on Notion integrations are not throttling. They are size errors that look like throttling because the call comes back with no useful body. Here are the per-request hard caps Notion publishes, in the same place as the rate limit.

0/secaverage per integration
0block elements per request
0KBtotal payload per request
0chars per rich text or URL
ConstraintLimitWhere it bites
Requests per second3 averageBulk syncs, dashboard polling
Blocks per request1000Pasting a long doc, importing a page
Total payload500 KBEmbedded images, large text blocks
Rich text content2000 charsLong paragraphs in one block
URL field2000 charsTracked links with long query strings
Equation expression1000 charsLong LaTeX equations
Array elements100Multi-select options, relations, mentions
Email and phone fields200 chars eachCRM-shaped properties

The 1000-block and 500KB caps are what you hit when you write an importer or sync. They produce a clean validation error, not a 429, so you do not retry your way out. The fix is chunking on the way in, which a queue gets you for free but a naive loop does not.

2700 calls every 15 minutes per token. That is the same 3 per second, just averaged over a longer window so a short burst does not page anyone.
P
Public statement
Notion engineer, paraphrased from their developer community

The 15-minute window is the practical one to design against. If your sync runs 4 requests per second for 8 seconds then idles for two minutes, you are still under budget. If you run 3 per second flat for 16 minutes you will eventually 429 even though the instantaneous rate is on spec.

The workaround nobody writes about

The standard advice for hitting the limit is well known: queue, batch, exponential backoff, cache and diff. There is a fifth path that almost nobody writes up because it sounds wrong at first. You can simply not call the API. Drive the Notion macOS app through the accessibility tree the operating system already exposes, and your throughput is governed by UI latency and your own pacing, not by Notion's server-side rate limiter.

Two paths to the same workspace

Your script signs a request with an integration token and hits api.notion.com. Notion's rate limiter counts the call. After 2700 calls in 15 minutes you get HTTP 429 and a Retry-After header. You queue, back off, or split the job.

  • Counted against 3/sec average per token
  • Hits 1000-block and 500KB ceilings on writes
  • Cleanly scriptable, ideal for high-frequency reads
  • Same budget whether you are on Free, Plus, Business, or Enterprise

This is what Fazm uses for Notion specifically. The desktop app has a complete accessibility tree on macOS. An agent can walk it, identify the right database row, click into a page, type into a field, and confirm the write landed, all without authenticating against api.notion.com. Notion's own desktop client has no rate limit on what your hands can do, and accessibility-driven automation is, to the OS, just a faster pair of hands.

Why the OS path sidesteps the limit

Both paths end at the same Notion database. The difference is everything between you and that database. One traverses Notion's rate-limited public boundary. The other goes through your own logged-in session via the operating system.

Same destination, two routes

Your script
Your agent
Your shortcut
Notion workspace
api.notion.com
Notion desktop app
Notion web app

The top route on the right is the one every guide tells you to optimize. The middle route is the one nobody covers, because most people writing about the Notion API are not also writing about macOS accessibility APIs. They are two different stacks. When you have an agent that already speaks both, the choice becomes a per-workflow decision instead of a religious one.

When the OS path is the right call

UI automation is not always the answer. It is the answer for a specific shape of work. Here is the honest version of when it pays off and when it does not.

Pick the desktop app path if

  • You are hitting the 1000-block or 500KB limit on imports
  • Your job runs daily or weekly, not every minute
  • You already have an AI agent driving your Mac for other tasks
  • You want one workflow that touches Notion plus other Mac apps in the same flow
  • You need a synchronous read endpoint that returns in under 200ms
  • You are syncing tens of thousands of rows per minute
  • You run on Linux or Windows servers with no Mac in the loop

The first four are the workflows where Fazm is the natural fit. The last three are the ones where you should stay on the public API and design around the 3-per-second budget, or move the data to a database that can keep up.

What about plan-based limits?

Notion's developer docs say, verbatim, that they plan to introduce distinct rate limits for workspaces in different pricing plans. That sentence has been on the page for a while now and the limits have not yet diverged in public docs. Today, the Free, Plus, Business, and Enterprise plans share the same 3-per-second average and the same per-request size caps. If higher limits ship on a paid plan in the future, Notion will update the same page where the 3-per-second number lives. The honest answer for now is that there is no paid escape hatch from the rate limit on api.notion.com.

That makes the per-workflow decision more interesting, not less. If the limit were just a free-tier nudge, the right answer would be a sales call. Since it applies to every plan, the right answer depends on the shape of the work.

Build a Notion workflow that does not depend on the API

If you are routinely hitting 429s or the 1000-block ceiling, the right shape might be a Mac-resident agent driving the desktop app instead. Walk through your sync with us.

Frequently asked questions

What is the official Notion API rate limit?

Notion's developer docs state an average of three requests per second per integration. Some bursts beyond the average rate are allowed. Requests that exceed the limit return HTTP 429 with a rate_limited error code and a Retry-After header in decimal seconds.

Is the 3 requests per second limit per integration, per workspace, or per user?

Per integration. The limit attaches to the API token, which is scoped to one integration. A Notion engineer publicly described the underlying budget as 2700 calls every 15 minutes per token, which is the same 3 per second averaged over the window.

Does Notion offer paid plans with higher API rate limits?

Not today. Notion's docs say rate limits may change and that they plan to introduce distinct rate limits for workspaces in different pricing plans, but at the time of this writing the same 3 per second average applies regardless of plan. There is no paid tier you can buy to lift it right now.

What payload size limits does the Notion API enforce on top of the rate limit?

1000 block elements and 500KB total per request. Rich text content and URLs are capped at 2000 characters each. Equation expressions at 1000 characters. Arrays at 100 elements, including multi-select options, page relations, and people mentions. Email and phone number fields at 200 characters.

What does the Retry-After header on a 429 response actually contain?

An integer number of seconds, formatted as a decimal value, indicating the minimum amount of time you should wait before retrying. Notion recommends either respecting that value directly or implementing your own request queue that progressively slows your request velocity.

Can I bypass the API rate limit by automating the Notion desktop app instead?

Yes, technically. The 3 per second limit applies to api.notion.com. The Notion macOS app is an Electron wrapper whose UI is fully exposed through macOS accessibility APIs. An agent that drives the desktop app through that tree never hits the public API, so there is no rate limit on the OS side. The tradeoff is speed: clicks and field updates run at human UI speed, not at API speed, so this is the right answer for batch and longer-running flows, not for synchronous high-throughput pipelines.

Does the SDK retry automatically on a 429?

The official @notionhq/client and notion-sdk-py do not implement automatic retry on 429 out of the box. You have to wrap your calls or use a request queue. There are community libraries that add this for you, and the SDKs do surface the Retry-After header value through their typed error objects.

Where exactly does Notion publish these limits?

On the Request limits page in their developer docs, at https://developers.notion.com/reference/request-limits. That page is the only authoritative source. Re-check it before trusting any number here, including the ones on this page, because Notion has said the values may change.

fazm.AI Computer Agent for macOS
© 2026 fazm. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.