> This page is for Data API, version v2 Beta.
> For other versions, use one of these documentation indexes:
> - v2 (default): https://developers.webflow.com/data/v2.0.0/llms.txt
> - v2 Beta: https://developers.webflow.com/data/v2.0.0-beta/llms.txt
> - v1: https://developers.webflow.com/data/v1.0.0/llms.txt

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

# Bulk update page metadata

PATCH https://api.webflow.com/beta/pages
Content-Type: application/json

Bulk update page-level metadata for up to 100 pages.Site context is inferred from the page IDs in the request. All pages must belong to the same site.The same page ID may appear multiple times when each entry uses a different `localeId`. Duplicate `id` + `localeId` combinations return a `400` error.Provide `localeId` to update a secondary locale. `localeId` must belong to a secondary locale for the site.Required scope | `pages:write`

Reference: https://developers.webflow.com/data/v2.0.0-beta/reference/pages-and-components/pages/update-metadata-bulk

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects an object.

- `pages` (list of PagesPatchRequestBodyContentApplicationJsonSchemaPagesItems, required) — List of page metadata updates to apply. Include between 1 and 100 pages per request. The same `id` may appear multiple times when each entry uses a different `localeId`.

## Response

### 200

Request was successful

- `pages` (list of PagesPatchResponsesContentApplicationJsonSchemaPagesItems, required) — List of updated pages

## Errors

### 400 Bad Request Error

Request body was incorrectly formatted.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of PagesPatchResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 401 Unauthorized Error

Provided access token is invalid or does not have access to requested resource

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of PagesPatchResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 404 Not Found Error

Requested resource not found

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of PagesPatchResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 429 Too Many Requests Error

The rate limit of the provided access_token has been reached. Please have your application respect the X-RateLimit-Remaining header we include on API responses.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of PagesPatchResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

### 500 Internal Server Error

We had a problem with our server. Try again later.

- `code` (enum, optional) — Error code
  - Allowed values: `aeo_input_validation`, `analyze_filter_conflict`, `analyze_input_validation`, `analyze_unsupported_filter`, `bad_request`, `batch_too_large`, `before_historical_floor`, `billing_provider_unavailable`, `branch_merge_conflict`, `branch_merge_in_progress`, `branch_not_found`, `branch_publish_failed`, `branch_sync_pending`, `branch_task_not_found`, `branch_update_in_progress`, `brand_not_configured`, `cannot_invite_self`, `cannot_remove_self`, `cannot_update_user_role`, `client_seats_unavailable`, `collection_not_found`, `competitors_not_configured`, `conflict`, `conflicting_scope_filters`, `default_site_role_required`, `duplicate_collection`, `duplicate_member_in_request`, `duplicate_site_in_request`, `duplicate_user_email`, `ecommerce_not_enabled`, `end_time_too_recent`, `enterprise_provisioning_upstream_error`, `enterprise_self_provisioning_not_entitled`, `forbidden`, `forms_require_republish`, `incompatible_webhook_filter`, `insufficient_permissions`, `insufficient_seats`, `internal_error`, `invalid_auth_version`, `invalid_credentials`, `invalid_domain`, `invalid_resolution`, `invalid_site_role`, `invalid_time_range`, `invalid_user_email`, `invalid_workspace_role`, `invite_expired`, `invite_role_conflict`, `item_not_found`, `managed_by_scim`, `member_already_has_access`, `member_has_no_site_access`, `member_is_paying_client`, `member_not_found`, `member_not_removable`, `member_role_conflict`, `missing_scopes`, `no_domains`, `no_members_or_invites`, `not_authorized`, `not_enterprise_plan_site`, `not_enterprise_plan_workspace`, `optimize_before_historical_floor`, `optimize_input_validation`, `optimize_invalid_interval`, `optimize_unknown_dimension`, `optimize_unknown_goal`, `optimize_unknown_optimization`, `optimize_unsupported_group_by`, `order_not_found`, `page_cannot_branch`, `resource_not_found`, `service_unavailable`, `site_access_not_applicable_to_member`, `site_access_not_scopable_for_role`, `site_access_roles_must_match`, `site_not_in_workspace`, `site_role_id_invalid`, `site_role_id_not_allowed`, `site_role_id_required`, `site_specific_access_disabled`, `site_specific_access_not_entitled`, `time_range_too_wide`, `too_many_requests`, `unsupported_bot_provider`, `unsupported_version`, `unsupported_webhook_trigger_type`, `user_limit_reached`, `user_not_found`, `users_not_enabled`, `validation_error`, `workspace_invite_not_found`, `workspace_member_managed_by_scim`, `workspace_member_not_found`, `workspace_member_not_removable`, `workspace_role_not_grantable`
- `message` (string, optional) — Error message
- `externalReference` (string, optional) — Link to more information
- `details` (list of PagesPatchResponsesContentApplicationJsonSchemaDetailsItems, optional) — Array of errors

## Types

### PagesPatchRequestBodyContentApplicationJsonSchemaPagesItems

The page metadata values to update for a specific page.

- `id` (string, required) — Unique identifier for the Page to update
- `title` (string, optional) — Title for the page
- `slug` (string, optional) — Slug for the page. **Note:** The slug field is ignored in the following cases — all other fields in the same request still apply: * The site's home page, collection template pages, and utility pages (e.g. 404, password, search). * For secondary locales, updating the slug requires an Advanced or Enterprise localization add-on plan.
- `seo` (PagesPatchRequestBodyContentApplicationJsonSchemaPagesItemsSeo, optional) — SEO-related fields for the Page
- `openGraph` (PagesPatchRequestBodyContentApplicationJsonSchemaPagesItemsOpenGraph, optional) — Open Graph fields for the Page
- `localeId` (string, optional) — Unique identifier for the secondary locale to update. Omit this field to update the primary locale.

### PagesPatchResponsesContentApplicationJsonSchemaPagesItems

The Page object

- `id` (string, required) — Unique identifier for the Page
- `siteId` (string, optional) — Unique identifier for the Site
- `title` (string, optional) — Title of the Page
- `slug` (string, optional) — slug of the Page (derived from title)
- `parentId` (string, optional) — Identifier of the parent folder
- `collectionId` (string, optional) — Unique identifier for a linked Collection, value will be null if the Page is not part of a Collection.
- `createdOn` (string, optional) — The date the Page was created
- `lastUpdated` (string, optional) — The date the Page was most recently updated
- `archived` (boolean, optional, default: false) — Whether the Page has been archived
- `draft` (boolean, optional, default: false) — Whether the Page is a draft
- `canBranch` (boolean, optional, default: false) — Indicates whether the Page supports [Page Branching](https://university.webflow.com/lesson/page-branching). Pages that are already branches cannot be branched again.
- `isBranch` (boolean, optional, default: false) — Indicates whether the Page is a Branch of another Page [Page Branching](https://university.webflow.com/lesson/page-branching)
- `branchId` (string, optional, nullable) — If the Page is a Branch of another Page, this is the ID of the Branch
- `seo` (PagesPatchResponsesContentApplicationJsonSchemaPagesItemsSeo, optional) — SEO-related fields for the Page
- `openGraph` (PagesPatchResponsesContentApplicationJsonSchemaPagesItemsOpenGraph, optional) — Open Graph fields for the Page
- `localeId` (string, optional, nullable) — Unique ID of the page locale
- `publishedPath` (string, optional) — Relative path of the published page URL

### PagesPatchResponsesContentApplicationJsonSchemaDetailsItems

### PagesPatchRequestBodyContentApplicationJsonSchemaPagesItemsSeo

SEO-related fields for the Page

- `title` (string, optional) — The Page title shown in search engine results
- `description` (string, optional) — The Page description shown in search engine results

### PagesPatchRequestBodyContentApplicationJsonSchemaPagesItemsOpenGraph

Open Graph fields for the Page

- `title` (string, optional) — The title supplied to Open Graph annotations
- `titleCopied` (boolean, optional) — Indicates the Open Graph title was copied from the SEO title
- `description` (string, optional) — The description supplied to Open Graph annotations
- `descriptionCopied` (boolean, optional) — Indicates the Open Graph description was copied from the SEO description

### PagesPatchResponsesContentApplicationJsonSchemaPagesItemsSeo

SEO-related fields for the Page

- `title` (string, optional) — The Page title shown in search engine results
- `description` (string, optional) — The Page description shown in search engine results

### PagesPatchResponsesContentApplicationJsonSchemaPagesItemsOpenGraph

Open Graph fields for the Page

- `title` (string, optional) — The title supplied to Open Graph annotations
- `titleCopied` (boolean, optional, default: true) — Indicates the Open Graph title was copied from the SEO title
- `description` (string, optional) — The description supplied to Open Graph annotations
- `descriptionCopied` (boolean, optional, default: true) — Indicates the Open Graph description was copied from the SEO description

## Examples

### MultiplePages

**Request**

```json
{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide to the Galaxy",
      "seo": {
        "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
        "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
      }
    },
    {
      "id": "6596da6045e56dee495bcbad",
      "slug": "towel-day-celebrations",
      "openGraph": {
        "title": "Towel Day - Don't Panic",
        "titleCopied": false,
        "description": "Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.",
        "descriptionCopied": false
      }
    }
  ]
}
```

**Response**

```json
{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "siteId": "6258612d1ee792848f805dcf",
      "title": "Guide to the Galaxy",
      "slug": "guide-to-the-galaxy",
      "createdOn": "2024-03-11T10:42:00.000Z",
      "lastUpdated": "2024-03-11T10:55:00.000Z",
      "archived": false,
      "draft": false,
      "canBranch": false,
      "isBranch": false,
      "branchId": null,
      "seo": {
        "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
        "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
      },
      "openGraph": {
        "title": "Explore the Cosmos with The Ultimate Guide",
        "titleCopied": false,
        "description": "Dive deep into the mysteries of the universe with your guide to everything galactic.",
        "descriptionCopied": false
      },
      "localeId": null,
      "publishedPath": "/guide-to-the-galaxy"
    },
    {
      "id": "6596da6045e56dee495bcbad",
      "siteId": "6258612d1ee792848f805dcf",
      "title": "Towel Day Celebrations",
      "slug": "towel-day-celebrations",
      "createdOn": "2024-05-25T09:00:00.000Z",
      "lastUpdated": "2024-05-25T09:30:00.000Z",
      "archived": false,
      "draft": false,
      "canBranch": true,
      "isBranch": false,
      "branchId": null,
      "seo": {
        "title": "Celebrate Towel Day - The Hitchhiker's Guide to the Galaxy",
        "description": "A guide to celebrating Towel Day, in honor of the most massively useful thing an interstellar hitchhiker can have."
      },
      "openGraph": {
        "title": "Towel Day - Don't Panic",
        "titleCopied": false,
        "description": "Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.",
        "descriptionCopied": false
      },
      "localeId": null,
      "publishedPath": "/towel-day-celebrations"
    }
  ]
}
```

**SDK Code**

```python MultiplePages
import requests

url = "https://api.webflow.com/beta/pages"

payload = { "pages": [
        {
            "id": "6596da6045e56dee495bcbba",
            "title": "Guide to the Galaxy",
            "seo": {
                "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
                "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
            }
        },
        {
            "id": "6596da6045e56dee495bcbad",
            "slug": "towel-day-celebrations",
            "openGraph": {
                "title": "Towel Day - Don't Panic",
                "titleCopied": False,
                "description": "Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.",
                "descriptionCopied": False
            }
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())
```

```javascript MultiplePages
const url = 'https://api.webflow.com/beta/pages';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"pages":[{"id":"6596da6045e56dee495bcbba","title":"Guide to the Galaxy","seo":{"title":"The Ultimate Hitchhiker\'s Guide to the Galaxy","description":"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."}},{"id":"6596da6045e56dee495bcbad","slug":"towel-day-celebrations","openGraph":{"title":"Towel Day - Don\'t Panic","titleCopied":false,"description":"Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.","descriptionCopied":false}}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go MultiplePages
package main

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

func main() {

	url := "https://api.webflow.com/beta/pages"

	payload := strings.NewReader("{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide to the Galaxy\",\n      \"seo\": {\n        \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n        \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n      }\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbad\",\n      \"slug\": \"towel-day-celebrations\",\n      \"openGraph\": {\n        \"title\": \"Towel Day - Don't Panic\",\n        \"titleCopied\": false,\n        \"description\": \"Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.\",\n        \"descriptionCopied\": false\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("PATCH", 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(res)
	fmt.Println(string(body))

}
```

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

url = URI("https://api.webflow.com/beta/pages")

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

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide to the Galaxy\",\n      \"seo\": {\n        \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n        \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n      }\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbad\",\n      \"slug\": \"towel-day-celebrations\",\n      \"openGraph\": {\n        \"title\": \"Towel Day - Don't Panic\",\n        \"titleCopied\": false,\n        \"description\": \"Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.\",\n        \"descriptionCopied\": false\n      }\n    }\n  ]\n}"

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

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

HttpResponse<String> response = Unirest.patch("https://api.webflow.com/beta/pages")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide to the Galaxy\",\n      \"seo\": {\n        \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n        \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n      }\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbad\",\n      \"slug\": \"towel-day-celebrations\",\n      \"openGraph\": {\n        \"title\": \"Towel Day - Don't Panic\",\n        \"titleCopied\": false,\n        \"description\": \"Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.\",\n        \"descriptionCopied\": false\n      }\n    }\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.webflow.com/beta/pages', [
  'body' => '{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide to the Galaxy",
      "seo": {
        "title": "The Ultimate Hitchhiker\'s Guide to the Galaxy",
        "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
      }
    },
    {
      "id": "6596da6045e56dee495bcbad",
      "slug": "towel-day-celebrations",
      "openGraph": {
        "title": "Towel Day - Don\'t Panic",
        "titleCopied": false,
        "description": "Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.",
        "descriptionCopied": false
      }
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp MultiplePages
using RestSharp;

var client = new RestClient("https://api.webflow.com/beta/pages");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide to the Galaxy\",\n      \"seo\": {\n        \"title\": \"The Ultimate Hitchhiker's Guide to the Galaxy\",\n        \"description\": \"Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels.\"\n      }\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbad\",\n      \"slug\": \"towel-day-celebrations\",\n      \"openGraph\": {\n        \"title\": \"Towel Day - Don't Panic\",\n        \"titleCopied\": false,\n        \"description\": \"Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.\",\n        \"descriptionCopied\": false\n      }\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift MultiplePages
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["pages": [
    [
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide to the Galaxy",
      "seo": [
        "title": "The Ultimate Hitchhiker's Guide to the Galaxy",
        "description": "Everything you need to know about the galaxy, from avoiding Vogon poetry to the importance of towels."
      ]
    ],
    [
      "id": "6596da6045e56dee495bcbad",
      "slug": "towel-day-celebrations",
      "openGraph": [
        "title": "Towel Day - Don't Panic",
        "titleCopied": false,
        "description": "Join the galaxy in celebrating Towel Day, the day dedicated to carrying towels everywhere in memory of Douglas Adams.",
        "descriptionCopied": false
      ]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.webflow.com/beta/pages")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```

### LocalizedPages

**Request**

```json
{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide de la galaxie",
      "slug": "guide-de-la-galaxie",
      "seo": {
        "title": "Le guide ultime de la galaxie",
        "description": "Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie."
      },
      "localeId": "653fd9af6a07fc9cfd7a5e57"
    },
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guia de la galaxia",
      "slug": "guia-de-la-galaxia",
      "openGraph": {
        "title": "Explora la galaxia con la guia definitiva",
        "description": "Una guia en espanol para autostopistas intergalacticos."
      },
      "localeId": "653fd9af6a07fc9cfd7a5e58"
    }
  ]
}
```

**Response**

```json
{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "siteId": "6258612d1ee792848f805dcf",
      "title": "Guide de la galaxie",
      "slug": "guide-de-la-galaxie",
      "createdOn": "2024-03-11T10:42:00.000Z",
      "lastUpdated": "2024-03-11T11:05:00.000Z",
      "archived": false,
      "draft": false,
      "canBranch": false,
      "isBranch": false,
      "branchId": null,
      "seo": {
        "title": "Le guide ultime de la galaxie",
        "description": "Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie."
      },
      "openGraph": {
        "title": "Le guide ultime de la galaxie",
        "titleCopied": true,
        "description": "Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie.",
        "descriptionCopied": true
      },
      "localeId": "653fd9af6a07fc9cfd7a5e57",
      "publishedPath": "/fr/guide-de-la-galaxie"
    },
    {
      "id": "6596da6045e56dee495bcbba",
      "siteId": "6258612d1ee792848f805dcf",
      "title": "Guia de la galaxia",
      "slug": "guia-de-la-galaxia",
      "createdOn": "2024-03-11T10:42:00.000Z",
      "lastUpdated": "2024-03-11T11:07:00.000Z",
      "archived": false,
      "draft": false,
      "canBranch": false,
      "isBranch": false,
      "branchId": null,
      "seo": {
        "title": "La guia definitiva de la galaxia",
        "description": "Todo lo que un autoestopista intergalactico necesita saber para explorar la galaxia."
      },
      "openGraph": {
        "title": "Explora la galaxia con la guia definitiva",
        "titleCopied": false,
        "description": "Una guia en espanol para autostopistas intergalacticos.",
        "descriptionCopied": false
      },
      "localeId": "653fd9af6a07fc9cfd7a5e58",
      "publishedPath": "/es/guia-de-la-galaxia"
    }
  ]
}
```

**SDK Code**

```python LocalizedPages
import requests

url = "https://api.webflow.com/beta/pages"

payload = { "pages": [
        {
            "id": "6596da6045e56dee495bcbba",
            "title": "Guide de la galaxie",
            "slug": "guide-de-la-galaxie",
            "seo": {
                "title": "Le guide ultime de la galaxie",
                "description": "Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie."
            },
            "localeId": "653fd9af6a07fc9cfd7a5e57"
        },
        {
            "id": "6596da6045e56dee495bcbba",
            "title": "Guia de la galaxia",
            "slug": "guia-de-la-galaxia",
            "openGraph": {
                "title": "Explora la galaxia con la guia definitiva",
                "description": "Una guia en espanol para autostopistas intergalacticos."
            },
            "localeId": "653fd9af6a07fc9cfd7a5e58"
        }
    ] }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())
```

```javascript LocalizedPages
const url = 'https://api.webflow.com/beta/pages';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"pages":[{"id":"6596da6045e56dee495bcbba","title":"Guide de la galaxie","slug":"guide-de-la-galaxie","seo":{"title":"Le guide ultime de la galaxie","description":"Tout ce qu\'un voyageur interstellaire doit savoir pour explorer la galaxie."},"localeId":"653fd9af6a07fc9cfd7a5e57"},{"id":"6596da6045e56dee495bcbba","title":"Guia de la galaxia","slug":"guia-de-la-galaxia","openGraph":{"title":"Explora la galaxia con la guia definitiva","description":"Una guia en espanol para autostopistas intergalacticos."},"localeId":"653fd9af6a07fc9cfd7a5e58"}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go LocalizedPages
package main

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

func main() {

	url := "https://api.webflow.com/beta/pages"

	payload := strings.NewReader("{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide de la galaxie\",\n      \"slug\": \"guide-de-la-galaxie\",\n      \"seo\": {\n        \"title\": \"Le guide ultime de la galaxie\",\n        \"description\": \"Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e57\"\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guia de la galaxia\",\n      \"slug\": \"guia-de-la-galaxia\",\n      \"openGraph\": {\n        \"title\": \"Explora la galaxia con la guia definitiva\",\n        \"description\": \"Una guia en espanol para autostopistas intergalacticos.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e58\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("PATCH", 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(res)
	fmt.Println(string(body))

}
```

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

url = URI("https://api.webflow.com/beta/pages")

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

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide de la galaxie\",\n      \"slug\": \"guide-de-la-galaxie\",\n      \"seo\": {\n        \"title\": \"Le guide ultime de la galaxie\",\n        \"description\": \"Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e57\"\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guia de la galaxia\",\n      \"slug\": \"guia-de-la-galaxia\",\n      \"openGraph\": {\n        \"title\": \"Explora la galaxia con la guia definitiva\",\n        \"description\": \"Una guia en espanol para autostopistas intergalacticos.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e58\"\n    }\n  ]\n}"

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

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

HttpResponse<String> response = Unirest.patch("https://api.webflow.com/beta/pages")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide de la galaxie\",\n      \"slug\": \"guide-de-la-galaxie\",\n      \"seo\": {\n        \"title\": \"Le guide ultime de la galaxie\",\n        \"description\": \"Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e57\"\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guia de la galaxia\",\n      \"slug\": \"guia-de-la-galaxia\",\n      \"openGraph\": {\n        \"title\": \"Explora la galaxia con la guia definitiva\",\n        \"description\": \"Una guia en espanol para autostopistas intergalacticos.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e58\"\n    }\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.webflow.com/beta/pages', [
  'body' => '{
  "pages": [
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide de la galaxie",
      "slug": "guide-de-la-galaxie",
      "seo": {
        "title": "Le guide ultime de la galaxie",
        "description": "Tout ce qu\'un voyageur interstellaire doit savoir pour explorer la galaxie."
      },
      "localeId": "653fd9af6a07fc9cfd7a5e57"
    },
    {
      "id": "6596da6045e56dee495bcbba",
      "title": "Guia de la galaxia",
      "slug": "guia-de-la-galaxia",
      "openGraph": {
        "title": "Explora la galaxia con la guia definitiva",
        "description": "Una guia en espanol para autostopistas intergalacticos."
      },
      "localeId": "653fd9af6a07fc9cfd7a5e58"
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp LocalizedPages
using RestSharp;

var client = new RestClient("https://api.webflow.com/beta/pages");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"pages\": [\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guide de la galaxie\",\n      \"slug\": \"guide-de-la-galaxie\",\n      \"seo\": {\n        \"title\": \"Le guide ultime de la galaxie\",\n        \"description\": \"Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e57\"\n    },\n    {\n      \"id\": \"6596da6045e56dee495bcbba\",\n      \"title\": \"Guia de la galaxia\",\n      \"slug\": \"guia-de-la-galaxia\",\n      \"openGraph\": {\n        \"title\": \"Explora la galaxia con la guia definitiva\",\n        \"description\": \"Una guia en espanol para autostopistas intergalacticos.\"\n      },\n      \"localeId\": \"653fd9af6a07fc9cfd7a5e58\"\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift LocalizedPages
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["pages": [
    [
      "id": "6596da6045e56dee495bcbba",
      "title": "Guide de la galaxie",
      "slug": "guide-de-la-galaxie",
      "seo": [
        "title": "Le guide ultime de la galaxie",
        "description": "Tout ce qu'un voyageur interstellaire doit savoir pour explorer la galaxie."
      ],
      "localeId": "653fd9af6a07fc9cfd7a5e57"
    ],
    [
      "id": "6596da6045e56dee495bcbba",
      "title": "Guia de la galaxia",
      "slug": "guia-de-la-galaxia",
      "openGraph": [
        "title": "Explora la galaxia con la guia definitiva",
        "description": "Una guia en espanol para autostopistas intergalacticos."
      ],
      "localeId": "653fd9af6a07fc9cfd7a5e58"
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.webflow.com/beta/pages")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

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()
```