Skip to main content

We've recently moved some of the REST API documentation. If you can't find what you're looking for, you might try the new Branches, Collaborators, Commits, Deploy Keys, Deployments, GitHub Pages, Releases, Metrics, Webhooks REST API pages.

Repository Webhooks

List repository webhooks

get /repos/{owner}/{repo}/hooks

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
per_pageintegerquery

Results per page (max 100)

Default: 30

pageintegerquery

Page number of the results to fetch.

Default: 1

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks
JavaScript @octokit/core.js
await octokit.request('GET /repos/{owner}/{repo}/hooks', { owner: 'OWNER', repo: 'REPO' })
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /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 } } ]

Status codes

HTTP Status CodeDescription
200

OK

404

Resource not found

Notes

Create a repository webhook

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.

post /repos/{owner}/{repo}/hooks

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
namestringbody

Use web to create a webhook. Default: web. This parameter only accepts the value web.

configobjectbody

Key/value pairs to provide settings for this webhook. These are defined below.

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 or )

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.

token (string)
digest (string)
eventsarray of stringsbody

Determines what events the hook is triggered for.

Default: push

activebooleanbody

Determines if notifications are sent when the webhook is triggered. Set to true to send notifications.

Default:

Code samples

Example

Shell
curl \ -X POST \ -H "Accept: application/vnd.github.v3+json" \ 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"}}'
JavaScript @octokit/core.js
await octokit.request('POST /repos/{owner}/{repo}/hooks', { owner: 'OWNER', repo: 'REPO', 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 } }

Status codes

HTTP Status CodeDescription
201

Created

403

Forbidden

404

Resource not found

422

Validation failed

Notes

Get a repository webhook

Returns a webhook configured in a repository. To get only the webhook config properties, see "Get a webhook configuration for a repository."

get /repos/{owner}/{repo}/hooks/{hook_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
hook_idintegerpath

Code samples

Example

Shell
curl \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID
JavaScript @octokit/core.js
await octokit.request('GET /repos/{owner}/{repo}/hooks/{hook_id}', { owner: 'OWNER', repo: 'REPO', hook_id: 'HOOK_ID' })
GitHub CLI gh api
gh api \ -H "Accept: application/vnd.github.v3+json" \ /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 } }

Status codes

HTTP Status CodeDescription
200

OK

404

Resource not found

Notes

Update a repository webhook

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."

patch /repos/{owner}/{repo}/hooks/{hook_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
hook_idintegerpath
configobjectbody

Key/value pairs to provide settings for this webhook. These are defined below.

Name (Type)Description
url (string)

Required. 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 or )

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.

address (string)
room (string)
eventsarray of stringsbody

Determines what events the hook is triggered for. This replaces the entire array of events.

Default: push

add_eventsarray of stringsbody

Determines a list of events to be added to the list of events that the Hook triggers for.

remove_eventsarray of stringsbody

Determines a list of events to be removed from the list of events that the Hook triggers for.

activebooleanbody

Determines if notifications are sent when the webhook is triggered. Set to true to send notifications.

Default:

Code samples

Example

Shell
curl \ -X PATCH \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID \ -d '{"active":true,"add_events":["pull_request"]}'
JavaScript @octokit/core.js
await octokit.request('PATCH /repos/{owner}/{repo}/hooks/{hook_id}', { owner: 'OWNER', repo: 'REPO', hook_id: 'HOOK_ID', 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 } }

Status codes

HTTP Status CodeDescription
200

OK

404

Resource not found

422

Validation failed

Notes

Delete a repository webhook

delete /repos/{owner}/{repo}/hooks/{hook_id}

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
hook_idintegerpath

Code samples

Example

Shell
curl \ -X DELETE \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID
JavaScript @octokit/core.js
await octokit.request('DELETE /repos/{owner}/{repo}/hooks/{hook_id}', { owner: 'OWNER', repo: 'REPO', hook_id: 'HOOK_ID' })
GitHub CLI gh api
gh api \ --method DELETE \ -H "Accept: application/vnd.github.v3+json" \ /repos/OWNER/REPO/hooks/HOOK_ID

Response

Status: 204

Status codes

HTTP Status CodeDescription
204

No Content

404

Resource not found

Notes

Ping a repository webhook

This will trigger a ping event to be sent to the hook.

post /repos/{owner}/{repo}/hooks/{hook_id}/pings

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
hook_idintegerpath

Code samples

Example

Shell
curl \ -X POST \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/pings
JavaScript @octokit/core.js
await octokit.request('POST /repos/{owner}/{repo}/hooks/{hook_id}/pings', { owner: 'OWNER', repo: 'REPO', hook_id: 'HOOK_ID' })
GitHub CLI gh api
gh api \ --method POST \ -H "Accept: application/vnd.github.v3+json" \ /repos/OWNER/REPO/hooks/HOOK_ID/pings

Response

Status: 204

Status codes

HTTP Status CodeDescription
204

No Content

404

Resource not found

Notes

Test the push repository webhook

This will trigger the hook with the latest push to the current repository if the hook is subscribed to push events. If the hook is not subscribed to push events, the server will respond with 204 but no test POST will be generated.

Note: Previously /repos/:owner/:repo/hooks/:hook_id/test

post /repos/{owner}/{repo}/hooks/{hook_id}/tests

Parameters

NameTypeInDescription
acceptstringheader

Setting toapplication/vnd.github.v3+json is recommended.

ownerstringpath
repostringpath
hook_idintegerpath

Code samples

Example

Shell
curl \ -X POST \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/OWNER/REPO/hooks/HOOK_ID/tests
JavaScript @octokit/core.js
await octokit.request('POST /repos/{owner}/{repo}/hooks/{hook_id}/tests', { owner: 'OWNER', repo: 'REPO', hook_id: 'HOOK_ID' })
GitHub CLI gh api
gh api \ --method POST \ -H "Accept: application/vnd.github.v3+json" \ /repos/OWNER/REPO/hooks/HOOK_ID/tests

Response

Status: 204

Status codes

HTTP Status CodeDescription
204

No Content

404

Resource not found

Notes