Collections

Update a public page

PUT
/v2/asset_management/{cloud_name}/collections/{collection_id}/public_pages/{public_page_id}

Updates the settings of a collection's public page and returns the updated page. Protecting a page (protection_mode: email_otp) requires the secured-sharing feature on your plan; otherwise the request fails with 403. Invalid protection settings fail with 400 and error code invalid_protection_settings, listing every problem found.

Authorization

AuthorizationBasic <token>

Basic authentication using Cloudinary API Key and API Secret.

In: header

Path Parameters

cloud_name*string

The cloud name of your Cloudinary product environment.

collection_id*string

External ID of the collection the public page belongs to.

public_page_id*string

External ID of the public page.

Request Body

application/json

Partial-update payload. Only the fields you include are forwarded and changed; any field you omit is left unchanged. Sending null does not clear a value.

name?|

New display name for the public page. Omit to leave the current value unchanged.

available_from?|

New activation time for the page. Omit to leave the current value unchanged.

Formatdate-time
expires_at?|

New expiry time for the page. Omit to leave the current value unchanged.

Formatdate-time
show_download_original_option?|

Whether viewers may download the original asset. Omit to leave the current value unchanged.

download_transformations?array<>|

Named transformations that viewers of the public page can apply when downloading assets, referenced by name (see the Admin API's Get transformations endpoint to list the named transformations in your product environment). The list replaces the page's current download transformations; pass an empty list to remove them all. Omit to leave the current value unchanged. At most 200 entries.

Itemsitems <= 200
create_download_transformations?|

When true, any name in download_transformations that isn't yet set as a transformation template is set as one automatically. It then appears in the Console's templates list and counts toward your product environment's template limit. When false or omitted, the request instead fails with download_transformation_not_available if any listed name isn't yet set as a transformation template, and nothing is changed.

Defaultfalse
protection_mode?|

Secured-sharing protection mode. none removes protection and clears the allowed emails, domains and allow_any. email_otp protects the page so viewers must verify an allowed email address with a one-time passcode; a protected page needs at least one allowed email or domain, or allow_any: true. Omit to leave the current mode unchanged: on a protected page the allowlist fields below then update its allowlist, but on an unprotected page they are ignored, so send email_otp to protect it.

Value in

  • "none"
  • "email_otp"
allowed_emails?array<>|

Email addresses allowed to access the page when it is protected. The list replaces the current one; send an empty array to clear it (the page must still satisfy the allow_any rule). Together with allowed_domains, at most 500 entries. Omit to leave the current value unchanged.

allowed_domains?array<>|

Email domains allowed to access the page when it is protected, as bare lowercase domains such as example.com. The list replaces the current one; send an empty array to clear it (the page must still satisfy the allow_any rule). Together with allowed_emails, at most 500 entries. Omit to leave the current value unchanged.

allow_any?|

Whether any email address is allowed to access the page when it is protected. After the update, an email_otp page needs allow_any: true or at least one entry in allowed_emails or allowed_domains; otherwise the request fails with 400 invalid_protection_settings. Omit to leave the current value unchanged.

custom_layout_url?|

URL of a custom HTML page in your product environment to use in place of the public page's default design. It must be an https URL on a cloudinary.com host that belongs to this product environment, at most 2048 bytes. Setting it requires the custom collection layout feature on your plan; otherwise the request fails with 403. Pass an empty string to return to the default design. Omit to leave the current value unchanged.

Match^(|https://[A-Za-z0-9.-]+\.cloudinary\.com/.*)$
Lengthlength <= 2048

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/v2/asset_management/demo/collections/col_8f3a2b1c9d4e/public_pages/pub_2c4d6e8f0a1b" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "id": "pub_2c4d6e8f0a1b",    "url": "https://collection.cloudinary.com/your-cloud-name/pub_2c4d6e8f0a1b",    "name": "Summer Campaign Preview",    "available_from": "2026-03-20T00:00:00Z",    "expires_at": "2026-04-20T00:00:00Z",    "show_download_original_option": true,    "download_transformations": [      {        "name": "thumbnail_400",        "transformation": "c_thumb,w_400,g_face",        "types": [          "image"        ]      }    ],    "protection_mode": "email_otp",    "allowed_emails": [      "alice@example.com",      "bob@example.com"    ],    "allowed_domains": [      "example.com"    ],    "allow_any": false,    "custom_layout_url": "https://res.cloudinary.com/demo/raw/upload/layouts/summer-page.html"  }}