Skip to main content
POST
/
v1
/
pages
/
{page_id}
/
move
TypeScript SDK
import { Client } from "@notionhq/client"

const notion = new Client({ auth: process.env.NOTION_API_KEY })

const response = await notion.pages.move({
  page_id: "b55c9c91-384d-452b-81db-d1ef79372b75",
  parent: {
    page_id: "3c357473-a281-49a4-88c0-10d2b245a589"
  }
})
{
  "object": "<string>",
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}

Authentication

Requires bearer token authentication with appropriate page edit permissions.

Path parameters

page_id (required)
  • Type: string (UUIDv4)
  • Description: The ID of the page to move
    • This must be a regular Notion page, and not a database. Moving databases or other block types in the API is not currently supported.
  • Format: UUIDs can be provided with or without dashes
  • Example: 195de9221179449fab8075a27c979105 or 195de922-1179-449f-ab80-75a27c979105

Body parameters

parent (required)
  • Type: object
  • Description: The new parent location for the page.
    • The bot must have edit access to the new parent.
The parent object can be one of two types:

Page parent

Move the page under another page:
JSON
{
  "parent": {
    "type": "page_id",
    "page_id": "<parent-page-id>"
  }
}
  • type: Always "page_id"
  • page_id: UUID of the parent page (with or without dashes)
Page parent must be a regular Notion pageThe parent[page_id] parameter must be a page and cannot be any other type of block.One limited exception: for databases that only have a single data source , the database_id can be provided under page_id, but this is not recommended, since your integration will start encountering HTTP 400 errors if a second data source is added to the database.

Database parent

Move the page into a database:
JSON
{
  "parent": {
    "type": "data_source_id",
    "data_source_id": "<database-data-source-id>"
  }
}
  • type: Always "data_source_id"
  • data_source_id: UUID of the database’s data source (with or without dashes)
Note: You must use data_source_id rather than database_id. Use the Retrieve a database endpoint to get the child data source ID(s) from the database.

Example requests

Move page under another page

cURL
curl -X POST https://api.notion.com/v1/pages/195de9221179449fab8075a27c979105/move \
  -H "Authorization: Bearer secret_xxx" \
  -H "Notion-Version: 2022-06-28" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {
      "type": "page_id",
      "page_id": "f336d0bc-b841-465b-8045-024475c079dd"
    }
  }'

Move page into a database

cURL
curl -X POST https://api.notion.com/v1/pages/195de9221179449fab8075a27c979105/move \
  -H "Authorization: Bearer secret_xxx" \
  -H "Notion-Version: 2022-06-28" \
  -H "Content-Type: application/json" \
  -d '{
    "parent": {
      "type": "data_source_id",
      "data_source_id": "1c7b35e6-e67f-8096-bf3f-000ba938459e"
    }
  }'

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Notion-Version
enum<string>
required

The API version to use for this request. The latest version is 2025-09-03.

Available options:
2025-09-03

Path Parameters

page_id
string
required

The ID of the page to move.

Body

application/json
parent
object
required

The new parent of the page.

Response

object
string
required

The page object type name.

Allowed value: "page"
id
string<uuid>
required

The ID of the page.