InfoGrab DocsInfoGrab Docs

그룹 웹훅 API

요약

이 API로 그룹 웹훅을 관리합니다. 지정한 그룹의 모든 그룹 훅을 조회합니다. 시작일을 기준으로 지난 7일 동안 지정한 그룹 훅에서 발생한 모든 이벤트를 조회합니다. 이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다.

이 API로 그룹 웹훅을 관리합니다. 그룹 웹훅은 인스턴스 전체에 영향을 주는 시스템 훅, 단일 프로젝트로 범위가 한정되는 프로젝트 웹훅과 다릅니다.

사전 요구 사항:

  • Administrator 이거나 해당 그룹의 Owner 권한이 있어야 합니다.

모든 그룹 훅 조회#

지정한 그룹의 모든 그룹 훅을 조회합니다.

GET /groups/:id/hooks

지원되는 속성:

Attribute Type Required Description
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks"

응답 예시:

[
  {
    "id": 1,
    "url": "http://example.com/hook",
    "name": "Test group hook",
    "description": "This is a test group hook.",
    "created_at": "2024-09-01T09:10:54.854Z",
    "push_events": true,
    "tag_push_events": false,
    "merge_requests_events": false,
    "repository_update_events": false,
    "enable_ssl_verification": true,
    "alert_status": "executable",
    "disabled_until": null,
    "url_variables": [],
    "push_events_branch_filter": null,
    "branch_filter_strategy": "all_branches",
    "group_id": 99,
    "issues_events": false,
    "confidential_issues_events": false,
    "note_events": false,
    "confidential_note_events": false,
    "pipeline_events": false,
    "wiki_page_events": false,
    "job_events": false,
    "deployment_events": false,
    "feature_flag_events": false,
    "releases_events": false,
    "milestone_events": false,
    "subgroup_events": false,
    "emoji_events": false,
    "resource_access_token_events": false,
    "member_events": false,
    "project_events": false,
    "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
    "custom_headers": [
      {
        "key": "Authorization"
      }
    ],
    "token_present": false,
    "signing_token_present": false
  }
]

그룹 훅 조회#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • token_present 및 signing_token_present 속성이 GitLab 19.0에서 도입되었습니다.

지정한 그룹 훅을 조회합니다.

GET /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
hook_id integer yes 그룹 훅의 ID 입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1"

응답 예시:

{
  "id": 1,
  "url": "http://example.com/hook",
  "name": "Hook name",
  "description": "Hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": false,
  "releases_events": true,
  "milestone_events": false,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "custom_headers": [
    {
      "key": "Authorization"
    }
  ],
  "token_present": false,
  "signing_token_present": false
}

모든 그룹 훅 이벤트 조회#

히스토리
  • GitLab 17.3에서 도입되었습니다.

시작일을 기준으로 지난 7일 동안 지정한 그룹 훅에서 발생한 모든 이벤트를 조회합니다.

GET /groups/:id/hooks/:hook_id/events

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 프로젝트 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
page Integer No 조회할 페이지입니다. 기본값은 1 입니다.
per_page Integer No 페이지당 반환할 레코드 수입니다. 기본값은 20 입니다.
status Integer or string No 이벤트의 응답 상태 코드입니다. 예: 200 또는 500. successful(200-299), client_failure(400-499), server_failure(500-599)와 같이 상태 범주로도 검색할 수 있습니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/events"

응답 예시:

[
  {
    "id": 1,
    "url": "https://example.net/",
    "trigger": "push_hooks",
    "request_headers": {
      "Content-Type": "application/json",
      "User-Agent": "GitLab/17.1.0-pre",
      "Idempotency-Key": "a5461c4d-9c7f-4af9-add6-cddebe3c426f",
      "X-Gitlab-Event": "Push Hook",
      "X-Gitlab-Webhook-UUID": "3c5c0404-c866-44bc-a5f6-452bb1bfc76e",
      "X-Gitlab-Instance": "https://gitlab.example.com",
      "X-Gitlab-Event-UUID": "9cebe914-4827-408f-b014-cfa23a47a35f",
      "X-Gitlab-Token": "[REDACTED]"
    },
    "request_data": {
      "object_kind": "push",
      "event_name": "push",
      "after": "f15b32277d2c55c6c595845a87109b09c913c556",
      "ref": "refs/heads/master",
      "ref_protected": true,
      "checkout_sha": "f15b32277d2c55c6c595845a87109b09c913c556",
      "message": null,
      "user_id": 1,
      "user_name": "Administrator",
      "user_username": "root",
      "user_email": null,
      "user_avatar": "https://www.gravatar.com/avatar/13efe0d4559475ba84ecc802061febbdea6e224fcbffd7ec7da9cd431845299c?s=80&d=identicon",
      "project_id": 7,
      "project": {
        "id": 7,
        "name": "Flight",
        "description": "Incidunt ea ab officia a veniam.",
        "web_url": "https://gitlab.example.com/flightjs/Flight",
        "avatar_url": null,
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "namespace": "Flightjs",
        "visibility_level": 10,
        "path_with_namespace": "flightjs/Flight",
        "default_branch": "master",
        "ci_config_path": null,
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "http_url": "https://gitlab.example.com/flightjs/Flight.git"
      },
      "commits": [
        {
          "id": "f15b32277d2c55c6c595845a87109b09c913c556",
          "message": "v1.5.2\n",
          "title": "v1.5.2",
          "timestamp": "2017-06-19T14:39:53-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/f15b32277d2c55c6c595845a87109b09c913c556",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "message": "Merge pull request #378 from flightjs/alunny/publish_lib\n\npublish lib and index to npm",
          "title": "Merge pull request #378 from flightjs/alunny/publish_lib",
          "timestamp": "2017-06-16T10:26:39-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "author": {
            "name": "angus croll",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "468abc807a2b2572f43e72c743b76cee6db24025",
          "message": "publish lib and index to npm\n",
          "title": "publish lib and index to npm",
          "timestamp": "2017-06-16T10:23:04-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/468abc807a2b2572f43e72c743b76cee6db24025",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        }
      ],
      "total_commits_count": 3,
      "push_options": {},
      "repository": {
        "name": "Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "description": "Incidunt ea ab officia a veniam.",
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "visibility_level": 10
      }
    },
    "response_headers": {
      "Date": "Sun, 26 May 2024 03:03:17 GMT",
      "Content-Type": "application/json; charset=utf-8",
      "Content-Length": "16",
      "Connection": "close",
      "X-Powered-By": "Express",
      "Access-Control-Allow-Origin": "*",
      "X-Pd-Status": "sent to primary"
    },
    "response_body": "{\"success\":true}",
    "execution_duration": 1.0906479999999874,
    "response_status": "200"
  },
  {
    "id": 2,
    "url": "https://example.net/",
    "trigger": "push_hooks",
    "request_headers": {
      "Content-Type": "application/json",
      "User-Agent": "GitLab/17.1.0-pre",
      "Idempotency-Key": "1f0a54f0-0529-408d-a5b8-a2a98ff5f94a",
      "X-Gitlab-Event": "Push Hook",
      "X-Gitlab-Webhook-UUID": "a753eedb-1d72-4549-9ca7-eac8ea8e50dd",
      "X-Gitlab-Instance": "https://gitlab.example.com:3000",
      "X-Gitlab-Event-UUID": "842d7c3e-3114-4396-8a95-66c084d53cb1",
      "X-Gitlab-Token": "[REDACTED]"
    },
    "request_data": {
      "object_kind": "push",
      "event_name": "push",
      "before": "468abc807a2b2572f43e72c743b76cee6db24025",
      "after": "f15b32277d2c55c6c595845a87109b09c913c556",
      "ref": "refs/heads/master",
      "ref_protected": true,
      "checkout_sha": "f15b32277d2c55c6c595845a87109b09c913c556",
      "message": null,
      "user_id": 1,
      "user_name": "Administrator",
      "user_username": "root",
      "user_email": null,
      "user_avatar": "https://www.gravatar.com/avatar/13efe0d4559475ba84ecc802061febbdea6e224fcbffd7ec7da9cd431845299c?s=80&d=identicon",
      "project_id": 7,
      "project": {
        "id": 7,
        "name": "Flight",
        "description": "Incidunt ea ab officia a veniam.",
        "web_url": "https://gitlab.example.com/flightjs/Flight",
        "avatar_url": null,
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "namespace": "Flightjs",
        "visibility_level": 10,
        "path_with_namespace": "flightjs/Flight",
        "default_branch": "master",
        "ci_config_path": null,
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "http_url": "https://gitlab.example.com/flightjs/Flight.git"
      },
      "commits": [
        {
          "id": "f15b32277d2c55c6c595845a87109b09c913c556",
          "message": "v1.5.2\n",
          "title": "v1.5.2",
          "timestamp": "2017-06-19T14:39:53-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/f15b32277d2c55c6c595845a87109b09c913c556",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "message": "Merge pull request #378 from flightjs/alunny/publish_lib\n\npublish lib and index to npm",
          "title": "Merge pull request #378 from flightjs/alunny/publish_lib",
          "timestamp": "2017-06-16T10:26:39-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "author": {
            "name": "angus croll",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "468abc807a2b2572f43e72c743b76cee6db24025",
          "message": "publish lib and index to npm\n",
          "title": "publish lib and index to npm",
          "timestamp": "2017-06-16T10:23:04-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/468abc807a2b2572f43e72c743b76cee6db24025",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        }
      ],
      "total_commits_count": 3,
      "push_options": {},
      "repository": {
        "name": "Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "description": "Incidunt ea ab officia a veniam.",
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "visibility_level": 10
      }
    },
    "response_headers": {
      "Date": "Sun, 26 May 2024 03:03:19 GMT",
      "Content-Type": "application/json; charset=utf-8",
      "Content-Length": "16",
      "Connection": "close",
      "X-Powered-By": "Express",
      "Access-Control-Allow-Origin": "*",
      "X-Pd-Status": "sent to primary"
    },
    "response_body": "{\"success\":true}",
    "execution_duration": 1.0716120000000728,
    "response_status": "200"
  }
]

그룹 훅 이벤트 재전송#

히스토리
  • GitLab 17.4에서 도입되었습니다.
  • 설정 가능한 속도 제한이 GitLab 19.3에서 도입되었습니다. 기능 플래그 web_hook_event_resend_api_endpoint_rate_limit는 제거되었습니다.

특정 훅 이벤트를 다시 전송합니다.

이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다. 같은 그룹의 모든 웹훅이 이 제한을 함께 사용합니다. GitLab Self-Managed와 GitLab Dedicated에서는 관리자가 이 제한을 변경할 수 있습니다.

POST /groups/:id/hooks/:hook_id/events/:hook_event_id/resend

지원되는 속성:

Attribute Type Required Description
hook_event_id Integer Yes 훅 이벤트의 ID 입니다.
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/events/1/resend"

응답 예시:

{
  "response_status": 200
}

그룹 훅 생성#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • signing_token 속성이 GitLab 19.0에서 webhook_signing_token이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 기능 플래그 webhook_signing_token가 GitLab 19.1에서 제거되었습니다.
  • duo_flow_callback_enabled 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

duo_flow_callback_enabled 속성의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 해당 기능을 사용할 수 없는 환경에서 이 속성을 활성화하면 400 Bad request가 반환됩니다. 비활성화는 항상 허용됩니다.

지정한 그룹에 그룹 훅을 생성합니다.

POST /groups/:id/hooks

지원되는 속성:

Attribute Type Required Description
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
url String Yes 훅 URL 입니다.
branch_filter_strategy String No 브랜치 기준으로 푸시 이벤트를 필터링합니다. 사용 가능한 값은 wildcard(기본값), regex, all_branches 입니다.
confidential_issues_events Boolean No 비공개 이슈 이벤트에서 훅을 트리거합니다.
confidential_note_events Boolean No 비공개 노트 이벤트에서 훅을 트리거합니다.
custom_headers Array No 훅에 사용할 커스텀 헤더입니다.
custom_webhook_template String No 훅에 사용할 커스텀 웹훅 템플릿입니다.
deployment_events Boolean No 배포 이벤트에서 훅을 트리거합니다.
description String No 훅의 설명입니다(GitLab 17.1에서 도입).
duo_flow_callback_enabled Boolean No GitLab Duo flow 이벤트를 훅으로 전송합니다.
enable_ssl_verification Boolean No 훅을 트리거할 때 SSL 검증을 수행합니다.
feature_flag_events Boolean No 기능 플래그 이벤트에서 훅을 트리거합니다.
issues_events Boolean No 이슈 이벤트에서 훅을 트리거합니다.
job_events Boolean No job 이벤트에서 훅을 트리거합니다.
member_events Boolean No 멤버 이벤트에서 훅을 트리거합니다.
merge_requests_events Boolean No 머지 리퀘스트 이벤트에서 훅을 트리거합니다.
milestone_events Boolean No 마일스톤 이벤트에서 훅을 트리거합니다.
name String No 훅의 이름입니다(GitLab 17.1에서 도입).
note_events Boolean No 노트 이벤트에서 훅을 트리거합니다.
pipeline_events Boolean No 파이프라인 이벤트에서 훅을 트리거합니다.
project_events Boolean No 프로젝트 이벤트에서 훅을 트리거합니다.
push_events Boolean No 푸시 이벤트에서 훅을 트리거합니다.
push_events_branch_filter String No 일치하는 브랜치의 푸시 이벤트에서만 훅을 트리거합니다.
releases_events Boolean No 릴리스 이벤트에서 훅을 트리거합니다.
resource_access_token_events Boolean No 프로젝트 액세스 토큰 만료 이벤트에서 훅을 트리거합니다.
signing_token String No webhook-signature 헤더를 계산하는 데 사용하는 HMAC 서명 토큰입니다. 32바이트 키를 인코딩한 whsec_<base64> 형식이어야 합니다. 응답에는 반환되지 않습니다.
subgroup_events Boolean No 하위 그룹 이벤트에서 훅을 트리거합니다.
tag_push_events Boolean No 태그 푸시 이벤트에서 훅을 트리거합니다.
token String No 수신한 페이로드를 검증하는 시크릿 토큰입니다. 응답에는 반환되지 않습니다.
wiki_page_events Boolean No 위키 페이지 이벤트에서 훅을 트리거합니다.

요청 예시:

curl --request POST \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks" \
  --data '{"url": "https://example.com/hook", "name": "My Hook", "description": "Hook description"}'

응답 예시:

{
  "id": 42,
  "url": "https://example.com/hook",
  "name": "My Hook",
  "description": "Hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": true,
  "releases_events": true,
  "milestone_events": true,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "token_present": false,
  "signing_token_present": false
}

그룹 훅 업데이트#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • signing_token 속성이 GitLab 19.0에서 webhook_signing_token이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 기능 플래그 webhook_signing_token가 GitLab 19.1에서 제거되었습니다.
  • duo_flow_callback_enabled 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

duo_flow_callback_enabled 속성의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 해당 기능을 사용할 수 없는 환경에서 이 속성을 활성화하면 400 Bad request가 반환됩니다. 비활성화는 항상 허용됩니다.

지정한 그룹의 그룹 훅을 업데이트합니다.

PUT /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
url String Yes 훅 URL 입니다.
branch_filter_strategy String No 브랜치 기준으로 푸시 이벤트를 필터링합니다. 사용 가능한 값은 wildcard(기본값), regex, all_branches 입니다.
confidential_issues_events Boolean No 비공개 이슈 이벤트에서 훅을 트리거합니다.
confidential_note_events Boolean No 비공개 노트 이벤트에서 훅을 트리거합니다.
custom_headers Array No 훅에 사용할 커스텀 헤더입니다.
custom_webhook_template String No 훅에 사용할 커스텀 웹훅 템플릿입니다.
deployment_events Boolean No 배포 이벤트에서 훅을 트리거합니다.
description String No 훅의 설명입니다.
duo_flow_callback_enabled Boolean No GitLab Duo flow 이벤트를 훅으로 전송합니다.
enable_ssl_verification Boolean No 훅을 트리거할 때 SSL 검증을 수행합니다.
feature_flag_events Boolean No 기능 플래그 이벤트에서 훅을 트리거합니다.
issues_events Boolean No 이슈 이벤트에서 훅을 트리거합니다.
job_events Boolean No job 이벤트에서 훅을 트리거합니다.
member_events Boolean No 멤버 이벤트에서 훅을 트리거합니다.
merge_requests_events Boolean No 머지 리퀘스트 이벤트에서 훅을 트리거합니다.
milestone_events Boolean No 마일스톤 이벤트에서 훅을 트리거합니다.
name String No 훅의 이름입니다.
note_events Boolean No 노트 이벤트에서 훅을 트리거합니다.
pipeline_events Boolean No 파이프라인 이벤트에서 훅을 트리거합니다.
project_events Boolean No 프로젝트 이벤트에서 훅을 트리거합니다.
push_events Boolean No 푸시 이벤트에서 훅을 트리거합니다.
push_events_branch_filter String No 일치하는 브랜치의 푸시 이벤트에서만 훅을 트리거합니다.
releases_events Boolean No 릴리스 이벤트에서 훅을 트리거합니다.
resource_access_token_events Boolean No 프로젝트 액세스 토큰 만료 이벤트에서 훅을 트리거합니다.
service_access_tokens_expiration_enforced Boolean No 서비스 계정 액세스 토큰에 만료일을 반드시 지정하도록 요구합니다.
signing_token String No webhook-signature 헤더를 계산하는 데 사용하는 HMAC 서명 토큰입니다. 32바이트 키를 인코딩한 whsec_<base64> 형식이어야 합니다. 응답에는 반환되지 않습니다.
subgroup_events Boolean No 하위 그룹 이벤트에서 훅을 트리거합니다.
tag_push_events Boolean No 태그 푸시 이벤트에서 훅을 트리거합니다.
token String No 수신한 페이로드를 검증하는 시크릿 토큰입니다. 응답에는 반환되지 않습니다. 웹훅 URL을 변경하면 시크릿 토큰은 초기화되며 유지되지 않습니다.
wiki_page_events Boolean No 위키 페이지 이벤트에서 훅을 트리거합니다.

요청 예시:

curl --request POST \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1" \
  --data '{"url": "https://example.com/hook", "name": "New hook name", "description": "Changed hook description"}'

응답 예시:

{
  "id": 1,
  "url": "https://example.com/hook",
  "name": "New hook name",
  "description": "Changed hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": true,
  "releases_events": true,
  "milestone_events": true,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "custom_headers": [
    {
      "key": "Authorization"
    }
  ],
  "token_present": false,
  "signing_token_present": false
}

그룹 훅 삭제#

지정한 그룹 훅을 삭제합니다. 멱등 메서드이므로 여러 번 호출할 수 있습니다. 훅은 존재하거나 존재하지 않는 두 상태 중 하나입니다.

DELETE /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1"

성공하면 아무 메시지도 반환되지 않습니다.

테스트 그룹 훅 트리거#

히스토리
  • GitLab 17.1에서 도입되었습니다.
  • 전용 속도 제한이 GitLab 17.1에서 web_hook_test_api_endpoint_rate_limit이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 설정 가능한 속도 제한이 GitLab 19.3에서 도입되었습니다. 기능 플래그 web_hook_test_api_endpoint_rate_limit는 제거되었습니다.

지정한 그룹에 대해 테스트 훅을 트리거합니다.

이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다. GitLab Self-Managed와 GitLab Dedicated에서는 관리자가 이 제한을 변경할 수 있습니다.

POST /groups/:id/hooks/:hook_id/test/:trigger
Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
trigger String Yes push_events, tag_push_events, issues_events, confidential_issues_events, note_events, merge_requests_events, job_events, pipeline_events, wiki_page_events, releases_events, milestone_events, emoji_events, resource_access_token_events 중 하나입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/test/push_events"

응답 예시:

{"message":"201 Created"}

커스텀 헤더 업데이트#

히스토리
  • GitLab 17.1에서 도입되었습니다.

지정한 그룹 훅의 커스텀 헤더를 업데이트합니다.

PUT /groups/:id/hooks/:hook_id/custom_headers/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes 커스텀 헤더의 키입니다.
value String Yes 커스텀 헤더의 값입니다.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/custom_headers/header_key?value='header_value'"

성공하면 아무 메시지도 반환되지 않습니다.

커스텀 헤더 삭제#

히스토리
  • GitLab 17.1에서 도입되었습니다.

커스텀 헤더를 삭제합니다.

DELETE /groups/:id/hooks/:hook_id/custom_headers/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes 커스텀 헤더의 키입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/custom_headers/header_key"

성공하면 아무 메시지도 반환되지 않습니다.

URL 변수 업데이트#

지정한 그룹 훅의 URL 변수를 업데이트합니다.

PUT /groups/:id/hooks/:hook_id/url_variables/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes URL 변수의 키입니다.
value String Yes URL 변수의 값입니다.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/url_variables/my_key?value='my_key_value'"

성공하면 아무 메시지도 반환되지 않습니다.

URL 변수 삭제#

지정한 그룹 훅의 URL 변수를 삭제합니다.

DELETE /groups/:id/hooks/:hook_id/url_variables/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes URL 변수의 키입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/url_variables/my_key"

성공하면 아무 메시지도 반환되지 않습니다.

그룹 웹훅 API

GitLab v19.5
Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

이 API로 그룹 웹훅을 관리합니다. 지정한 그룹의 모든 그룹 훅을 조회합니다. 시작일을 기준으로 지난 7일 동안 지정한 그룹 훅에서 발생한 모든 이벤트를 조회합니다. 이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다.

이 API로 그룹 웹훅을 관리합니다. 그룹 웹훅은 인스턴스 전체에 영향을 주는 시스템 훅, 단일 프로젝트로 범위가 한정되는 프로젝트 웹훅과 다릅니다.

사전 요구 사항:

  • Administrator 이거나 해당 그룹의 Owner 권한이 있어야 합니다.

모든 그룹 훅 조회#

지정한 그룹의 모든 그룹 훅을 조회합니다.

GET /groups/:id/hooks

지원되는 속성:

Attribute Type Required Description
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks"

응답 예시:

[
  {
    "id": 1,
    "url": "http://example.com/hook",
    "name": "Test group hook",
    "description": "This is a test group hook.",
    "created_at": "2024-09-01T09:10:54.854Z",
    "push_events": true,
    "tag_push_events": false,
    "merge_requests_events": false,
    "repository_update_events": false,
    "enable_ssl_verification": true,
    "alert_status": "executable",
    "disabled_until": null,
    "url_variables": [],
    "push_events_branch_filter": null,
    "branch_filter_strategy": "all_branches",
    "group_id": 99,
    "issues_events": false,
    "confidential_issues_events": false,
    "note_events": false,
    "confidential_note_events": false,
    "pipeline_events": false,
    "wiki_page_events": false,
    "job_events": false,
    "deployment_events": false,
    "feature_flag_events": false,
    "releases_events": false,
    "milestone_events": false,
    "subgroup_events": false,
    "emoji_events": false,
    "resource_access_token_events": false,
    "member_events": false,
    "project_events": false,
    "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
    "custom_headers": [
      {
        "key": "Authorization"
      }
    ],
    "token_present": false,
    "signing_token_present": false
  }
]

그룹 훅 조회#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • token_present 및 signing_token_present 속성이 GitLab 19.0에서 도입되었습니다.

지정한 그룹 훅을 조회합니다.

GET /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
hook_id integer yes 그룹 훅의 ID 입니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1"

응답 예시:

{
  "id": 1,
  "url": "http://example.com/hook",
  "name": "Hook name",
  "description": "Hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": false,
  "releases_events": true,
  "milestone_events": false,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "custom_headers": [
    {
      "key": "Authorization"
    }
  ],
  "token_present": false,
  "signing_token_present": false
}

모든 그룹 훅 이벤트 조회#

히스토리
  • GitLab 17.3에서 도입되었습니다.

시작일을 기준으로 지난 7일 동안 지정한 그룹 훅에서 발생한 모든 이벤트를 조회합니다.

GET /groups/:id/hooks/:hook_id/events

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 프로젝트 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
page Integer No 조회할 페이지입니다. 기본값은 1 입니다.
per_page Integer No 페이지당 반환할 레코드 수입니다. 기본값은 20 입니다.
status Integer or string No 이벤트의 응답 상태 코드입니다. 예: 200 또는 500. successful(200-299), client_failure(400-499), server_failure(500-599)와 같이 상태 범주로도 검색할 수 있습니다.

요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/events"

응답 예시:

[
  {
    "id": 1,
    "url": "https://example.net/",
    "trigger": "push_hooks",
    "request_headers": {
      "Content-Type": "application/json",
      "User-Agent": "GitLab/17.1.0-pre",
      "Idempotency-Key": "a5461c4d-9c7f-4af9-add6-cddebe3c426f",
      "X-Gitlab-Event": "Push Hook",
      "X-Gitlab-Webhook-UUID": "3c5c0404-c866-44bc-a5f6-452bb1bfc76e",
      "X-Gitlab-Instance": "https://gitlab.example.com",
      "X-Gitlab-Event-UUID": "9cebe914-4827-408f-b014-cfa23a47a35f",
      "X-Gitlab-Token": "[REDACTED]"
    },
    "request_data": {
      "object_kind": "push",
      "event_name": "push",
      "after": "f15b32277d2c55c6c595845a87109b09c913c556",
      "ref": "refs/heads/master",
      "ref_protected": true,
      "checkout_sha": "f15b32277d2c55c6c595845a87109b09c913c556",
      "message": null,
      "user_id": 1,
      "user_name": "Administrator",
      "user_username": "root",
      "user_email": null,
      "user_avatar": "https://www.gravatar.com/avatar/13efe0d4559475ba84ecc802061febbdea6e224fcbffd7ec7da9cd431845299c?s=80&d=identicon",
      "project_id": 7,
      "project": {
        "id": 7,
        "name": "Flight",
        "description": "Incidunt ea ab officia a veniam.",
        "web_url": "https://gitlab.example.com/flightjs/Flight",
        "avatar_url": null,
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "namespace": "Flightjs",
        "visibility_level": 10,
        "path_with_namespace": "flightjs/Flight",
        "default_branch": "master",
        "ci_config_path": null,
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "http_url": "https://gitlab.example.com/flightjs/Flight.git"
      },
      "commits": [
        {
          "id": "f15b32277d2c55c6c595845a87109b09c913c556",
          "message": "v1.5.2\n",
          "title": "v1.5.2",
          "timestamp": "2017-06-19T14:39:53-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/f15b32277d2c55c6c595845a87109b09c913c556",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "message": "Merge pull request #378 from flightjs/alunny/publish_lib\n\npublish lib and index to npm",
          "title": "Merge pull request #378 from flightjs/alunny/publish_lib",
          "timestamp": "2017-06-16T10:26:39-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "author": {
            "name": "angus croll",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "468abc807a2b2572f43e72c743b76cee6db24025",
          "message": "publish lib and index to npm\n",
          "title": "publish lib and index to npm",
          "timestamp": "2017-06-16T10:23:04-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/468abc807a2b2572f43e72c743b76cee6db24025",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        }
      ],
      "total_commits_count": 3,
      "push_options": {},
      "repository": {
        "name": "Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "description": "Incidunt ea ab officia a veniam.",
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "visibility_level": 10
      }
    },
    "response_headers": {
      "Date": "Sun, 26 May 2024 03:03:17 GMT",
      "Content-Type": "application/json; charset=utf-8",
      "Content-Length": "16",
      "Connection": "close",
      "X-Powered-By": "Express",
      "Access-Control-Allow-Origin": "*",
      "X-Pd-Status": "sent to primary"
    },
    "response_body": "{\"success\":true}",
    "execution_duration": 1.0906479999999874,
    "response_status": "200"
  },
  {
    "id": 2,
    "url": "https://example.net/",
    "trigger": "push_hooks",
    "request_headers": {
      "Content-Type": "application/json",
      "User-Agent": "GitLab/17.1.0-pre",
      "Idempotency-Key": "1f0a54f0-0529-408d-a5b8-a2a98ff5f94a",
      "X-Gitlab-Event": "Push Hook",
      "X-Gitlab-Webhook-UUID": "a753eedb-1d72-4549-9ca7-eac8ea8e50dd",
      "X-Gitlab-Instance": "https://gitlab.example.com:3000",
      "X-Gitlab-Event-UUID": "842d7c3e-3114-4396-8a95-66c084d53cb1",
      "X-Gitlab-Token": "[REDACTED]"
    },
    "request_data": {
      "object_kind": "push",
      "event_name": "push",
      "before": "468abc807a2b2572f43e72c743b76cee6db24025",
      "after": "f15b32277d2c55c6c595845a87109b09c913c556",
      "ref": "refs/heads/master",
      "ref_protected": true,
      "checkout_sha": "f15b32277d2c55c6c595845a87109b09c913c556",
      "message": null,
      "user_id": 1,
      "user_name": "Administrator",
      "user_username": "root",
      "user_email": null,
      "user_avatar": "https://www.gravatar.com/avatar/13efe0d4559475ba84ecc802061febbdea6e224fcbffd7ec7da9cd431845299c?s=80&d=identicon",
      "project_id": 7,
      "project": {
        "id": 7,
        "name": "Flight",
        "description": "Incidunt ea ab officia a veniam.",
        "web_url": "https://gitlab.example.com/flightjs/Flight",
        "avatar_url": null,
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "namespace": "Flightjs",
        "visibility_level": 10,
        "path_with_namespace": "flightjs/Flight",
        "default_branch": "master",
        "ci_config_path": null,
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "http_url": "https://gitlab.example.com/flightjs/Flight.git"
      },
      "commits": [
        {
          "id": "f15b32277d2c55c6c595845a87109b09c913c556",
          "message": "v1.5.2\n",
          "title": "v1.5.2",
          "timestamp": "2017-06-19T14:39:53-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/f15b32277d2c55c6c595845a87109b09c913c556",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "message": "Merge pull request #378 from flightjs/alunny/publish_lib\n\npublish lib and index to npm",
          "title": "Merge pull request #378 from flightjs/alunny/publish_lib",
          "timestamp": "2017-06-16T10:26:39-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/8749d49930866a4871fa086adbd7d2057fcc3ebb",
          "author": {
            "name": "angus croll",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        },
        {
          "id": "468abc807a2b2572f43e72c743b76cee6db24025",
          "message": "publish lib and index to npm\n",
          "title": "publish lib and index to npm",
          "timestamp": "2017-06-16T10:23:04-07:00",
          "url": "https://gitlab.example.com/flightjs/Flight/-/commit/468abc807a2b2572f43e72c743b76cee6db24025",
          "author": {
            "name": "Andrew Lunny",
            "email": "[REDACTED]"
          },
          "added": [],
          "modified": [
            "package.json"
          ],
          "removed": []
        }
      ],
      "total_commits_count": 3,
      "push_options": {},
      "repository": {
        "name": "Flight",
        "url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "description": "Incidunt ea ab officia a veniam.",
        "homepage": "https://gitlab.example.com/flightjs/Flight",
        "git_http_url": "https://gitlab.example.com/flightjs/Flight.git",
        "git_ssh_url": "ssh://git@gitlab.example.com:2222/flightjs/Flight.git",
        "visibility_level": 10
      }
    },
    "response_headers": {
      "Date": "Sun, 26 May 2024 03:03:19 GMT",
      "Content-Type": "application/json; charset=utf-8",
      "Content-Length": "16",
      "Connection": "close",
      "X-Powered-By": "Express",
      "Access-Control-Allow-Origin": "*",
      "X-Pd-Status": "sent to primary"
    },
    "response_body": "{\"success\":true}",
    "execution_duration": 1.0716120000000728,
    "response_status": "200"
  }
]

그룹 훅 이벤트 재전송#

히스토리
  • GitLab 17.4에서 도입되었습니다.
  • 설정 가능한 속도 제한이 GitLab 19.3에서 도입되었습니다. 기능 플래그 web_hook_event_resend_api_endpoint_rate_limit는 제거되었습니다.

특정 훅 이벤트를 다시 전송합니다.

이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다. 같은 그룹의 모든 웹훅이 이 제한을 함께 사용합니다. GitLab Self-Managed와 GitLab Dedicated에서는 관리자가 이 제한을 변경할 수 있습니다.

POST /groups/:id/hooks/:hook_id/events/:hook_event_id/resend

지원되는 속성:

Attribute Type Required Description
hook_event_id Integer Yes 훅 이벤트의 ID 입니다.
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/events/1/resend"

응답 예시:

{
  "response_status": 200
}

그룹 훅 생성#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • signing_token 속성이 GitLab 19.0에서 webhook_signing_token이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 기능 플래그 webhook_signing_token가 GitLab 19.1에서 제거되었습니다.
  • duo_flow_callback_enabled 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

duo_flow_callback_enabled 속성의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 해당 기능을 사용할 수 없는 환경에서 이 속성을 활성화하면 400 Bad request가 반환됩니다. 비활성화는 항상 허용됩니다.

지정한 그룹에 그룹 훅을 생성합니다.

POST /groups/:id/hooks

지원되는 속성:

Attribute Type Required Description
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
url String Yes 훅 URL 입니다.
branch_filter_strategy String No 브랜치 기준으로 푸시 이벤트를 필터링합니다. 사용 가능한 값은 wildcard(기본값), regex, all_branches 입니다.
confidential_issues_events Boolean No 비공개 이슈 이벤트에서 훅을 트리거합니다.
confidential_note_events Boolean No 비공개 노트 이벤트에서 훅을 트리거합니다.
custom_headers Array No 훅에 사용할 커스텀 헤더입니다.
custom_webhook_template String No 훅에 사용할 커스텀 웹훅 템플릿입니다.
deployment_events Boolean No 배포 이벤트에서 훅을 트리거합니다.
description String No 훅의 설명입니다(GitLab 17.1에서 도입).
duo_flow_callback_enabled Boolean No GitLab Duo flow 이벤트를 훅으로 전송합니다.
enable_ssl_verification Boolean No 훅을 트리거할 때 SSL 검증을 수행합니다.
feature_flag_events Boolean No 기능 플래그 이벤트에서 훅을 트리거합니다.
issues_events Boolean No 이슈 이벤트에서 훅을 트리거합니다.
job_events Boolean No job 이벤트에서 훅을 트리거합니다.
member_events Boolean No 멤버 이벤트에서 훅을 트리거합니다.
merge_requests_events Boolean No 머지 리퀘스트 이벤트에서 훅을 트리거합니다.
milestone_events Boolean No 마일스톤 이벤트에서 훅을 트리거합니다.
name String No 훅의 이름입니다(GitLab 17.1에서 도입).
note_events Boolean No 노트 이벤트에서 훅을 트리거합니다.
pipeline_events Boolean No 파이프라인 이벤트에서 훅을 트리거합니다.
project_events Boolean No 프로젝트 이벤트에서 훅을 트리거합니다.
push_events Boolean No 푸시 이벤트에서 훅을 트리거합니다.
push_events_branch_filter String No 일치하는 브랜치의 푸시 이벤트에서만 훅을 트리거합니다.
releases_events Boolean No 릴리스 이벤트에서 훅을 트리거합니다.
resource_access_token_events Boolean No 프로젝트 액세스 토큰 만료 이벤트에서 훅을 트리거합니다.
signing_token String No webhook-signature 헤더를 계산하는 데 사용하는 HMAC 서명 토큰입니다. 32바이트 키를 인코딩한 whsec_<base64> 형식이어야 합니다. 응답에는 반환되지 않습니다.
subgroup_events Boolean No 하위 그룹 이벤트에서 훅을 트리거합니다.
tag_push_events Boolean No 태그 푸시 이벤트에서 훅을 트리거합니다.
token String No 수신한 페이로드를 검증하는 시크릿 토큰입니다. 응답에는 반환되지 않습니다.
wiki_page_events Boolean No 위키 페이지 이벤트에서 훅을 트리거합니다.

요청 예시:

curl --request POST \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks" \
  --data '{"url": "https://example.com/hook", "name": "My Hook", "description": "Hook description"}'

응답 예시:

{
  "id": 42,
  "url": "https://example.com/hook",
  "name": "My Hook",
  "description": "Hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": true,
  "releases_events": true,
  "milestone_events": true,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "token_present": false,
  "signing_token_present": false
}

그룹 훅 업데이트#

히스토리
  • name 및 description 속성이 GitLab 17.1에서 도입되었습니다.
  • signing_token 속성이 GitLab 19.0에서 webhook_signing_token이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 기능 플래그 webhook_signing_token가 GitLab 19.1에서 제거되었습니다.
  • duo_flow_callback_enabled 속성이 GitLab 19.4에서 duo_flow_callback_hooks라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다.
Feature flag

duo_flow_callback_enabled 속성의 제공 여부는 기능 플래그로 제어됩니다. 자세한 내용은 히스토리를 참고합니다. 해당 기능을 사용할 수 없는 환경에서 이 속성을 활성화하면 400 Bad request가 반환됩니다. 비활성화는 항상 허용됩니다.

지정한 그룹의 그룹 훅을 업데이트합니다.

PUT /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
url String Yes 훅 URL 입니다.
branch_filter_strategy String No 브랜치 기준으로 푸시 이벤트를 필터링합니다. 사용 가능한 값은 wildcard(기본값), regex, all_branches 입니다.
confidential_issues_events Boolean No 비공개 이슈 이벤트에서 훅을 트리거합니다.
confidential_note_events Boolean No 비공개 노트 이벤트에서 훅을 트리거합니다.
custom_headers Array No 훅에 사용할 커스텀 헤더입니다.
custom_webhook_template String No 훅에 사용할 커스텀 웹훅 템플릿입니다.
deployment_events Boolean No 배포 이벤트에서 훅을 트리거합니다.
description String No 훅의 설명입니다.
duo_flow_callback_enabled Boolean No GitLab Duo flow 이벤트를 훅으로 전송합니다.
enable_ssl_verification Boolean No 훅을 트리거할 때 SSL 검증을 수행합니다.
feature_flag_events Boolean No 기능 플래그 이벤트에서 훅을 트리거합니다.
issues_events Boolean No 이슈 이벤트에서 훅을 트리거합니다.
job_events Boolean No job 이벤트에서 훅을 트리거합니다.
member_events Boolean No 멤버 이벤트에서 훅을 트리거합니다.
merge_requests_events Boolean No 머지 리퀘스트 이벤트에서 훅을 트리거합니다.
milestone_events Boolean No 마일스톤 이벤트에서 훅을 트리거합니다.
name String No 훅의 이름입니다.
note_events Boolean No 노트 이벤트에서 훅을 트리거합니다.
pipeline_events Boolean No 파이프라인 이벤트에서 훅을 트리거합니다.
project_events Boolean No 프로젝트 이벤트에서 훅을 트리거합니다.
push_events Boolean No 푸시 이벤트에서 훅을 트리거합니다.
push_events_branch_filter String No 일치하는 브랜치의 푸시 이벤트에서만 훅을 트리거합니다.
releases_events Boolean No 릴리스 이벤트에서 훅을 트리거합니다.
resource_access_token_events Boolean No 프로젝트 액세스 토큰 만료 이벤트에서 훅을 트리거합니다.
service_access_tokens_expiration_enforced Boolean No 서비스 계정 액세스 토큰에 만료일을 반드시 지정하도록 요구합니다.
signing_token String No webhook-signature 헤더를 계산하는 데 사용하는 HMAC 서명 토큰입니다. 32바이트 키를 인코딩한 whsec_<base64> 형식이어야 합니다. 응답에는 반환되지 않습니다.
subgroup_events Boolean No 하위 그룹 이벤트에서 훅을 트리거합니다.
tag_push_events Boolean No 태그 푸시 이벤트에서 훅을 트리거합니다.
token String No 수신한 페이로드를 검증하는 시크릿 토큰입니다. 응답에는 반환되지 않습니다. 웹훅 URL을 변경하면 시크릿 토큰은 초기화되며 유지되지 않습니다.
wiki_page_events Boolean No 위키 페이지 이벤트에서 훅을 트리거합니다.

요청 예시:

curl --request POST \
  --header "content-type: application/json" \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1" \
  --data '{"url": "https://example.com/hook", "name": "New hook name", "description": "Changed hook description"}'

응답 예시:

{
  "id": 1,
  "url": "https://example.com/hook",
  "name": "New hook name",
  "description": "Changed hook description",
  "group_id": 3,
  "push_events": true,
  "push_events_branch_filter": "",
  "branch_filter_strategy": "wildcard",
  "issues_events": true,
  "confidential_issues_events": true,
  "merge_requests_events": true,
  "tag_push_events": true,
  "note_events": true,
  "confidential_note_events": true,
  "job_events": true,
  "pipeline_events": true,
  "wiki_page_events": true,
  "deployment_events": true,
  "feature_flag_events": true,
  "releases_events": true,
  "milestone_events": true,
  "subgroup_events": true,
  "member_events": true,
  "project_events": true,
  "enable_ssl_verification": true,
  "repository_update_events": false,
  "alert_status": "executable",
  "disabled_until": null,
  "url_variables": [ ],
  "created_at": "2012-10-12T17:04:47Z",
  "resource_access_token_events": true,
  "custom_webhook_template": "{\"event\":\"{{object_kind}}\"}",
  "custom_headers": [
    {
      "key": "Authorization"
    }
  ],
  "token_present": false,
  "signing_token_present": false
}

그룹 훅 삭제#

지정한 그룹 훅을 삭제합니다. 멱등 메서드이므로 여러 번 호출할 수 있습니다. 훅은 존재하거나 존재하지 않는 두 상태 중 하나입니다.

DELETE /groups/:id/hooks/:hook_id

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1"

성공하면 아무 메시지도 반환되지 않습니다.

테스트 그룹 훅 트리거#

히스토리
  • GitLab 17.1에서 도입되었습니다.
  • 전용 속도 제한이 GitLab 17.1에서 web_hook_test_api_endpoint_rate_limit이라는 기능 플래그와 함께 도입되었습니다. 기본적으로 활성화되어 있습니다.
  • 설정 가능한 속도 제한이 GitLab 19.3에서 도입되었습니다. 기능 플래그 web_hook_test_api_endpoint_rate_limit는 제거되었습니다.

지정한 그룹에 대해 테스트 훅을 트리거합니다.

이 엔드포인트에는 특정 그룹에서 인증된 사용자마다 분당 5회 요청이라는 속도 제한이 적용됩니다. GitLab Self-Managed와 GitLab Dedicated에서는 관리자가 이 제한을 변경할 수 있습니다.

POST /groups/:id/hooks/:hook_id/test/:trigger
Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
trigger String Yes push_events, tag_push_events, issues_events, confidential_issues_events, note_events, merge_requests_events, job_events, pipeline_events, wiki_page_events, releases_events, milestone_events, emoji_events, resource_access_token_events 중 하나입니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/test/push_events"

응답 예시:

{"message":"201 Created"}

커스텀 헤더 업데이트#

히스토리
  • GitLab 17.1에서 도입되었습니다.

지정한 그룹 훅의 커스텀 헤더를 업데이트합니다.

PUT /groups/:id/hooks/:hook_id/custom_headers/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes 커스텀 헤더의 키입니다.
value String Yes 커스텀 헤더의 값입니다.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/custom_headers/header_key?value='header_value'"

성공하면 아무 메시지도 반환되지 않습니다.

커스텀 헤더 삭제#

히스토리
  • GitLab 17.1에서 도입되었습니다.

커스텀 헤더를 삭제합니다.

DELETE /groups/:id/hooks/:hook_id/custom_headers/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes 커스텀 헤더의 키입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/custom_headers/header_key"

성공하면 아무 메시지도 반환되지 않습니다.

URL 변수 업데이트#

지정한 그룹 훅의 URL 변수를 업데이트합니다.

PUT /groups/:id/hooks/:hook_id/url_variables/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes URL 변수의 키입니다.
value String Yes URL 변수의 값입니다.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/url_variables/my_key?value='my_key_value'"

성공하면 아무 메시지도 반환되지 않습니다.

URL 변수 삭제#

지정한 그룹 훅의 URL 변수를 삭제합니다.

DELETE /groups/:id/hooks/:hook_id/url_variables/:key

지원되는 속성:

Attribute Type Required Description
hook_id Integer Yes 그룹 훅의 ID 입니다.
id Integer or string Yes 그룹의 ID 또는 URL 인코딩된 경로입니다.
key String Yes URL 변수의 키입니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/3/hooks/1/url_variables/my_key"

성공하면 아무 메시지도 반환되지 않습니다.