GitLab Hooks API

Use this API to manage the hooks that GitLab uses to notify external services about events: - [Project webhooks](https://docs.gitlab.com/user/project/integrations/webhooks/) are limited to a single project. - [Group webhooks](https://docs.gitlab.com/user/project/integrations/webhooks/#group-webhooks) apply to all projects and subgroups in a group. - [System hooks](https://docs.gitlab.com/administration/system_hooks/) apply to the entire instance. You can also test a hook, inspect its event log, resend an event, and manage its custom headers and URL variables. Managing project webhooks requires administrator access or the Maintainer or Owner role for the project. Managing group webhooks requires administrator access or the Owner role for the group. Managing system hooks requires administrator access.

Operations 34

GET /api/v4/groups/{id}/hooks List all group hooks #
POST /api/v4/groups/{id}/hooks Create a group hook #
GET /api/v4/groups/{id}/hooks/{hook_id} Retrieve a group hook #
PUT /api/v4/groups/{id}/hooks/{hook_id} Update a group hook #
DELETE /api/v4/groups/{id}/hooks/{hook_id} Delete a group hook #
GET /api/v4/groups/{id}/hooks/{hook_id}/events List all events #
PUT /api/v4/groups/{id}/hooks/{hook_id}/url_variables/{key} Update a URL variable #
DELETE /api/v4/groups/{id}/hooks/{hook_id}/url_variables/{key} Delete a URL variable #
PUT /api/v4/groups/{id}/hooks/{hook_id}/custom_headers/{key} Update a custom header #
DELETE /api/v4/groups/{id}/hooks/{hook_id}/custom_headers/{key} Delete a custom header #
POST /api/v4/groups/{id}/hooks/{hook_id}/test/{trigger} Trigger a test webhook #
POST /api/v4/groups/{id}/hooks/{hook_id}/events/{hook_log_id}/resend Resend a webhook event #
PUT /api/v4/hooks/{hook_id}/url_variables/{key} Update a URL variable #
DELETE /api/v4/hooks/{hook_id}/url_variables/{key} Delete a URL variable #
PUT /api/v4/hooks/{hook_id}/custom_headers/{key} Update a custom header #
DELETE /api/v4/hooks/{hook_id}/custom_headers/{key} Delete a custom header #
GET /api/v4/hooks List all system hooks #
POST /api/v4/hooks Create a system hook #
GET /api/v4/hooks/{hook_id} Retrieve a system hook #
PUT /api/v4/hooks/{hook_id} Update a system hook #
POST /api/v4/hooks/{hook_id} Create a test run #
DELETE /api/v4/hooks/{hook_id} Delete a system hook #
PUT /api/v4/projects/{id}/hooks/{hook_id}/url_variables/{key} Update a URL variable #
DELETE /api/v4/projects/{id}/hooks/{hook_id}/url_variables/{key} Delete a URL variable #
PUT /api/v4/projects/{id}/hooks/{hook_id}/custom_headers/{key} Update a custom header #
DELETE /api/v4/projects/{id}/hooks/{hook_id}/custom_headers/{key} Delete a custom header #
GET /api/v4/projects/{id}/hooks List all webhooks for a project #
POST /api/v4/projects/{id}/hooks Add a webhook to a project #
GET /api/v4/projects/{id}/hooks/{hook_id} Retrieve a project webhook #
PUT /api/v4/projects/{id}/hooks/{hook_id} Update a project webhook #
DELETE /api/v4/projects/{id}/hooks/{hook_id} Delete a project webhook #
GET /api/v4/projects/{id}/hooks/{hook_id}/events List all events #
POST /api/v4/projects/{id}/hooks/{hook_id}/test/{trigger} Trigger a test webhook #
POST /api/v4/projects/{id}/hooks/{hook_id}/events/{hook_log_id}/resend Resend a webhook event #

Documentation

📖
Documentation
https://docs.gitlab.com/api/openapi/
📖
Documentation
https://docs.gitlab.com/api/issues/
📖
Authentication
https://docs.gitlab.com/api/rest/authentication/
📖
Documentation
https://docs.gitlab.com/api/merge_requests/
📖
Documentation
https://docs.gitlab.com/api/pipelines/
📖
Documentation
https://docs.gitlab.com/api/jobs/
📖
Documentation
https://docs.gitlab.com/api/runners/
📖
Documentation
https://docs.gitlab.com/api/users/
📖
Documentation
https://docs.gitlab.com/api/repositories/
📖
Documentation
https://docs.gitlab.com/api/commits/
📖
Documentation
https://docs.gitlab.com/api/branches/
📖
Documentation
https://docs.gitlab.com/api/tags/
📖
Documentation
https://docs.gitlab.com/api/releases/
📖
Documentation
https://docs.gitlab.com/api/environments/
📖
Documentation
https://docs.gitlab.com/api/deployments/
📖
Documentation
https://docs.gitlab.com/api/pipeline_schedules/
📖
Documentation
https://docs.gitlab.com/api/labels/
📖
Documentation
https://docs.gitlab.com/api/milestones/
📖
Documentation
https://docs.gitlab.com/api/notes/
📖
Documentation
https://docs.gitlab.com/api/snippets/
📖
Documentation
https://docs.gitlab.com/api/packages/
📖
Documentation
https://docs.gitlab.com/api/container_registry/
📖
Documentation
https://docs.gitlab.com/api/vulnerabilities/
📖
Documentation
https://docs.gitlab.com/api/deploy_keys/
📖
Documentation
https://docs.gitlab.com/api/protected_branches/
📖
Documentation
https://docs.gitlab.com/api/wikis/
📖
Documentation
https://docs.gitlab.com/api/events/
📖
Documentation
https://docs.gitlab.com/api/search/
📖
Documentation
https://docs.gitlab.com/api/namespaces/
📖
Documentation
https://docs.gitlab.com/api/groups/
📖
Documentation
https://docs.gitlab.com/api/projects/
📖
Documentation
https://docs.gitlab.com/api/applications/
📖
Documentation
https://docs.gitlab.com/api/avatar/
📖
Documentation
https://docs.gitlab.com/api/broadcast_messages/
📖
Documentation
https://docs.gitlab.com/api/bulk_imports/
📖
Documentation
https://docs.gitlab.com/api/settings/
📖
Documentation
https://docs.gitlab.com/api/metadata/
📖
Documentation
https://docs.gitlab.com/api/version/
📖
Documentation
https://docs.gitlab.com/api/rest/
📖
APIReference
https://docs.gitlab.com/api/api_resources/
📖
RateLimits
https://docs.gitlab.com/security/rate_limits/
📖
Documentation
https://docs.gitlab.com/api/oauth2/
📖
Authentication
https://docs.gitlab.com/integration/oauth_provider/
📖
Documentation
https://docs.gitlab.com/user/project/integrations/webhooks.html
📖
APIReference
https://docs.gitlab.com/api/project_webhooks/

Specifications

Schemas & Data

📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-put-api-v4-application-settings-request-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-apientities-geo-node-status-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-apientities-geo-site-status-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-apientities-application-setting-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-post-api-v4-geo-status-request-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-put-api-v4-projects-id-request-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-cluster-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-batched-background-migration-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-ci-variable-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-dictionary-table-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-plan-limit-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-appearance-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-avatar-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-bulk-imports-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-bulk-import-schema.json
📊
JSONSchema
https://artifacts.apis.io/gitlab/json-schema/gitlab-api-entities-metadata-schema.json

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/gitlab:gitlab-hooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

gitlab-hooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GitLab REST Hooks API
  description: GitLab REST API used to interact with a GitLab installation.
  termsOfService: https://handbook.gitlab.com/handbook/legal/api-terms/
  version: '19.6'
  license:
    name: CC BY-SA 4.0
    url: https://gitlab.com/gitlab-org/gitlab/-/blob/master/LICENSE
    x-gitlab-description: The license applies to the OpenAPI specification document itself. For terms governing use of the GitLab API, see the termsOfService field.
servers:
- url: https://{hostname}
  description: GitLab REST API
  variables:
    hostname:
      default: gitlab.com
      description: Your GitLab instance hostname
security:
- http: []
- oauth2: []
- apiKey: []
tags:


# --- truncated at 32 KB (83 KB total) ---
# Full source: https://artifacts.apis.io/gitlab/openapi/gitlab-hooks-api-openapi.yml