> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://notion.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://notion.ferndocs.com/_mcp/server.

# Retrieve a page

GET https://api.notion.com/v1/pages/{page_id}

Do **not** use this endpoint if a page property includes more than 25 references to receive the full list of references. Instead, use the [Retrieve a page property endpoint](https://developers.notion.com/reference/retrieve-a-page-property) for the specific property to get its complete reference list.

Retrieves a [Page object](/reference/page) using the ID specified.

Responses contains page **properties**, not page content. To fetch page content, use the [Retrieve block children](https://developers.notion.com/reference/get-block-children) endpoint.

Page properties are limited to up to **25 references** per page property. To retrieve data related to properties that have more than 25 references, use the [Retrieve a page property](https://developers.notion.com/reference/retrieve-a-page-property#rollup-properties) endpoint. (See [Limits](https://developers.notion.com/reference/retrieve-a-page#limits) below for additional information.)

### Parent objects: Pages vs. databases

If a page's [Parent object](https://developers.notion.com/reference/parent-object) is a database, then the property values will conform to the [database property schema](https://developers.notion.com/reference/property-object).

If a page object is not part of a database, then the only property value available for that page is its `title`.

### Limits

The endpoint returns a maximum of 25 page or person references per [page property](https://developers.notion.com/reference/property-value-object). If a page property includes more than 25 references, then the 26th reference and beyond might be returned as `Untitled`, `Anonymous`, or not be returned at all.

This limit affects the following properties:

* [`people`](https://developers.notion.com/reference/property-value-object#people-property-values): response object can't be guaranteed to return more than 25 people.
* [`relation`](https://developers.notion.com/reference/property-value-object#relation-property-values): the `has_more` value of the `relation` in the response object is `true` if a `relation` contains more than 25 related pages. Otherwise, `has_more` is false.
* [`rich_text`](https://developers.notion.com/reference/property-value-object#rich-text-property-values): response object includes a maximum of 25 populated inline page or person mentions.
* [`title`](https://developers.notion.com/reference/property-value-object#title-property-values): response object includes a maximum of 25 inline page or person mentions.

This endpoint requires an integration to have read content capabilities. Attempting to call this API without read content capabilities will return an HTTP response with a 403 status code. For more information on integration capabilities, see the [capabilities guide](/reference/capabilities).

### Errors

Returns a 404 HTTP response if the page doesn't exist, or if the integration doesn't have access to the page.

Returns a 400 or 429 HTTP response if the request exceeds the [request limits](/reference/request-limits).

*Note: Each Public API endpoint can return several possible error codes. See the Error codes section of the Status codes documentation for more information.*

Reference: https://notion.ferndocs.com/reference/retrieve-a-page

## Request

### Path parameters

- `page_id` (string, required) — Identifier for a Notion page

### Query parameters

- `filter_properties` (string, optional) — A list of page property value IDs associated with the page. Use this param to limit the response to a specific page property value or values. To retrieve multiple properties, specify each page property ID. For example: `?filter_properties=iAk8&filter_properties=b7dh`.

### Headers

- `Notion-Version` (string, required) — The [API version](/reference/versioning) to use for this request. The latest version is `<<latestNotionVersion>>`.

## Response

### 200

200

- `object` (string, optional)
- `id` (string, optional)
- `created_time` (string, optional)
- `last_edited_time` (string, optional)
- `created_by` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaCreatedBy, optional)
- `last_edited_by` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastEditedBy, optional)
- `cover` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaCover, optional)
- `icon` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaIcon, optional)
- `parent` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaParent, optional)
- `archived` (boolean, optional, default: true)
- `properties` (V1PagesPageIdGetResponsesContentApplicationJsonSchema, optional)
- `url` (string, optional)
- `public_url` (any, optional)

## Errors

### 400 Bad Request Error

400

## Types

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaCreatedBy

- `object` (string, optional)
- `id` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastEditedBy

- `object` (string, optional)
- `id` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaCover

- `type` (string, optional)
- `external` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaCoverExternal, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaIcon

- `type` (string, optional)
- `emoji` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaParent

- `type` (string, optional)
- `data_source_id` (string, optional)
- `database_id` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchema

- `Store availability` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaStoreAvailability, optional)
- `Food group` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaFoodGroup, optional)
- `Price` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaPrice, optional)
- `Responsible Person` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePerson, optional)
- `Last ordered` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastOrdered, optional)
- `Cost of next trip` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaCostOfNextTrip, optional)
- `Recipes` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaRecipes, optional)
- `Description` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescription, optional)
- `In stock` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaInStock, optional)
- `Number of meals` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaNumberOfMeals, optional)
- `Photo` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaPhoto, optional)
- `Name` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaName, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaCoverExternal

- `url` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaStoreAvailability

- `id` (string, optional)
- `type` (string, optional)
- `multi_select` (list of V1PagesPageIdGetResponsesContentApplicationJsonSchemaStoreAvailabilityMultiSelectItems, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaFoodGroup

- `id` (string, optional)
- `type` (string, optional)
- `select` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaFoodGroupSelect, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaPrice

- `id` (string, optional)
- `type` (string, optional)
- `number` (double, optional, default: 0)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePerson

- `id` (string, optional)
- `type` (string, optional)
- `people` (list of V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePersonPeopleItems, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastOrdered

- `id` (string, optional)
- `type` (string, optional)
- `date` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastOrderedDate, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaCostOfNextTrip

- `id` (string, optional)
- `type` (string, optional)
- `formula` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaCostOfNextTripFormula, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaRecipes

- `id` (string, optional)
- `type` (string, optional)
- `relation` (list of V1PagesPageIdGetResponsesContentApplicationJsonSchemaRecipesRelationItems, optional)
- `has_more` (boolean, optional, default: true)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescription

- `id` (string, optional)
- `type` (string, optional)
- `rich_text` (list of V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItems, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaInStock

- `id` (string, optional)
- `type` (string, optional)
- `checkbox` (boolean, optional, default: true)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaNumberOfMeals

- `id` (string, optional)
- `type` (string, optional)
- `rollup` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaNumberOfMealsRollup, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaPhoto

- `id` (string, optional)
- `type` (string, optional)
- `url` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaName

- `id` (string, optional)
- `type` (string, optional)
- `title` (list of V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItems, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaStoreAvailabilityMultiSelectItems

- `id` (string, optional)
- `name` (string, optional)
- `color` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaFoodGroupSelect

- `id` (string, optional)
- `name` (string, optional)
- `color` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePersonPeopleItems

- `object` (string, optional)
- `id` (string, optional)
- `name` (string, optional)
- `avatar_url` (string, optional)
- `type` (string, optional)
- `person` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePersonPeopleItemsPerson, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaLastOrderedDate

- `start` (string, optional)
- `end` (any, optional)
- `time_zone` (any, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaCostOfNextTripFormula

- `type` (string, optional)
- `number` (integer, optional, default: 0)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaRecipesRelationItems

- `id` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItems

- `type` (string, optional)
- `text` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItemsText, optional)
- `annotations` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItemsAnnotations, optional)
- `plain_text` (string, optional)
- `href` (any, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaNumberOfMealsRollup

- `type` (string, optional)
- `number` (integer, optional, default: 0)
- `function` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItems

- `type` (string, optional)
- `text` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItemsText, optional)
- `annotations` (V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItemsAnnotations, optional)
- `plain_text` (string, optional)
- `href` (any, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaResponsiblePersonPeopleItemsPerson

- `email` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItemsText

- `content` (string, optional)
- `link` (any, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaDescriptionRichTextItemsAnnotations

- `bold` (boolean, optional, default: true)
- `italic` (boolean, optional, default: true)
- `strikethrough` (boolean, optional, default: true)
- `underline` (boolean, optional, default: true)
- `code` (boolean, optional, default: true)
- `color` (string, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItemsText

- `content` (string, optional)
- `link` (any, optional)

### V1PagesPageIdGetResponsesContentApplicationJsonSchemaNameTitleItemsAnnotations

- `bold` (boolean, optional, default: true)
- `italic` (boolean, optional, default: true)
- `strikethrough` (boolean, optional, default: true)
- `underline` (boolean, optional, default: true)
- `code` (boolean, optional, default: true)
- `color` (string, optional)

## Examples

**Response**

```json
{
  "Result": {
    "value": "{\n  \"object\": \"page\",\n  \"id\": \"59833787-2cf9-4fdf-8782-e53db20768a5\",\n  \"created_time\": \"2022-03-01T19:05:00.000Z\",\n  \"last_edited_time\": \"2022-07-06T20:25:00.000Z\",\n  \"created_by\": {\n    \"object\": \"user\",\n    \"id\": \"ee5f0f84-409a-440f-983a-a5315961c6e4\"\n  },\n  \"last_edited_by\": {\n    \"object\": \"user\",\n    \"id\": \"0c3e9826-b8f7-4f73-927d-2caaf86f1103\"\n  },\n  \"cover\": {\n    \"type\": \"external\",\n    \"external\": {\n      \"url\": \"https://upload.wikimedia.org/wikipedia/commons/6/62/Tuscankale.jpg\"\n    }\n  },\n  \"icon\": {\n    \"type\": \"emoji\",\n    \"emoji\": \"🥬\"\n  },\n  \"parent\": {\n    \"type\": \"data_source_id\",\n    \"data_source_id\": \"d9824bdc-8445-4327-be8b-5b47500af6ce\",\n    \"database_id\": \"9ce034a5-74ca-4259-8b01-8494453204fe\"\n  },\n  \"archived\": false,\n  \"properties\": {\n    \"Store availability\": {\n      \"id\": \"%3AUPp\",\n      \"type\": \"multi_select\",\n      \"multi_select\": [\n        {\n          \"id\": \"t|O@\",\n          \"name\": \"Gus's Community Market\",\n          \"color\": \"yellow\"\n        },\n        {\n          \"id\": \"{Ml\\\\\",\n          \"name\": \"Rainbow Grocery\",\n          \"color\": \"gray\"\n        }\n      ]\n    },\n    \"Food group\": {\n      \"id\": \"A%40Hk\",\n      \"type\": \"select\",\n      \"select\": {\n        \"id\": \"5e8e7e8f-432e-4d8a-8166-1821e10225fc\",\n        \"name\": \"🥬 Vegetable\",\n        \"color\": \"pink\"\n      }\n    },\n    \"Price\": {\n      \"id\": \"BJXS\",\n      \"type\": \"number\",\n      \"number\": 2.5\n    },\n    \"Responsible Person\": {\n      \"id\": \"Iowm\",\n      \"type\": \"people\",\n      \"people\": [\n        {\n          \"object\": \"user\",\n          \"id\": \"cbfe3c6e-71cf-4cd3-b6e7-02f38f371bcc\",\n          \"name\": \"Cristina Cordova\",\n          \"avatar_url\": \"https://lh6.googleusercontent.com/-rapvfCoTq5A/AAAAAAAAAAI/AAAAAAAAAAA/AKF05nDKmmUpkpFvWNBzvu9rnZEy7cbl8Q/photo.jpg\",\n          \"type\": \"person\",\n          \"person\": {\n            \"email\": \"cristina@makenotion.com\"\n          }\n        }\n      ]\n    },\n    \"Last ordered\": {\n      \"id\": \"Jsfb\",\n      \"type\": \"date\",\n      \"date\": {\n        \"start\": \"2022-02-22\",\n        \"end\": null,\n        \"time_zone\": null\n      }\n    },\n    \"Cost of next trip\": {\n      \"id\": \"WOd%3B\",\n      \"type\": \"formula\",\n      \"formula\": {\n        \"type\": \"number\",\n        \"number\": 0\n      }\n    },\n    \"Recipes\": {\n      \"id\": \"YfIu\",\n      \"type\": \"relation\",\n      \"relation\": [\n        {\n          \"id\": \"90eeeed8-2cdd-4af4-9cc1-3d24aff5f63c\"\n        },\n        {\n          \"id\": \"a2da43ee-d43c-4285-8ae2-6d811f12629a\"\n        }\n      ],\n\t\t\t\"has_more\": false\n    },\n    \"Description\": {\n      \"id\": \"_Tc_\",\n      \"type\": \"rich_text\",\n      \"rich_text\": [\n        {\n          \"type\": \"text\",\n          \"text\": {\n            \"content\": \"A dark \",\n            \"link\": null\n          },\n          \"annotations\": {\n            \"bold\": false,\n            \"italic\": false,\n            \"strikethrough\": false,\n            \"underline\": false,\n            \"code\": false,\n            \"color\": \"default\"\n          },\n          \"plain_text\": \"A dark \",\n          \"href\": null\n        },\n        {\n          \"type\": \"text\",\n          \"text\": {\n            \"content\": \"green\",\n            \"link\": null\n          },\n          \"annotations\": {\n            \"bold\": false,\n            \"italic\": false,\n            \"strikethrough\": false,\n            \"underline\": false,\n            \"code\": false,\n            \"color\": \"green\"\n          },\n          \"plain_text\": \"green\",\n          \"href\": null\n        },\n        {\n          \"type\": \"text\",\n          \"text\": {\n            \"content\": \" leafy vegetable\",\n            \"link\": null\n          },\n          \"annotations\": {\n            \"bold\": false,\n            \"italic\": false,\n            \"strikethrough\": false,\n            \"underline\": false,\n            \"code\": false,\n            \"color\": \"default\"\n          },\n          \"plain_text\": \" leafy vegetable\",\n          \"href\": null\n        }\n      ]\n    },\n    \"In stock\": {\n      \"id\": \"%60%5Bq%3F\",\n      \"type\": \"checkbox\",\n      \"checkbox\": true\n    },\n    \"Number of meals\": {\n      \"id\": \"zag~\",\n      \"type\": \"rollup\",\n      \"rollup\": {\n        \"type\": \"number\",\n        \"number\": 2,\n        \"function\": \"count\"\n      }\n    },\n    \"Photo\": {\n      \"id\": \"%7DF_L\",\n      \"type\": \"url\",\n      \"url\": \"https://i.insider.com/612fb23c9ef1e50018f93198?width=1136&format=jpeg\"\n    },\n    \"Name\": {\n      \"id\": \"title\",\n      \"type\": \"title\",\n      \"title\": [\n        {\n          \"type\": \"text\",\n          \"text\": {\n            \"content\": \"Tuscan kale\",\n            \"link\": null\n          },\n          \"annotations\": {\n            \"bold\": false,\n            \"italic\": false,\n            \"strikethrough\": false,\n            \"underline\": false,\n            \"code\": false,\n            \"color\": \"default\"\n          },\n          \"plain_text\": \"Tuscan kale\",\n          \"href\": null\n        }\n      ]\n    }\n  },\n  \"url\": \"https://www.notion.so/Tuscan-kale-598337872cf94fdf8782e53db20768a5\",\n  \"public_url\": null\n}"
  }
}
```

**SDK Code**

```javascript Notion SDK for JavaScript
const { Client } = require('@notionhq/client');

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

(async () => {
  const pageId = '59833787-2cf9-4fdf-8782-e53db20768a5';
  const response = await notion.pages.retrieve({ page_id: pageId });
  console.log(response);
})();
```

```python
import requests

url = "https://api.notion.com/v1/pages/page_id"

headers = {"Notion-Version": "Notion-Version"}

response = requests.get(url, headers=headers)

print(response.json())
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.notion.com/v1/pages/page_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Notion-Version", "Notion-Version")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.notion.com/v1/pages/page_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Notion-Version"] = 'Notion-Version'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.notion.com/v1/pages/page_id")
  .header("Notion-Version", "Notion-Version")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.notion.com/v1/pages/page_id', [
  'headers' => [
    'Notion-Version' => 'Notion-Version',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.notion.com/v1/pages/page_id");
var request = new RestRequest(Method.GET);
request.AddHeader("Notion-Version", "Notion-Version");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Notion-Version": "Notion-Version"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.notion.com/v1/pages/page_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```