Webhooks overview

This page describes Secure Source Manager webhooks. To set up a webhook, follow the instructions in Set up webhooks.

Webhooks are HTTP requests triggered by an event in a Secure Source Manager repository, and then sent to a user-specified URL.

Webhook settings

Webhooks can only be configured in the Secure Source Manager web interface. The following fields are configurable:

Hook ID
Human-readable name for the webhook. Hook IDs must follow the resource naming convention. They must include only lower case letters, numbers, or dashes, must begin with a letter, and cannot be changed after creating the webhook.
Target URL
Webhook target URL. A webhook target is an open and public URL.
Sensitive query string

Sensitive query strings are attached to the end of the target URL in the format TARGET_URL?SENSITIVE_QUERY_STRING.

Most services provide a token or a secret to ensure that the incoming requests are from an authorized service. In order to verify the request you can store the required token or secret in the sensitive query string.

Trigger on

Event to trigger the webhook request. Options are Push to trigger on a push to the repository, or Pull request state changed to trigger on pull request opened, closed, reopened, or edited.

Git refs filter for push events

A filter to specify which branches to report on for push events specified as a glob pattern. See the glob documentation for syntax.

Active

The webhook sends requests on trigger events when selected. If unselected, no requests are sent.

Test webhooks

After you configure your webhook, you can test the webhook by using the Test Delivery button in the webhooks tab.

Event information examples

The following examples show the event information sent by Secure Source Manager to the target URL for different webhook events.

Push event payload

The content of a push event payload is similar to the following:

      Request URL: https://example.com?{sensitive_query_string_placeholder}
      Request method: POST
      Content-Type: application/json
      X-SecureSourceManager-Delivery: 6546af81-25c6-46d9-aa41-70c00dc67752
      X-SecureSourceManager-Event: push
      X-SecureSourceManager-Signature:
    

Body

    {
      "secret": "",
      "ref": "refs/heads/main",
      "before": "f22fe95d6097bc18ba2ace7c5808ef53c0211a2e",
      "after": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",
      "compare_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/compare/f22fe95d6097bc18ba2ace7c5808ef53c0211a2e...85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",
      "commits": [
        {
          "id": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",
          "message": "Push Event'\n",
          "url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/commit/85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",
          "author": {
            "name": "user",
            "email": "user@example.com",
            "username": "user@example.com"
          },
          "committer": {
            "name": "user",
            "email": "user@example.com",
            "username": "user@example.com"
          },
          "verification": null,
          "timestamp": "2024-07-03T18:27:38Z",
          "added": [],
          "removed": [],
          "modified": [
            "README.md"
          ]
        }
      ],
      "head_commit": null,
      "repository": {
        "id": 4,
        "owner": {"id":2,"login":"my-project","full_name":"","email":"email-address@example.com","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"1970-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},
        "name": "my-repo",
        "full_name": "my-project/my-repo",
        "description": "",
        "empty": false,
        "private": false,
        "fork": false,
        "template": false,
        "parent": null,
        "mirror": false,
        "size": 4,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
        "ssh_url": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev:my-project/my-repo.git",
        "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",
        "original_url": "",
        "website": "",
        "stars_count": 0,
        "forks_count": 0,
        "watchers_count": 1,
        "open_issues_count": 0,
        "open_pr_counter": 1,
        "release_counter": 1,
        "default_branch": "main",
        "archived": false,
        "created_at": "2023-06-06T20:34:36Z",
        "updated_at": "2024-04-04T18:19:14Z",
        "permissions": {
          "admin": true,
          "push": true,
          "pull": true
        },
        "has_issues": true,
        "internal_tracker": {
          "enable_time_tracker": false,
          "allow_only_contributors_to_track_time": true,
          "enable_issue_dependencies": true
        },
        "has_wiki": true,
        "has_pull_requests": true,
        "has_projects": true,
        "ignore_whitespace_conflicts": false,
        "allow_merge_commits": true,
        "allow_rebase": true,
        "allow_rebase_explicit": true,
        "allow_squash_merge": true,
        "avatar_url": "",
        "internal": false,
        "mirror_interval": "",
        "uris": {
          "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",
          "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
          "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"
        }
      },
      "pusher": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
      "sender": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"}
    }
   

Pull event payload

The content of a pull event payload is similar to the following.

Header

      Request URL: https://example.com?{sensitive_query_string_placeholder}
      Request method: POST
      Content-Type: application/json
      X-SecureSourceManager-Delivery: d7bb9273-17cf-431d-835c-b334c9702eee
      X-SecureSourceManager-Event: pull_request
      X-SecureSourceManager-Signature:
    

Body

      {
      "secret": "",
      "action": "opened",
      "number": 4,
      "pull_request": {
        "id": 18,
        "url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4",
        "number": 4,
        "user": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://page-address.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
        "title": "Open a Pull Request'",
        "body": "",
        "labels": [],
        "milestone": null,
        "assignee": null,
        "assignees": null,
        "state": "open",
        "is_locked": false,
        "comments": 0,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/cloud-git-test-pso-instance/test2/pulls/4",
        "diff_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4.diff",
        "patch_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4.patch",
        "mergeable": false,
        "merged": false,
        "merged_at": null,
        "merge_commit_sha": null,
        "merged_by": null,
        "base": {
          "label": "main",
          "ref": "main",
          "sha": "85c7e78e6dfb63bcad4a0bb0953c0b3554ed0e93",
          "repo_id": 4,
          "repo": {
            "id": 4,
            "owner": {"id":2,"login":"my-project","full_name":"","email":"email-address@example.com","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},
            "name": "my-repo",
            "full_name": "my-project/my-repo",
            "description": "",
            "empty": false,
            "private": false,
            "fork": false,
            "template": false,
            "parent": null,
            "mirror": false,
            "size": 4,
            "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
            "ssh_url": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev:my-project/my-repo.git",
            "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",
            "original_url": "",
            "website": "",
            "stars_count": 0,
            "forks_count": 0,
            "watchers_count": 1,
            "open_issues_count": 0,
            "open_pr_counter": 0,
            "release_counter": 1,
            "default_branch": "main",
            "archived": false,
            "created_at": "2023-06-06T20:34:36Z",
            "updated_at": "2024-07-03T18:27:42Z",
            "permissions": {
              "admin": false,
              "push": false,
              "pull": false
            },
            "has_issues": true,
            "internal_tracker": {
              "enable_time_tracker": false,
              "allow_only_contributors_to_track_time": true,
              "enable_issue_dependencies": true
            },
            "has_wiki": true,
            "has_pull_requests": true,
            "has_projects": true,
            "ignore_whitespace_conflicts": false,
            "allow_merge_commits": true,
            "allow_rebase": true,
            "allow_rebase_explicit": true,
            "allow_squash_merge": true,
            "avatar_url": "",
            "internal": false,
            "mirror_interval": "",
            "uris": {
              "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",
              "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
              "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"
            }
          }
        },
        "head": {
          "label": "dev",
          "ref": "dev",
          "sha": "06aa2c971d8e06e5271ce04248ef1920341ce208",
          "repo_id": 4,
          "repo": {
            "id": 4,
            "owner": {"id":2,"login":"my-project","full_name":"","email":"email-address@example.com","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},
            "name": "my-repo",
            "full_name": "my-project/my-repo",
            "description": "",
            "empty": false,
            "private": false,
            "fork": false,
            "template": false,
            "parent": null,
            "mirror": false,
            "size": 4,
            "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
            "ssh_url": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev:my-project/my-repo.git",
            "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",
            "original_url": "",
            "website": "",
            "stars_count": 0,
            "forks_count": 0,
            "watchers_count": 1,
            "open_issues_count": 0,
            "open_pr_counter": 0,
            "release_counter": 1,
            "default_branch": "main",
            "archived": false,
            "created_at": "2023-06-06T20:34:36Z",
            "updated_at": "2024-07-03T18:27:42Z",
            "permissions": {
              "admin": false,
              "push": false,
              "pull": false
            },
            "has_issues": true,
            "internal_tracker": {
              "enable_time_tracker": false,
              "allow_only_contributors_to_track_time": true,
              "enable_issue_dependencies": true
            },
            "has_wiki": true,
            "has_pull_requests": true,
            "has_projects": true,
            "ignore_whitespace_conflicts": false,
            "allow_merge_commits": true,
            "allow_rebase": true,
            "allow_rebase_explicit": true,
            "allow_squash_merge": true,
            "avatar_url": "",
            "internal": false,
            "mirror_interval": "",
            "uris": {
              "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",
              "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
              "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"
            }
          }
        },
        "merge_base": "af065efa8d3d7549154c560da5cb3ec236ad3002",
        "due_date": null,
        "created_at": "2024-07-03T18:40:21Z",
        "updated_at": "2024-07-03T18:40:21Z",
        "closed_at": null
      },
      "repository": {
        "id": 4,
        "owner": {"id":2,"login":"my-project","full_name":"","email":"email-address@example.com","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},
        "name": "my-repo",
        "full_name": "my-project/my-repo",
        "description": "",
        "empty": false,
        "private": false,
        "fork": false,
        "template": false,
        "parent": null,
        "mirror": false,
        "size": 4,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
        "ssh_url": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev:my-project/my-repo.git",
        "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",
        "original_url": "",
        "website": "",
        "stars_count": 0,
        "forks_count": 0,
        "watchers_count": 1,
        "open_issues_count": 0,
        "open_pr_counter": 1,
        "release_counter": 1,
        "default_branch": "main",
        "archived": false,
        "created_at": "2023-06-06T20:34:36Z",
        "updated_at": "2024-07-03T18:27:42Z",
        "permissions": {
          "admin": false,
          "push": false,
          "pull": true
        },
        "has_issues": true,
        "internal_tracker": {
          "enable_time_tracker": false,
          "allow_only_contributors_to_track_time": true,
          "enable_issue_dependencies": true
        },
        "has_wiki": true,
        "has_pull_requests": true,
        "has_projects": true,
        "ignore_whitespace_conflicts": false,
        "allow_merge_commits": true,
        "allow_rebase": true,
        "allow_rebase_explicit": true,
        "allow_squash_merge": true,
        "avatar_url": "",
        "internal": false,
        "mirror_interval": "",
        "uris": {
          "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",
          "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
          "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"
        }
      },
      "sender": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
      "review": null
    }
    

Pull request comment event payload

The content of a pull request comment event payload is similar to the following:

Header

      Request URL: https://example.com?{sensitive_query_string_placeholder}
      Request method: POST
      Content-Type: application/json
      X-SecureSourceManager-Delivery: d7bb9273-17cf-431d-835c-b334c9702eee
      X-SecureSourceManager-Event: pull_request_comment
      X-SecureSourceManager-Signature:
    

Body

    {
      "secret": "",
      "action": "created",
      "issue": {
        "id": 18,
        "url": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo/issues/4",
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4",
        "number": 4,
        "user": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://page-address.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
        "original_author": "",
        "original_author_id": 0,
        "title": "Open a Pull Request'",
        "body": "This is the description of the pull request.",
        "ref": "",
        "labels": [],
        "milestone": null,
        "assignee": null,
        "assignees": null,
        "state": "open",
        "is_locked": false,
        "comments": 1,
        "created_at": "2024-07-03T18:40:21Z",
        "updated_at": "2024-07-03T18:40:21Z",
        "closed_at": null,
        "due_date": null,
        "pull_request": {
          "merged": false,
          "merged_at": null
        },
        "repository": {
          "id": 4,
          "name": "my-repo",
          "owner": "my-project",
          "full_name": "my-project/my-repo"
        },
        "etag": "PSIsycnIx2xBaS1CtNRhB0qY-NCtxuHIeYlo8H12E1Q"
      },
      "comment": {
        "id": 1,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4#issuecomment-1",
        "pull_request_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo/pulls/4",
        "issue_url": "",
        "user": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://page-address.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
        "original_author": "",
        "original_author_id": 0,
        "body": "this is a comment",
        "created_at": "2024-07-03T18:40:21Z",
        "updated_at": "2024-07-03T18:40:21Z"
      },
      "repository": {
        "id": 4,
        "owner": {"id":2,"login":"my-project","full_name":"","email":"email-address@example.com","avatar_url":"b2653dbf52c7e078e04b8b20020eaadeafe0337787cc0e19b976efc8d594aefb","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T14:18:40Z","restricted":false,"username":"my-project"},
        "name": "my-repo",
        "full_name": "my-project/my-repo",
        "description": "",
        "empty": false,
        "private": false,
        "fork": false,
        "template": false,
        "parent": null,
        "mirror": false,
        "size": 4,
        "html_url": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
        "ssh_url": "git@my-instance-123456789-ssh.us-central1.sourcemanager.dev:my-project/my-repo.git",
        "clone_url": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git",
        "original_url": "",
        "website": "",
        "stars_count": 0,
        "forks_count": 0,
        "watchers_count": 1,
        "open_issues_count": 0,
        "open_pr_counter": 1,
        "release_counter": 1,
        "default_branch": "main",
        "archived": false,
        "created_at": "2023-06-06T20:34:36Z",
        "updated_at": "2024-07-03T18:27:42Z",
        "permissions": {
          "admin": false,
          "push": false,
          "pull": true
        },
        "has_issues": true,
        "internal_tracker": {
          "enable_time_tracker": false,
          "allow_only_contributors_to_track_time": true,
          "enable_issue_dependencies": true
        },
        "has_wiki": true,
        "has_pull_requests": true,
        "has_projects": true,
        "ignore_whitespace_conflicts": false,
        "allow_merge_commits": true,
        "allow_rebase": true,
        "allow_rebase_explicit": true,
        "allow_squash_merge": true,
        "avatar_url": "",
        "internal": false,
        "mirror_interval": "",
        "uris": {
          "api": "https://my-instance-123456789-api.us-central1.sourcemanager.dev/v1/projects/my-project/locations/us-central1/repositories/my-repo",
          "html": "https://my-instance-123456789.us-central1.sourcemanager.dev/my-project/my-repo",
          "git_https": "https://my-instance-123456789-git.us-central1.sourcemanager.dev/my-project/my-repo.git"
        }
      },
      "sender": {"id":4,"login":"user@example.com","full_name":"user","email":"user@example.com","avatar_url":"https://this-is-avatar.com","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2023-06-02T20:53:58Z","restricted":false,"username":"user@example.com"},
      "is_pull": true
    }
    

What's next