curl --request POST \
--url https://context7.com/api/v2/add/notion \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"workspaceId": "workspace-uuid",
"workspaceName": "Acme Workspace",
"pageIds": [
"page-1",
"page-2"
],
"title": "Product Docs",
"description": "Internal Notion knowledge base"
}
'import requests
url = "https://context7.com/api/v2/add/notion"
payload = {
"workspaceId": "workspace-uuid",
"workspaceName": "Acme Workspace",
"pageIds": ["page-1", "page-2"],
"title": "Product Docs",
"description": "Internal Notion knowledge base"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workspaceId: 'workspace-uuid',
workspaceName: 'Acme Workspace',
pageIds: ['page-1', 'page-2'],
title: 'Product Docs',
description: 'Internal Notion knowledge base'
})
};
fetch('https://context7.com/api/v2/add/notion', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://context7.com/api/v2/add/notion",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'workspaceId' => 'workspace-uuid',
'workspaceName' => 'Acme Workspace',
'pageIds' => [
'page-1',
'page-2'
],
'title' => 'Product Docs',
'description' => 'Internal Notion knowledge base'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://context7.com/api/v2/add/notion"
payload := strings.NewReader("{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://context7.com/api/v2/add/notion")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://context7.com/api/v2/add/notion")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}"
response = http.request(request)
puts response.read_body{
"libraryName": "/owner/repo",
"message": "Repository submitted successfully"
}Add Notion pages
Submit selected Notion pages for documentation processing. Requires a connected Notion account and a team project.
curl --request POST \
--url https://context7.com/api/v2/add/notion \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"workspaceId": "workspace-uuid",
"workspaceName": "Acme Workspace",
"pageIds": [
"page-1",
"page-2"
],
"title": "Product Docs",
"description": "Internal Notion knowledge base"
}
'import requests
url = "https://context7.com/api/v2/add/notion"
payload = {
"workspaceId": "workspace-uuid",
"workspaceName": "Acme Workspace",
"pageIds": ["page-1", "page-2"],
"title": "Product Docs",
"description": "Internal Notion knowledge base"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workspaceId: 'workspace-uuid',
workspaceName: 'Acme Workspace',
pageIds: ['page-1', 'page-2'],
title: 'Product Docs',
description: 'Internal Notion knowledge base'
})
};
fetch('https://context7.com/api/v2/add/notion', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://context7.com/api/v2/add/notion",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'workspaceId' => 'workspace-uuid',
'workspaceName' => 'Acme Workspace',
'pageIds' => [
'page-1',
'page-2'
],
'title' => 'Product Docs',
'description' => 'Internal Notion knowledge base'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://context7.com/api/v2/add/notion"
payload := strings.NewReader("{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://context7.com/api/v2/add/notion")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://context7.com/api/v2/add/notion")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workspaceId\": \"workspace-uuid\",\n \"workspaceName\": \"Acme Workspace\",\n \"pageIds\": [\n \"page-1\",\n \"page-2\"\n ],\n \"title\": \"Product Docs\",\n \"description\": \"Internal Notion knowledge base\"\n}"
response = http.request(request)
puts response.read_body{
"libraryName": "/owner/repo",
"message": "Repository submitted successfully"
}Authorizations
Get your API key at context7.com/dashboard. Treat your API key like a password and store it securely. Every key can read the management API (/v2/teamspaces/*), except personal data: member and invitation emails, library requesters, visitor questions, Docs7 reader searches, conversations, feedback and feature requests, and the GitHub account behind a build. To read those or make changes there, the key must be created with Write access ticked; other keys get 403 write_access_required.
Body
The Notion workspace ID
The Notion workspace name
List of Notion page IDs to index.
Title for the library
Description of the library
Optional. Requests with an API key or token use its teamspace; a different value returns 403 teamspace_mismatch.
Response
Library submitted successfully for processing
Response after successfully submitting a library
The library identifier assigned — the URL path of the library on context7.com. /owner/repo for GitHub repositories, or /<source>/<id> for other sources (e.g., /vercel/next.js, /websites/uploadcare_com). See Library ID format.
Human-readable success message
Only for websites: the version the URL was added as, when it is a version of an existing library. Request it as <libraryName>/<version>.
Was this page helpful?