Use the REST API to create and manage webhooks for your repositories.
About repository webhooksRepository webhooks allow your server to receive HTTP POST
payloads whenever certain events happen in a repository. For more information, see Webhooks documentation.
get/repos/{owner}/{repo}/hooks
Copy to clipboard curl request example
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks
Response
Status: 200
[ { "type": "Repository", "id": 12345678, "name": "web", "active": true, "events": [ "push", "pull_request" ], "config": { "content_type": "json", "insecure_ssl": "0", "url": "https://example.com/webhook" }, "updated_at": "2019-06-03T00:57:16Z", "created_at": "2019-06-03T00:57:16Z", "url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678", "test_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/test", "ping_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/pings", "deliveries_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/deliveries", "last_response": { "code": null, "status": "unused", "message": null } } ]
Repositories can have multiple webhooks installed. Each webhook should have a unique config
. Multiple webhooks can share the same config
as long as those webhooks do not have any events
that overlap.
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
accept
string
Setting to application/vnd.github+json
is recommended.
owner
string Required
The account owner of the repository. The name is not case sensitive.
repo
string Required
The name of the repository without the .git
extension. The name is not case sensitive.
name
string
Use web
to create a webhook. Default: web
. This parameter only accepts the value web
.
config
object
Key/value pairs to provide settings for this webhook.
Properties ofconfig
Name, Type, Description
url
string
The URL to which the payloads will be delivered.
content_type
string
The media type used to serialize the payloads. Supported values include json
and form
. The default is form
.
secret
string
If provided, the secret
will be used as the key
to generate the HMAC hex digest value for delivery signature headers.
insecure_ssl
string or number
Determines whether the SSL certificate of the host for url
will be verified when delivering payloads. Supported values include 0
(verification is performed) and 1
(verification is not performed). The default is 0
. We strongly recommend not setting this to 1
as you are subject to man-in-the-middle and other attacks.
events
array of strings
Determines what events the hook is triggered for.
Default: ["push"]
active
boolean
Determines if notifications are sent when the webhook is triggered. Set to true
to send notifications.
Default: true
201
Created
403
Forbidden
404
Resource not found
422
Validation failed, or the endpoint has been spammed.
Code samples for "Create a repository webhook" Request examplepost/repos/{owner}/{repo}/hooks
Copy to clipboard curl request example
curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks \ -d '{"name":"web","active":true,"events":["push","pull_request"],"config":{"url":"https://example.com/webhook","content_type":"json","insecure_ssl":"0"}}'
Response
Status: 201
{ "type": "Repository", "id": 12345678, "name": "web", "active": true, "events": [ "push", "pull_request" ], "config": { "content_type": "json", "insecure_ssl": "0", "url": "https://example.com/webhook" }, "updated_at": "2019-06-03T00:57:16Z", "created_at": "2019-06-03T00:57:16Z", "url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678", "test_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/test", "ping_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/pings", "deliveries_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/deliveries", "last_response": { "code": null, "status": "unused", "message": null } }
get/repos/{owner}/{repo}/hooks/{hook_id}
Copy to clipboard curl request example
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID
Response
Status: 200
{ "type": "Repository", "id": 12345678, "name": "web", "active": true, "events": [ "push", "pull_request" ], "config": { "content_type": "json", "insecure_ssl": "0", "url": "https://example.com/webhook" }, "updated_at": "2019-06-03T00:57:16Z", "created_at": "2019-06-03T00:57:16Z", "url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678", "test_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/test", "ping_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/pings", "deliveries_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/deliveries", "last_response": { "code": null, "status": "unused", "message": null } }
Updates a webhook configured in a repository. If you previously had a secret
set, you must provide the same secret
or set a new secret
or the secret will be removed. If you are only updating individual webhook config
properties, use "Update a webhook configuration for a repository."
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
accept
string
Setting to application/vnd.github+json
is recommended.
owner
string Required
The account owner of the repository. The name is not case sensitive.
repo
string Required
The name of the repository without the .git
extension. The name is not case sensitive.
hook_id
integer Required
The unique identifier of the hook. You can find this value in the X-GitHub-Hook-ID
header of a webhook delivery.
config
object
Configuration object of the webhook
Properties ofconfig
Name, Type, Description
url
string
The URL to which the payloads will be delivered.
content_type
string
The media type used to serialize the payloads. Supported values include json
and form
. The default is form
.
secret
string
If provided, the secret
will be used as the key
to generate the HMAC hex digest value for delivery signature headers.
insecure_ssl
string or number
Determines whether the SSL certificate of the host for url
will be verified when delivering payloads. Supported values include 0
(verification is performed) and 1
(verification is not performed). The default is 0
. We strongly recommend not setting this to 1
as you are subject to man-in-the-middle and other attacks.
events
array of strings
Determines what events the hook is triggered for. This replaces the entire array of events.
Default: ["push"]
add_events
array of strings
Determines a list of events to be added to the list of events that the Hook triggers for.
remove_events
array of strings
Determines a list of events to be removed from the list of events that the Hook triggers for.
active
boolean
Determines if notifications are sent when the webhook is triggered. Set to true
to send notifications.
Default: true
200
OK
404
Resource not found
422
Validation failed, or the endpoint has been spammed.
Code samples for "Update a repository webhook" Request examplepatch/repos/{owner}/{repo}/hooks/{hook_id}
Copy to clipboard curl request example
curl -L \ -X PATCH \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID \ -d '{"active":true,"add_events":["pull_request"]}'
Response
Status: 200
{ "type": "Repository", "id": 12345678, "name": "web", "active": true, "events": [ "push", "pull_request" ], "config": { "content_type": "json", "insecure_ssl": "0", "url": "https://example.com/webhook" }, "updated_at": "2019-06-03T00:57:16Z", "created_at": "2019-06-03T00:57:16Z", "url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678", "test_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/test", "ping_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/pings", "deliveries_url": "https://api.github.com/repos/octocat/Hello-World/hooks/12345678/deliveries", "last_response": { "code": null, "status": "unused", "message": null } }
delete/repos/{owner}/{repo}/hooks/{hook_id}
Copy to clipboard curl request example
curl -L \ -X DELETE \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID
Response
Get a webhook configuration for a repository Code samples for "Get a webhook configuration for a repository" Request exampleget/repos/{owner}/{repo}/hooks/{hook_id}/config
Copy to clipboard curl request example
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/config
Response
Status: 200
{ "content_type": "json", "insecure_ssl": "0", "secret": "********", "url": "https://example.com/webhook" }
Updates the webhook configuration for a repository. To update more information about the webhook, including the active
state and events
, use "Update a repository webhook."
OAuth app tokens and personal access tokens (classic) need the write:repo_hook
or repo
scope to use this endpoint.
This endpoint works with the following fine-grained token types:
The fine-grained token must have the following permission set:
accept
string
Setting to application/vnd.github+json
is recommended.
owner
string Required
The account owner of the repository. The name is not case sensitive.
repo
string Required
The name of the repository without the .git
extension. The name is not case sensitive.
hook_id
integer Required
The unique identifier of the hook. You can find this value in the X-GitHub-Hook-ID
header of a webhook delivery.
url
string
The URL to which the payloads will be delivered.
content_type
string
The media type used to serialize the payloads. Supported values include json
and form
. The default is form
.
secret
string
If provided, the secret
will be used as the key
to generate the HMAC hex digest value for delivery signature headers.
insecure_ssl
string or number
Determines whether the SSL certificate of the host for url
will be verified when delivering payloads. Supported values include 0
(verification is performed) and 1
(verification is not performed). The default is 0
. We strongly recommend not setting this to 1
as you are subject to man-in-the-middle and other attacks.
200
OK
Code samples for "Update a webhook configuration for a repository" Request examplepatch/repos/{owner}/{repo}/hooks/{hook_id}/config
Copy to clipboard curl request example
curl -L \ -X PATCH \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/config \ -d '{"content_type":"json","url":"https://example.com/webhook"}'
Response
Status: 200
{ "content_type": "json", "insecure_ssl": "0", "secret": "********", "url": "https://example.com/webhook" }
get/repos/{owner}/{repo}/hooks/{hook_id}/deliveries
Copy to clipboard curl request example
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/deliveries
Response
Status: 200
[ { "id": 12345678, "guid": "0b989ba4-242f-11e5-81e1-c7b6966d2516", "delivered_at": "2019-06-03T00:57:16Z", "redelivery": false, "duration": 0.27, "status": "OK", "status_code": 200, "event": "issues", "action": "opened", "installation_id": 123, "repository_id": 456, "throttled_at": "2019-06-03T00:57:16Z" }, { "id": 123456789, "guid": "0b989ba4-242f-11e5-81e1-c7b6966d2516", "delivered_at": "2019-06-04T00:57:16Z", "redelivery": true, "duration": 0.28, "status": "OK", "status_code": 200, "event": "issues", "action": "opened", "installation_id": 123, "repository_id": 456, "throttled_at": null } ]
get/repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}
Copy to clipboard curl request example
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/deliveries/DELIVERY_ID
Response
Status: 200
{ "id": 12345678, "guid": "0b989ba4-242f-11e5-81e1-c7b6966d2516", "delivered_at": "2019-06-03T00:57:16Z", "redelivery": false, "duration": 0.27, "status": "OK", "status_code": 200, "event": "issues", "action": "opened", "installation_id": 123, "repository_id": 456, "url": "https://www.example.com", "throttled_at": "2019-06-03T00:57:16Z", "request": { "headers": { "X-GitHub-Delivery": "0b989ba4-242f-11e5-81e1-c7b6966d2516", "X-Hub-Signature-256": "sha256=6dcb09b5b57875f334f61aebed695e2e4193db5e", "Accept": "*/*", "X-GitHub-Hook-ID": "42", "User-Agent": "GitHub-Hookshot/b8c71d8", "X-GitHub-Event": "issues", "X-GitHub-Hook-Installation-Target-ID": "123", "X-GitHub-Hook-Installation-Target-Type": "repository", "content-type": "application/json", "X-Hub-Signature": "sha1=a84d88e7554fc1fa21bcbc4efae3c782a70d2b9d" }, "payload": { "action": "opened", "issue": { "body": "foo" }, "repository": { "id": 123 } } }, "response": { "headers": { "Content-Type": "text/html;charset=utf-8" }, "payload": "ok" } }
post/repos/{owner}/{repo}/hooks/{hook_id}/pings
Copy to clipboard curl request example
curl -L \ -X POST \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/pings
Response
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4