# Custom Pages ## List custom pages `custom_pages.list(CustomPageListParams**kwargs) -> SyncSinglePage[CustomPageListResponse]` **get** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages` Fetches all the custom pages. ### Parameters - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class CustomPageListResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) page = client.custom_pages.list( account_id="account_id", ) page = page.result[0] print(page.id) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": [ { "id": "basic_challenge", "created_on": "2014-01-01T05:20:00.12345Z", "description": "Basic Challenge", "modified_on": "2014-01-01T05:20:00.12345Z", "preview_target": "block:basic-sec-captcha", "required_tokens": [ "::CAPTCHA_BOX::" ], "state": "default", "url": "http://www.example.com" } ], "result_info": { "count": 1, "page": 1, "per_page": 20, "total_count": 2000, "total_pages": 100 } } ``` ## Get a custom page `custom_pages.get(Literal["1000_errors", "500_errors", "basic_challenge", 7 more]identifier, CustomPageGetParams**kwargs) -> CustomPageGetResponse` **get** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/{identifier}` Fetches the details of a custom page. ### Parameters - `identifier: Literal["1000_errors", "500_errors", "basic_challenge", 7 more]` Error Page Types - `"1000_errors"` - `"500_errors"` - `"basic_challenge"` - `"country_challenge"` - `"ip_block"` - `"managed_challenge"` - `"ratelimit_block"` - `"under_attack"` - `"waf_block"` - `"waf_challenge"` - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class CustomPageGetResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) custom_page = client.custom_pages.get( identifier="ratelimit_block", account_id="account_id", ) print(custom_page.id) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "id": "basic_challenge", "created_on": "2014-01-01T05:20:00.12345Z", "description": "Basic Challenge", "modified_on": "2014-01-01T05:20:00.12345Z", "preview_target": "block:basic-sec-captcha", "required_tokens": [ "::CAPTCHA_BOX::" ], "state": "default", "url": "http://www.example.com" } } ``` ## Update a custom page `custom_pages.update(Literal["1000_errors", "500_errors", "basic_challenge", 7 more]identifier, CustomPageUpdateParams**kwargs) -> CustomPageUpdateResponse` **put** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/{identifier}` Updates the configuration of an existing custom page. ### Parameters - `identifier: Literal["1000_errors", "500_errors", "basic_challenge", 7 more]` Error Page Types - `"1000_errors"` - `"500_errors"` - `"basic_challenge"` - `"country_challenge"` - `"ip_block"` - `"managed_challenge"` - `"ratelimit_block"` - `"under_attack"` - `"waf_block"` - `"waf_challenge"` - `state: Literal["default", "customized"]` The custom page state. - `"default"` - `"customized"` - `url: str` The URL associated with the custom page. - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class CustomPageUpdateResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) custom_page = client.custom_pages.update( identifier="ratelimit_block", state="default", url="http://www.example.com", account_id="account_id", ) print(custom_page.id) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "id": "basic_challenge", "created_on": "2014-01-01T05:20:00.12345Z", "description": "Basic Challenge", "modified_on": "2014-01-01T05:20:00.12345Z", "preview_target": "block:basic-sec-captcha", "required_tokens": [ "::CAPTCHA_BOX::" ], "state": "default", "url": "http://www.example.com" } } ``` ## Domain Types ### Custom Page List Response - `class CustomPageListResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. ### Custom Page Get Response - `class CustomPageGetResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. ### Custom Page Update Response - `class CustomPageUpdateResponse: …` - `id: Optional[str]` - `created_on: Optional[datetime]` - `description: Optional[str]` - `modified_on: Optional[datetime]` - `preview_target: Optional[str]` - `required_tokens: Optional[List[str]]` - `state: Optional[Literal["default", "customized"]]` The custom page state. - `"default"` - `"customized"` - `url: Optional[str]` The URL associated with the custom page. # Assets ## List custom assets `custom_pages.assets.list(AssetListParams**kwargs) -> SyncV4PagePaginationArray[AssetListResponse]` **get** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/assets` Fetches all the custom assets. ### Parameters - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. - `page: Optional[int]` - `per_page: Optional[int]` ### Returns - `class AssetListResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) page = client.custom_pages.assets.list( account_id="account_id", ) page = page.result[0] print(page.description) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": [ { "description": "Custom 500 error page", "last_updated": "2014-01-01T05:20:00.12345Z", "name": "my_custom_error_page", "size_bytes": 1024, "url": "https://example.com/error.html" } ], "result_info": { "count": 1, "page": 1, "per_page": 20, "total_count": 2000, "total_pages": 100 } } ``` ## Get a custom asset `custom_pages.assets.get(strasset_name, AssetGetParams**kwargs) -> AssetGetResponse` **get** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/assets/{asset_name}` Fetches the details of a custom asset. ### Parameters - `asset_name: str` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class AssetGetResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) asset = client.custom_pages.assets.get( asset_name="my_custom_error_page", account_id="account_id", ) print(asset.description) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "description": "Custom 500 error page", "last_updated": "2014-01-01T05:20:00.12345Z", "name": "my_custom_error_page", "size_bytes": 1024, "url": "https://example.com/error.html" } } ``` ## Create a custom asset `custom_pages.assets.create(AssetCreateParams**kwargs) -> AssetCreateResponse` **post** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/assets` Creates a new custom asset. ### Parameters - `description: str` A short description of the custom asset. - `name: str` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `url: str` The URL where the asset content is fetched from. - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class AssetCreateResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) asset = client.custom_pages.assets.create( description="Custom 500 error page", name="my_custom_error_page", url="https://example.com/error.html", account_id="account_id", ) print(asset.description) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "description": "Custom 500 error page", "last_updated": "2014-01-01T05:20:00.12345Z", "name": "my_custom_error_page", "size_bytes": 1024, "url": "https://example.com/error.html" } } ``` ## Update a custom asset `custom_pages.assets.update(strasset_name, AssetUpdateParams**kwargs) -> AssetUpdateResponse` **put** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/assets/{asset_name}` Updates the configuration of an existing custom asset. ### Parameters - `asset_name: str` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `description: str` A short description of the custom asset. - `url: str` The URL where the asset content is fetched from. - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Returns - `class AssetUpdateResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) asset = client.custom_pages.assets.update( asset_name="my_custom_error_page", description="Custom 500 error page", url="https://example.com/error.html", account_id="account_id", ) print(asset.description) ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "success": true, "result": { "description": "Custom 500 error page", "last_updated": "2014-01-01T05:20:00.12345Z", "name": "my_custom_error_page", "size_bytes": 1024, "url": "https://example.com/error.html" } } ``` ## Delete a custom asset `custom_pages.assets.delete(strasset_name, AssetDeleteParams**kwargs)` **delete** `/{accounts_or_zones}/{account_or_zone_id}/custom_pages/assets/{asset_name}` Deletes an existing custom asset. ### Parameters - `asset_name: str` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `account_id: Optional[str]` The Account ID to use for this endpoint. Mutually exclusive with the Zone ID. - `zone_id: Optional[str]` The Zone ID to use for this endpoint. Mutually exclusive with the Account ID. ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_email=os.environ.get("CLOUDFLARE_EMAIL"), # This is the default and can be omitted api_key=os.environ.get("CLOUDFLARE_API_KEY"), # This is the default and can be omitted ) client.custom_pages.assets.delete( asset_name="my_custom_error_page", account_id="account_id", ) ``` ## Domain Types ### Asset List Response - `class AssetListResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Asset Get Response - `class AssetGetResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Asset Create Response - `class AssetCreateResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from. ### Asset Update Response - `class AssetUpdateResponse: …` - `description: Optional[str]` A short description of the custom asset. - `last_updated: Optional[datetime]` - `name: Optional[str]` The unique name of the custom asset. Can only contain letters (A-Z, a-z), numbers (0-9), and underscores (_). - `size_bytes: Optional[int]` The size of the asset content in bytes. - `url: Optional[str]` The URL where the asset content is fetched from.