跳转到主要内容

Create a ruleset

import { Description, Type, MetaInfo, Render, APIRequest } from "~/components";

Creates a ruleset of a given kind in the specified phase. Allows you to create phase entry point rulesets.

Use one of the following API endpoints:

Parameters

A POST request to create a ruleset supports the following parameters in the request body:

  • name
    • A human-readable name for the ruleset.
    • The name is immutable. You cannot change it over the lifetime of the ruleset.
  • description
    • Optional description for the ruleset.
    • You can change the description over the lifetime of the ruleset.
  • kind
    • The kind of ruleset the JSON object represents.
    • Allowed values:
      • custom: Creates a custom ruleset
      • root: Creates a phase entry point ruleset at the account level
      • zone: Creates a phase entry point ruleset at the zone level
  • phase
    • The name of the phase where the ruleset will be created.
    • Check the phases list or the specific Cloudflare product documentation for more information on the phases where you can create rulesets for that product.
  • rules
    • A list of rules to include in the ruleset.

For additional details on these parameters, refer to JSON objects.

Example - Create a custom ruleset

The following POST request creates a custom ruleset in the http_request_firewall_custom phase at the account level containing a single rule.

<APIRequest path="/accounts/{account_id}/rulesets" method="POST" json={{ name: "Example custom ruleset", kind: "custom", description: "Example ruleset description", rules: [ { action: "log", expression: 'cf.zone.name eq "example.com"', }, ], phase: "http_request_firewall_custom", }} />

{
	"result": {
		"id": "<RULESET_ID>",
		"name": "Example custom ruleset",
		"description": "Example ruleset description",
		"kind": "custom",
		"version": "1",
		"rules": [
			{
				"id": "<RULE_ID>",
				"version": "1",
				"action": "log",
				"expression": "cf.zone.name eq \"example.com\"",
				"last_updated": "2025-03-17T15:42:37.917815Z"
			}
		],
		"last_updated": "2025-03-17T15:42:37.917815Z",
		"phase": "http_request_firewall_custom"
	},
	"success": true,
	"errors": [],
	"messages": []
}

Example - Create a zone-level phase entry point ruleset

The following POST request creates a zone-level phase entry point ruleset at the http_request_firewall_managed phase with a single rule that executes a managed ruleset.

:::note You do not have to use this method to create a phase entry point ruleset. Cloudflare automatically creates the entry point ruleset when you add a rule to it, if it does not exist. Refer to Add rules to phase entry point rulesets for more information. :::

<APIRequest path="/zones/{zone_id}/rulesets" method="POST" json={{ name: "Zone-level phase entry point", kind: "zone", description: "This ruleset executes a managed ruleset.", rules: [ { action: "execute", expression: "true", action_parameters: { id: "<MANAGED_RULESET_ID>", }, }, ], phase: "http_request_firewall_managed", }} />

{
	"result": {
		"id": "<RULESET_ID>",
		"name": "Zone-level phase entry point",
		"description": "This ruleset executes a managed ruleset.",
		"kind": "zone",
		"version": "1",
		"rules": [
			{
				"id": "<RULE_ID>",
				"version": "1",
				"action": "execute",
				"expression": "true",
				"action_parameters": {
					"id": "<MANAGED_RULESET_ID>"
				},
				"last_updated": "2025-03-17T15:42:37.917815Z"
			}
		],
		"last_updated": "2025-03-17T15:42:37.917815Z",
		"phase": "http_request_firewall_managed"
	},
	"success": true,
	"errors": [],
	"messages": []
}

Example - Create an account-level phase entry point ruleset

The following POST request creates an account-level phase entry point ruleset for the http_ratelimit phase with a single rule that executes a rate limiting ruleset for all Enterprise zones in the account.

:::note You do not have to use this method to create a phase entry point ruleset. Cloudflare automatically creates the entry point ruleset when you add a rule to it, if it does not exist. Refer to Add rules to phase entry point rulesets for more information. :::

<APIRequest path="/accounts/{account_id}/rulesets" method="POST" json={{ name: "Account-level phase entry point", kind: "root", description: "This ruleset executes a rate limiting ruleset.", rules: [ { action: "execute", expression: '(cf.zone.plan eq "ENT")', action_parameters: { id: "<RATE_LIMITING_RULESET_ID>", }, }, ], phase: "http_ratelimit", }} />

{
	"result": {
		"id": "<RULESET_ID>",
		"name": "Account-level phase entry point",
		"description": "This ruleset executes a rate limiting ruleset.",
		"kind": "root",
		"version": "1",
		"rules": [
			{
				"id": "<RULE_ID>",
				"version": "1",
				"action": "execute",
				"expression": "(cf.zone.plan eq \"ENT\")",
				"action_parameters": {
					"id": "<RATE_LIMITING_RULESET_ID>"
				},
				"last_updated": "2024-09-17T15:42:37.917815Z"
			}
		],
		"last_updated": "2024-09-17T15:42:37.917815Z",
		"phase": "http_ratelimit"
	},
	"success": true,
	"errors": [],
	"messages": []
}