Skip to content

Enhanced Metadata (Unofficial API)

N2O can optionally use Notion’s internal API - the same API Notion’s own web app uses - to access metadata that Notion doesn’t expose through their official public API. This unlocks a handful of features. It’s completely optional, disabled by default, and degrades gracefully if you don’t enable it.

This page explains exactly what it does, what it costs, and what you’re opting into.


Notion’s official public API (the one you connect with an integration token) is intentionally limited. It doesn’t expose things like:

  • Block-level format metadata (image widths, column ratios, code wrap settings, embed types)

It used to be short of more than that. Since the 2025-09-03 Views API, the official API answers which views a database has, what type each one is, what it filters and sorts by, and which page a linked view is embedded on, so N2O reads all of that from the official API and needs nothing else for it.

Notion’s internal API (www.notion.so/api/v3/) does expose these. N2O calls one endpoint, syncRecordValues, which returns the records it asks for and nothing else. It used to call loadPageChunk as well, for the whole page tree at once; asking for the exact blocks it needs is cheaper and it no longer does.

FeatureWithout unofficial APIWith unofficial API
Typed embedsAll embeds are genericTweets, Figma, Google Maps, CodePen, Excalidraw, etc. detected and preserved
Image/column formattingDefault sizingNotion’s original widths and column ratios preserved

Everything still works without it - you just lose these two enrichments. The sync itself, all block content, all properties, and all Bases generation continue normally.


To call the internal API, N2O needs your Notion browser session cookie - the token_v2 cookie that Notion’s web app uses to authenticate you.

This is not a separate API key. It’s the same credential your browser uses when you’re logged in to notion.so. It proves to Notion’s servers that requests are coming from an authenticated user.


  1. Open N2O Settings > Notionify > Enhanced metadata.
  2. Toggle Enable enhanced metadata on.
  3. Enter your session token (see below).
  4. Click Validate to confirm it works.

Inside Obsidian (automatic):

This reads Obsidian’s own Web Viewer cookie store, not the cookies in Chrome or Safari. Enable the Web Viewer core plugin under Settings > Core plugins, click Sign in to Notion to log in inside Obsidian, then click Grab Token. N2O reads the token_v2 cookie from that session. No manual copying needed.

If Web Viewer is off, the settings panel says so and the Grab Token button does not appear.

Manually (if automatic doesn’t work):

  1. Open notion.so in Chrome or Firefox and log in.
  2. Open DevTools (F12 or Cmd+Option+I).
  3. Go to Application (Chrome) or Storage (Firefox).
  4. Click Cookies -> select https://www.notion.so.
  5. Find the cookie named token_v2.
  6. Copy the full value (it’s long - copy all of it).
  7. Paste it into N2O Settings > Notionify > Enhanced metadata > Session Token.

This API is unofficial and undocumented. Notion does not support or guarantee its stability. It could change or stop working at any time without warning. When that happens, N2O falls back to the official API automatically - nothing breaks, you just lose the enrichments above.

N2O includes a circuit breaker. After 3 consecutive failures from the unofficial API, N2O drops the enrichment client for the rest of that sync run and carries on without it. This prevents cascading failures from slowing down your sync.

What N2O sends to the unofficial API:

  • Your token_v2 session cookie (as an HTTP cookie header)
  • Page IDs of the pages you’re syncing
  • Block IDs needed for enrichment

What N2O does NOT do:

  • Send your token_v2 to N2O’s servers
  • Write anything via the unofficial API (it’s read-only)
  • Use the unofficial API for authentication (that’s the official token)

Notion’s stance: Notion hasn’t officially permitted or prohibited third-party use of their internal API. Use of it is at your own risk. If Notion changes or locks down this API, N2O will update accordingly.


When the unofficial API is working, you’ll see typed embeds and Notion’s original image widths and column ratios. When it’s not (token expired, API changed, network issue), sync continues normally without those enrichments, and your .base files still carry the right view types, filters and sorts, because those come from the official API. N2O logs failures at debug level but doesn’t surface them as errors to keep the sync experience clean.

Tokens expire when you log out of Notion in your browser. If enrichment stops working, re-grab the token in settings.