import { Client } from "@notionhq/client"
const notion = new Client({ auth: process.env.NOTION_API_KEY })
const response = await notion.views.update({
view_id: "a3f1b2c4-5678-4def-abcd-1234567890ab",
name: "Updated view name"
})curl --request PATCH \
--url https://api.notion.com/v1/views/{view_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Notion-Version: <notion-version>' \
--data '
{
"name": "<string>",
"filter": {},
"sorts": [
{
"property": "<string>"
}
],
"quick_filters": {},
"configuration": {
"type": "<string>",
"properties": [
{
"property_id": "<string>",
"visible": true,
"width": 2,
"wrap": true
}
],
"group_by": {
"property_id": "<string>",
"sort": {},
"hide_empty_groups": true
},
"subtasks": {
"property_id": "<string>",
"toggle_column_id": "<string>"
},
"wrap_cells": true,
"frozen_column_index": 1,
"show_vertical_lines": true
}
}
'import requests
url = "https://api.notion.com/v1/views/{view_id}"
payload = {
"name": "<string>",
"filter": {},
"sorts": [{ "property": "<string>" }],
"quick_filters": {},
"configuration": {
"type": "<string>",
"properties": [
{
"property_id": "<string>",
"visible": True,
"width": 2,
"wrap": True
}
],
"group_by": {
"property_id": "<string>",
"sort": {},
"hide_empty_groups": True
},
"subtasks": {
"property_id": "<string>",
"toggle_column_id": "<string>"
},
"wrap_cells": True,
"frozen_column_index": 1,
"show_vertical_lines": True
}
}
headers = {
"Notion-Version": "<notion-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.notion.com/v1/views/{view_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'filter' => [
],
'sorts' => [
[
'property' => '<string>'
]
],
'quick_filters' => [
],
'configuration' => [
'type' => '<string>',
'properties' => [
[
'property_id' => '<string>',
'visible' => true,
'width' => 2,
'wrap' => true
]
],
'group_by' => [
'property_id' => '<string>',
'sort' => [
],
'hide_empty_groups' => true
],
'subtasks' => [
'property_id' => '<string>',
'toggle_column_id' => '<string>'
],
'wrap_cells' => true,
'frozen_column_index' => 1,
'show_vertical_lines' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Notion-Version: <notion-version>"
],
]);
$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://api.notion.com/v1/views/{view_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Notion-Version", "<notion-version>")
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.patch("https://api.notion.com/v1/views/{view_id}")
.header("Notion-Version", "<notion-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.notion.com/v1/views/{view_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Notion-Version"] = '<notion-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"object": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent": {
"type": "<string>",
"database_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"object": "<unknown>",
"message": "<string>",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "unauthorized",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "restricted_resource",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "row_limit_exceeded",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "conflict_error",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "rate_limited",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "internal_server_error",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "service_unavailable",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "gateway_timeout",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "service_overload",
"status": "<unknown>",
"additional_data": {}
}Update a view
Update a view’s name, filter, sorts, or configuration.
import { Client } from "@notionhq/client"
const notion = new Client({ auth: process.env.NOTION_API_KEY })
const response = await notion.views.update({
view_id: "a3f1b2c4-5678-4def-abcd-1234567890ab",
name: "Updated view name"
})curl --request PATCH \
--url https://api.notion.com/v1/views/{view_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Notion-Version: <notion-version>' \
--data '
{
"name": "<string>",
"filter": {},
"sorts": [
{
"property": "<string>"
}
],
"quick_filters": {},
"configuration": {
"type": "<string>",
"properties": [
{
"property_id": "<string>",
"visible": true,
"width": 2,
"wrap": true
}
],
"group_by": {
"property_id": "<string>",
"sort": {},
"hide_empty_groups": true
},
"subtasks": {
"property_id": "<string>",
"toggle_column_id": "<string>"
},
"wrap_cells": true,
"frozen_column_index": 1,
"show_vertical_lines": true
}
}
'import requests
url = "https://api.notion.com/v1/views/{view_id}"
payload = {
"name": "<string>",
"filter": {},
"sorts": [{ "property": "<string>" }],
"quick_filters": {},
"configuration": {
"type": "<string>",
"properties": [
{
"property_id": "<string>",
"visible": True,
"width": 2,
"wrap": True
}
],
"group_by": {
"property_id": "<string>",
"sort": {},
"hide_empty_groups": True
},
"subtasks": {
"property_id": "<string>",
"toggle_column_id": "<string>"
},
"wrap_cells": True,
"frozen_column_index": 1,
"show_vertical_lines": True
}
}
headers = {
"Notion-Version": "<notion-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.notion.com/v1/views/{view_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'filter' => [
],
'sorts' => [
[
'property' => '<string>'
]
],
'quick_filters' => [
],
'configuration' => [
'type' => '<string>',
'properties' => [
[
'property_id' => '<string>',
'visible' => true,
'width' => 2,
'wrap' => true
]
],
'group_by' => [
'property_id' => '<string>',
'sort' => [
],
'hide_empty_groups' => true
],
'subtasks' => [
'property_id' => '<string>',
'toggle_column_id' => '<string>'
],
'wrap_cells' => true,
'frozen_column_index' => 1,
'show_vertical_lines' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Notion-Version: <notion-version>"
],
]);
$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://api.notion.com/v1/views/{view_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Notion-Version", "<notion-version>")
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.patch("https://api.notion.com/v1/views/{view_id}")
.header("Notion-Version", "<notion-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.notion.com/v1/views/{view_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Notion-Version"] = '<notion-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"filter\": {},\n \"sorts\": [\n {\n \"property\": \"<string>\"\n }\n ],\n \"quick_filters\": {},\n \"configuration\": {\n \"type\": \"<string>\",\n \"properties\": [\n {\n \"property_id\": \"<string>\",\n \"visible\": true,\n \"width\": 2,\n \"wrap\": true\n }\n ],\n \"group_by\": {\n \"property_id\": \"<string>\",\n \"sort\": {},\n \"hide_empty_groups\": true\n },\n \"subtasks\": {\n \"property_id\": \"<string>\",\n \"toggle_column_id\": \"<string>\"\n },\n \"wrap_cells\": true,\n \"frozen_column_index\": 1,\n \"show_vertical_lines\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"object": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent": {
"type": "<string>",
"database_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"object": "<unknown>",
"message": "<string>",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "unauthorized",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "restricted_resource",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "row_limit_exceeded",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "conflict_error",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "rate_limited",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "internal_server_error",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "service_unavailable",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "gateway_timeout",
"status": "<unknown>",
"additional_data": {}
}{
"object": "<unknown>",
"message": "<string>",
"code": "service_overload",
"status": "<unknown>",
"additional_data": {}
}null.
Errors
Returns a 404 HTTP response if the view doesn’t exist, or if the connection doesn’t have access. Returns a 400 or 429 HTTP response if the request exceeds the request limits.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The API version to use for this request. The latest version is 2026-03-11.
2026-03-11 Path Parameters
ID of a Notion view.
Body
New name for the view.
Filter to apply to the view. Uses the same format as the data source query filter. Pass null to clear the filter.
Property sorts to apply to the view. Only property-based sorts are supported. Pass null to clear the sorts.
100Show child attributes
Show child attributes
Quick filters for the view's filter bar. Keys are property names or IDs. Set a key to a filter condition to add/update that quick filter. Set a key to null to remove it. Pass null for the entire field to clear all quick filters. Unmentioned quick filters are preserved.
Show child attributes
Show child attributes
View presentation configuration. The type field must match the view type. Individual nullable fields within the configuration can be set to null to clear them.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
Show child attributes
Show child attributes
Response
- Option 1
- Option 2
The object type name.
"view"The ID of the view.
The parent database of the view.
Show child attributes
Show child attributes
The view type.
table, board, list, calendar, timeline, gallery, form, chart, map, dashboard