When configuring a webhook, you can choose which events will send you payloads. To limit the number of HTTP requests to your server, you should only subscribe to the specific events that you plan on handling. By default, webhooks installed on GitHub Enterprise, an [organization][org-hooks], or a [repository][repo-hooks] are only subscribed to the push event. By default, webhooks on GitHub Apps are not subscribed to any events. You can change events that a webhook is subscribed to at any time.
You can create webhooks that subscribe to the events listed on this page. Each webhook event includes a description of the webhook properties and an example payload. For more information, see "Creating webhooks."
Webhook payload object common properties
Each webhook event payload also contains properties unique to the event. You can find the unique properties in the individual event type sections.
| Key | Type | Description |
|---|---|---|
action | string | Most webhook payloads contain an action property that contains the specific activity that triggered the event. |
sender | object | The user that triggered the event. This property is included in every webhook payload. |
repository | object | The repository where the event occurred. Webhook payloads contain the repository property when the event occurs from activity in a repository. |
organization | object | Webhook payloads contain the organization object when the webhook is configured for an organization or the event occurs from activity in a repository owned by an organization. |
installation | object | The GitHub App installation. Webhook payloads contain the installation property when the event is configured for and sent to a GitHub App. For more information, see "Registering a GitHub App." |
The unique properties for a webhook event are the same properties you'll find in the payload property when using the Events API. One exception is the push event. The unique properties of the push event webhook payload and the payload property in the Events API differ. The webhook payload contains more detailed information.
Note: Payloads are capped at 25 MB. If your event generates a larger payload, a webhook will not be fired. This may happen, for example, on a create event if many branches or tags are pushed at once. We suggest monitoring your payload size to ensure delivery.
Delivery headers
HTTP POST payloads that are delivered to your webhook's configured URL endpoint will contain several special headers.
X-GitHub-Event: Name of the event that triggered the delivery.X-GitHub-Delivery: A GUID to identify the delivery.X-GitHub-Enterprise-Version: The version of the GitHub Enterprise Server instance that sent the HTTP POST payload.X-GitHub-Enterprise-Host: The hostname of the GitHub Enterprise Server instance that sent the HTTP POST payload.X-Hub-Signature: This header is sent if the webhook is configured with asecret. This is the HMAC hex digest of the request body, and is generated using the SHA-1 hash function and thesecretas the HMACkey.X-Hub-Signatureis provided for compatibility with existing integrations, and we recommend that you use the more secureX-Hub-Signature-256instead.X-Hub-Signature-256: This header is sent if the webhook is configured with asecret. This is the HMAC hex digest of the request body, and is generated using the SHA-256 hash function and thesecretas the HMACkey.
Also, the User-Agent for the requests will have the prefix GitHub-Hookshot/.
Example delivery
> POST /payload HTTP/2
> Host: localhost:4567
> X-GitHub-Delivery: 72d3162e-cc78-11e3-81ab-4c9367dc0958
> X-GitHub-Enterprise-Version: 2.15.0
> X-GitHub-Enterprise-Host: example.com
> X-Hub-Signature: sha1=7d38cdd689735b008b3c702edd92eea23791c5f6
> X-Hub-Signature-256: sha256=d57c68ca6f92289e6987922ff26938930f6e66a2d161ef06abdf1859230aa23c
> User-Agent: GitHub-Hookshot/044aadd
> Content-Type: application/json
> Content-Length: 6615
> X-GitHub-Event: issues
> {
> "action": "opened",
> "issue": {
> "url": "http(s)://HOSTNAME/api/v3/repos/octocat/Hello-World/issues/1347",
> "number": 1347,
> ...
> },
> "repository" : {
> "id": 1296269,
> "full_name": "octocat/Hello-World",
> "owner": {
> "login": "octocat",
> "id": 1,
> ...
> },
> ...
> },
> "sender": {
> "login": "octocat",
> "id": 1,
> ...
> }
> }branch_protection_rule
Availability for branch_protection_rule
- Repository webhooks
- Organization webhooks
- GitHub Apps with Administration repository permission
Webhook payload object for branch_protection_rule
| Headers |
|---|
| Name, Type, Description |
| Body parameters |
| Name, Type, Description |
action string The action performed. Can be created, edited, or deleted. |
rule object The branch protection rule. Includes a name and all the branch protection settings applied to branches that match the name. Binary settings are boolean. Multi-level configurations are one of off, non_admins, or everyone. Actor and build lists are arrays of strings. |
changes object If the action was edited, the changes to the rule. |
repository object The repository where the event occurred. |
organization object Webhook payloads contain the organization object when the webhook is configured for an organization or the event occurs from activity in a repository owned by an organization. |
sender object The user that triggered the event. |
Webhook payload example
{
"action": "edited",
"rule": {
"id": 21796960,
"repository_id": 259377789,
"name": "production",
"created_at": "2021-08-19T12:16:32.000-04:00",
"updated_at": "2021-08-19T12:16:32.000-04:00",
"pull_request_reviews_enforcement_level": "off",
"required_approving_review_count": 1,
"dismiss_stale_reviews_on_push": false,
"require_code_owner_review": false,
"authorized_dismissal_actors_only": false,
"ignore_approvals_from_contributors": false,
"required_status_checks": [
"basic-CI"
],
"required_status_checks_enforcement_level": "non_admins",
"strict_required_status_checks_policy": false,
"signature_requirement_enforcement_level": "off",
"linear_history_requirement_enforcement_level": "off",
"admin_enforced": false,
"allow_force_pushes_enforcement_level": "off",
"allow_deletions_enforcement_level": "off",
"merge_queue_enforcement_level": "off",
"required_deployments_enforcement_level": "off",
"required_conversation_resolution_level": "off",
"authorized_actors_only": true,
"authorized_actor_names": [
"Codertocat"
]
},
"changes": {
"authorized_actors_only": {
"from": false
},
"authorized_actor_names": {
"from": []
}
},
"repository": {
"id": 17273051,
"node_id": "MDEwOlJlcG9zaXRvcnkxNzI3MzA1MQ==",
"name": "octo-repo",
"full_name": "octo-org/octo-repo",
"private": true,
"owner": {
"login": "octo-org",
"id": 6811672,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=",
"avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/octo-org",
"html_url": "https://github.com/octo-org",
"followers_url": "https://api.github.com/users/octo-org/followers",
"following_url": "https://api.github.com/users/octo-org/following{/other_user}",
"gists_url": "https://api.github.com/users/octo-org/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octo-org/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octo-org/subscriptions",
"organizations_url": "https://api.github.com/users/octo-org/orgs",
"repos_url": "https://api.github.com/users/octo-org/repos",
"events_url": "https://api.github.com/users/octo-org/events{/privacy}",
"received_events_url": "https://api.github.com/users/octo-org/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/octo-org/octo-repo",
"description": "My first repo on GitHub!",
"fork": false,
"url": "https://api.github.com/repos/octo-org/octo-repo",
"forks_url": "https://api.github.com/repos/octo-org/octo-repo/forks",
"keys_url": "https://api.github.com/repos/octo-org/octo-repo/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/octo-org/octo-repo/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/octo-org/octo-repo/teams",
"hooks_url": "https://api.github.com/repos/octo-org/octo-repo/hooks",
"issue_events_url": "https://api.github.com/repos/octo-org/octo-repo/issues/events{/number}",
"events_url": "https://api.github.com/repos/octo-org/octo-repo/events",
"assignees_url": "https://api.github.com/repos/octo-org/octo-repo/assignees{/user}",
"branches_url": "https://api.github.com/repos/octo-org/octo-repo/branches{/branch}",
"tags_url": "https://api.github.com/repos/octo-org/octo-repo/tags",
"blobs_url": "https://api.github.com/repos/octo-org/octo-repo/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/octo-org/octo-repo/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/octo-org/octo-repo/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/octo-org/octo-repo/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/octo-org/octo-repo/statuses/{sha}",
"languages_url": "https://api.github.com/repos/octo-org/octo-repo/languages",
"stargazers_url": "https://api.github.com/repos/octo-org/octo-repo/stargazers",
"contributors_url": "https://api.github.com/repos/octo-org/octo-repo/contributors",
"subscribers_url": "https://api.github.com/repos/octo-org/octo-repo/subscribers",
"subscription_url": "https://api.github.com/repos/octo-org/octo-repo/subscription",
"commits_url": "https://api.github.com/repos/octo-org/octo-repo/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/octo-org/octo-repo/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/octo-org/octo-repo/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/octo-org/octo-repo/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/octo-org/octo-repo/contents/{+path}",
"compare_url": "https://api.github.com/repos/octo-org/octo-repo/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/octo-org/octo-repo/merges",
"archive_url": "https://api.github.com/repos/octo-org/octo-repo/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/octo-org/octo-repo/downloads",
"issues_url": "https://api.github.com/repos/octo-org/octo-repo/issues{/number}",
"pulls_url": "https://api.github.com/repos/octo-org/octo-repo/pulls{/number}",
"milestones_url": "https://api.github.com/repos/octo-org/octo-repo/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octo-org/octo-repo/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/octo-org/octo-repo/labels{/name}",
"releases_url": "https://api.github.com/repos/octo-org/octo-repo/releases{/id}",
"deployments_url": "https://api.github.com/repos/octo-org/octo-repo/deployments",
"created_at": "2014-02-28T02:42:51Z",
"updated_at": "2021-03-11T14:54:13Z",
"pushed_at": "2021-03-11T14:54:10Z",
"git_url": "git://github.com/octo-org/octo-repo.git",
"ssh_url": "org-6811672@github.com:octo-org/octo-repo.git",
"clone_url": "https://github.com/octo-org/octo-repo.git",
"svn_url": "https://github.com/octo-org/octo-repo",
"homepage": "",
"size": 300,
"stargazers_count": 0,
"watchers_count": 0,
"language": "JavaScript",
"has_issues": true,
"has_projects": false,
"has_downloads": true,
"has_wiki": false,
"has_pages": true,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 39,
"license": null,
"forks": 0,
"open_issues": 39,
"watchers": 0,
"default_branch": "main"
},
"organization": {
"login": "octo-org",
"id": 6811672,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjY4MTE2NzI=",
"url": "https://api.github.com/orgs/octo-org",
"repos_url": "https://api.github.com/orgs/octo-org/repos",
"events_url": "https://api.github.com/orgs/octo-org/events",
"hooks_url": "https://api.github.com/orgs/octo-org/hooks",
"issues_url": "https://api.github.com/orgs/octo-org/issues",
"members_url": "https://api.github.com/orgs/octo-org/members{/member}",
"public_members_url": "https://api.github.com/orgs/octo-org/public_members{/member}",
"avatar_url": "https://avatars.githubusercontent.com/u/6811672?v=4",
"description": "Working better together!"
},
"sender": {
"login": "Codertocat",
"id": 21031067,
"node_id": "MDQ6VXNlcjIxMDMxMDY3",
"avatar_url": "https://avatars1.githubusercontent.com/u/21031067?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Codertocat",
"html_url": "https://github.com/Codertocat",
"followers_url": "https://api.github.com/users/Codertocat/followers",
"following_url": "https://api.github.com/users/Codertocat/following{/other_user}",
"gists_url": "https://api.github.com/users/Codertocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/Codertocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/Codertocat/subscriptions",
"organizations_url": "https://api.github.com/users/Codertocat/orgs",
"repos_url": "https://api.github.com/users/Codertocat/repos",
"events_url": "https://api.github.com/users/Codertocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/Codertocat/received_events",
"type": "User",
"site_admin": false
}
}cache_sync
Availability for cache_sync
- Repository webhooks
- Organization webhooks
Webhook payload object for cache_sync
| Headers |
|---|
| Name, Type, Description |
| Body parameters |
| Name, Type, Description |
cache_location string The location of the cache server that has been updated. |
ref string The ref that has been updated. |
before string The OID of the ref on the cache replica before it was updated. |
after string The OID of the ref on the cache replica after the update. |
repository object The repository where the event occurred. |
organization object |