REST API endpoints for rules
Use the REST API to manage rulesets for organizations. Organization rulesets control how people can interact with selected branches and tags in repositories in an organization.
Get all organization repository rulesets
Get all the repository rulesets for an organization.
Fine-grained access tokens for "Get all organization repository rulesets"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Get all organization repository rulesets"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description |
|---|
per_page integer The number of results per page (max 100). For more information, see "Using pagination in the REST API." Default: |
page integer The page number of the results to fetch. For more information, see "Using pagination in the REST API." Default: |
targets string A comma-separated list of rule targets to filter by.
If provided, only rulesets that apply to the specified targets will be returned.
For example, |
HTTP response status codes for "Get all organization repository rulesets"
| Status code | Description |
|---|---|
200 | OK |
404 | Resource not found |
500 | Internal Error |
Code samples for "Get all organization repository rulesets"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesetsResponse
Status: 200[
{
"id": 21,
"name": "super cool ruleset",
"source_type": "Organization",
"source": "my-org",
"enforcement": "enabled",
"node_id": "RRS_lACkVXNlcgQB",
"_links": {
"self": {
"href": "https://api.github.com/orgs/my-org/rulesets/21"
},
"html": {
"href": "https://github.com/organizations/my-org/settings/rules/21"
}
},
"created_at": "2023-07-15T08:43:03Z",
"updated_at": "2023-08-23T16:29:47Z"
},
{
"id": 432,
"name": "Another ruleset",
"source_type": "Organization",
"source": "my-org",
"enforcement": "enabled",
"node_id": "RRS_lACkVXNlcgQQ",
"_links": {
"self": {
"href": "https://api.github.com/orgs/my-org/rulesets/432"
},
"html": {
"href": "https://github.com/organizations/my-org/settings/rules/432"
}
},
"created_at": "2023-08-15T08:43:03Z",
"updated_at": "2023-09-23T16:29:47Z"
}
]Create an organization repository ruleset
Create a repository ruleset for an organization.
Fine-grained access tokens for "Create an organization repository ruleset"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Create an organization repository ruleset"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
| Name, Type, Description |
|---|
name string RequiredThe name of the ruleset. |
target string The target of the ruleset Default: Can be one of: |
enforcement string RequiredThe enforcement level of the ruleset. Can be one of: |
bypass_actors array of objects The actors that can bypass the rules in this ruleset |
conditions object Conditions for an organization ruleset.
The branch and tag rulesets conditions object should contain both |
rules array of objects An array of rules within the ruleset. |
HTTP response status codes for "Create an organization repository ruleset"
| Status code | Description |
|---|---|
201 | Created |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
500 | Internal Error |
Code samples for "Create an organization repository ruleset"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets \
-d '{"name":"super cool ruleset","target":"branch","enforcement":"active","bypass_actors":[{"actor_id":234,"actor_type":"Team","bypass_mode":"always"}],"conditions":{"ref_name":{"include":["refs/heads/main","refs/heads/master"],"exclude":["refs/heads/dev*"]},"repository_name":{"include":["important_repository","another_important_repository"],"exclude":["unimportant_repository"],"protected":true}},"rules":[{"type":"commit_author_email_pattern","parameters":{"operator":"contains","pattern":"github"}}]}'Response
Status: 201{
"id": 21,
"name": "super cool ruleset",
"target": "branch",
"source_type": "Organization",
"source": "my-org",
"enforcement": "active",
"bypass_actors": [
{
"actor_id": 234,
"actor_type": "Team",
"bypass_mode": "always"
}
],
"conditions": {
"ref_name": {
"include": [
"refs/heads/main",
"refs/heads/master"
],
"exclude": [
"refs/heads/dev*"
]
},
"repository_name": {
"include": [
"important_repository",
"another_important_repository"
],
"exclude": [
"unimportant_repository"
],
"protected": true
}
},
"rules": [
{
"type": "commit_author_email_pattern",
"parameters": {
"operator": "contains",
"pattern": "github"
}
}
],
"node_id": "RRS_lACkVXNlcgQB",
"_links": {
"self": {
"href": "https://api.github.com/orgs/my-org/rulesets/21"
},
"html": {
"href": "https://github.com/organizations/my-org/settings/rules/21"
}
},
"created_at": "2023-08-15T08:43:03Z",
"updated_at": "2023-09-23T16:29:47Z"
}Get an organization repository ruleset
Get a repository ruleset for an organization.
Note: To prevent leaking sensitive information, the bypass_actors property is only returned if the user
making the API request has write access to the ruleset.
Fine-grained access tokens for "Get an organization repository ruleset"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Get an organization repository ruleset"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
ruleset_id integer RequiredThe ID of the ruleset. |
HTTP response status codes for "Get an organization repository ruleset"
| Status code | Description |
|---|---|
200 | OK |
404 | Resource not found |
500 | Internal Error |
Code samples for "Get an organization repository ruleset"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets/RULESET_IDResponse
Status: 200{
"id": 21,
"name": "super cool ruleset",
"target": "branch",
"source_type": "Organization",
"source": "my-org",
"enforcement": "active",
"bypass_actors": [
{
"actor_id": 234,
"actor_type": "Team",
"bypass_mode": "always"
}
],
"conditions": {
"ref_name": {
"include": [
"refs/heads/main",
"refs/heads/master"
],
"exclude": [
"refs/heads/dev*"
]
},
"repository_name": {
"include": [
"important_repository",
"another_important_repository"
],
"exclude": [
"unimportant_repository"
],
"protected": true
}
},
"rules": [
{
"type": "commit_author_email_pattern",
"parameters": {
"operator": "contains",
"pattern": "github"
}
}
],
"node_id": "RRS_lACkVXNlcgQB",
"_links": {
"self": {
"href": "https://api.github.com/orgs/my-org/rulesets/21"
},
"html": {
"href": "https://github.com/organizations/my-org/settings/rules/21"
}
},
"created_at": "2023-08-15T08:43:03Z",
"updated_at": "2023-09-23T16:29:47Z"
}Update an organization repository ruleset
Update a ruleset for an organization.
Fine-grained access tokens for "Update an organization repository ruleset"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Update an organization repository ruleset"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
ruleset_id integer RequiredThe ID of the ruleset. |
| Name, Type, Description |
|---|
name string The name of the ruleset. |
target string The target of the ruleset Can be one of: |
enforcement string The enforcement level of the ruleset. Can be one of: |
bypass_actors array of objects The actors that can bypass the rules in this ruleset |
conditions object Conditions for an organization ruleset.
The branch and tag rulesets conditions object should contain both |
rules array of objects An array of rules within the ruleset. |
HTTP response status codes for "Update an organization repository ruleset"
| Status code | Description |
|---|---|
200 | OK |
404 | Resource not found |
422 | Validation failed, or the endpoint has been spammed. |
500 | Internal Error |
Code samples for "Update an organization repository ruleset"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X PUT \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets/RULESET_ID \
-d '{"name":"super cool ruleset","target":"branch","enforcement":"active","bypass_actors":[{"actor_id":234,"actor_type":"Team","bypass_mode":"always"}],"conditions":{"ref_name":{"include":["refs/heads/main","refs/heads/master"],"exclude":["refs/heads/dev*"]},"repository_name":{"include":["important_repository","another_important_repository"],"exclude":["unimportant_repository"],"protected":true}},"rules":[{"type":"commit_author_email_pattern","parameters":{"operator":"contains","pattern":"github"}}]}'Response
Status: 200{
"id": 21,
"name": "super cool ruleset",
"target": "branch",
"source_type": "Organization",
"source": "my-org",
"enforcement": "active",
"bypass_actors": [
{
"actor_id": 234,
"actor_type": "Team",
"bypass_mode": "always"
}
],
"conditions": {
"ref_name": {
"include": [
"refs/heads/main",
"refs/heads/master"
],
"exclude": [
"refs/heads/dev*"
]
},
"repository_name": {
"include": [
"important_repository",
"another_important_repository"
],
"exclude": [
"unimportant_repository"
],
"protected": true
}
},
"rules": [
{
"type": "commit_author_email_pattern",
"parameters": {
"operator": "contains",
"pattern": "github"
}
}
],
"node_id": "RRS_lACkVXNlcgQB",
"_links": {
"self": {
"href": "https://api.github.com/orgs/my-org/rulesets/21"
},
"html": {
"href": "https://github.com/organizations/my-org/settings/rules/21"
}
},
"created_at": "2023-08-15T08:43:03Z",
"updated_at": "2023-09-23T16:29:47Z"
}Delete an organization repository ruleset
Delete a ruleset for an organization.
Fine-grained access tokens for "Delete an organization repository ruleset"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Delete an organization repository ruleset"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
ruleset_id integer RequiredThe ID of the ruleset. |
HTTP response status codes for "Delete an organization repository ruleset"
| Status code | Description |
|---|---|
204 | No Content |
404 | Resource not found |
500 | Internal Error |
Code samples for "Delete an organization repository ruleset"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets/RULESET_IDResponse
Status: 204Get organization ruleset history
Get the history of an organization ruleset.
Fine-grained access tokens for "Get organization ruleset history"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Get organization ruleset history"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
ruleset_id integer RequiredThe ID of the ruleset. |
| Name, Type, Description |
|---|
per_page integer The number of results per page (max 100). For more information, see "Using pagination in the REST API." Default: |
page integer The page number of the results to fetch. For more information, see "Using pagination in the REST API." Default: |
HTTP response status codes for "Get organization ruleset history"
| Status code | Description |
|---|---|
200 | OK |
404 | Resource not found |
500 | Internal Error |
Code samples for "Get organization ruleset history"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets/RULESET_ID/historyResponse
Status: 200[
{
"version_id": 3,
"actor": {
"id": 1,
"type": "User"
},
"updated_at": "2024-10-23T16:29:47Z"
},
{
"version_id": 2,
"actor": {
"id": 2,
"type": "User"
},
"updated_at": "2024-09-23T16:29:47Z"
},
{
"version_id": 1,
"actor": {
"id": 1,
"type": "User"
},
"updated_at": "2024-08-23T16:29:47Z"
}
]Get organization ruleset version
Get a version of an organization ruleset.
Fine-grained access tokens for "Get organization ruleset version"
This endpoint works with the following fine-grained token types:
- GitHub App user access tokens
- GitHub App installation access tokens
- Fine-grained personal access tokens
The fine-grained token must have the following permission set:
- "Administration" organization permissions (write)
Parameters for "Get organization ruleset version"
| Name, Type, Description |
|---|
accept string Setting to |
| Name, Type, Description |
|---|
org string RequiredThe organization name. The name is not case sensitive. |
ruleset_id integer RequiredThe ID of the ruleset. |
version_id integer RequiredThe ID of the version |
HTTP response status codes for "Get organization ruleset version"
| Status code | Description |
|---|---|
200 | OK |
404 | Resource not found |
500 | Internal Error |
Code samples for "Get organization ruleset version"
If you access GitHub at GHE.com, replace api.github.com with your enterprise's dedicated subdomain at api.SUBDOMAIN.ghe.com.
Request example
curl -L \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2026-03-10" \
https://api.github.com/orgs/ORG/rulesets/RULESET_ID/history/VERSION_IDResponse
Status: 200{
"version_id": 3,
"actor": {
"id": 1,
"type": "User"
},
"updated_at": "2024-10-23T16:29:47Z",
"state": {
"id": 21,
"name": "super cool ruleset",
"target": "branch",
"source_type": "Organization",
"source": "my-org",
"enforcement": "active",
"bypass_actors": [
{
"actor_id": 234,
"actor_type": "Team",
"bypass_mode": "always"
}
],
"conditions": {
"ref_name": {
"include": [
"refs/heads/main",
"refs/heads/master"
],
"exclude": [
"refs/heads/dev*"
]
},
"repository_name": {
"include": [
"important_repository",
"another_important_repository"
],
"exclude": [
"unimportant_repository"
],
"protected": true
}
},
"rules": [
{
"type": "commit_author_email_pattern",
"parameters": {
"operator": "contains",
"pattern": "github"
}
}
]
}
}