From notion-pack
Installs and configures Notion API SDK for Node.js (@notionhq/client) and Python (notion-client), sets up authentication tokens, shares pages with integration, and verifies connectivity.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin notion-packThis skill is limited to using the following tools:
Set up the official Notion SDK and configure authentication for internal integrations. The Node.js SDK is `@notionhq/client` (npm) and the Python SDK is `notion-client` (pip). Both wrap the Notion API at `https://api.notion.com/v1` using API version `2022-06-28`.
Secures Notion API integrations with token storage, OAuth2 flows, least-privilege capabilities, page access auditing, and credential rotation using @notionhq/client.
Controls Notion via Python SDK: create/query pages and databases, append blocks (headings, paragraphs, code, callouts). Triggers on Notion API, page creation, database queries.
Interact with Notion pages and databases via official API using notion-cli (Node.js/Python). Query databases, create/update pages and rows, append blocks, manage schemas.
Share bugs, ideas, or general feedback.
Set up the official Notion SDK and configure authentication for internal integrations. The Node.js SDK is @notionhq/client (npm) and the Python SDK is notion-client (pip). Both wrap the Notion API at https://api.notion.com/v1 using API version 2022-06-28.
Create an internal integration at https://www.notion.so/my-integrations:
ntn_ or secret_)Install the SDK:
# Node.js / TypeScript (official SDK)
npm install @notionhq/client
# Python (official SDK)
pip install notion-client
Store the token in environment variables -- never hardcode it:
# Set environment variable
export NOTION_TOKEN="ntn_your_integration_secret_here"
# Or add to .env file (add .env to .gitignore)
echo 'NOTION_TOKEN=ntn_your_integration_secret_here' >> .env
Share pages with your integration: In Notion, open the page or database you want to access. Click the ... menu, select Connections, and add your integration. Without this step, all API calls return object_not_found.
import { Client } from '@notionhq/client';
const notion = new Client({ auth: process.env.NOTION_TOKEN });
const me = await notion.users.me({});
console.log(`Authenticated as: ${me.name} (${me.type})`);
console.log(`Bot ID: ${me.id}`);
If the bot user is returned, authentication is working.
@notionhq/client for Node.js, notion-client for Python)NOTION_TOKEN configuredusers.me() call| Error | Cause | Solution |
|---|---|---|
unauthorized | Invalid or expired token | Regenerate at notion.so/my-integrations |
object_not_found | Page not shared with integration | Open page > ... > Connections > add integration |
restricted_resource | Missing capabilities | Edit integration capabilities in dashboard |
validation_error | Malformed request body | Check SDK version and parameter types |
rate_limited | Too many requests (3 req/s avg) | Add exponential backoff; SDK retries automatically |
MODULE_NOT_FOUND | SDK not installed | Run npm install @notionhq/client |
import { Client } from '@notionhq/client';
const notion = new Client({
auth: process.env.NOTION_TOKEN,
timeoutMs: 60_000,
notionVersion: '2022-06-28',
});
// Verify connection
const me = await notion.users.me({});
console.log(`Connected as ${me.name}`);
// List all users in the workspace
const users = await notion.users.list({});
console.log(`Workspace has ${users.results.length} users`);
import os
from notion_client import Client
notion = Client(auth=os.environ["NOTION_TOKEN"])
# Verify connection
me = notion.users.me()
print(f"Connected as {me['name']} ({me['type']})")
# List all users in the workspace
users = notion.users.list()
print(f"Workspace has {len(users['results'])} users")
After successful auth, proceed to notion-hello-world for your first page query.