
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
@notionhq/client
Advanced tools
@notionhq/client is an official JavaScript client for the Notion API. It allows developers to interact with Notion's databases, pages, and blocks programmatically. This package is useful for automating workflows, integrating Notion with other services, and building custom applications that leverage Notion's capabilities.
Retrieve a Database
This feature allows you to retrieve information about a specific database in Notion. You need to provide the database ID and your Notion API key.
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
(async () => {
const databaseId = 'your-database-id';
const response = await notion.databases.retrieve({ database_id: databaseId });
console.log(response);
})();
Query a Database
This feature allows you to query a database with specific filters. In this example, it filters the database to return only entries where the 'Status' property is 'In Progress'.
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
(async () => {
const databaseId = 'your-database-id';
const response = await notion.databases.query({
database_id: databaseId,
filter: {
property: 'Status',
select: {
equals: 'In Progress'
}
}
});
console.log(response.results);
})();
Create a Page
This feature allows you to create a new page in a specified database. You need to provide the database ID and the properties for the new page.
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
(async () => {
const response = await notion.pages.create({
parent: { database_id: 'your-database-id' },
properties: {
Name: {
title: [
{
text: {
content: 'New Page'
}
}
]
}
}
});
console.log(response);
})();
Update a Page
This feature allows you to update properties of an existing page. In this example, it updates the 'Status' property of a page to 'Completed'.
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
(async () => {
const pageId = 'your-page-id';
const response = await notion.pages.update({
page_id: pageId,
properties: {
Status: {
select: {
name: 'Completed'
}
}
}
});
console.log(response);
})();
Retrieve a Block
This feature allows you to retrieve information about a specific block in Notion. You need to provide the block ID.
const { Client } = require('@notionhq/client');
const notion = new Client({ auth: process.env.NOTION_API_KEY });
(async () => {
const blockId = 'your-block-id';
const response = await notion.blocks.retrieve({ block_id: blockId });
console.log(response);
})();
notion-api-js is an unofficial JavaScript client for the Notion API. It provides similar functionalities to @notionhq/client, such as interacting with databases and pages. However, it may not be as up-to-date or fully featured as the official client.
notion-api is a community-driven package that provides a simple interface for interacting with the Notion API. It focuses on ease of use and may offer a more streamlined experience for certain tasks compared to the official client.
npm install @notionhq/client
Use Notion's Getting Started Guide to get set up to use Notion's API.
Import and initialize a client using an integration token or an OAuth access token.
const { Client } = require("@notionhq/client")
// Initializing a client
const notion = new Client({
auth: process.env.NOTION_TOKEN,
})
Make a request to any Notion API endpoint.
See the complete list of endpoints in the API reference.
;(async () => {
const listUsersResponse = await notion.users.list({})
})()
Each method returns a Promise
which resolves the response.
console.log(listUsersResponse)
{
results: [
{
object: 'user',
id: 'd40e767c-d7af-4b18-a86d-55c61f1e39a4',
type: 'person',
person: {
email: 'avo@example.org',
},
name: 'Avocado Lovelace',
avatar_url: 'https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg',
},
...
]
}
Endpoint parameters are grouped into a single object. You don't need to remember which parameters go in the path, query, or body.
const myPage = await notion.databases.query({
database_id: "897e5a76-ae52-4b48-9fdf-e71f5945d1af",
filter: {
property: "Landmark",
text: {
contains: "Bridge",
},
},
})
If the API returns an unsuccessful response, the returned Promise
rejects with a APIResponseError
.
The error contains properties from the response, and the most helpful is code
. You can compare code
to the values in the APIErrorCode
object to avoid misspelling error codes.
const { Client, APIErrorCode } = require("@notionhq/client")
try {
const myPage = await notion.databases.query({
database_id: databaseId,
filter: {
property: "Landmark",
text: {
contains: "Bridge",
},
},
})
} catch (error) {
if (error.code === APIErrorCode.ObjectNotFound) {
//
// For example: handle by asking the user to select a different database
//
} else {
// Other error handling code
console.error(error)
}
}
The client emits useful information to a logger. By default, it only emits warnings and errors.
If you're debugging an application, and would like the client to log response bodies, set the logLevel
option to LogLevel.DEBUG
.
const { Client, LogLevel } = require("@notionhq/client")
const notion = new Client({
auth: process.env.NOTION_TOKEN,
logLevel: LogLevel.DEBUG,
})
You may also set a custom logger
to emit logs to a destination other than stdout
. A custom logger is a function which is called with 3 parameters: logLevel
, message
, and extraInfo
. The custom logger should not return a value.
The Client
supports the following options on initialization. These options are all keys in the single constructor parameter.
Option | Default value | Type | Description |
---|---|---|---|
auth | undefined | string | Bearer token for authentication. If left undefined, the auth parameter should be set on each request. |
logLevel | LogLevel.WARN | LogLevel | Verbosity of logs the instance will produce. By default, logs are written to stdout . |
timeoutMs | 60_000 | number | Number of milliseconds to wait before emitting a RequestTimeoutError |
baseUrl | "https://api.notion.com" | string | The root URL for sending API requests. This can be changed to test with a mock server. |
logger | Log to console | Logger | A custom logging function. This function is only called when the client emits a log that is equal or greater severity than logLevel . |
agent | Default node agent | http.Agent | Used to control creation of TCP sockets. A common use is to proxy requests with https-proxy-agent |
This package contains type definitions for all request parameters and responses.
Because errors in TypeScript start with type any
or unknown
, you should use
the isNotionClientError
type guard to handle them in a type-safe way. Each
NotionClientError
type is uniquely identified by its error.code
. Codes in
the APIErrorCode
enum are returned from the server. Codes in the
ClientErrorCode
enum are produced on the client.
try {
const response = await notion.databases.query({
/* ... */
})
} catch (error: unknown) {
if (isNotionClientError(error)) {
// error is now strongly typed to NotionClientError
switch (error.code) {
case ClientErrorCode.RequestTimeout:
// ...
break
case APIErrorCode.ObjectNotFound:
// ...
break
case APIErrorCode.Unauthorized:
// ...
break
// ...
default:
// you could even take advantage of exhaustiveness checking
assertNever(error.code)
}
}
}
This package supports the following minimum versions:
node >= 12
typescript >= 4.2
Earlier versions may still work, but we encourage people building new applications to upgrade to the current stable.
If you want to submit a feature request for Notion's API, or are experiencing any issues with the API platform, please email us at developers@makenotion.com
.
If you found a bug with the library, please submit an issue.
FAQs
A simple and easy to use client for the Notion API
The npm package @notionhq/client receives a total of 322,026 weekly downloads. As such, @notionhq/client popularity was classified as popular.
We found that @notionhq/client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 18 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.