System hooks API
- Tier: Free, Premium, Ultimate
 - Offering: GitLab Self-Managed
 
Use this API to manage system hooks. System hooks are different from group webhooks that impact all projects and subgroups in a group, and project webhooks that are limited to a single project.
Prerequisites:
- You must be an administrator.
 
Configure a URL endpoint for system hooks
To configure a URL endpoint for system hooks:
- On the left sidebar, at the bottom, select Admin. If you’ve turned on the new navigation, in the upper-right corner, select your avatar and then select Admin.
 - Select System hooks (
/admin/hooks). 
List system hooks
Get a list of all system hooks.
GET /hooksExample request:
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/hooks"Example response:
[
  {
    "id":1,
    "url":"https://gitlab.example.com/hook",
    "name": "Hook name",
    "description": "Hook description",
    "created_at":"2016-10-31T12:32:15.192Z",
    "push_events":true,
    "tag_push_events":false,
    "merge_requests_events": true,
    "repository_update_events": true,
    "enable_ssl_verification":true,
    "url_variables": []
  }
]Get system hook
Get a system hook by its ID.
GET /hooks/:id| Attribute | Type | Required | Description | 
|---|---|---|---|
id | integer | Yes | The ID of the hook. | 
Example request:
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/hooks/1"Example response:
{
  "id": 1,
  "url": "https://gitlab.example.com/hook",
  "name": "Hook name",
  "description": "Hook description",
  "created_at": "2016-10-31T12:32:15.192Z",
  "push_events": true,
  "tag_push_events": false,
  "merge_requests_events": true,
  "repository_update_events": true,
  "enable_ssl_verification": true,
  "url_variables": []
}Add new system hook
Add a new system hook.
POST /hooks| Attribute | Type | Required | Description | 
|---|---|---|---|
url | string | Yes | The hook URL. | 
branch_filter_strategy | string | No | Filter push events by branch. Possible values are wildcard (default), regex, and all_branches. | 
description | string | No | Description of the hook. (Introduced in GitLab 17.1.) | 
enable_ssl_verification | boolean | No | Do SSL verification when triggering the hook. | 
merge_requests_events | boolean | No | Trigger hook on merge request events. | 
name | string | No | Name of the hook. (Introduced in GitLab 17.1.) | 
push_events | boolean | No | When true, the hook fires on push events. | 
push_events_branch_filter | string | No | Trigger hook on push events for matching branches only. | 
repository_update_events | boolean | No | Trigger hook on repository update events. | 
tag_push_events | boolean | No | When true, the hook fires on new tags being pushed. | 
token | string | No | Secret token to validate received payloads. Not returned in the response. | 
Example request:
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/hooks?url=https://gitlab.example.com/hook"Example response:
[
  {
    "id":1,
    "url":"https://gitlab.example.com/hook",
    "name": "Hook name",
    "description": "Hook description",
    "created_at":"2016-10-31T12:32:15.192Z",
    "push_events":true,
    "tag_push_events":false,
    "merge_requests_events": true,
    "repository_update_events": true,
    "enable_ssl_verification":true,
    "url_variables": []
  }
]Update system hook
Update an existing system hook.
PUT /hooks/:hook_id| Attribute | Type | Required | Description | 
|---|---|---|---|
hook_id | integer | Yes | The ID of the system hook. | 
branch_filter_strategy | string | No | Filter push events by branch. Possible values are wildcard (default), regex, and all_branches. | 
enable_ssl_verification | boolean | No | Do SSL verification when triggering the hook. | 
merge_requests_events | boolean | No | Trigger hook on merge request events. | 
push_events | boolean | No | When true, the hook fires on push events. | 
push_events_branch_filter | string | No | Trigger hook on push events for matching branches only. | 
repository_update_events | boolean | No | Trigger hook on repository update events. | 
tag_push_events | boolean | No | When true, the hook fires on new tags being pushed. | 
token | string | No | Secret token to validate received payloads; this isn’t returned in the response. | 
url | string | No | The hook URL. | 
Test system hook
Executes the system hook with mock data.
POST /hooks/:id| Attribute | Type | Required | Description | 
|---|---|---|---|
id | integer | Yes | The ID of the hook. | 
Example request:
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/hooks/1"The response is always the mock data:
{
   "project_id" : 1,
   "owner_email" : "example@gitlabhq.com",
   "owner_name" : "Someone",
   "name" : "Ruby",
   "path" : "ruby",
   "event_name" : "project_create"
}Delete system hook
Deletes a system hook.
DELETE /hooks/:id| Attribute | Type | Required | Description | 
|---|---|---|---|
id | integer | Yes | The ID of the hook. | 
Example request:
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/hooks/2"Set a URL variable
PUT /hooks/:hook_id/url_variables/:keySupported attributes:
| Attribute | Type | Required | Description | 
|---|---|---|---|
hook_id | integer | Yes | ID of the system hook. | 
key | string | Yes | Key of the URL variable. | 
value | string | Yes | Value of the URL variable. | 
On success, this endpoint returns the response code 204 No Content.
Delete a URL variable
DELETE /hooks/:hook_id/url_variables/:keySupported attributes:
| Attribute | Type | Required | Description | 
|---|---|---|---|
hook_id | integer | Yes | ID of the system hook. | 
key | string | Yes | Key of the URL variable. | 
On success, this endpoint returns the response code 204 No Content.